建立DataNode/DataNodeManager,将数据管理也弄成通用的,结构管理完全放到外面。
This commit is contained in:
parent
2f048f7856
commit
59dd2332a2
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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})
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user