commit 2025-08-17 02:54 utf8 변환 : some files

This commit is contained in:
2025-08-17 02:54:18 +09:00
parent 95527d0544
commit 1dd4a87e75
4 changed files with 481 additions and 481 deletions

View File

@ -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 ///////////////////////////////////
< <

View File

@ -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("&" ,"&amp;" ). Replace("<" ,"&lt;" ). Replace("&" ,"&amp;" ). Replace("<" ,"&lt;" ).
@ -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("&" ,"&amp;" ). Replace("<" ,"&lt;" ). Replace("&" ,"&amp;" ). Replace("<" ,"&lt;" ).

File diff suppressed because it is too large Load Diff

View File

@ -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
//////////////////////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////////////////////*/