git add ZCppMain/ZMainHead.H git add ZCppMain/ZtCArray.H git add ZCppMain/ZtCObjList.H git add ZCppMain/ZMainAVL.H git add ZCppMain/ZMainHeadEx.H git add ZCppMain/ZMainXhtml.H git add ZCppMain/ZtCLoadDataBlock.H git add ZCppMain/ZtCMainChars.H git add ZCppMain/ZtCObjAVL.H git add ZCppMain/ZtCStringEx.H git add ZCppMain/ZtCTreeData.H
994 lines
37 KiB
C++
994 lines
37 KiB
C++
|
|
|
|
#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 TTypeInit =ZNsMain::ZtCInit<TType>,
|
|
typename TTypeTreeData=ZNsType::ZtCTypeTreeData<long>
|
|
>
|
|
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<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 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<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).
|
|
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).
|
|
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 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<typename TViewClass> void IterPreOrder(TViewClass& AR_CViewClass)
|
|
{
|
|
mo_RootNode.IterPreOrder<TViewClass>(AR_CViewClass, 0, 0);
|
|
}/*
|
|
template<typename TViewClass> void IterPreOrder(TViewClass& AR_CViewClass) */
|
|
|
|
template<typename TViewClass> void IterPostOrder(TViewClass& AR_CViewClass)
|
|
{
|
|
mo_RootNode.IterPostOrder<TViewClass>(AR_CViewClass, 0, 0);
|
|
}/*
|
|
template<typename TViewClass> void IterPostOrder(TViewClass& AR_CViewClass) */
|
|
|
|
public:
|
|
};/*
|
|
template< typename TType ,
|
|
typename TTypeInit =ZNsMain::ZtCInit<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).
|
|
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).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.IterPreOrder<TViewClass>(AO_CViewClass, 0); }
|
|
template<typename TViewClass> void IterPostOrder(TViewClass AO_CViewClass)
|
|
{ mo_RootNode.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__
|