diff --git a/inc/hgl/type/Node.h b/inc/hgl/type/Node.h index 9fc620d..d211f4a 100644 --- a/inc/hgl/type/Node.h +++ b/inc/hgl/type/Node.h @@ -60,4 +60,30 @@ namespace hgl virtual void Destory(); ///<销毁节点(标记为等待销毁状态) };//class Node + + template class DataNode:public Node + { + T node_data; + + public: + + using Node::Node; + virtual ~DataNode()override=default; + + public: + + T & get_data() {return node_data;} + const T & get_data()const {return node_data;} + + T * get_ptr () {return &node_data;} + const T * get_ptr ()const {return &node_data;} + + operator T & () {return node_data;} + operator const T & ()const {return node_data;} + + virtual void set_data(const T &data) + { + node_data=data; + } + };//class DataNode }//namespcae hgl diff --git a/inc/hgl/type/NodeManager.h b/inc/hgl/type/NodeManager.h index 5b81f14..adcf6a5 100644 --- a/inc/hgl/type/NodeManager.h +++ b/inc/hgl/type/NodeManager.h @@ -61,4 +61,37 @@ namespace hgl virtual void Update(){} };//class NodeManager + + template class DataNodeManager:public NodeManager + { + protected: //事件 + + Node *OnCreateNode(const size_t node_id) override + { + return(new T(this,node_id)); + } + + void OnDestoryNode(Node *node)override + { + if(!node)return; + + node->OnDestory(); + delete node; + } + + public: + + using NodeManager::NodeManager; + virtual ~DataNodeManager() + { + ForceClear(); + } + + T *Create() + { + return (T *)CreateNode(); + //走基类的CreateNode()是为了添加到管理器中 + //基类会通过虚拟的OnCreateNode()再度回到本类来创建节点 + } + };//class DataNodeManager }//namespace hgl diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cdcbc47..b97387a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -46,8 +46,7 @@ SET(TREE_NODE_FILES ${TYPE_INCLUDE_PATH}/Node.h ${TYPE_INCLUDE_PATH}/NodeManager.h ${TYPE_INCLUDE_PATH}/TreeNode.h Type/Node.cpp - Type/NodeManager.cpp - Type/TreeNode.cpp) + Type/NodeManager.cpp) SOURCE_GROUP("DataType\\Node" FILES ${TREE_NODE_FILES})