00001 #pragma once 00002 00003 #include "mngobject.hpp" 00004 #include "node.hpp" 00005 00006 class agls_API IMngNode 00007 : public IMngObject 00008 { 00009 public: 00010 virtual ~IMngNode(void) { ; } 00011 00012 public: 00013 virtual bool CreateItem(INode** ppNode) = 0; 00014 virtual bool CreateItem(INode** ppNode, const char acName[STRLEN_OBJECT_NAME]) = 0; 00015 }; 00016 00017 template<typename TN, typename TI> 00018 class agls_API TMngNode 00019 : public TMngObject<TN, TI> 00020 { 00021 public: 00022 TMngNode(void) { ; } 00023 virtual ~TMngNode(void) { ; } 00024 00025 public: 00026 virtual bool CreateItem(INode** ppNode) 00027 { 00028 return this->CreateItem(ppNode, ""); 00029 } 00030 00031 virtual bool CreateItem(INode** ppNode, const char acName[STRLEN_OBJECT_NAME]) 00032 { 00033 if (NULL == ppNode || 00034 NULL != *ppNode) 00035 { 00036 return false; 00037 } 00038 TI* pNew = new TI; 00039 IObject* pObject = dynamic_cast<IObject*>(pNew); 00040 if (!__super::CreateItem(&pObject, acName)) 00041 { 00042 if (NULL != pNew) 00043 { 00044 delete pNew; 00045 pNew = NULL; 00046 } 00047 return false; 00048 } 00049 (*ppNode) = pNew; 00050 return true; 00051 } 00052 }; 00053 00054 class agls_API CMngNode 00055 : public TMngNode<IMngNode, CNode> 00056 { 00057 public: 00058 CMngNode(void); 00059 virtual ~CMngNode(void); 00060 };