From a407d97d70c40c567cf606ef8ea4c7d95a289852 Mon Sep 17 00:00:00 2001 From: sauron Date: Sat, 27 Sep 2025 08:52:19 +0900 Subject: [PATCH] commit 2025-09-27 08:52 bug fix in DeleteHeap(TypeSize AI_DelCnt) : ZCppMain/ZtCObjList.H --- ZCppMain/ZtCObjList.H | 13 +++++++++---- ZCppMain/ZtCSimList.H | 31 +++++++++++++++++++++---------- ZCppMainTest/ZtCObjList_000.cpp | 6 ++++++ ZCppMainTest/ZtCSimList_000.cpp | 6 ++++++ 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index 67b7ccb..2f90bc7 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -156,7 +156,7 @@ namespace ZNsMain if(VP_Temp==mp_NoUseTail) { break; } - VP_Temp=VP_Temp->GetNexPtr() ; + VP_Temp=VP_Temp->GetNextPtr() ; }/* while(true)*/ @@ -340,6 +340,7 @@ namespace ZNsMain APR_TailLink = VP_TempLink; + // 메모리를 더 이상 할당할 수 없었다면 // 이미 만들어진 VL_Count 개의 비원형 이중 링크를 지운다. @@ -626,6 +627,9 @@ namespace ZNsMain ml_AllSize -= AI_DelCnt; ml_UseSize -= AI_DelCnt; + if(ml_UseSize<1) + mp_NoUseHead = mp_NoUseTail = 0 ; + return AI_DelCnt; }/* TypeSize DeleteHeap(TypeSize AI_DelCnt)*/ @@ -1085,7 +1089,7 @@ namespace ZNsMain } else { - ZCLink* VP_TailLink=AO_CObjList.mp_HeadLink->mp_PrevLink; + ZCLink* VP_TailLink = AO_CObjList.mp_HeadLink->mp_PrevLink; ZCLink::MakeCircle(AO_CObjList.mp_HeadLink, mp_HeadLink->mp_PrevLink); ZCLink::JoinLink (VP_TailLink , mp_HeadLink ); @@ -1403,7 +1407,7 @@ namespace ZNsMain { return DeleteAll(); } - else if(ml_Size<=rhs.ml_Size) + if(ml_Size<=rhs.ml_Size) { AddDefault(rhs.ml_Size-ml_Size, ml_Size+1); } @@ -1863,7 +1867,7 @@ namespace ZNsMain if(CB_IsTrue) return 0; ////////////////// ZtCObjList VO_StoreList; MakeDefault - (AL_DefaultSize, VO_StoreList); + ( AL_DefaultSize, RR(VO_StoreList) ) ; ZCLink* VP_HeadLink= VO_StoreList.mp_HeadLink; @@ -2337,6 +2341,7 @@ namespace ZNsMain }/* template void IterElement(TFunctor AO_Functor) */ + template void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) { diff --git a/ZCppMain/ZtCSimList.H b/ZCppMain/ZtCSimList.H index c85e5f0..4be7b91 100644 --- a/ZCppMain/ZtCSimList.H +++ b/ZCppMain/ZtCSimList.H @@ -628,6 +628,9 @@ namespace ZNsMain ml_AllSize -= AI_DelCnt; ml_UseSize -= AI_DelCnt; + if(ml_UseSize<1) + mp_NoUseHead = mp_NoUseTail = 0 ; + return AI_DelCnt; }/* TypeSize DeleteHeap(TypeSize AI_DelCnt)*/ @@ -1025,6 +1028,8 @@ namespace ZNsMain { // AP_CopyLink 부터 AP_CopyLink->GetNextPrePtr(AL_FarNum) // 링크까지를 복사한다. 총 AL_FarNum + 1 개의 링크가 만들어진다. + // + // ARR_StoreList.size() 는 0 이어야 한다. ZCLink* VP_HeadLink=0; ZCLink* VP_TailLink=0; @@ -1038,7 +1043,7 @@ namespace ZNsMain ); ////////////////////////////// - VP_TailLink->mp_NextLink=0; + ZCLink::MakeCircle(VP_HeadLink, VP_TailLink); ARR_StoreList.mp_HeadLink= VP_HeadLink ; ARR_StoreList.mp_TailLink= VP_TailLink ; @@ -1263,13 +1268,17 @@ namespace ZNsMain { DeleteAll(); } if(rhs.ml_Size==0 ){return *this;} + #if(_CODE_NEW_) + CopyLink(rhs.mp_HeadLink, rhs.ml_Size-1, *this); return *this; + #else ZtCSimList VO_StoreList; JoinHead /////////////////////////// ( - CopyLink(rhs.mp_HeadLink, rhs.ml_Size-1 ,VO_StoreList) + CopyLink(rhs.mp_HeadLink, rhs.ml_Size-1, VO_StoreList) ); return *this; ////////////////////// + #endif }/* ZtCSimList& operator=(const ZtCSimList& rhs)*/ @@ -2136,6 +2145,7 @@ namespace ZNsMain inline bool IsEmpty() const*/ + // ***************************************************************** // // *********************** Functor 부분 시작 *********************** // @@ -2207,7 +2217,7 @@ namespace ZNsMain __for0(TTypSize, i, ml_Size)*/ }/* template - + void IterElement (TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2) */ @@ -2256,13 +2266,13 @@ namespace ZNsMain template void IterEleCutIf(TFunctor AO_Functor) */ - template void IterEleLink + template void IterEleLink //////////////////////// ( ZCLink* AP_StdLink , TTypSize AL_WorkDistance, TFunctor AO_Functor ) - /*########################################*/ + /*#################################################################*/ { /* AP_StdLink 부터 AL_WorkDistance 만큼 이동하면서 * 각 ZCLink 에 대하여 AO_Functor() 함수를 수행한다.(총 수행 횟수는 (AL_WorkDistance)절대값+1) @@ -2297,20 +2307,21 @@ namespace ZNsMain }/* for(TTypSize VL_Loop=0; VL_Loop<=AL_WorkDistance; ++VL_Loop)*/ }/* - void IterEleLink ///////////////// + void IterEleLink //////////////////////////////////////////////////// ( ZCLink* AP_StdLink , TTypSize AL_WorkDistance, TFunctor AO_Functor ) - ////////////////////////////////*/ + /*#################################################################*/ - // *************************************************************** + // ****************************************************************** - // *********************** Functor 부분 끝 *********************** + // ************************* Functor 부분 끝 ************************ + + // ****************************************************************** - // *************************************************************** /*/////////////////////////////////////////////////////////////////////////// diff --git a/ZCppMainTest/ZtCObjList_000.cpp b/ZCppMainTest/ZtCObjList_000.cpp index 32a05c8..3c24878 100644 --- a/ZCppMainTest/ZtCObjList_000.cpp +++ b/ZCppMainTest/ZtCObjList_000.cpp @@ -182,6 +182,12 @@ namespace ZNsMain cout<<"# list11 IterElemRev ####" <