commit 2025-08-17 02:54 utf8 변환 : some files
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifndef __ZCPPMAIN_ZMAINAVL_H__
|
#ifndef __ZCPPMAIN_ZMAINAVL_H__
|
||||||
#define __ZCPPMAIN_ZMAINAVL_H__
|
#define __ZCPPMAIN_ZMAINAVL_H__
|
||||||
@ -16,9 +16,9 @@ namespace ZNsMain
|
|||||||
enum ZEAVL_INSERT
|
enum ZEAVL_INSERT
|
||||||
{
|
{
|
||||||
ZEAVL_INSERT_RIGHT = +1,
|
ZEAVL_INSERT_RIGHT = +1,
|
||||||
ZEAVL_INSERT_OK = 0, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20>̴<EFBFBD>. */
|
ZEAVL_INSERT_OK = 0, /* 삽입 후의 평형계수가 0 이다. */
|
||||||
ZEAVL_INSERT_LEFT = -1,
|
ZEAVL_INSERT_LEFT = -1,
|
||||||
ZEAVL_INSERT_NONE = -2 /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> */
|
ZEAVL_INSERT_NONE = -2 /* 삽입 안 됨 */
|
||||||
};/*
|
};/*
|
||||||
enum ZEAVL_INSERT*/
|
enum ZEAVL_INSERT*/
|
||||||
|
|
||||||
@ -50,13 +50,13 @@ namespace ZNsMain
|
|||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> <20>Ʒ<EFBFBD> ZtCAVL_NodeBase<> <EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> ZtCAVL_BASE<> <20><> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>
|
■ 아래 ZtCAVL_NodeBase<> 의 각 멤버 함수는 ZtCAVL_BASE<> 의 멤버 함수보다
|
||||||
<EFBFBD>μ<EFBFBD><EFBFBD><EFBFBD> <20>ϳ<EFBFBD> <20>پ<EFBFBD><D9BE><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20>ִ<EFBFBD>. ZtCAVL_BASE<> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD>
|
인수가 하나 줄어든 것을 볼 수 있다. ZtCAVL_BASE<> 에서 같은 이름의 함수를
|
||||||
<EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> <20><> <20>ְ<EFBFBD> <20><> <20><><EFBFBD>̴<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZtCAVL_BASE<> <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD>
|
자연스럽게 호출할 수 있게 한 것이다. 따라서 ZtCAVL_BASE<> 의 멤버 함수에
|
||||||
<EFBFBD><EFBFBD>, AP_Node->OnEqual() <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZtCAVL_NodeBase<> <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> <20><>
|
서, AP_Node->OnEqual() 등으로 ZtCAVL_NodeBase<> 의 멤버 함수를 호출해 주
|
||||||
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ZtCAVL_NodeBase<> <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><F0BFA1BC><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>. <20><> <20><><EFBFBD><EFBFBD>
|
지 않으면, ZtCAVL_NodeBase<> 의 멤버는 어디에서도 호출되지 않는다. 왜 최초
|
||||||
<EFBFBD><EFBFBD> <20>̷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ߴµ<DFB4>, <20>Ƹ<EFBFBD> ZtCAVL_Multi_BASE<> <EFBFBD><EFBFBD>
|
에 이런 식으로 설계했을까. 한참 생각했는데, 아마 ZtCAVL_Multi_BASE<> 와
|
||||||
ZtCAVL_Multi_NodeBase<> <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD> <20><EFBFBD><D7B7><EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
|
ZtCAVL_Multi_NodeBase<> 를 사용할려고 그랬을 것이다.
|
||||||
|
|
||||||
-- 2012-09-03 19:20:00
|
-- 2012-09-03 19:20:00
|
||||||
|
|
||||||
@ -104,8 +104,8 @@ namespace ZNsMain
|
|||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> ZtCAVL_Multi_NodeBase template <EFBFBD><EFBFBD> multi set/map <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>,
|
■ ZtCAVL_Multi_NodeBase template 로 multi set/map 을 구성하는 경우,
|
||||||
ZtCAVL_Multi_NodeBase::TypeEqual <EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>.
|
ZtCAVL_Multi_NodeBase::TypeEqual 자료형에 접근하는 예.
|
||||||
|
|
||||||
class CTypeMy
|
class CTypeMy
|
||||||
{
|
{
|
||||||
@ -154,8 +154,8 @@ namespace ZNsMain
|
|||||||
|
|
||||||
/*/////////////////////////////////////////////////////////////////////
|
/*/////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> AVL Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ Ÿ<><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> <20>ٷ<EFBFBD><D9B7>
|
■ AVL 트리의 데이타 타입이 포인터인 경우, 포인터를 정수처럼 다루어서
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD><C3B8>̴<EFBFBD>.
|
비교 연산자를 정의하는 클래스 템플릿이다.
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////*/
|
/////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
@ -217,9 +217,9 @@ namespace ZNsMain
|
|||||||
template<typename TData> class ZtCAVL_PtrLongData*/
|
template<typename TData> class ZtCAVL_PtrLongData*/
|
||||||
|
|
||||||
|
|
||||||
/* int, long <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><F1B1B3BF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> primitive Ÿ<EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> object <EFBFBD><EFBFBD>
|
/* int, long 같이 비교연산이 가능한 primitive 타입이나 object 를
|
||||||
key <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD>쿡, <20>ش<EFBFBD> AVL Ʈ<><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20>ٷ<EFBFBD>
|
key 로 가지고 있는 경우에, 해당 AVL 트리의 노드 데이타로 바로
|
||||||
<EFBFBD><EFBFBD> <20><> <20>ֵ<EFBFBD><D6B5><EFBFBD> wrap <20><> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> */
|
쓸 수 있도록 wrap 한 클래스 템플릿 */
|
||||||
|
|
||||||
template< typename TKeyData ,
|
template< typename TKeyData ,
|
||||||
typename TMainData,
|
typename TMainData,
|
||||||
@ -305,7 +305,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
/*/////////////////////////////////////////////////////////////////////////////////////
|
/*/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> mulit set <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȱ<><C8B0><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
■ mulit set 으로 활용하는 예제코드
|
||||||
|
|
||||||
ZNsMain::CLargeAVL ///////////////////////////////////
|
ZNsMain::CLargeAVL ///////////////////////////////////
|
||||||
<
|
<
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifndef __ZCPPMAIIN__ZMAINXHTML_H__
|
#ifndef __ZCPPMAIIN__ZMAINXHTML_H__
|
||||||
#define __ZCPPMAIIN__ZMAINXHTML_H__
|
#define __ZCPPMAIIN__ZMAINXHTML_H__
|
||||||
@ -9,9 +9,9 @@ namespace ZNsMain
|
|||||||
|
|
||||||
template<typename TStringData> TStringData& ZftConvertXhtml(TStringData& ARR_CString)
|
template<typename TStringData> TStringData& ZftConvertXhtml(TStringData& ARR_CString)
|
||||||
{
|
{
|
||||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD> <20>״<EFBFBD><D7B4><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>
|
/* 데이타를 그대로 클라이언트에 전송하면
|
||||||
HTML <EFBFBD>±<EFBFBD> ȥ<><C8A5><EFBFBD><EFBFBD> <20><> <20>ִµ<D6B4> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
HTML 태그와 혼동될 수 있는데 이를 방지하기 위해
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ<EFBFBD><DAB5>Ѵ<EFBFBD>.
|
적절히 인코딩한다.
|
||||||
*/
|
*/
|
||||||
return ARR_CString.
|
return ARR_CString.
|
||||||
Replace("&" ,"&" ). Replace("<" ,"<" ).
|
Replace("&" ,"&" ). Replace("<" ,"<" ).
|
||||||
@ -22,7 +22,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
template<typename TStringData> TStringData& ZftConvertXhtmlAtt(TStringData& ARR_CString)
|
template<typename TStringData> TStringData& ZftConvertXhtmlAtt(TStringData& ARR_CString)
|
||||||
{
|
{
|
||||||
// X(H)TML <EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ<EFBFBD><DAB5>Ѵ<EFBFBD>.
|
// X(H)TML 의 속성에 올 수 있는 값으로 인코딩한다.
|
||||||
|
|
||||||
return ARR_CString.
|
return ARR_CString.
|
||||||
Replace("&" ,"&" ). Replace("<" ,"<" ).
|
Replace("&" ,"&" ). Replace("<" ,"<" ).
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifndef __ZCPPMAIN__ZCTREEDATA_H__
|
#ifndef __ZCPPMAIN__ZCTREEDATA_H__
|
||||||
#define __ZCPPMAIN__ZCTREEDATA_H__
|
#define __ZCPPMAIN__ZCTREEDATA_H__
|
||||||
@ -29,31 +29,31 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ZNsMain::ZNsEnum::ZERun OnDataStart(TypeSize AI_Depth)
|
ZNsMain::ZNsEnum::ZERun OnDataStart(TypeSize AI_Depth)
|
||||||
{
|
{
|
||||||
ShowDepth(AI_Depth); cout<<"<EFBFBD><EFBFBD> OnDataStart:"<<endl;
|
ShowDepth(AI_Depth); cout<<"▷ OnDataStart:"<<endl;
|
||||||
return ZNsMain::ZNsEnum::ZERun_OK;
|
return ZNsMain::ZNsEnum::ZERun_OK;
|
||||||
}
|
}
|
||||||
ZNsMain::ZNsEnum::ZERun OnDataBody(TypeData& AR_TypeData, TypeSize AI_Depth, TypeSize AI_Index=0)
|
ZNsMain::ZNsEnum::ZERun OnDataBody(TypeData& AR_TypeData, TypeSize AI_Depth, TypeSize AI_Index=0)
|
||||||
{
|
{
|
||||||
ShowDepth(AI_Depth); cout<<" <EFBFBD><EFBFBD> Index="<<AI_Index<<": "<<AR_TypeData<<endl;
|
ShowDepth(AI_Depth); cout<<" ※ Index="<<AI_Index<<": "<<AR_TypeData<<endl;
|
||||||
return ZNsMain::ZNsEnum::ZERun_OK;
|
return ZNsMain::ZNsEnum::ZERun_OK;
|
||||||
}
|
}
|
||||||
ZNsMain::ZNsEnum::ZERun OnDataClose(TypeSize AI_Depth)
|
ZNsMain::ZNsEnum::ZERun OnDataClose(TypeSize AI_Depth)
|
||||||
{
|
{
|
||||||
ShowDepth(AI_Depth); cout<<"<EFBFBD><EFBFBD> OnDataClose:"<<endl;
|
ShowDepth(AI_Depth); cout<<"◁ OnDataClose:"<<endl;
|
||||||
return ZNsMain::ZNsEnum::ZERun_OK;
|
return ZNsMain::ZNsEnum::ZERun_OK;
|
||||||
}
|
}
|
||||||
ZNsMain::ZNsEnum::ZERun OnSubNodeStart(TypeSize AI_Depth, TypeSize AI_NodeCnt)
|
ZNsMain::ZNsEnum::ZERun OnSubNodeStart(TypeSize AI_Depth, TypeSize AI_NodeCnt)
|
||||||
{
|
{
|
||||||
if(AI_NodeCnt<1){ return ZNsMain::ZNsEnum::ZERun_OK; }
|
if(AI_NodeCnt<1){ return ZNsMain::ZNsEnum::ZERun_OK; }
|
||||||
|
|
||||||
ShowDepth(AI_Depth); cout<<"<EFBFBD><EFBFBD> OnSubNodeStart:"<<endl;
|
ShowDepth(AI_Depth); cout<<"▶ OnSubNodeStart:"<<endl;
|
||||||
return ZNsMain::ZNsEnum::ZERun_OK;
|
return ZNsMain::ZNsEnum::ZERun_OK;
|
||||||
}
|
}
|
||||||
ZNsMain::ZNsEnum::ZERun OnSubNodeClose(TypeSize AI_Depth, TypeSize AI_NodeCnt)
|
ZNsMain::ZNsEnum::ZERun OnSubNodeClose(TypeSize AI_Depth, TypeSize AI_NodeCnt)
|
||||||
{
|
{
|
||||||
if(AI_NodeCnt<1){ return ZNsMain::ZNsEnum::ZERun_OK; }
|
if(AI_NodeCnt<1){ return ZNsMain::ZNsEnum::ZERun_OK; }
|
||||||
|
|
||||||
ShowDepth(AI_Depth); cout<<"<EFBFBD><EFBFBD> OnSubNodeClose:"<<endl;
|
ShowDepth(AI_Depth); cout<<"◀ OnSubNodeClose:"<<endl;
|
||||||
return ZNsMain::ZNsEnum::ZERun_OK;
|
return ZNsMain::ZNsEnum::ZERun_OK;
|
||||||
}/*
|
}/*
|
||||||
ZNsMain::ZNsEnum::ZERun OnSubNodeClose(TypeSize AI_Depth, TypeSize AI_NodeCnt)*/
|
ZNsMain::ZNsEnum::ZERun OnSubNodeClose(TypeSize AI_Depth, TypeSize AI_NodeCnt)*/
|
||||||
@ -73,13 +73,13 @@ namespace ZNsMain
|
|||||||
|
|
||||||
/*/////////////////////////////////////////////////////////////////////////////////////
|
/*/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> class ZtCTypeTreeData <EFBFBD><EFBFBD><EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD> <20><> <20>ٸ<EFBFBD> <20><><EFBFBD>ø<EFBFBD>(list <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20><><EFBFBD>ø<EFBFBD>)<29><>
|
■ class ZtCTypeTreeData 템플릿은 정의에서 또 다른 템플릿(list 등의 컨테이너 템플릿)을
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20>̰<EFBFBD><CCB0><EFBFBD> ZtCTreeData<> <20><><EFBFBD><EFBFBD> Ȱ<><C8B0><EFBFBD>ϴ<EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20>Ʒ<EFBFBD>ó<EFBFBD><C3B3>
|
포함하고 있음을 눈여겨 보자. 이것을 ZtCTreeData<> 에서 활용하는 부분은 아래처럼
|
||||||
|
|
||||||
typedef typename TTypeTreeData::template ZtCTypeClass<ZCNode1>::TypeData ZCNode1List;
|
typedef typename TTypeTreeData::template ZtCTypeClass<ZCNode1>::TypeData ZCNode1List;
|
||||||
typedef typename TTypeTreeData::template ZtCTypeClass<ZCNode2>::TypeData ZCNode2List;
|
typedef typename TTypeTreeData::template ZtCTypeClass<ZCNode2>::TypeData ZCNode2List;
|
||||||
|
|
||||||
<EFBFBD>ټ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>δ<EFBFBD>.
|
다소 복잡해 보인다.
|
||||||
|
|
||||||
-- 2011-11-01 14:39:00
|
-- 2011-11-01 14:39:00
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> TViewClass <EFBFBD><EFBFBD> interface
|
■ TViewClass 의 interface
|
||||||
|
|
||||||
ZNsMain::ZNsEnum::ZERun OnDataBody(TypeData, TypeSize AI_Depth, TypeSize AI_Index=0)
|
ZNsMain::ZNsEnum::ZERun OnDataBody(TypeData, TypeSize AI_Depth, TypeSize AI_Index=0)
|
||||||
|
|
||||||
@ -374,9 +374,9 @@ namespace ZNsMain
|
|||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> ZCNode1 <EFBFBD><EFBFBD> ZCNode2 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̹Ƿ<CCB9>, ZCNode2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IterPreOrder() <EFBFBD><EFBFBD> IterPostOrder() <EFBFBD><EFBFBD>
|
■ ZCNode1 과 ZCNode2 가 동일한 구조이므로, ZCNode2 에서는 IterPreOrder() 와 IterPostOrder() 를
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD>. ZCNode2 <EFBFBD><EFBFBD> ZCNode1 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȯ<EFBFBD>Ǿ ZCNode1 <EFBFBD><EFBFBD> IterPreOrder() <EFBFBD><EFBFBD> IterPostOrder()
|
정의할 필요없다. ZCNode2 이 ZCNode1 로 형변환되어서 ZCNode1 의 IterPreOrder() 와 IterPostOrder()
|
||||||
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
을 사용할 것이기 때문이다.
|
||||||
|
|
||||||
-- 2011-11-01 10:40:00
|
-- 2011-11-01 10:40:00
|
||||||
|
|
||||||
@ -435,9 +435,9 @@ namespace ZNsMain
|
|||||||
|
|
||||||
/*/////////////////////////////////////////////////////////////////////////////////////////
|
/*/////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> <20><> clear() <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> mo_RootNode.clear() <EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ϰ<EFBFBD> <20>ִµ<D6B4>, <20><><EFBFBD><EFBFBD> mo_RootNode.mo_TypeData
|
■ 위 clear() 함수는 mo_RootNode.clear() 를 호출하고 있는데, 만약 mo_RootNode.mo_TypeData
|
||||||
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, mo_TypeData <20><> <20>߰<EFBFBD><DFB0><EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD>ϴ<EFBFBD> <20>ڵ尡 <20>ʿ<EFBFBD><CABF><EFBFBD> <20><> <20>ִ<EFBFBD>. <20>̿<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD>
|
가 컨테이너 인 경우, mo_TypeData 를 추가로 초기화하는 코드가 필요할 수 있다. 이에 대해서
|
||||||
<EFBFBD><EFBFBD> CXmlInfo_T<>::clear() <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
는 CXmlInfo_T<>::clear() 을 참고한다.
|
||||||
|
|
||||||
-- 2012-10-12 13:20:00
|
-- 2012-10-12 13:20:00
|
||||||
|
|
||||||
@ -468,7 +468,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
/*///////////////////////////////////////////////////////////////
|
/*///////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> class ZtCTreeData <EFBFBD><EFBFBD><EFBFBD><EFBFBD> -- 2015-08-14 14:00
|
■ class ZtCTreeData 예제 -- 2015-08-14 14:00
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "ZCppMain/ZtCTreeData.H"
|
#include "ZCppMain/ZtCTreeData.H"
|
||||||
@ -522,54 +522,54 @@ namespace ZNsMain
|
|||||||
VO_CStrTreeData.IterPostOrder(VO_CViewTreeData);
|
VO_CStrTreeData.IterPostOrder(VO_CViewTreeData);
|
||||||
}
|
}
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
□ 출력
|
||||||
|
|
||||||
# Pre Order
|
# Pre Order
|
||||||
<EFBFBD><EFBFBD> Index=0: ## Root Node ##
|
※ Index=0: ## Root Node ##
|
||||||
<EFBFBD><EFBFBD> OnSubNodeStart:
|
▶ OnSubNodeStart:
|
||||||
<EFBFBD><EFBFBD> Index=1: Node1
|
※ Index=1: Node1
|
||||||
<EFBFBD><EFBFBD> OnSubNodeStart:
|
▶ OnSubNodeStart:
|
||||||
<EFBFBD><EFBFBD> Index=1: Node11
|
※ Index=1: Node11
|
||||||
<EFBFBD><EFBFBD> Index=2: Node12
|
※ Index=2: Node12
|
||||||
<EFBFBD><EFBFBD> OnSubNodeStart:
|
▶ OnSubNodeStart:
|
||||||
<EFBFBD><EFBFBD> Index=1: Node121
|
※ Index=1: Node121
|
||||||
<EFBFBD><EFBFBD> Index=2: Node122
|
※ Index=2: Node122
|
||||||
<EFBFBD><EFBFBD> OnSubNodeClose:
|
◀ OnSubNodeClose:
|
||||||
<EFBFBD><EFBFBD> OnSubNodeClose:
|
◀ OnSubNodeClose:
|
||||||
<EFBFBD><EFBFBD> Index=2: Node2
|
※ Index=2: Node2
|
||||||
<EFBFBD><EFBFBD> OnSubNodeStart:
|
▶ OnSubNodeStart:
|
||||||
<EFBFBD><EFBFBD> Index=1: Node21
|
※ Index=1: Node21
|
||||||
<EFBFBD><EFBFBD> Index=2: Node22
|
※ Index=2: Node22
|
||||||
<EFBFBD><EFBFBD> OnSubNodeClose:
|
◀ OnSubNodeClose:
|
||||||
<EFBFBD><EFBFBD> Index=3: Node3
|
※ Index=3: Node3
|
||||||
<EFBFBD><EFBFBD> OnSubNodeClose:
|
◀ OnSubNodeClose:
|
||||||
# Post Order
|
# Post Order
|
||||||
<EFBFBD><EFBFBD> OnSubNodeStart:
|
▶ OnSubNodeStart:
|
||||||
<EFBFBD><EFBFBD> OnSubNodeStart:
|
▶ OnSubNodeStart:
|
||||||
<EFBFBD><EFBFBD> Index=1: Node11
|
※ Index=1: Node11
|
||||||
<EFBFBD><EFBFBD> OnSubNodeStart:
|
▶ OnSubNodeStart:
|
||||||
<EFBFBD><EFBFBD> Index=1: Node121
|
※ Index=1: Node121
|
||||||
<EFBFBD><EFBFBD> Index=2: Node122
|
※ Index=2: Node122
|
||||||
<EFBFBD><EFBFBD> OnSubNodeClose:
|
◀ OnSubNodeClose:
|
||||||
<EFBFBD><EFBFBD> Index=2: Node12
|
※ Index=2: Node12
|
||||||
<EFBFBD><EFBFBD> OnSubNodeClose:
|
◀ OnSubNodeClose:
|
||||||
<EFBFBD><EFBFBD> Index=1: Node1
|
※ Index=1: Node1
|
||||||
<EFBFBD><EFBFBD> OnSubNodeStart:
|
▶ OnSubNodeStart:
|
||||||
<EFBFBD><EFBFBD> Index=1: Node21
|
※ Index=1: Node21
|
||||||
<EFBFBD><EFBFBD> Index=2: Node22
|
※ Index=2: Node22
|
||||||
<EFBFBD><EFBFBD> OnSubNodeClose:
|
◀ OnSubNodeClose:
|
||||||
<EFBFBD><EFBFBD> Index=2: Node2
|
※ Index=2: Node2
|
||||||
<EFBFBD><EFBFBD> Index=3: Node3
|
※ Index=3: Node3
|
||||||
<EFBFBD><EFBFBD> OnSubNodeClose:
|
◀ OnSubNodeClose:
|
||||||
<EFBFBD><EFBFBD> Index=0: ## Root Node ##
|
※ Index=0: ## Root Node ##
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////*/
|
///////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
|
||||||
/*///////////////////////////////////////////////////////////////
|
/*///////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> class ZtCTreeData <>::ZCNode1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> mo_TypeData <EFBFBD><EFBFBD> <20>ִٸ<D6B4>,
|
■ class ZtCTreeData <>::ZCNode1 에는 mo_TypeData 이 있다면,
|
||||||
class ZtCTreeDataEx<>::ZCNode1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> mo_CDataList <EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
|
class ZtCTreeDataEx<>::ZCNode1 에는 mo_CDataList 이 있다.
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////*/
|
///////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
@ -651,7 +651,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> TViewClass <EFBFBD><EFBFBD> interface
|
■ TViewClass 의 interface
|
||||||
|
|
||||||
ZNsMain::ZNsEnum::ZERun OnDataStart(int AI_Depth)
|
ZNsMain::ZNsEnum::ZERun OnDataStart(int AI_Depth)
|
||||||
ZNsMain::ZNsEnum::ZERun OnDataBody(TypeData, TypeSize AI_Depth, TypeSize AI_Index)
|
ZNsMain::ZNsEnum::ZERun OnDataBody(TypeData, TypeSize AI_Depth, TypeSize AI_Index)
|
||||||
@ -873,9 +873,9 @@ namespace ZNsMain
|
|||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> ZCNode1 <EFBFBD><EFBFBD> ZCNode2 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̹Ƿ<CCB9>, ZCNode2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IterPreOrder() <EFBFBD><EFBFBD> IterPostOrder() <EFBFBD><EFBFBD>
|
■ ZCNode1 과 ZCNode2 가 동일한 구조이므로, ZCNode2 에서는 IterPreOrder() 와 IterPostOrder() 를
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD>. ZCNode2 <EFBFBD><EFBFBD> ZCNode1 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȯ<EFBFBD>Ǿ ZCNode1 <EFBFBD><EFBFBD> IterPreOrder() <EFBFBD><EFBFBD> IterPostOrder()
|
정의할 필요없다. ZCNode2 이 ZCNode1 로 형변환되어서 ZCNode1 의 IterPreOrder() 와 IterPostOrder()
|
||||||
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
을 사용할 것이기 때문이다.
|
||||||
|
|
||||||
-- 2011-11-01 10:40:00
|
-- 2011-11-01 10:40:00
|
||||||
|
|
||||||
@ -953,39 +953,39 @@ namespace ZNsMain*/
|
|||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CTreeClass.H <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD>̴<EFBFBD>. CTreeClass.H <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ʈ<><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ǥ<><C7A5><EFBFBD>ϴµ<CFB4>,
|
■ 이 파일은 CTreeClass.H 파일을 대체할 것이다. CTreeClass.H 에서는 트리 구조를 표현하는데,
|
||||||
<EFBFBD>Ʒ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
아래 형식의
|
||||||
|
|
||||||
class CMyNode;
|
class CMyNode;
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TypeData mo_TypeData;
|
TypeData mo_TypeData;
|
||||||
ZNsMain::ZtCObjList<CMyNode> mo_NodeList; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ.
|
ZNsMain::ZtCObjList<CMyNode> mo_NodeList; // 하위 노드 리스트.
|
||||||
};
|
};
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>, void* <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD>. <20><EFBFBD><D7B7><EFBFBD> <20><> <20><><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>, <20>Ȱ<EFBFBD><C8B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
재귀 용법을 구현할 수가 없어서, void* 를 사용하였다. 그러나 이 파일에서는, 똑같은 구조의
|
||||||
<EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> ZCNode1, ZCNode2 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(!!) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD>.
|
두 클래스 ZCNode1, ZCNode2 를 사용함으로써, 멋지게(!!) 재귀를 구현하고 있다.
|
||||||
|
|
||||||
Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZCNode1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZCNode2 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD>(<28><><EFBFBD><EFBFBD>Ʈ)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ְ<EFBFBD>,
|
클래스 ZCNode1 에서는 ZCNode2 의 컨테이너(리스트)를 가지고 있고,
|
||||||
Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZCNode2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZCNode1 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD>(<28><><EFBFBD><EFBFBD>Ʈ)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
|
클래스 ZCNode2 에서는 ZCNode1 의 컨테이너(리스트)를 가지고 있다.
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD> <20>ƴ<EFBFBD><C6B4><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
|
아주 깜찍하고, 기발한 방법이라고 아니할 수 없다.
|
||||||
|
|
||||||
2011-10-29 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> 7 <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ȭȸ<C8AD><C8B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>鼭, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> object
|
2011-10-29 일 토요일, 저녁 7 시 군포시예술문화회관 공연을 보고 오면서, 먼저 선언된 object
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> object <EFBFBD><EFBFBD> instance <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>, <20>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD> <20>ذ<EFBFBD><D8B0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
에서, 나중에 선언된 object 의 instance 를 참조하는 경우, 매끄럽게 해결할 수 있을 지도 모
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӹ<EFBFBD> <20>ӿ<EFBFBD> <20><EFBFBD><D7B7><EFBFBD><EFBFBD>鼭, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
르는 방법이 머릿 속에 그려지면서, 운명은 내편이라는 강한 확신이 들었었다. 그러나 집에 도
|
||||||
<EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD> <20>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴϾ<C6B4><CFBE><EFBFBD><EFBFBD><EFBFBD> <20>巯<EFBFBD><E5B7AF><EFBFBD><EFBFBD>. <20>Ǹ<EFBFBD><C7B8><EFBFBD> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20><> <20><>
|
착 후, 조사 결과, 기대했던 매끄러운 방법은 아니었음이 드러났다. 실망할 수도 있었던 그 순
|
||||||
<EFBFBD><EFBFBD>, Ʈ<><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, <20>ȱ<EFBFBD><C8B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20≯<EFBFBD><CCB8><EFBFBD> <20>ٸ<EFBFBD> 2 <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ʈ<><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
간, 트리를 구현할 때, 똑깥은 구조의, 이름만 다른 2 개의 클래스로 트리의 재귀 구조를 구현
|
||||||
<EFBFBD><EFBFBD> <20><> <20>ִٴ<D6B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̴<EFBFBD>. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> CTreeData.H <EFBFBD>̴<EFBFBD>.
|
할 수 있다는 생각이 번개처럼 떠 오른 것이다. 그 결과물이 이 파일 CTreeData.H 이다.
|
||||||
|
|
||||||
<EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD>.
|
그래, 운명은 내편이었어.
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڿ<EFBFBD> <20>ΰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ٷ<EFBFBD> <20>տ<EFBFBD> <20><>ŭ <20>ٰ<EFBFBD><D9B0><EFBFBD>
|
어느덧 해는 저무는데, 이제는 모든 것을 뒤에 두고 떠날 수 있는 날이, 바로 앞에 성큼 다가왔
|
||||||
<EFBFBD><EFBFBD>.
|
다.
|
||||||
|
|
||||||
-- 2011-10-31 23:47:00
|
-- 2011-10-31 23:47:00
|
||||||
|
|
||||||
-- <EFBFBD><EFBFBD><EFBFBD><EFBFBD> CTreeClass.H <EFBFBD><EFBFBD> <20><><EFBFBD>ŵǾ<C5B5><C7BE><EFBFBD>. -- 2013-05-01 17:22:00
|
-- 현재 CTreeClass.H 는 제거되었다. -- 2013-05-01 17:22:00
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user