建立DataNode/DataNodeManager,将数据管理也弄成通用的,结构管理完全放到外面。

This commit is contained in:
hyzboy 2025-04-30 02:11:13 +08:00
parent 2f048f7856
commit 59dd2332a2
3 changed files with 60 additions and 2 deletions

View File

@ -60,4 +60,30 @@ namespace hgl
virtual void Destory(); ///<销毁节点(标记为等待销毁状态) virtual void Destory(); ///<销毁节点(标记为等待销毁状态)
};//class Node };//class Node
template<typename T> 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 }//namespcae hgl

View File

@ -61,4 +61,37 @@ namespace hgl
virtual void Update(){} virtual void Update(){}
};//class NodeManager };//class NodeManager
template<typename T> 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 }//namespace hgl

View File

@ -46,8 +46,7 @@ SET(TREE_NODE_FILES ${TYPE_INCLUDE_PATH}/Node.h
${TYPE_INCLUDE_PATH}/NodeManager.h ${TYPE_INCLUDE_PATH}/NodeManager.h
${TYPE_INCLUDE_PATH}/TreeNode.h ${TYPE_INCLUDE_PATH}/TreeNode.h
Type/Node.cpp Type/Node.cpp
Type/NodeManager.cpp Type/NodeManager.cpp)
Type/TreeNode.cpp)
SOURCE_GROUP("DataType\\Node" FILES ${TREE_NODE_FILES}) SOURCE_GROUP("DataType\\Node" FILES ${TREE_NODE_FILES})