====== NodeManager ====== **//Inherited from//** [[class::domain::xmanager|XManager]], **//Inherited by//** NULL **//Friend class//** NULL **//Description//** NodeManager从XManager继承,是网格节点对象管理器,所有网格节点对象的创建、销毁、访问以及修改都通过调用它的通用接口完成。它的域识别码是Domain_Node,类型名是“DNODE”。 它管理的节点对象有的作为单位节点被使用,有的则没有被任何单元所使用,它被称为自由节点,由专门的自由节点哈希表索引。为了方便节点单元关系的查询并提高查询速度,节点缓存了节点单元信息,NodeManager为此专门构建了相应的内存池以避免在频繁缓存这一过程种内存碎片化的问题。 网格节点对象是模型对象的内部数据,它被模型对象管理,网格节点对象管理器是模型对象的成员之一,网格节点对象的ID只在模型对象内唯一。对于多个模型的场景,网格节点对象管理器也有多个,在模型初始化时网格节点对象管理器的句柄会被记录到数据操作记录器中以支持undo、redo机制。 **//Members//** * XHash [[nodemanager#m_pfreenodes|m_pFreeNodes]] * XMemPool [[nodemanager#m_pelemlinkpool|m_pElemLinkPool]] **//Public interface//** * [[nodemanager#nodemanager1|NodeManager]]() * [[nodemanager#~nodemanager|~NodeManager]]() * void [[nodemanager#clear|clear]]() * void [[nodemanager#write|write]](XBinaryIO * io) * ErrorCode [[nodemanager#read|read]](XBinaryIO * io) * void [[nodemanager#write|write]](XH5IO * io, H5Obj * grp) * bool [[nodemanager#read|read]](XH5IO * io, H5Obj * grp) * void [[nodemanager#write|write]](XH5IO * io, H5Obj * grp, vector * nodes) * void [[nodemanager#bindfreenodeiterator|bindFreeNodeIterator]](HashIterator * hIter) * void [[nodemanager#removefreenode|removeFreeNode]](XNode * pn) * void [[nodemanager#insertfreenode|insertFreeNode]](XNode * pn) * void [[nodemanager#clearfreenodes|clearFreeNodes]]() * ulong [[nodemanager#getfreenodecount|getFreeNodeCount]]() * void [[nodemanager#updateafterrenumber|updateAfterRenumber]](TypeID tid = DItem_Unknown) * void [[nodemanager#increaseelementcount|increaseElementCount]](const XNode * pn) * void [[nodemanager#attachelement|attachElement]](const XNode * pn,const XElement* el, bool bUpdateElemLink = true) * void [[nodemanager#detachelement|detachElement]](const XNode * pn,const XElement* el) * void [[nodemanager#attachelement|attachElement]](const XElement* el, bool bUpdateElemLink = true) * void [[nodemanager#detachelement|detachElement]](const XElement* el) * void [[nodemanager#clearelementlink|clearElementLink]](const XNode * pn) * void [[nodemanager#reserveelementlink|reserveElementLink]](const XNode * pn, bool bClear) * void [[nodemanager#serialize|serialize]](XBinaryIO * io, XItem * obj, bool bSave) ---- {{anchor:m_pfreenodes}} **XHash m_pFreeNodes** 自由节点哈希表 {{anchor:m_pelemlinkpool}} **XMemPool m_pElemLinkPool** 缓存节点单纯信息的内存池 ---- {{anchor:nodemanager1}} **NodeManager()** *function: 构造函数 *parameters: NULL *return value: 无 {{anchor:~nodemanager}} **~NodeManager()** *function: 析构函数 *parameters: NULL *return value: 无 {{anchor:clear}} **void clear()** *function: 基类函数的重新实现,清空节点对象以及自由节点哈希表 *parameters: NULL *return value: 无 {{anchor:read}} **ErrorCode read(XBinaryIO * io)** *function: 从二进制文件中读取对象数据到管理器中 *parameters: - [i]XBinaryIO * io: 二进制文件句柄 *return value: 成功读取返回Error_None, 否则返回相应错误码 {{anchor:write}} **void write(XBinaryIO * io)** *function: 将管理的所有对象数据写入到二进制文件中 *parameters: - [i]XBinaryIO * io: 二进制文件句柄 *return value: 无 {{anchor:write}} **void write(XH5IO * io, H5Obj * grp)** *function: 将管理的所有对象数据写入到HDF5文件中 *parameters: - [i]XH5IO * io: HDF5文件句柄 - [i] H5Obj * grp: 对象管理器对应的HDF5节点 *return value: 无 {{anchor:read}} **bool read(XH5IO * io, H5Obj * grp)** *function: 从HDF5文件中读取对象数据到管理器中 *parameters: - [i]XH5IO * io: HDF5文件句柄 - [i] H5Obj * grp: 对象管理器对应的HDF5节点 *return value: 完整读取返回true,否则返回false {{anchor:write}} **void write(XH5IO * io, H5Obj * grp, vector * nodes)** *function: 将一组节点对象数据写入到HDF5文件中 *parameters: - [i]XH5IO * io: HDF5文件句柄 - [i] H5Obj * grp: 对应的HDF5节点 - [i] vector * nodes: 节点对象数组 *return value: 无 {{anchor:bindfreenodeiterator}} **void bindFreeNodeIterator(HashIterator * hIter)** *function: 绑定自由节点访问迭代器 *parameters: - [i]HashIterator * hIter: 自由节点访问迭代器 *return value: 无 {{anchor:removefreenode}} **void removeFreeNode(XNode * pn)** *function: 删除自由节点 *parameters: - [i]XNode * pn: 自由节点对象 *return value: 无 {{anchor:insertfreenode}} **void insertFreeNode(XNode * pn)** *function: 插入自由节点对象 *parameters: - [i]XNode * pn: 自由节点对象 *return value: 无 {{anchor:clearfreenodes}} **void clearFreeNodes()** *function: 清空自由节点对象 *parameters: NULL *return value: 无 {{anchor:getfreenodecount}} **ulong getFreeNodeCount()** *function: 获取自由节点个数 *parameters: NULL *return value: 自由节点个数 {{anchor:updateafterrenumber}} **void updateAfterRenumber(TypeID tid = DItem_Unknown)** *function: 基类函数的重新实现,在某些对象重新编号之后更新相关数据 *parameters: - [i]TypeID tid = DItem_Unknown: 被重新编号的对象类,这里主要为单元对象 *return value: 无 {{anchor:increaseelementcount}} **void increaseElementCount(const XNode * pn)** *function: 增加节点关联的单元计数 *parameters: - [i]const XNode * pn: 节点对象 *return value: 无 {{anchor:attachelement}} **void attachElement(const XNode * pn,const XElement* el, bool bUpdateElemLink = true)** *function: 关联节点对象与单元对象,将其更新到节点单元缓存信息中 *parameters: - [i]const XNode * pn: 节点对象 - [i]const XElement* el: 单元对象 - [i] bool bUpdateElemLink = true: 是否实时更新缓存 *return value: 无 {{anchor:detachelement}} **void detachElement(const XNode * pn,const XElement* el)** *function: 解除节点对象与单元对象的关联,将其更新到节点单元缓存信息中 *parameters: - [i]const XNode * pn: 节点对象 - [i]const XElement* el: 单元对象 *return value: 无 {{anchor:attachelement}} **void attachElement(const XElement* el, bool bUpdateElemLink = true)** *function: 关联单元对象与其每一个节点对象,将其更新到节点单元缓存信息中 *parameters: - [i]const XElement* el: 单元对象 - [i] bool bUpdateElemLink = true: 是否实时更新缓存 *return value: 无 {{anchor:detachelement}} **void detachElement(const XElement* el)** *function: 解除单元对象与其每一个节点对象的关联,将其更新到节点单元缓存信息中 *parameters: - [i]const XElement* el: 单元对象 *return value: 无 {{anchor:clearelementlink}} **void clearElementLink(const XNode * pn)** *function: 清空节点的单元缓存信息 *parameters: - [i]const XNode * pn: 节点对象 *return value: 无 {{anchor:reserveelementlink}} **void reserveElementLink(const XNode * pn, bool bClear)** *function: 设置节点的单元信息数据缓存模式为预备模式 *parameters: - [i]const XNode * pn: 节点对象 - [i] bool bClear: 是否重置关联单元的个数 *return value: 无 {{anchor:serialize}} **void serialize(XBinaryIO * io, XItem * obj, bool bSave)** *function: 在undo、redo时从数据操作记录文件中序列化数据对象 *parameters: - [i]XBinaryIO * io: 二进制数据操作记录文件句柄 - [i] XItem * obj: 数据对象 - [i] bool bSave: 是否保存数据对象 *return value: 无