From 8890462b1b14245c3e54f58fdb3aaf0066d46f5d Mon Sep 17 00:00:00 2001 From: sauron Date: Sun, 5 Oct 2025 15:31:38 +0900 Subject: [PATCH] commit 2025-10-05 15:31 edit CutLink() argument : ZCppMain/ZtCObjList.H --- ZCppMain/ZtCObjList.H | 130 +++++++++++++++++----------------------- ZCppMainTest/ZtCObjList_000.cpp | 46 ++++++++++---- 2 files changed, 90 insertions(+), 86 deletions(-) diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index fe2ae47..e1fc0ce 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -1214,8 +1214,9 @@ namespace ZNsMain ZtCObjList& CutLink /*########################################################*/ ( - ZCLink* AP_CutHead, TypeSize AL_CutHeadPos, - ZCLink* AP_CutTail, TypeSize AL_CutTailPos, + ZCLink* AP_CutHead , + ZCLink* AP_CutTail , + TypeSize AL_CutSize , ZtCObjList& ARR_StoreList ) /*#############################################################################*/ @@ -1224,32 +1225,22 @@ namespace ZNsMain // AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치 // 따라서 AL_CutHeadPos <= AL_CutTailPos - #ifdef _DEBUG + if(this==&ARR_StoreList) return *this ; - if(AL_CutHeadPos>AL_CutTailPos) + if(ml_LinkSize<1) return ARR_StoreList; + + ZCLink* VP_TailLink = mp_HeadLink->mp_PrevLink; + + if(AP_CutHead==mp_HeadLink && AP_CutTail==VP_TailLink) { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<AL_CutTailPos"<AL_CutTailPos)*/ - - #endif // _DEBUG - - if(AL_CutHeadPos==1 && AL_CutTailPos==ml_LinkSize) // 모든 링크를 삭제할 때. - { - mp_HeadLink=0; + mp_HeadLink=0; // 모든 링크를 삭제할 때. } - else if(AL_CutHeadPos==1) // 잘라내려는 링크가 처음 링크를 포함할 때. + else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때. { - ZCLink::MakeRing(mp_HeadLink=AP_CutTail->mp_NextLink, AP_CutHead->mp_PrevLink); + ZCLink::MakeRing + (mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink); } - else if(AL_CutTailPos==ml_LinkSize) // 잘라내려는 링크가 끝 링크를 포함할 때. + else if(AP_CutTail==VP_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때. { ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink); } @@ -1259,13 +1250,8 @@ namespace ZNsMain }/* else*/ - TypeSize VL_CutSize = AL_CutTailPos-AL_CutHeadPos+1 ; - /*++++*/ ml_LinkSize -= VL_CutSize ; - // AP_CutHead 과 AP_CutTail 을 연결하여 - // 이중 원형 연결리스트가 되도록 한다. - - ZCLink::MakeRing(AP_CutHead, AP_CutTail); + ml_LinkSize -= AL_CutSize; ZCLink::MakeRing(AP_CutHead, AP_CutTail); #ifdef _DEBUG @@ -1274,8 +1260,8 @@ namespace ZNsMain { std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); fileout<AL_CutTailPos) + ZCLink* VP_TailLink = mp_HeadLink->mp_PrevLink; + + if(AP_CutHead==mp_HeadLink && AP_CutTail==VP_TailLink) { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<AL_CutTailPos"<AL_CutTailPos)*/ - - #endif // _DEBUG - - if(AL_CutHeadPos==1 && AL_CutTailPos==ml_LinkSize) // 모든 링크를 삭제할 때. - { - mp_HeadLink=0; + mp_HeadLink=0; // 모든 링크를 삭제할 때. } - else if(AL_CutHeadPos==1) // 잘라내려는 링크가 처음 링크를 포함할 때. + else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때. { - ZCLink::MakeRing(mp_HeadLink=AP_CutTail->mp_NextLink, AP_CutHead->mp_PrevLink); + ZCLink::MakeRing + (mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink); } - else if(AL_CutTailPos==ml_LinkSize) // 잘라내려는 링크가 끝 링크를 포함할 때. + else if(AP_CutTail==VP_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때. { ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink); } else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때. { - ZCLink::JoinLink(AP_CutHead ->mp_PrevLink, AP_CutTail->mp_NextLink); + ZCLink::JoinLink(AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink); }/* else*/ - TypeSize VL_CutSize = AL_CutTailPos-AL_CutHeadPos+1 ; - /*++++*/ ml_LinkSize -= VL_CutSize ; + + ml_LinkSize -= AL_CutSize; /* 여기까지는 - CutLink(ZCLink*, TypeSize, ZCLink*, TypeSize, ZtCObjList&) + CutLink(ZCLink*, ZCLink*, TypeSize, ZtCObjList&) 와 같다. 이후에 CutLink() 에서는 ARR_StoreList 가 비어 있는 것으로 간주하지만, CutLinkOut() 는 ARR_StoreList 이 비어 있지 않은 경우에 @@ -2172,15 +2149,15 @@ namespace ZNsMain ZCLink::MakeRing(AP_CutHead, AP_CutTail); - ARR_StoreList.mp_HeadLink = AP_CutHead ; - ARR_StoreList.ml_LinkSize = AL_CutTailPos-AL_CutHeadPos+1; + ARR_StoreList.mp_HeadLink = AP_CutHead ; + ARR_StoreList.ml_LinkSize = AL_CutSize ; } else { ZCLink::JoinLink(ARR_StoreList.mp_HeadLink->mp_PrevLink, AP_CutHead); ZCLink::MakeRing(ARR_StoreList.mp_HeadLink , AP_CutTail); - ARR_StoreList.ml_LinkSize += AL_CutTailPos-AL_CutHeadPos+1 ; + ARR_StoreList.ml_LinkSize += AL_CutSize ; }/* else*/ @@ -2188,8 +2165,9 @@ namespace ZNsMain }/* ZtCObjList& CutLinkOut ######################################################### ( - ZCLink* AP_CutHead, TypeSize AL_CutHeadPos, - ZCLink* AP_CutTail, TypeSize AL_CutTailPos, + ZCLink* AP_CutHead , + ZCLink* AP_CutTail , + TypeSize AL_CutSize , ZtCObjList& ARR_StoreList ) ###############################################################################*/ @@ -2934,11 +2912,13 @@ namespace ZNsMain { ZtCObjList VO_CObjList; - CutLink( AR_CIterator1.GetLink(), AR_CIterator1.GetPos(), - AR_CIterator2.GetLink(), AR_CIterator2.GetPos(), RR(VO_CObjList) - /****/ ); - - VO_CObjList.DeleteAll(); + CutLink ////////////////////////////////////////////////// + ( + AR_CIterator1.GetLink(), AR_CIterator2.GetLink(), + AR_CIterator2.GetPos () - AR_CIterator1.GetPos (), + RR(VO_CObjList) + ) + .DeleteAll(); //////////////////////////////////////////// }/* void erase(ZCIterator& AR_CIterator1, ZCIterator& AR_CIterator2)*/ diff --git a/ZCppMainTest/ZtCObjList_000.cpp b/ZCppMainTest/ZtCObjList_000.cpp index b7ed6d8..8da9d29 100644 --- a/ZCppMainTest/ZtCObjList_000.cpp +++ b/ZCppMainTest/ZtCObjList_000.cpp @@ -60,6 +60,27 @@ namespace ZNsMain static void ShowNode2(ZCLink2& AR_CLink)*/ + static void ShowNode1_2(ZCLink1& AR_CLink, int& ARRI_CallCnt) + { + ++ARRI_CallCnt; + + cout<