From 59dd2332a2c2bd235a6792964034802ed9ff8db8 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Wed, 30 Apr 2025 02:11:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BB=BA=E7=AB=8BDataNode/DataNodeManager?= =?UTF-8?q?=EF=BC=8C=E5=B0=86=E6=95=B0=E6=8D=AE=E7=AE=A1=E7=90=86=E4=B9=9F?= =?UTF-8?q?=E5=BC=84=E6=88=90=E9=80=9A=E7=94=A8=E7=9A=84=EF=BC=8C=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E7=AE=A1=E7=90=86=E5=AE=8C=E5=85=A8=E6=94=BE=E5=88=B0?= =?UTF-8?q?=E5=A4=96=E9=9D=A2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/type/Node.h | 26 ++++++++++++++++++++++++++ inc/hgl/type/NodeManager.h | 33 +++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 3 +-- 3 files changed, 60 insertions(+), 2 deletions(-) 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})