Inherited from NULL
Inherited by NULL
Friend class NULL
Description
OpnRecorder用于运行时序列化所有数据操作的工具类,执行功能时,OpnRecorder通过XManager提供的接口,所有数据在执行功能之前的状态和执行之后的状态按照顺序被保存到二进制文件中,这些记录可以通过恢复到功能之前的数据状态完成功能的撤销(undo),在撤销之后,也可以回到功能执行之后的状态完成功能的重做(redo)。当一系列功能都按照这样的规则将所有数据对象的状态都序列化到二进制文件中,每个功能对应其中一段记录,重复前述操作就可以达到无限的undo、redo。
OpnRecorder支持如下数据操作:
| 枚举量 | 值 | 说明 |
| Opn_Add | 0x0001 | 创建(添加对象) |
| Opn_Del | 0x0002 | 删除(销毁对象) |
| Opn_Modify | 0x0004 | 修改 |
| Opn_Attach | 0x0010 | 绑定从属关系 |
| Opn_Detach | 0x0020 | 接触从属关系 |
| Opn_Status | 0x0040 | 仅用于文档状态变化 |
| Opn_PrevNext | 0x080 | 对象顺序的变化 |
| Opn_Renumber | 0x0100 | 对象重编号 |
OpnRecorder有如下记录模式:
| 枚举量 | 值 | 说明 |
| Opn_Silent | 0x00 | 静默,不记录 |
| Opn_Record | 0x01 | 正常记录 |
| Opn_Undo | 0x02 | 撤销,不记录 |
| Opn_Redo | 0x04 | 重做,不记录 |
| Opn_Rollback | 0x08 | 回滚,不记录 |
| Opn_Commit | 0x10 | 提交,记录 |
OpnRecorder的undo、redo机制可以根据需要被激活,也可以忽略单个对象管理器。
Members
Public interface
Private interface
int m_iMode
静态变量,运行模式
bool m_bEnable
静态变量,是否激活
int64 m_curOpnPos
二进制记录文件的当前记录地址
XPath m_strPath
二进制记录文件的路径
XBinaryIO * m_pRecordIO
二进制记录文件句柄
XArrayPool<ItemRecord> m_ItemPool
对象记录数组池
int m_iCommitDepth
提交序号
int m_iItemRecordNumber
对象记录数
ulong m_iNextDomainID
下一个域句柄ID(域句柄ID记录了对象管理器句柄在对象管理器句柄数组中的位置序号)
XArray<XManager*> m_pDomainTable 对象管理器句柄数组
static void setMode(int f)
static int getMode()
static void enable()
static void disable()
static void recover()
static bool isEnabled()
OpnRecorder(const char * path = NULL)
~OpnRecorder()
void redo(int64 before)
void undo(int64 after)
void beginRecord()
void copyRecord(const char * from)
void addItemRecord( int opn,int domain,const XItem * data)
void addLinkRecord( int opn,int domain,const XItem * target,const XItem * obj)
void addPrevNextRecord( int opn, int domain,const XItem * target, const XItem * prev, const XItem * next)
int registerDomainHandler(XManager * hdl, int hdlID = -1 )
void registerOut(int did)
int getNextDomainHandlerID() const
int64 getCurrentPosition() const
int commit()
void rollback(int64 after)
void reset()
void setPath(const char * path)
XBinaryIO * getSerializeIO()