From 279179e9995e072b8be0a32b3c74c4f71a537bbc Mon Sep 17 00:00:00 2001 From: sauron Date: Tue, 19 Aug 2025 01:23:41 +0900 Subject: [PATCH] commit 2025-08-19 01:23 utf8 convert ZCppMain/ZtCSimList.H --- ZCppMain/ZtCSimList.H | 188 ++++++++++++++++++++++++-------------------------- 1 file changed, 90 insertions(+), 98 deletions(-) diff --git a/ZCppMain/ZtCSimList.H b/ZCppMain/ZtCSimList.H index da47150..aa17a03 100644 --- a/ZCppMain/ZtCSimList.H +++ b/ZCppMain/ZtCSimList.H @@ -1,4 +1,4 @@ - + #ifndef __CSIMLIST_H__ #define __CSIMLIST_H__ @@ -57,7 +57,7 @@ namespace ZNsMain inline static void JoinLink(ZCLink* AP_PrevLink, ZCLink* AP_NextLink) { - // ũ · . + // 두 개의 링크를 연결 상태로 만든다. AP_PrevLink->mp_NextLink=AP_NextLink; }/* @@ -65,9 +65,9 @@ namespace ZNsMain inline static void MakeCircle(ZCLink* AP_HeadLink, ZCLink* AP_TailLink) { - // ó ũ Ͽ · . - // ̰ ZtCSimList class template Լ ߱ - // δ . + // 처음과 끝 링크를 연결하여 원형상태로 만든다. + // 이것은 ZtCSimList class template 과 멤버 함수를 맞추기 위한 것으로 + // 실제적으로는 별 쓸모는 없는 것 같다. AP_TailLink->mp_NextLink=AP_HeadLink; }/* @@ -84,7 +84,7 @@ namespace ZNsMain ZCLink(const ZCLink& rhs):mp_NextLink(0) { - // TType Կڴ ݵ public ־ Ѵ. + // TType 의 대입연산자는 반드시 public 영역에 있어야 한다. mo_Type=rhs.mo_Type; }/* @@ -148,8 +148,8 @@ namespace ZNsMain ZCLink* GetNextPtr(TTypSize AL_FarNum) // must AL_FarNum > 0 { - // Լ TTypSize ū object - // Լ ο ϰ Ƿ ʴ´. + // 이 멤버 함수는 TTypSize 가 용랑이 큰 object 라 할지라도 + // 이 함수 내부에서 값이 변하고 있으므로 참조로 받지 않는다. ZCLink* VP_TmpLink=this; @@ -164,14 +164,14 @@ namespace ZNsMain const ZCLink* const GetNextPtr(TTypSize AL_FarNum) const // or ZCLink const * const GetNextPtr(TTypSize AL_FarNum) const { - // TTypSize object AL_FarNum Լ ϰ Ƿ - // TTypSize ȵȴ. + // TTypSize 가 object 일 경우 AL_FarNum 의 값이 이 함수에서 변하고 있으므로 + // TTypSize 을 참조로 받으면 안된다. ZCLink* VP_TmpLink=const_cast(this); - // Լ ڿ const keyword پ ִµ ̰ this pointer ͷ ֵȴ. - // ٿ this ͸ ͷ ȯϿ. - // ZCLink* VP_TmpLink=const_castthis; ϸ g++ 2.96 + // 이 함수는 뒤에 const keyword 가 붙어 있는데 이것 때문에 this pointer 는 상수 포인터로 간주된다. + // 윗줄에서 이 this 포인터를 비상수 포인터로 먼저 형변환하였다. + // ZCLink* VP_TmpLink=const_castthis; 라 하면 g++ 2.96 에서는 에러 while(--AL_FarNum>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; @@ -331,8 +331,8 @@ namespace ZNsMain for(TTypSize VL_Count=2;VL_Count<=AL_LinkSize;++VL_Count) { - // VL_Count 2 AL_LinkSize-1 ȯѴ. - // ׷ AL_LinkSize ũ ڸ ִ. + // VL_Count 가 2 부터 시작함으로 AL_LinkSize-1 번 순환한다. + // 그래야지 AL_LinkSize 개의 링크를 자를 수 있다. mp_NoUseHeadLink=mp_NoUseHeadLink->mp_NextLink; mo_TypeInit(mp_NoUseHeadLink->mo_Type); @@ -387,14 +387,14 @@ namespace ZNsMain /*****************/ ) { // AL_FarNum > 0 - // AP_LinkOrgin ũ, - // AP_LinkOrgin AL_FarNum ŭ ũ Ͽ - // ó ũ ͸ APR_HeadCopy , - // ũ APR_TailCopy Ѵ. - // AP_LinkOrgin ũ ũ ϸ鼭 ũ ̴. - // AL_FarNum + 1 ũ . - // Լ ũ ϴ MakeLinkCopy() Լʹ ޸ - // ִ ml_UseSize ũ Ѵ. + // AP_LinkOrgin 링크부터, + // AP_LinkOrgin 에서 AL_FarNum 만큼 떨어진 링크까지를 복사하여 + // 복사생성된 처음 링크 포인터를 APR_HeadCopy 에, + // 마지막 링크를 APR_TailCopy 에 대입한다. + // AP_LinkOrgin 링크에서 그 다음 링크로 접근하면서 링크를 복사할 것이다. + // 따라서 총 AL_FarNum + 1 개의 링크가 만들어진다. + // 이 함수는 각 링크를 새로 생성하는 MakeLinkCopy() 함수와는 달리 + // 기존에 있는 ml_UseSize 개의 링크를 먼저 사용한다. #ifdef _REENTRANT_MUTEX ZNsMain::CMutexSmallLock VO_CMutexSmallLock(mo_Mutex); @@ -426,8 +426,8 @@ namespace ZNsMain APR_TailCopy=mp_NoUseHeadLink; - // κп mp_NoUseHeadLink ߷ ũ ȴ. - // ׷Ƿ ٽ ũ ʱȭѴ. + // 이 부분에서 mp_NoUseHeadLink 는 잘려나가는 마지막 링크가 된다. + // 그러므로 다시 다음 링크로 초기화한다. mp_NoUseHeadLink=mp_NoUseHeadLink->mp_NextLink; @@ -435,9 +435,9 @@ namespace ZNsMain { mp_NoUseTailLink=0; - // mp_NoUseHeadLink == 0 ε mp_NoUseTailLink !=0 ̶ - // ߿ ĩ ѷ ִ. - // ڵ带 ξ. + // mp_NoUseHeadLink == 0 인데 mp_NoUseTailLink !=0 이라면 + // 나중에 자칫 무한루프에 빠질 수 있다. + // 따라서 위 코드를 두었다. } //if(mp_NoUseHeadLink==0) } @@ -502,18 +502,18 @@ namespace ZNsMain ZCLink* VP_TempLink =APR_HeadLink; bool VB_IsHeapOver=false; - // bool VB_IsHeapOver new ڰ NULL ͸ ȯ - // true Թ޴´. ν heap overflow óѴ. - // bool VB_IsHeapOver ʰ - // Ʒ for ޸ ó ϴ ڵ带 - // for ȿ if ӿ for - // ִ. - // ׷ heap over ó ڵ带 - // for ٱ ̴. + // bool VB_IsHeapOver 은 new 연산자가 NULL 포인터를 반환했을 때 + // true 를 대입받는다. 이 값을 조사함으로써 heap overflow 를 처리한다. + // bool VB_IsHeapOver 변수를 두지 않고 + // 아래 for 문에서 직접 메모리 처리를 하는 코드를 둘 수 있으나 + // for 문 안에 if 문 속에서 또 for 문을 써야 함으로 + // 가독성이 떨어질 수가 있다. + // 그래서 heap over 에 대한 예외처리 코드를 + // for 문 바깥으로 빼려는 것이다. - while(--AL_MakeSize>0) // AL_MakeSize - 1 ȯ + while(--AL_MakeSize>0) // AL_MakeSize - 1 번 순환 { - // AL_MakeSize - 1 ȯ + // AL_MakeSize - 1 번 순환 VP_MakeLink = new ZCLink; @@ -532,15 +532,15 @@ namespace ZNsMain APR_TailLink = VP_TempLink; - // ޸𸮸 ̻ Ҵ ٸ - // ̹ VL_Count ũ . + // 메모리를 더 이상 할당할 수 없었다면 + // 이미 만들어진 VL_Count 개의 비원형 이중 링크를 지운다. if(VB_IsHeapOver==true) { VP_TempLink=APR_HeadLink; - // ּ APR_HeadLink ϳ - // heap Ǿ ִ. + // 이 시점에서 최소한 APR_HeadLink 하나는 + // heap 에 생성되어 있다. do ////// { @@ -569,11 +569,11 @@ namespace ZNsMain ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy /**************/ ) { - // AP_LinkOrgin ũ, - // AP_LinkOrgin AL_FarNum ŭ ũ Ͽ - // ó ũ ͸ APR_HeadCopy , - // ũ APR_TailCopy Ѵ. - // AL_FarNum > 0 , AL_FarNum + 1 ũ . + // AP_LinkOrgin 링크부터, + // AP_LinkOrgin 에서 AL_FarNum 만큼 떨어진 링크까지를 복사하여 + // 복사생성된 처음 링크 포인터를 APR_HeadCopy 에, + // 마지막 링크를 APR_TailCopy 에 대입한다. + // AL_FarNum > 0 , 총 AL_FarNum + 1 개의 링크가 만들어진다. #ifdef _REENTRANT_MUTEX @@ -628,8 +628,8 @@ namespace ZNsMain APR_TailCopy=VP_TempLink; - // ޸𸮸 ̻ Ҵ ٸ - // ̹ ũ . + // 메모리를 더 이상 할당할 수 없었다면 + // 이미 만들어진 비원형 이중 링크를 지운다. if(VB_IsHeapOver==true) { @@ -663,14 +663,14 @@ namespace ZNsMain AP_Link->mp_NextLink=0; - if(++ml_UseSize==1) // ml_UseSize 0 ϶ + if(++ml_UseSize==1) // ml_UseSize 이 0 일때 { mp_NoUseHeadLink = mp_NoUseTailLink = AP_Link ; } else { - // ο ũ mp_NoUseTailLink δ. + // 새로운 링크는 mp_NoUseTailLink 다음에 붙인다. mp_NoUseTailLink->mp_NextLink=AP_Link; mp_NoUseTailLink=AP_Link; @@ -692,7 +692,7 @@ namespace ZNsMain } else { - // ο ũ mp_NoUseTailLink δ. + // 새로운 링크는 mp_NoUseTailLink 다음에 붙인다. mp_NoUseTailLink->mp_NextLink=AP_HeadLink; mp_NoUseTailLink=AP_TailLink; @@ -860,15 +860,15 @@ namespace ZNsMain ) const /*###########################################################*/ { - // AP_CopyLink AP_CopyLink->GetNextPrePtr(AL_FarNum) - // ũ Ѵ. AL_FarNum + 1 ũ . + // AP_CopyLink 부터 AP_CopyLink->GetNextPrePtr(AL_FarNum) + // 링크까지를 복사한다. 총 AL_FarNum + 1 개의 링크가 만들어 진다. ZCLink* VP_HeadLink=0; ZCLink* VP_TailLink=0; GetCLinkHeap().GetManyLinkCopy ( - const_cast(AP_CopyLink), // g++ ݵ AP_CopyLink κ () . + const_cast(AP_CopyLink), // g++ 에서는 반드시 AP_CopyLink 부분을 () 로 묶어 줄 것. AL_FarNum , VP_HeadLink , VP_TailLink @@ -894,11 +894,11 @@ namespace ZNsMain ZCLink* CutLink(ZCLink* AP_PrevLink, ZCLink* AP_CutLink) { - // ZCLink* AP_PrevLink : Ϸ ũ ũ - // ZCLink* AP_CutLink : Ϸ ũ + // ZCLink* AP_PrevLink : 삭제하려는 링크의 이전 링크 + // ZCLink* AP_CutLink : 삭제하려는 링크 - // Ϸ ũ ġ Ƿ - // ũ Ѵٴ ȣ . + // 삭제하려는 링크의 위치값을 알 수 없으므로 + // 모든 링크를 삭제한다는 신호를 보낸다. OnDelete(mp_HeadLink, 1, mp_HeadLink->mp_PrevLink, ml_Size); @@ -971,9 +971,9 @@ namespace ZNsMain ) /*###################################################*/ { - // AP_CutHead Ϸ ũ ũ, AL_CutHeadPos ġ ,AP_CutHeadPrev ũ - // AP_CutTail Ϸ ũ ũ, AL_CutTailPos ġ - // AP_CutTail ũ Թ޾ƾ ¦ ȱ׷ ȴ. + // AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크, AL_CutHeadPos 는 그 위치 ,AP_CutHeadPrev 는 그 이전 링크 + // AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치 + // AP_CutTail 의 이전 링크도 대입받아야 짝아 맞을 것 같지만 안그래도 된다. OnDelete(AP_CutHead, AL_CutHeadPos, AP_CutTail, AL_CutTailPos); @@ -981,7 +981,7 @@ namespace ZNsMain { if(AP_CutTail==mp_TailLink) { - // ũ . + // 모든 링크를 삭제할 때. mp_HeadLink=0; mp_TailLink=0; @@ -992,12 +992,12 @@ namespace ZNsMain } //endif } - else if(AP_CutTail==mp_TailLink) // ߶󳻷 ũ ũ . + else if(AP_CutTail==mp_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때. { mp_TailLink=AP_CutHeadPrev; mp_TailLink->mp_NextLink=0; } - else // ߶󳻷 ũ ó ũ . + else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때. { AP_CutHeadPrev->mp_NextLink=AP_CutTail->mp_NextLink; } @@ -1062,8 +1062,8 @@ namespace ZNsMain ZCLink* AP_CutTail, TTypSize AL_CutTailPos /*////////////////*/ ) { - // Ŭ ߰ Ÿ ũ ؾ ϴ ̶ - // Լ Ͽ Ѵ. + // 상속클래스에서 추가된 멤버 데이타가 링크의 삭제시 변해야 하는 값이라면 + // 이 함수를 재정의 하여 값을 조종한다. } /* virtual void OnDelete( ZCLink* AP_CutHead,TTypSize AL_CutHeadPos, @@ -1071,13 +1071,13 @@ namespace ZNsMain //////////////////// ) */ - virtual void OnInsert( TTypSize AL_InsertPos , // ԵǴ ġ - TTypSize AL_InsertSize, // ԵǴ ũ - ZCLink* AP_HeadInsert // ԵǴ ù° ũ + virtual void OnInsert( TTypSize AL_InsertPos , // 삽입되는 위치 + TTypSize AL_InsertSize, // 삽입되는 링크의 갯수 + ZCLink* AP_HeadInsert // 삽입되는 첫번째 링크의 포인터 /*////////////////*/ ) { - // Ŭ ߰ Ÿ ũ Խ ؾ ϴ ̶ - // Լ Ͽ Ѵ. + // 상속클래스에서 추가된 멤버 데이타가 링크의 삽입시 변해야 하는 값이라면 + // 이 함수를 재정의 하여 값을 조종한다. } /* virtual void OnInsert( TTypSize AL_InsertPos , @@ -1490,7 +1490,7 @@ namespace ZNsMain fileout.close(); exit(1); } - else if(Find(AP_Link)!=0) // AP_Link this Ű ḮƮ ϴ ũΰ. + else if(Find(AP_Link)!=0) // AP_Link 가 this 가 가리키는 연결리스트에 존재하는 링크인가. { std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); fileout<<"Error In 'void JoinHead(ZCLink* AP_Link)' : The list that parameter link belongs to is now list"<ml_Size) AL_DelSize=ml_Size; @@ -1889,8 +1889,8 @@ namespace ZNsMain /*//////////////////////////////////////////////////////////////////////////////////////// - FindData(TTypeArg, ~) Լ ٸ, TypeCArg const TType& ǵǾ ִ , - const TType& ؼ ã⸦ ְ, TType& ؼ ã⸦ . + ■ FindData(TTypeArg, ~) 함수가 없다면, TypeCArg 이 const TType& 으로 정의되어 있는 경우, + const TType& 에 대해서만 찾기를 수행할 수 있고, TType& 에 대해서는 찾기를 수행할 수 없다. -- 2010-05-29 21:31:00 @@ -1976,7 +1976,7 @@ namespace ZNsMain // ***************************************************************** // - // *********************** Functor κ *********************** // + // *********************** Functor 부분 시작 *********************** // // ***************************************************************** // @@ -2053,15 +2053,15 @@ namespace ZNsMain template void IterEleCutIf(TFunctor AO_Functor) { - // ũ Ͽ AO_Functor(ZCLink*) Լ Ѵ. - // Լ ũ ȸϸ鼭 ֵ ϱ ؼ. + // 각 링크에 대하여 AO_Functor(ZCLink*) 함수를 실행한다. + // 이 함수를 설계한 이유는 각 링크를 순회하면서 삭제할 수 있도록 하기 위해서다. ZCLink* VP_TempLink =mp_HeadLink ; ZCLink* VP_TempPrev =0 ; ZCLink* VP_TempBefore=VP_TempLink ; - // ȸ ߿ ũ Ǹ 尹 Ƿ - // ml_Size ٸ ´. + // 순회 도중에 링크가 삭제되면 노드갯수가 변할 수 있으므로 + // ml_Size 를 다른 변수에 담아 놓는다. TTypSize VL_Count=ml_Size ; TTypSize VL_Index=1 ; @@ -2101,10 +2101,10 @@ namespace ZNsMain ) /*########################################*/ { - /* AP_StdLink AL_WorkDistance ŭ ̵ϸ鼭 - * ZCLink Ͽ AO_Functor() Լ Ѵ.( Ƚ (AL_WorkDistance)밪+1) - * AL_WorkDistance>=0 ̸ ̵ϰ - * AL_WorkDistance <0 ̸ ̵Ѵ. + /* AP_StdLink 부터 AL_WorkDistance 만큼 이동하면서 + * 각 ZCLink 에 대하여 AO_Functor() 함수를 수행한다.(총 수행 횟수는 (AL_WorkDistance)절대값+1) + * AL_WorkDistance>=0 이면 다음으로 이동하고 + * AL_WorkDistance <0 이면 이전으로 이동한다. */ #ifdef _DEBUG @@ -2145,23 +2145,23 @@ namespace ZNsMain // *************************************************************** - // *********************** Functor κ *********************** + // *********************** Functor 부분 끝 *********************** // *************************************************************** /*/////////////////////////////////////////////////////////////////////////// - Ҹ ȸ ִ ڷ , Ʈ 迭 Ŭ + ■ 순차적으로 각 원소를 순회할 수 있는 자료 구조, 즉 리스트나 배열 클래스는 MoveNextIter(), MovePrevIter() - ߴ. stl ݺڴ ʹ Ϲȭϴٺ, - ߻ . + 멤버를 갖는 것으로 정했다. stl 의 반복자는 너무 일반화하다보니, 성능 상의 + 제약이 발생한 것 같다. -- 2011-06-07 20:25:00 - GetDataInIter() ߰ߴ. + GetDataInIter() 를 추가했다. -- 2011-06-12 17:12:00 @@ -2324,12 +2324,4 @@ namespace ZNsMain namespace ZNsMain*/ - -#undef _TYPE_ARG_ -#undef _TYPENAME_CSIM_LIST_ -#undef _TYPENAME_ARGUMENT_ -#undef _TYPENAME_ARGUMENT_DEFAULT_ - - - #endif //__CSIMLIST_H__