#ifndef __ZCPPMAIN__ZCTREEDATA_H__ #define __ZCPPMAIN__ZCTREEDATA_H__ #include "ZCppMain/ZtCObjList.H" namespace ZNsMain { namespace ZNsView { template< typename TypeData, typename TypeSize=int > class ZtCViewTreeData //////////////////////////// { private: void ShowDepth(TypeSize AI_Depth) { __for1(TypeSize, i, AI_Depth) cout<<" "; }/* void ShowDepth(TypeSize AI_Depth)*/ public : ZNsMain::ZNsEnum::ZERun OnDataStart(TypeSize AI_Depth) { ShowDepth(AI_Depth); cout<<"¢¹ OnDataStart:"< class ZtCViewTreeData //////////////////////////*/ }/* namespace ZNsView*/ namespace ZNsType { /*///////////////////////////////////////////////////////////////////////////////////// ¡á class ZtCTypeTreeData ÅÛÇø´Àº Á¤ÀÇ¿¡¼­ ¶Ç ´Ù¸¥ ÅÛÇø´(list µîÀÇ ÄÁÅ×ÀÌ³Ê ÅÛÇø´)À» Æ÷ÇÔÇϰí ÀÖÀ½À» ´«¿©°Ü º¸ÀÚ. À̰ÍÀ» ZtCTreeData<> ¿¡¼­ Ȱ¿ëÇÏ´Â ºÎºÐÀº ¾Æ·¡Ã³·³ typedef typename TTypeTreeData::template ZtCTypeClass::TypeData ZCNode1List; typedef typename TTypeTreeData::template ZtCTypeClass::TypeData ZCNode2List; ´Ù¼Ò º¹ÀâÇØ º¸ÀδÙ. -- 2011-11-01 14:39:00 /////////////////////////////////////////////////////////////////////////////////////*/ template class ZtCTypeTreeData { public: typedef TTypeSize TypeSize; public: template< typename TType , typename TTypeArg =const TType& , typename TTypeAlloc=ZNsMain::ZCAllocator, typename TTypeInit =ZNsMain::ZtCInit > class ZtCTypeClass ///////////////////////////////// { public: typedef TTypeAlloc TypeAlloc; typedef TTypeInit TypeInit ; public: typedef ZNsMain::ZtCObjList TypeList; ///////////////// public: };/* template< typename TType , typename TTypeArg =const TType& , typename TTypeAlloc=ZNsMain::ZCAllocator, typename TTypeInit =ZNsMain::ZtCInit > class ZtCTypeClass ///////////////////////////////*/ public: };/* template class ZtCTypeTreeData*/ }/* namespace ZNsType*/ template< typename TType , typename TTypeInit =ZNsMain::ZtCInit, typename TTypeTreeData=ZNsType::ZtCTypeTreeData > class ZtCTreeData /*###########################################*/ { public: class ZCNode1; class ZCNode2; class ZCNodeInfo; public: typedef TType TypeData ; typedef TTypeInit ZCTypeInit ; typedef TTypeTreeData ZCTypeTreeData; public: typedef typename TTypeTreeData::TypeSize TypeSize ; typedef typename TTypeTreeData::template ZtCTypeClass::TypeList ZCNode1List ; typedef typename TTypeTreeData::template ZtCTypeClass::TypeList ZCNode2List ; public: typedef ZCNode1 ZCNode ; typedef ZCNode1List ZCNodeList ; public: typedef typename ZCNodeList::ZCLink ZCNodeLink; typedef typename ZCNodeList::iterator IterOfNode; public: class ZCNode1 : public ZCTypeInit { public : friend class ZCNodeInfo; private: ZCNode* mp_HighNode ; TypeData mo_TypeData ; ZCNode2List mo_CNodeList; public : ZCNode1() { mp_HighNode=0; this->ZCTypeInit::OnInit(mo_TypeData); }/* ZCNode1()*/ ~ZCNode1() { mp_HighNode=0; this->ZCTypeInit::OnFini(mo_TypeData); }/* ~ZCNode1()*/ ZCNode* GetHighNodePtr () {return (ZCNode*)mp_HighNode;} const ZCNode* GetHighNodePtr ()const{return (ZCNode*)mp_HighNode;} TypeData& GetData () {return mo_TypeData;} const TypeData& GetData ()const{return mo_TypeData;} const ZCNodeList& GetCNodeList()const{return (ZCNodeList&)mo_CNodeList;} TypeSize GetNodeCnt(){return mo_CNodeList.size();} void DeleteCNodeList(){mo_CNodeList.DeleteAll();} void clear (){mo_CNodeList.DeleteAll();} ZCNode& AddSubNode() { ZCNode* VP_CNode=(ZCNode*)&(**mo_CNodeList.AddTailDef()); VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode ; }/* ZCNode& AddSubNode()*/ ZCNodeInfo GetHeadNodeIter() { return ZCNodeInfo((ZCNode*)this, ((ZCNodeList&)mo_CNodeList).GetHeadLinkPtr()); }/* ZCNodeInfo GetHeadNodeIter()*/ /*////////////////////////////////////////////////////////////////////////////// ¡á TViewClass ÀÇ interface ZNsMain::ZNsEnum::ZERun OnDataBody(TypeData, TypeSize AI_Depth, TypeSize AI_Index=0) ZNsMain::ZNsEnum::ZERun OnSubNodeStart(int AI_Depth, int AI_NodeCnt) ZNsMain::ZNsEnum::ZERun OnSubNodeClose(int AI_Depth, int AI_NodeCnt) -- 2011-10-31 21:53:00 //////////////////////////////////////////////////////////////////////////////*/ template ZNsMain::ZNsEnum::ZERun IterPreOrder ( TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex=0 ) /*##############################################################*/ { const bool CB_DoStop = /////////////////////////////// ( AR_CViewClass.OnDataBody (mo_TypeData, AI_StartDepth, AI_NodeIndex) == ZNsMain::ZNsEnum::ZERun_NO ); ////////////////////////////////////////////////////// if(CB_DoStop) return ZNsMain::ZNsEnum::ZERun_NO; TypeSize VL_NodeCnt= ((ZCNodeList&)mo_CNodeList).size () ; IterOfNode VO_iter_Node(((ZCNodeList&)mo_CNodeList).begin()); if ( AR_CViewClass. ////////////////////////////////////// OnSubNodeStart(AI_StartDepth, VL_NodeCnt)== ZNsMain::ZNsEnum::ZERun_NO ) { return ZNsMain::ZNsEnum::ZERun_NO; } ////////////////////// ++AI_StartDepth; { __for1(TypeSize, i, VL_NodeCnt) { const bool CB_DoStop = ( ((ZCNodeList&)mo_CNodeList).ItD(VO_iter_Node). IterPreOrder (AR_CViewClass, AI_StartDepth, i) == ZNsMain::ZNsEnum::ZERun_NO ); ////////////////////// if(CB_DoStop) return ZNsMain::ZNsEnum::ZERun_NO; ((ZCNodeList&)mo_CNodeList).MoveNextIter(RR(VO_iter_Node)); }/* __for1(TypeSize, i, VL_NodeCnt)*/ } --AI_StartDepth; const ZNsMain::ZNsEnum::ZERun CE_ERun = AR_CViewClass.OnSubNodeClose(AI_StartDepth, VL_NodeCnt); if(CE_ERun==ZNsMain::ZNsEnum::ZERun_NO) return ZNsMain::ZNsEnum::ZERun_NO; ///////////////////// return ZNsMain::ZNsEnum::ZERun_OK; }/* template ZNsMain::ZNsEnum::ZERun IterPreOrder (TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex=0) /*##############################################################*/ template ZNsMain::ZNsEnum::ZERun IterPostOrder ( TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex=0 ) /*###############################################################*/ { TypeSize VL_NodeCnt = ((ZCNodeList&)mo_CNodeList).size () ; IterOfNode VO_iter_Node(((ZCNodeList&)mo_CNodeList).begin()); if(AR_CViewClass.OnSubNodeStart (AI_StartDepth, VL_NodeCnt)==ZNsMain::ZNsEnum::ZERun_NO) { return ZNsMain::ZNsEnum::ZERun_NO; } ++AI_StartDepth; /*####################*/ { __for1(TypeSize, i, VL_NodeCnt) { const bool CB_DoStop = ( ((ZCNodeList&)mo_CNodeList).ItD(VO_iter_Node). IterPostOrder(AR_CViewClass, AI_StartDepth, i) == ZNsMain::ZNsEnum::ZERun_NO ); ////////////////////// if(CB_DoStop) return ZNsMain::ZNsEnum::ZERun_NO; ((ZCNodeList&)mo_CNodeList).MoveNextIter(VO_iter_Node); }/* __for1(TypeSize, i, VL_NodeCnt)*/ } --AI_StartDepth; /*####################*/ if(AR_CViewClass.OnSubNodeClose (AI_StartDepth, VL_NodeCnt)==ZNsMain::ZNsEnum::ZERun_NO) { return ZNsMain::ZNsEnum::ZERun_NO; } const bool CB_DoStop = ///////////////////////// ( AR_CViewClass.OnDataBody ( mo_TypeData, AI_StartDepth, AI_NodeIndex ) ==ZNsMain::ZNsEnum::ZERun_NO ) ; //////////////////////////////////////////////// if(CB_DoStop) { return ZNsMain::ZNsEnum::ZERun_NO; } return ZNsMain::ZNsEnum::ZERun_OK; }/* template ZNsMain::ZNsEnum::ZERun IterPostOrder (TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex=0) /*###############################################################*/ public: };/* class ZCNode1*/ class ZCNode2 : public ZCTypeInit { public : friend class ZCNodeInfo; private: ZCNode* mp_HighNode ; TypeData mo_TypeData ; ZCNode1List mo_CNodeList; public : ZCNode2() { mp_HighNode=0; this->ZCTypeInit::OnInit(mo_TypeData); }/* ZCNode2()*/ ~ZCNode2() { mp_HighNode=0; this->ZCTypeInit::OnFini(mo_TypeData); }/* ~ZCNode2()*/ ZCNode* GetHighNodePtr () {return (ZCNode*)mp_HighNode;} const ZCNode* GetHighNodePtr ()const{return (ZCNode*)mp_HighNode;} TypeData& GetData () {return mo_TypeData ;} const TypeData& GetData ()const{return mo_TypeData ;} const ZCNodeList& GetCNodeList()const{return (ZCNodeList&)mo_CNodeList;} TypeSize GetNodeCnt(){return mo_CNodeList.size();} void DeleteCNodeList(){mo_CNodeList.DeleteAll();} void clear (){mo_CNodeList.DeleteAll();} ZCNode& AddSubNode() { ZCNode* VP_CNode=(ZCNode*)&(**mo_CNodeList.AddTailDef()); VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode ; }/* ZCNode& AddSubNode()*/ ZCNodeInfo GetHeadNodeIter() { return ZCNodeInfo((ZCNode*)this, ((ZCNodeList&)mo_CNodeList).GetHeadLinkPtr()); }/* ZCNodeInfo GetHeadNodeIter()*/ /*////////////////////////////////////////////////////////////////////////////////////////////// ¡á ZCNode1 °ú ZCNode2 °¡ µ¿ÀÏÇÑ ±¸Á¶À̹ǷÎ, ZCNode2 ¿¡¼­´Â IterPreOrder() ¿Í IterPostOrder() ¸¦ Á¤ÀÇÇÒ ÇÊ¿ä¾ø´Ù. ZCNode2 ÀÌ ZCNode1 ·Î Çüº¯È¯µÇ¾î¼­ ZCNode1 ÀÇ IterPreOrder() ¿Í IterPostOrder() À» »ç¿ëÇÒ °ÍÀ̱⠶§¹®ÀÌ´Ù. -- 2011-11-01 10:40:00 //////////////////////////////////////////////////////////////////////////////////////////////*/ public: };/* class ZCNode2*/ class ZCNodeInfo { private: ZCNode* mp_NowNodeWrap; ZCNodeLink* mp_NowNodeLink; public : ZCNodeInfo(ZCNode* AP_CNode=0, ZCNodeLink* AP_CNodeLink=0) { mp_NowNodeWrap=AP_CNode; mp_NowNodeLink=AP_CNodeLink; }/* ZCNodeInfo(ZCNode* AP_CNode=0, ZCNodeLink* AP_CNodeLink=0)*/ ZCNode* GetNowNodeWrap(){return mp_NowNodeWrap;} ZCNodeLink* GetNowNodeLink(){return mp_NowNodeLink;} bool DeleteNode() { if(mp_NowNodeWrap==0 || mp_NowNodeLink==0) return false; ((ZCNodeList&)(mp_NowNodeWrap->mo_CNodeList)). DeleteLink(mp_NowNodeLink); mp_NowNodeLink=0; return true; /////////////// }/* bool DeleteNode()*/ ZCNodeInfo& operator ++ (int) {mp_NowNodeWrap->mo_CNodeList.MoveNextIter(mp_NowNodeLink); return *this;} ZCNode& operator*() {return mp_NowNodeWrap->mo_CNodeList.ItD(mp_NowNodeLink);} const ZCNode& operator*()const{return mp_NowNodeWrap->mo_CNodeList.ItD(mp_NowNodeLink);} public: };/* class ZCNodeInfo*/ /*public :*/ private: ZCNode mo_RootNode; public : ZCNode& GetRootNode() {return mo_RootNode;} const ZCNode& GetRootNode()const{return mo_RootNode;} void DeleteAll(){mo_RootNode.clear();} void clear (){mo_RootNode.clear();} /*///////////////////////////////////////////////////////////////////////////////////////// ¡á À§ clear() ÇÔ¼ö´Â mo_RootNode.clear() ¸¦ È£ÃâÇϰí Àִµ¥, ¸¸¾à mo_RootNode.mo_TypeData °¡ ÄÁÅ×ÀÌ³Ê ÀÎ °æ¿ì, mo_TypeData ¸¦ Ãß°¡·Î ÃʱâÈ­ÇÏ´Â Äڵ尡 ÇÊ¿äÇÒ ¼ö ÀÖ´Ù. ÀÌ¿¡ ´ëÇØ¼­ ´Â CXmlInfo_T<>::clear() À» Âü°íÇÑ´Ù. -- 2012-10-12 13:20:00 /////////////////////////////////////////////////////////////////////////////////////////*/ template void IterPreOrder(TViewClass& AR_CViewClass) { mo_RootNode.IterPreOrder(AR_CViewClass, 0, 0); }/* template void IterPreOrder(TViewClass& AR_CViewClass) */ template void IterPostOrder(TViewClass& AR_CViewClass) { mo_RootNode.IterPostOrder(AR_CViewClass, 0, 0); }/* template void IterPostOrder(TViewClass& AR_CViewClass) */ public: };/* template< typename TType , typename TTypeInit =ZNsMain::ZtCInit, typename TTypeTreeData=ZNsType::ZtCTypeTreeData > class ZtCTreeData #############################################*/ /*/////////////////////////////////////////////////////////////// ¡á class ZtCTreeData ¿¹Á¦ -- 2015-08-14 14:00 #include #include "ZCppMain/ZtCTreeData.H" using namespace std ; using namespace ZNsMain; typedef ZtCStringBase CStringBase ; typedef ZtCTreeData CStrTreeData ; typedef CStrTreeData::ZCNode CNodeCStr ; typedef ZNsMain::ZNsView:: ZtCViewTreeData CViewTreeData; int main() { CStringBase VO_CStringBase ; CStrTreeData VO_CStrTreeData ; CViewTreeData VO_CViewTreeData; CNodeCStr& VO_CNodeCStr1 = VO_CStrTreeData.GetRootNode().AddSubNode(); CNodeCStr& VO_CNodeCStr2 = VO_CStrTreeData.GetRootNode().AddSubNode(); CNodeCStr& VO_CNodeCStr3 = VO_CStrTreeData.GetRootNode().AddSubNode(); CNodeCStr& VO_CNodeCStr11 = VO_CNodeCStr1 .AddSubNode(); CNodeCStr& VO_CNodeCStr12 = VO_CNodeCStr1 .AddSubNode(); CNodeCStr& VO_CNodeCStr121= VO_CNodeCStr12.AddSubNode(); CNodeCStr& VO_CNodeCStr122= VO_CNodeCStr12.AddSubNode(); CNodeCStr& VO_CNodeCStr21 = VO_CNodeCStr2 .AddSubNode(); CNodeCStr& VO_CNodeCStr22 = VO_CNodeCStr2 .AddSubNode(); VO_CStrTreeData.GetRootNode().GetData()="## Root Node ##"; VO_CNodeCStr1 . GetData()="Node1" ; VO_CNodeCStr2 . GetData()="Node2" ; VO_CNodeCStr3 . GetData()="Node3" ; VO_CNodeCStr11. GetData()="Node11" ; VO_CNodeCStr12. GetData()="Node12" ; VO_CNodeCStr21. GetData()="Node21" ; VO_CNodeCStr22. GetData()="Node22" ; VO_CNodeCStr121.GetData()="Node121"; VO_CNodeCStr122.GetData()="Node122"; cout<<"# Pre Order"<::ZCNode1 ¿¡´Â mo_TypeData ÀÌ ÀÖ´Ù¸é, class ZtCTreeDataEx<>::ZCNode1 ¿¡´Â mo_CDataList ÀÌ ÀÖ´Ù. ///////////////////////////////////////////////////////////////*/ template< typename TType, typename TTypeTreeData=ZNsType::ZtCTypeTreeData > class ZtCTreeDataEx /*#########################################*/ { public: typedef TType TypeData ; typedef TTypeTreeData ZCTypeTreeData; public: class ZCNode1; class ZCNode2; class ZCNodeInfo ; public: typedef typename TTypeTreeData::TypeSize TypeSize; public: typedef typename TTypeTreeData:: template ZtCTypeClass::TypeList ZCDataList ; typedef typename TTypeTreeData:: template ZtCTypeClass::TypeList ZCNode1List; typedef typename TTypeTreeData:: template ZtCTypeClass::TypeList ZCNode2List; public: typedef ZCNode1 ZCNode ; typedef ZCNode1List ZCNodeList; typedef typename ZCNodeList::ZCLink ZCNodeLink; typedef typename ZCDataList::ZCLink ZCDataLink; public: typedef typename ZCDataList::iterator IterOfData; typedef typename ZCNodeList::iterator IterOfNode; public: class ZCNode1 { public : friend class ZCNodeInfo; private: ZCNode* mp_HighNode ; ZCDataList mo_CDataList; ZCNode2List mo_CNodeList; public : ZCNode1() { mp_HighNode=0; }/* ZCNode1()*/ ZCNode* GetHighNodePtr() {return (ZCNode*)mp_HighNode;} const ZCNode* GetHighNodePtr()const{return (ZCNode*)mp_HighNode;} ZCDataList& GetZCDataList() {return mo_CDataList;} const ZCDataList& GetZCDataList()const{return mo_CDataList;} const ZCNodeList& GetCNodeList()const{return (ZCNodeList&)mo_CNodeList;} TypeSize GetDataCnt(){return mo_CDataList.size();} TypeSize GetNodeCnt(){return mo_CNodeList.size();} void DeleteCDataList(){mo_CDataList.DeleteAll();} void DeleteCNodeList(){mo_CNodeList.DeleteAll();} void DeleteAll (){mo_CDataList.DeleteAll(); mo_CNodeList.DeleteAll();} void clear (){DeleteAll();} ZCNode& AddSubNode() { ZCNode* VP_CNode=(ZCNode*)&(**mo_CNodeList.AddTailDef()); VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode ; }/* ZCNode& AddSubNode()*/ ZCNodeInfo GetHeadNodeIter() { return ZCNodeInfo((ZCNode*)this, ((ZCNodeList&)mo_CNodeList).GetHeadLinkPtr()); }/* ZCNodeInfo GetHeadNodeIter()*/ /*////////////////////////////////////////////////////////////////////////////// ¡á TViewClass ÀÇ interface ZNsMain::ZNsEnum::ZERun OnDataStart(int AI_Depth) ZNsMain::ZNsEnum::ZERun OnDataBody(TypeData, TypeSize AI_Depth, TypeSize AI_Index) ZNsMain::ZNsEnum::ZERun OnDataClose(int AI_Depth) ZNsMain::ZNsEnum::ZERun OnSubNodeStart(int AI_Depth, int AI_NodeCnt) ZNsMain::ZNsEnum::ZERun OnSubNodeClose(int AI_Depth, int AI_NodeCnt) -- 2011-10-31 21:53:00 //////////////////////////////////////////////////////////////////////////////*/ template ZNsMain::ZNsEnum::ZERun IterPreOrder ( TViewClass& AR_CViewClass , TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex =0 ) /*##############################################################*/ { TypeSize VL_DataCnt= mo_CDataList .size(); TypeSize VL_NodeCnt=((ZCNodeList&)mo_CNodeList).size(); IterOfData VO_iter_Data( mo_CDataList.begin()); IterOfNode VO_iter_Node(((ZCNodeList&)mo_CNodeList).begin()); if(AR_CViewClass.OnDataStart(AI_StartDepth)==ZNsMain::ZNsEnum::ZERun_NO) { return ZNsMain::ZNsEnum::ZERun_NO; } /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ { __for1(TypeSize, i, VL_DataCnt) { const bool CB_DoStop = ( AR_CViewClass.OnDataBody ( mo_CDataList.ItD(VO_iter_Data), AI_StartDepth, AI_NodeIndex ) == ZNsMain::ZNsEnum::ZERun_NO ); ////////////////////// if(CB_DoStop) return ZNsMain::ZNsEnum::ZERun_NO; mo_CDataList.MoveNextIter(VO_iter_Data); /////// }/* __for1(TypeSize, i, VL_DataCnt)*/ } if(AR_CViewClass.OnDataClose(AI_StartDepth)==ZNsMain::ZNsEnum::ZERun_NO) { return ZNsMain::ZNsEnum::ZERun_NO; } /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ if(AR_CViewClass.OnSubNodeStart (AI_StartDepth, VL_NodeCnt)==ZNsMain::ZNsEnum::ZERun_NO) { return ZNsMain::ZNsEnum::ZERun_NO; } ++AI_StartDepth; /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ { __for1(TypeSize, i, VL_NodeCnt) { const bool CB_DoStop = /////////////////////////////// ( ((ZCNodeList&)mo_CNodeList).ItD(VO_iter_Node). IterPreOrder (AR_CViewClass, AI_StartDepth. i) == ZNsMain::ZNsEnum::ZERun_NO ); ////////////////////////////////////////////////////// if(CB_DoStop) return ZNsMain::ZNsEnum::ZERun_NO; ((ZCNodeList&)mo_CNodeList).MoveNextIter(VO_iter_Node); }/* __for1(TypeSize, i, VL_NodeCnt)*/ } --AI_StartDepth; /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ if(AR_CViewClass.OnSubNodeClose (AI_StartDepth, VL_NodeCnt)==ZNsMain::ZNsEnum::ZERun_NO) { return ZNsMain::ZNsEnum::ZERun_NO; } return ZNsMain::ZNsEnum::ZERun_OK; ///////////////////////// }/* template ZNsMain::ZNsEnum::ZERun IterPreOrder ( TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0 TypeSize AI_NodeIndex =0 ) */ /*###############################################################*/ template ZNsMain::ZNsEnum::ZERun IterPostOrder ( TViewClass& AR_CViewClass , TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex =0 ) /*###############################################################*/ { TypeSize VL_DataCnt= mo_CDataList. size(); TypeSize VL_NodeCnt=((ZCNodeList&)mo_CNodeList).size(); IterOfData VO_iter_Data( mo_CDataList. begin()); IterOfNode VO_iter_Node(((ZCNodeList&)mo_CNodeList).begin()); if(AR_CViewClass.OnSubNodeStart (AI_StartDepth, VL_NodeCnt)==ZNsMain::ZNsEnum::ZERun_NO) { return ZNsMain::ZNsEnum::ZERun_NO; } ++AI_StartDepth; /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ { __for1(TypeSize, i, VL_NodeCnt) { const bool CB_DoStop = //////////////////////////////// ( ((ZCNodeList&)mo_CNodeList). ItD(VO_iter_Node).IterPostOrder (AR_CViewClass, AI_StartDepth, i) == ZNsMain::ZNsEnum::ZERun_NO ); /////////////////////////////////////////////////////// if(CB_DoStop) return ZNsMain::ZNsEnum::ZERun_NO; ((ZCNodeList&)mo_CNodeList).MoveNextIter(VO_iter_Node); }/* __for1(TypeSize, i, VL_NodeCnt)*/ } --AI_StartDepth; /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ if(AR_CViewClass.OnSubNodeClose (AI_StartDepth, VL_NodeCnt)==ZNsMain::ZNsEnum::ZERun_NO) { return ZNsMain::ZNsEnum::ZERun_NO; } if(AR_CViewClass.OnDataStart(AI_StartDepth)==ZNsMain::ZNsEnum::ZERun_NO) { return ZNsMain::ZNsEnum::ZERun_NO; } /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ { __for1(TypeSize, i, VL_DataCnt) { const bool CB_DoStop = //////////////////// ( AR_CViewClass.OnDataBody ( mo_CDataList.ItD(VO_iter_Data), AI_StartDepth, AI_NodeIndex ) == ZNsMain::ZNsEnum::ZERun_NO ); /////////////////////////////////////////// if(CB_DoStop) return ZNsMain::ZNsEnum::ZERun_NO; mo_CDataList.MoveNextIter(VO_iter_Data); /////////////// }/* __for1(TypeSize, i, VL_DataCnt)*/ } if(AR_CViewClass.OnDataClose(AI_StartDepth)==ZNsMain::ZNsEnum::ZERun_NO) { return ZNsMain::ZNsEnum::ZERun_NO; } /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ return ZNsMain::ZNsEnum::ZERun_OK; }/* template ZNsMain::ZNsEnum::ZERun IterPostOrder ( TViewClass& AR_CViewClass , TypeSize AI_StartDepth=0 , TypeSize AI_NodeIndex =0 ) #################################################################*/ public: };/* class ZCNode1*/ class ZCNode2 { public : friend class ZCNodeInfo; private: ZCNode* mp_HighNode ; ZCDataList mo_CDataList; ZCNode1List mo_CNodeList; public : ZCNode2() { mp_HighNode=0; }/* ZCNode2()*/ ZCNode* GetHighNodePtr() {return (ZCNode*)mp_HighNode;} const ZCNode* GetHighNodePtr()const{return (ZCNode*)mp_HighNode;} ZCDataList& GetZCDataList() {return mo_CDataList;} const ZCDataList& GetZCDataList()const{return mo_CDataList;} const ZCNodeList& GetCNodeList ()const{return (ZCNodeList&)mo_CNodeList;} TypeSize GetDataCnt(){return mo_CDataList.size();} TypeSize GetNodeCnt(){return mo_CNodeList.size();} void DeleteCDataList(){mo_CDataList.DeleteAll();} void DeleteCNodeList(){mo_CNodeList.DeleteAll();} void DeleteAll (){mo_CDataList.DeleteAll(); mo_CNodeList.DeleteAll();} void clear (){DeleteAll();} ZCNode& AddSubNode() { ZCNode* VP_CNode=(ZCNode*)& ( **mo_CNodeList.AddTailDef() ); VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode; }/* ZCNode& AddSubNode()*/ ZCNodeInfo GetHeadNodeIter() { return ZCNodeInfo((ZCNode*)this, ((ZCNodeList&)mo_CNodeList).GetHeadLinkPtr()); }/* ZCNodeInfo GetHeadNodeIter()*/ /*////////////////////////////////////////////////////////////////////////////////////////////// ¡á ZCNode1 °ú ZCNode2 °¡ µ¿ÀÏÇÑ ±¸Á¶À̹ǷÎ, ZCNode2 ¿¡¼­´Â IterPreOrder() ¿Í IterPostOrder() ¸¦ Á¤ÀÇÇÒ ÇÊ¿ä¾ø´Ù. ZCNode2 ÀÌ ZCNode1 ·Î Çüº¯È¯µÇ¾î¼­ ZCNode1 ÀÇ IterPreOrder() ¿Í IterPostOrder() À» »ç¿ëÇÒ °ÍÀ̱⠶§¹®ÀÌ´Ù. -- 2011-11-01 10:40:00 //////////////////////////////////////////////////////////////////////////////////////////////*/ public: };/* class ZCNode2*/ class ZCNodeInfo { private: ZCNode* mp_NowNodeWrap; ZCNodeLink* mp_NowNodeLink; public : ZCNodeInfo(ZCNode* AP_CNode=0,ZCNodeLink* AP_CNodeLink=0) { mp_NowNodeWrap=AP_CNode; mp_NowNodeLink=AP_CNodeLink; }/* ZCNodeInfo(ZCNode* AP_CNode=0,ZCNodeLink* AP_CNodeLink=0)*/ ZCNode* GetNowNodeWrap(){return mp_NowNodeWrap;} ZCNodeLink* GetNowNodeLink(){return mp_NowNodeLink;} bool DeleteNode() { if(mp_NowNodeWrap==0 || mp_NowNodeLink==0) return false; ((ZCNodeList&)(mp_NowNodeWrap->mo_CNodeList)). DeleteLink(mp_NowNodeLink); mp_NowNodeLink=0; return true; ////////////// }/* bool DeleteNode()*/ ZCNodeInfo& operator++(int) { mp_NowNodeWrap->mo_CNodeList.MoveNextIter(mp_NowNodeLink); return *this; }/* ZCNodeInfo& operator++(int)*/ ZCNode& operator*() {return mp_NowNodeWrap->mo_CNodeList.ItD(mp_NowNodeLink);} const ZCNode& operator*()const{return mp_NowNodeWrap->mo_CNodeList.ItD(mp_NowNodeLink);} public: };/* class ZCNodeInfo public :*/ private: ZCNode mo_RootNode; public: ZCNode& GetRootNode() {return mo_RootNode;} const ZCNode& GetRootNode()const{return mo_RootNode;} void DeleteAll(){mo_RootNode.clear();} void clear (){mo_RootNode.clear();} template void IterPreOrder (TViewClass AO_CViewClass) { mo_RootNode.IterPreOrder(AO_CViewClass, 0); } template void IterPostOrder(TViewClass AO_CViewClass) { mo_RootNode.IterPostOrder(AO_CViewClass, 0); } public: };/* template< typename TType, typename TTypeTreeData=ZNsType::ZtCTypeTreeData > ZtCTreeDataEx #################################################*/ }/* namespace ZNsMain*/ /*////////////////////////////////////////////////////////////////////////////////////////// ¡á ÀÌ ÆÄÀÏÀº CTreeClass.H ÆÄÀÏÀ» ´ëüÇÒ °ÍÀÌ´Ù. CTreeClass.H ¿¡¼­´Â Æ®¸® ±¸Á¶¸¦ Ç¥ÇöÇϴµ¥, ¾Æ·¡ Çü½ÄÀÇ class CMyNode; { public: TypeData mo_TypeData; ZNsMain::ZtCObjList mo_NodeList; // ÇÏÀ§ ³ëµå ¸®½ºÆ®. }; Àç±Í ¿ë¹ýÀ» ±¸ÇöÇÒ ¼ö°¡ ¾ø¾î¼­, void* ¸¦ »ç¿ëÇÏ¿´´Ù. ±×·¯³ª ÀÌ ÆÄÀÏ¿¡¼­´Â, ¶È°°Àº ±¸Á¶ÀÇ µÎ Ŭ·¡½º ZCNode1, ZCNode2 ¸¦ »ç¿ëÇÔÀ¸·Î½á, ¸ÚÁö°Ô(!!) Àç±Í¸¦ ±¸ÇöÇϰí ÀÖ´Ù. Ŭ·¡½º ZCNode1 ¿¡¼­´Â ZCNode2 ÀÇ ÄÁÅ×À̳Ê(¸®½ºÆ®)¸¦ °¡Áö°í ÀÖ°í, Ŭ·¡½º ZCNode2 ¿¡¼­´Â ZCNode1 ÀÇ ÄÁÅ×À̳Ê(¸®½ºÆ®)¸¦ °¡Áö°í ÀÖ´Ù. ¾ÆÁÖ ±ôÂïÇϰí, ±â¹ßÇÑ ¹æ¹ýÀ̶ó°í ¾Æ´ÏÇÒ ¼ö ¾ø´Ù. 2011-10-29 ÀÏ Åä¿äÀÏ, Àú³á 7 ½Ã ±ºÆ÷½Ã¿¹¼ú¹®È­È¸°ü °ø¿¬À» º¸°í ¿À¸é¼­, ¸ÕÀú ¼±¾ðµÈ object ¿¡¼­, ³ªÁß¿¡ ¼±¾ðµÈ object ÀÇ instance ¸¦ ÂüÁ¶ÇÏ´Â °æ¿ì, ¸Å²ô·´°Ô ÇØ°áÇÒ ¼ö ÀÖÀ» Áöµµ ¸ð ¸£´Â ¹æ¹ýÀÌ ¸Ó¸´ ¼Ó¿¡ ±×·ÁÁö¸é¼­, ¿î¸íÀº ³»ÆíÀ̶ó´Â °­ÇÑ È®½ÅÀÌ µé¾ú¾ú´Ù. ±×·¯³ª Áý¿¡ µµ Âø ÈÄ, Á¶»ç °á°ú, ±â´ëÇß´ø ¸Å²ô·¯¿î ¹æ¹ýÀº ¾Æ´Ï¾úÀ½ÀÌ µå·¯³µ´Ù. ½Ç¸ÁÇÒ ¼öµµ ÀÖ¾ú´ø ±× ¼ø °£, Æ®¸®¸¦ ±¸ÇöÇÒ ¶§, ¶È±ùÀº ±¸Á¶ÀÇ, À̸§¸¸ ´Ù¸¥ 2 °³ÀÇ Å¬·¡½º·Î Æ®¸®ÀÇ Àç±Í ±¸Á¶¸¦ ±¸Çö ÇÒ ¼ö ÀÖ´Ù´Â »ý°¢ÀÌ ¹ø°³Ã³·³ ¶° ¿À¸¥ °ÍÀÌ´Ù. ±× °á°ú¹°ÀÌ ÀÌ ÆÄÀÏ CTreeData.H ÀÌ´Ù. ±×·¡, ¿î¸íÀº ³»ÆíÀ̾ú¾î. ¾î´Àµ¡ ÇØ´Â Àú¹«´Âµ¥, ÀÌÁ¦´Â ¸ðµç °ÍÀ» µÚ¿¡ µÎ°í ¶°³¯ ¼ö ÀÖ´Â ³¯ÀÌ, ¹Ù·Î ¾Õ¿¡ ¼ºÅ­ ´Ù°¡¿Ô ´Ù. -- 2011-10-31 23:47:00 -- ÇöÀç CTreeClass.H ´Â Á¦°ÅµÇ¾ú´Ù. -- 2013-05-01 17:22:00 //////////////////////////////////////////////////////////////////////////////////////////*/ #endif // __ZCPPMAIN__ZCTREEDATA_H__