NodeManager

Inherited from XManager,

Inherited by NULL

Friend class NULL

Description

NodeManager从XManager继承,是网格节点对象管理器,所有网格节点对象的创建、销毁、访问以及修改都通过调用它的通用接口完成。它的域识别码是Domain_Node,类型名是“DNODE”。

它管理的节点对象有的作为单位节点被使用,有的则没有被任何单元所使用,它被称为自由节点,由专门的自由节点哈希表索引。为了方便节点单元关系的查询并提高查询速度,节点缓存了节点单元信息,NodeManager为此专门构建了相应的内存池以避免在频繁缓存这一过程种内存碎片化的问题。

网格节点对象是模型对象的内部数据,它被模型对象管理,网格节点对象管理器是模型对象的成员之一,网格节点对象的ID只在模型对象内唯一。对于多个模型的场景,网格节点对象管理器也有多个,在模型初始化时网格节点对象管理器的句柄会被记录到数据操作记录器中以支持undo、redo机制。

Members

Public interface


XHash<XNode> m_pFreeNodes

自由节点哈希表

XMemPool m_pElemLinkPool

缓存节点单纯信息的内存池


NodeManager()

~NodeManager()

void clear()

ErrorCode read(XBinaryIO * io)

void write(XBinaryIO * io)

void write(XH5IO * io, H5Obj * grp)

bool read(XH5IO * io, H5Obj * grp)

void write(XH5IO * io, H5Obj * grp, vector<NodePtr> * nodes)

void bindFreeNodeIterator(HashIterator * hIter)

void removeFreeNode(XNode * pn)

void insertFreeNode(XNode * pn)

void clearFreeNodes()

ulong getFreeNodeCount()

void updateAfterRenumber(TypeID tid = DItem_Unknown)

void increaseElementCount(const XNode * pn)

void attachElement(const XNode * pn,const XElement* el, bool bUpdateElemLink = true)

void detachElement(const XNode * pn,const XElement* el)

void attachElement(const XElement* el, bool bUpdateElemLink = true)

void detachElement(const XElement* el)

void clearElementLink(const XNode * pn)

void reserveElementLink(const XNode * pn, bool bClear)

void serialize(XBinaryIO * io, XItem * obj, bool bSave)