OpnRecorder

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()