Files
RepoMain/ZCppMain/ZtCTreeData.H

993 lines
38 KiB
C++
Raw Normal View History


#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:"<<endl;
return ZNsMain::ZNsEnum::ZERun_OK;
}
ZNsMain::ZNsEnum::ZERun OnDataBody(TypeData& AR_TypeData, TypeSize AI_Depth, TypeSize AI_Index=0)
{
ShowDepth(AI_Depth); cout<<" ※ Index="<<AI_Index<<": "<<AR_TypeData<<endl;
return ZNsMain::ZNsEnum::ZERun_OK;
}
ZNsMain::ZNsEnum::ZERun OnDataClose(TypeSize AI_Depth)
{
ShowDepth(AI_Depth); cout<<"◁ OnDataClose:"<<endl;
return ZNsMain::ZNsEnum::ZERun_OK;
}
ZNsMain::ZNsEnum::ZERun OnSubNodeStart(TypeSize AI_Depth, TypeSize AI_NodeCnt)
{
if(AI_NodeCnt<1){ return ZNsMain::ZNsEnum::ZERun_OK; }
ShowDepth(AI_Depth); cout<<"▶ OnSubNodeStart:"<<endl;
return ZNsMain::ZNsEnum::ZERun_OK;
}
ZNsMain::ZNsEnum::ZERun OnSubNodeClose(TypeSize AI_Depth, TypeSize AI_NodeCnt)
{
if(AI_NodeCnt<1){ return ZNsMain::ZNsEnum::ZERun_OK; }
ShowDepth(AI_Depth); cout<<"◀ OnSubNodeClose:"<<endl;
return ZNsMain::ZNsEnum::ZERun_OK;
}/*
ZNsMain::ZNsEnum::ZERun OnSubNodeClose(TypeSize AI_Depth, TypeSize AI_NodeCnt)*/
public:
};/*
template< typename TypeData, typename TypeSize=int
>
class ZtCViewTreeData //////////////////////////*/
}/*
namespace ZNsView*/
namespace ZNsType
{
/*/////////////////////////////////////////////////////////////////////////////////////
class ZtCTypeTreeData 릿 릿(list 릿)
. ZtCTreeData<>
typedef typename TTypeTreeData::template ZtCTypeClass<ZCNode1>::TypeData ZCNode1List;
typedef typename TTypeTreeData::template ZtCTypeClass<ZCNode2>::TypeData ZCNode2List;
.
-- 2011-11-01 14:39:00
/////////////////////////////////////////////////////////////////////////////////////*/
template<typename TTypeSize=long> class ZtCTypeTreeData
{
public:
typedef TTypeSize TypeSize;
public:
template< typename TType ,
typename TTypeArg =const TType& ,
typename TTypeAlloc=ZNsMain::ZCAllocator,
typename TTypeInit =ZNsMain::ZtCInit<TType>
>
class ZtCTypeClass /////////////////////////////////
{
public:
typedef TTypeAlloc TypeAlloc;
typedef TTypeInit TypeInit ;
public:
typedef ZNsMain::ZtCObjList
<TType, TTypeArg, TTypeAlloc, TTypeInit, TTypeSize>
TypeList; /////////////////
public:
};/*
template< typename TType ,
typename TTypeArg =const TType& ,
typename TTypeAlloc=ZNsMain::ZCAllocator,
typename TTypeInit =ZNsMain::ZtCInit<TType>
>
class ZtCTypeClass ///////////////////////////////*/
public:
};/*
template<typename TTypeSize=long> class ZtCTypeTreeData*/
}/*
namespace ZNsType*/
template< typename TType ,
typename TTypeTreeData=ZNsType::ZtCTypeTreeData<long>
>
class ZtCTreeData /*###########################################*/
{
public:
class ZCNode1; class ZCNode2; class ZCNodeInfo;
public:
typedef TType TypeData ;
typedef TTypeTreeData TypeTreeData;
public:
typedef typename TTypeTreeData::TypeSize TypeSize ;
typedef typename TTypeTreeData::template
ZtCTypeClass<ZCNode1>::TypeList ZCNode1List ;
typedef typename TTypeTreeData::template
ZtCTypeClass<ZCNode2>::TypeList ZCNode2List ;
public:
typedef ZCNode1 ZCNode ;
typedef ZCNode1List ZCNodeList ;
public:
typedef typename ZCNodeList::ZCLink ZCNodeLink;
typedef typename ZCNodeList::iterator IterOfNode;
public:
class ZCNode1
{
public :
friend class ZCNodeInfo;
private:
ZCNode* mp_HighNode ;
TypeData mo_TypeData ;
ZCNode2List mo_CNodeList;
public :
ZCNode1()
{
mp_HighNode=0;
}/*
ZCNode1()*/
~ZCNode1()
{
mp_HighNode=0;
}/*
~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<typename TViewClass> 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).template
IterPreOrder<TViewClass>
(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<typename TViewClass> ZNsMain::ZNsEnum::ZERun IterPreOrder
(TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex=0)
################################################################*/
template<typename TViewClass> 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).template
IterPostOrder<TViewClass>(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<typename TViewClass> 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 ;
TypeData mo_TypeData ;
ZCNode1List mo_CNodeList;
public :
ZCNode2()
{
mp_HighNode=0;
}/*
ZCNode2()*/
~ZCNode2()
{
mp_HighNode=0;
}/*
~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<typename TViewClass> void IterPreOrder(TViewClass& AR_CViewClass)
{
mo_RootNode.template IterPreOrder<TViewClass>(AR_CViewClass, 0, 0);
}/*
template<typename TViewClass> void IterPreOrder(TViewClass& AR_CViewClass) */
template<typename TViewClass> void IterPostOrder(TViewClass& AR_CViewClass)
{
mo_RootNode.template IterPostOrder<TViewClass>(AR_CViewClass, 0, 0);
}/*
template<typename TViewClass> void IterPostOrder(TViewClass& AR_CViewClass) */
public:
};/*
template< typename TType ,
typename TTypeTreeData=ZNsType::ZtCTypeTreeData<long>
>
class ZtCTreeData #############################################*/
/*///////////////////////////////////////////////////////////////
class ZtCTreeData -- 2015-08-14 14:00
#include <iostream>
#include "ZCppMain/ZtCTreeData.H"
using namespace std ;
using namespace ZNsMain;
typedef ZtCStringBase<char> CStringBase ;
typedef ZtCTreeData<CStringBase> CStrTreeData ;
typedef CStrTreeData::ZCNode CNodeCStr ;
typedef ZNsMain::ZNsView::
ZtCViewTreeData<CStringBase> 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"<<endl;
VO_CStrTreeData.IterPreOrder (VO_CViewTreeData);
cout<<"# Post Order" <<endl;
VO_CStrTreeData.IterPostOrder(VO_CViewTreeData);
}
# Pre Order
Index=0: ## Root Node ##
OnSubNodeStart:
Index=1: Node1
OnSubNodeStart:
Index=1: Node11
Index=2: Node12
OnSubNodeStart:
Index=1: Node121
Index=2: Node122
OnSubNodeClose:
OnSubNodeClose:
Index=2: Node2
OnSubNodeStart:
Index=1: Node21
Index=2: Node22
OnSubNodeClose:
Index=3: Node3
OnSubNodeClose:
# Post Order
OnSubNodeStart:
OnSubNodeStart:
Index=1: Node11
OnSubNodeStart:
Index=1: Node121
Index=2: Node122
OnSubNodeClose:
Index=2: Node12
OnSubNodeClose:
Index=1: Node1
OnSubNodeStart:
Index=1: Node21
Index=2: Node22
OnSubNodeClose:
Index=2: Node2
Index=3: Node3
OnSubNodeClose:
Index=0: ## Root Node ##
///////////////////////////////////////////////////////////////*/
/*///////////////////////////////////////////////////////////////
class ZtCTreeData <>::ZCNode1 mo_TypeData ,
class ZtCTreeDataEx<>::ZCNode1 mo_CDataList .
///////////////////////////////////////////////////////////////*/
template< typename TType,
typename TTypeTreeData=ZNsType::ZtCTypeTreeData<long>
>
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<TypeData>::TypeList ZCDataList ;
typedef typename TTypeTreeData::
template ZtCTypeClass<ZCNode1 >::TypeList ZCNode1List;
typedef typename TTypeTreeData::
template ZtCTypeClass<ZCNode2 >::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<typename TViewClass> 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).
template IterPreOrder<TViewClass>
(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<typename TViewClass> ZNsMain::ZNsEnum::ZERun IterPreOrder
(
TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0
TypeSize AI_NodeIndex =0
) */
/*###############################################################*/
template<typename TViewClass> 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).template IterPostOrder<TViewClass>
(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<typename TViewClass> 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<typename TViewClass> void IterPreOrder (TViewClass AO_CViewClass)
{ mo_RootNode.template IterPreOrder<TViewClass>(AO_CViewClass, 0); }
template<typename TViewClass> void IterPostOrder(TViewClass AO_CViewClass)
{ mo_RootNode.template IterPostOrder<TViewClass>(AO_CViewClass, 0); }
public:
};/*
template< typename TType,
typename TTypeTreeData=ZNsType::ZtCTypeTreeData<long>
>
ZtCTreeDataEx #################################################*/
}/*
namespace ZNsMain*/
/*//////////////////////////////////////////////////////////////////////////////////////////
CTreeClass.H . CTreeClass.H ,
class CMyNode;
{
public:
TypeData mo_TypeData;
ZNsMain::ZtCObjList<CMyNode> 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__