User Tools

Site Tools


class:kernel:opnrecorder

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 stasticRecords(const XArrayPool<ItemRecord> & records, vector<ItemRecord*> * recordPtrs)

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)

  • function: 静态函数,设置记录模式
  • parameters:
    1. [i]int f: 记录模式
  • return value: 无

static int getMode()

  • function: 静态函数,获取记录模式
  • parameters: NULL
  • return value: 记录模式

static void enable()

  • function: 静态函数,激活OpnRecorder
  • parameters: NULL
  • return value:

static void disable()

  • function: 静态函数,抑制OpnRecorder
  • parameters: NULL
  • return value:

static void recover()

  • function: 静态函数,恢复之前的运行模式
  • parameters: NULL
  • return value: 无

static bool isEnabled()

  • function: 静态函数,判断OpnRecorder是否启用
  • parameters: NULL
  • return value: OpnRecorder启用返回true,否则返回false

OpnRecorder(const char * path = NULL)

  • function: 构造函数
  • parameters:
    1. [i]const char * path = NULL: 二进制记录文件的路径
  • return value: 无

~OpnRecorder()

  • function: 析构函数
  • parameters: NULL
  • return value: 无

void redo(int64 before)

  • function: 重做,正向从当前记录位置序列化二进制文件中的数据记录直到到达指定终点位置
  • parameters:
    1. [i]int64 before: 指定的记录终点
  • return value: 无

void undo(int64 after)

  • function: 撤销,反向从当前记录位置序列化二进制文件中的数据记录直到到达指定终点位置
  • parameters:
    1. [i]int64 after: 指定的记录终点
  • return value: 无

void beginRecord()

  • function: 开始记录数据状态
  • parameters: NULL
  • return value: 无

void copyRecord(const char * from)

  • function: 从另一个记录文件中拷贝记录,用于错误重现
  • parameters:
    1. [i]const char * from: 源记录文件路径名
  • return value: 无

void addItemRecord( int opn,int domain,const XItem * data)

  • function: 添加对象操作记录
  • parameters:
    1. [i] int opn: 操作码
    2. [i]int domain: 域ID
    3. [i]const XItem * data: 数据对象
  • return value: 无

void addLinkRecord( int opn,int domain,const XItem * target,const XItem * obj)

  • function: 添加对象关系操作记录
  • parameters:
    1. [i] int opn: 操作码
    2. [i] int domain: 域ID
    3. [i] const XItem * target: 主对象
    4. [i] const XItem * obj: 从对象
  • return value:

void addPrevNextRecord( int opn, int domain,const XItem * target, const XItem * prev, const XItem * next)

  • function: 添加对象顺序操作记录
  • parameters:
    1. [i] int opn: 操作码
    2. [i] int domain: 域ID
    3. [i]const XItem * target: 当前对象
    4. [i] const XItem * prev: 前一个对象
    5. [i] const XItem * next: 后一个对象
  • return value: 无

int registerDomainHandler(XManager * hdl, int hdlID = -1 )

  • function: 注册域对象管理器句柄
  • parameters:
    1. [i]XManager * hdl: 对象管理器句柄
    2. [i] int hdlID = -1 : 对象管理器句柄的序号(为-1时自动获取最大值)
  • return value: 返回对象管理器句柄的序号

void registerOut(int did)

  • function: 注销序号为did的对象管理器句柄
  • parameters:
    1. [i]int did: 对象管理器句柄的序号
  • return value: 无

int getNextDomainHandlerID() const

  • function: 获取下一个对象管理器句柄序号
  • parameters: NULL
  • return value: 下一个对象管理器句柄序号

int64 getCurrentPosition() const

  • function: 获取二进制记录文件的当前记录地址
  • parameters: NULL
  • return value: 当前记录地址

int commit()

  • function: 提交数据记录
  • parameters: NULL
  • return value: 返回提交数据记录的数目

void rollback(int64 after)

  • function: 回滚操作,反向从当前记录位置序列化二进制文件中的数据记录直到到达指定终点位置
  • parameters:
    1. [i]int64 after: 指定的记录终点
  • return value: 无

void reset()

  • function: 重置记录数据
  • parameters: NULL
  • return value: 无

void setPath(const char * path)

  • function: 重新设置二进制记录文件的路径
  • parameters:
    1. [i]const char * path: 路径名
  • return value: 无

XBinaryIO * getSerializeIO()

  • function: 获取二进制记录文件句柄
  • parameters: NULL
  • return value: 二进制记录文件句柄
class/kernel/opnrecorder.txt · Last modified: 2023/05/06 11:10 (external edit)