From 3259618f1e0d194e5e7fb669693671505d01b252 Mon Sep 17 00:00:00 2001 From: sauron Date: Sun, 12 Oct 2025 12:50:27 +0900 Subject: [PATCH] commit 2025-10-12 08:03 is coding ZtCBaseList::CutLinkRangeIn() in ZCppMain/ZMainHead.H --- ZCppMain/ZMainHead.H | 372 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 367 insertions(+), 5 deletions(-) diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index 66d8dd7..f24bcfb 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -6607,10 +6607,15 @@ namespace ZNsMain AP_RhsStd==0 이면 맨 앞에 삽입한다. -- 2025-10-06 09:16 - ■ bool AB_After=true 추가. AB_After==false 이면, rhs 의 - AP_RhsStd 의 앞에 삽입한다. + ■ bool AB_After=true 추가. - AP_RhsStd==0 이면 맨 뒤에 삽입한다. -- 2025-10-07 08:36 + AB_After==true 이면, rhs 의 AP_RhsStd 의 뒤에 삽입한다. + AB_After==false 이면, rhs 의 AP_RhsStd 의 앞에 삽입한다. + + AB_After==true && AP_RhsStd==0 이면 맨 앞에 삽입한다. + AB_After==false && AP_RhsStd==0 이면 맨 뒤에 삽입한다. + + -- 2025-10-07 08:36 ///////////////////////////////////////////////////////////*/ @@ -6705,7 +6710,365 @@ namespace ZNsMain ) #######################################################################*/ - /*private :*/ + + TypeThis& CutLinkRangeIn /////////////////////////////////////////////// + ( + ZCLink& AR_CutHead , + ZCLink& AR_CutTail , + TypeSize AL_CutSize , + ZCLink* AP_NowStd , + bool AB_After=true + ) + /*#####################################################################*/ + { + /*/////////////////////////////////////////////////////////// + + ■ AR_CutHead 는 삭제하려는 링크의 범위의 앞의 링크. + AR_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크. + + AR_CutHead 의 앞과 AR_CutTail 의 뒤에서 연결 상태를 끊고, + + AB_After==true 이면, rhs 의 AP_NowStd 의 뒤에 + AB_After==false 이면, rhs 의 AP_NowStd 의 앞에 + + 연결한다. + + AB_After==true && AP_NowStd==0 이면 맨 앞에 + AB_After==false && AP_NowStd==0 이면 맨 뒤에 + + 연결한다. -- 2025-10-12 08:19 + + ///////////////////////////////////////////////////////////*/ + + if(ml_LinkSize<1){return *this;} + + if(AL_CutSize>=ml_LinkSize){return *this;} + + if(&AR_CutHead==mp_HeadLink && &AR_CutTail==mp_TailLink) + { return *this; } + if(&AR_CutHead==AP_NowStd || &AR_CutTail==AP_NowStd ) + { return *this; } + /******************************************************/ + + if (AB_After && AP_NowStd==0) // 맨 앞에 삽입. + { + if(&AR_CutHead==mp_HeadLink) + { /* nothing to do.*/ } + else if(mp_HeadLink->mp_NextLink==&AR_CutHead) + { + // mp_HeadLink - &AR_CutHead ~ &AR_CutTail + + if(&AR_CutTail==mp_TailLink) + { + // 현재 : mp_HeadLink - &AR_CutHead ~ &AR_CutTail(=mp_TailLink) + // 이후 : &AR_CutHead ~ &AR_CutTail - mp_HeadLink + + ZCLink::JoinLink(&AR_CutTail, mp_HeadLink); + ZCLink::MakeRing(&AR_CutHead, mp_HeadLink); + + mp_TailLink = mp_HeadLink ; + mp_HeadLink = &AR_CutHead ; + } + else + { + // 현재 : mp_HeadLink - &AR_CutHead ~ &AR_CutTail - VP_CutNext + // 이후 : &AR_CutHead ~ &AR_CutTail - mp_HeadLink - VP_CutNext + + ZCLink* VP_CutNext = AR_CutTail.mp_NextLink ; + + ZCLink::JoinLink(&AR_CutTail, mp_HeadLink); + ZCLink::JoinLink(mp_HeadLink, VP_CutNext ); + ZCLink::MakeRing(&AR_CutHead, mp_TailLink); + + mp_HeadLink = &AR_CutHead ; + } + }/* + else if(mp_HeadLink->mp_NextLink==&AR_CutHead)*/ + + /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + mp_HeadLink ~ &AR_CutHead ~ &AR_CutTail + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + else + { + if(&AR_CutTail==mp_TailLink) + { + /*//////////////////////////////////////////// + + ■ 현재 : + mp_HeadLink ~ VP_CutPrev - + &AR_CutHead - &AR_CutTail(mp_TailLink) + 이후 : + &AR_CutHead - &AR_CutTail - + mp_HeadLink ~ VP_CutPrev + + ////////////////////////////////////////////*/ + + ZCLink* VP_CutPrev = AR_CutHead.mp_PrevLink ; + + ZCLink::JoinLink(&AR_CutTail, mp_HeadLink); + ZCLink::MakeRing(&AR_CutHead, VP_CutPrev ); + + mp_HeadLink = &AR_CutHead ; + mp_TailLink = VP_CutPrev ; + }/* + if(&AR_CutTail==mp_TailLink)*/ + + else /*************************************************/ + { + /*//////////////////////////////////////////// + + ■ 현재 : + mp_HeadLink ~ VP_CutPrev - + &AR_CutHead - &AR_CutTail - VP_CutNext + 이후 : + &AR_CutHead - &AR_CutTail - + mp_HeadLink ~ VP_CutPrev - VP_CutNext + + ////////////////////////////////////////////*/ + + ZCLink* VP_CutNext = AR_CutTail.mp_NextLink ; + ZCLink* VP_CutPrev = AR_CutHead.mp_PrevLink ; + + ZCLink::JoinLink(&AR_CutTail, mp_HeadLink); + ZCLink::JoinLink(&VP_CutPrev, VP_CutNext ); + ZCLink::MakeRing(&AR_CutHead, mp_TailLink); + + mp_HeadLink = &AR_CutHead ; + }/* + else **************************************************/ + } + /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + mp_HeadLink ~ &AR_CutHead ~ &AR_CutTail + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + + }/* + if (AB_After && AP_NowStd==0) // 맨 앞에 삽입.*/ + + else if(!AB_After && AP_NowStd==0) // 맨 뒤에 삽입. + { + if(&AR_CutTail==mp_TailLink) + { /* nothing to do.*/ } + else if(mp_TailLink->mp_PrevLink==&AR_CutTail) + { + // &AR_CutHead ~ &AR_CutTail - mp_TailLink + + if(&AR_CutHead==mp_HeadLink) + { + // 현재 : &AR_CutHead(=mp_HeadLink) ~ &AR_CutTail - mp_TailLink + // 이후 : mp_TailLink - &AR_CutHead ~ &AR_CutTail + + ZCLink::JoinLink(mp_TailLink, &AR_CutHead); + ZCLink::MakeRing(mp_TailLink, &AR_CutTail); + + mp_HeadLink = mp_TailLink ; + mp_TailLink = &AR_CutTail ; + } + else + { + // 현재 : VP_CutPrev - &AR_CutHead ~ &AR_CutTail - mp_TailLink + // 이후 : VP_CutPrev - mp_TailLink - &AR_CutHead ~ &AR_CutTail + + ZCLink* VP_CutPrev = AR_CutHead.mp_PrevLink ; + + ZCLink::JoinLink(VP_CutPrev, mp_TailLink); + ZCLink::JoinLink(mp_TailLink, &AR_CutHead); + ZCLink::MakeRing(mp_HeadLink, &AR_CutTail); + + mp_TailLink = &AR_CutTail ; + } + }/* + else if(mp_TailLink->mp_PrevLink==&AR_CutTail)*/ + + /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + &AR_CutHead ~ &AR_CutTail ~ mp_TailLink + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + else + { + if(&AR_CutHead==mp_HeadLink) + { + /*//////////////////////////////////////////// + + ■ 현재 : + (mp_HeadLink=) + &AR_CutHead ~ &AR_CutTail - VP_CutNext ~ mp_TailLink + 이후 : + VP_CutNext ~ mp_TailLink - &AR_CutHead ~ &AR_CutTail + + ////////////////////////////////////////////*/ + + ZCLink* VP_CutNext = AR_CutTail.mp_NextLink ; + + ZCLink::JoinLink(mp_TailLink, &AR_CutHead); + ZCLink::MakeRing(VP_CutNext , &AR_CutTail); + + mp_HeadLink = VP_CutNext ; + mp_TailLink = &AR_CutTail ; + }/* + if(&AR_CutHead==mp_HeadlLink)*/ + + else /*************************************************/ + { + /*//////////////////////////////////////////// + + ■ 현재 : + VP_CutPrev - &AR_CutHead ~ + &AR_CutTail - VP_CutNext ~ mp_TailLink + 이후 : + &VP_CutPrev - VP_CutNext ~ + mp_TailLink - &AR_CutHead ~ &AR_CutTail + + ////////////////////////////////////////////*/ + + ZCLink* VP_CutNext = AR_CutTail.mp_NextLink ; + ZCLink* VP_CutPrev = AR_CutHead.mp_PrevLink ; + + ZCLink::JoinLink(&VP_CutPrev, VP_CutNext ); + ZCLink::JoinLink(mp_TailLink, &AR_CutHead); + ZCLink::MakeRing(&AR_CutHead, &AR_CutTail); + + mp_TailLink = &AR_CutTail ; + }/* + else **************************************************/ + } + /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + &AR_CutHead ~ &AR_CutTail ~ mp_TailLink + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + + }/* + else if(!AB_After && AP_NowStd==0) // 맨 뒤에 삽입.*/ + + + /*================================================================= + AP_NowStd!=0 : AP_NowStd 의 앞이나 뒤에 삽입. + =================================================================*/ + else if(AR_CutTail.mp_NextLink==AP_NowStd) + { + // &AR_CutHead ~ &AR_CutTail - AP_NowStd + + if(!AB_After) + { /* nothing to do*/ } + else if(&AR_CutHead==mp_HeadLink) + { + /************************************************************* + + ■ mp_HeadLink==&AR_CutHead && mp_TailLink!=mp_TailLink + + 현재 : &AR_CutHead ~ &AR_CutTail - AP_NowStd - VP_StdNext ~ mp_TailLink + 이후 : AP_NowStd - &AR_CutHead ~ &AR_CutTail- VP_StdNext ~ mp_TailLink + + *************************************************************/ + + ZCLink* VP_StdNext = AP_NowStd->mp_NextLink; + + ZCLink::JoinLink(AP_NowStd , &AR_CutHead ); + ZCLink::JoinLink(&AR_CutTail, VP_StdNext ); + ZCLink::MakeRing(AP_NowStd , mp_TailLink); + + mp_HeadLink = AP_NowStd ; + }/* + else if(&AR_CutHead==mp_HeadLink)*/ + else if(&AR_CutTail==mp_TailLink) + { /* nothing to do */ } + /*******************************/ + else + { + /************************************************************* + + ■ mp_HeadLink!=&AR_CutHead && mp_TailLink!=&AR_CutTail + + 현재 : VP_CutPrev - &AR_CutHead ~ &AR_CutTail - AP_NowStd - VP_StdNext + 이후 : VP_CutPrev - AP_NowStd - &AR_CutHead ~ &AR_CutTail- VP_StdNext + + *************************************************************/ + + ZCLink* VP_CutPrev = AR_CutHead.mp_PrevLink; + ZCLink* VP_StdNext = AP_NowStd->mp_NextLink; + + ZCLink::JoinLink(VP_CutPrev , AP_NowStd ); + ZCLink::JoinLink(AP_NowStd , &AR_CutHead); + ZCLink::JoinLink(&AR_CutTail, VP_StdNext ); + } + }/* + else if(AR_CutTail.mp_NextLink==AP_NowStd)*/ + + else if(AR_CutHead.mp_PrevLink==AP_NowStd) + { + // AP_NowStd - &AR_CutHead ~ &AR_CutTail + + if(AB_After) + { /* nothing to do*/ } + else if(&AR_CutTail==mp_TailLink) + { + if(AP_NowStd==mp_HeadLink) + { + /************************************************************* + + ■ AP_NowStd==mp_HeadLink && &AR_CutTail==mp_TailLink + + 현재 : AP_NowStd - &AR_CutHead ~ &AR_CutTail + 이후 : &AR_CutHead ~ &AR_CutTail - AP_NowStd + + *************************************************************/ + + ZCLink::JoinLink(&AR_CutTail, AP_NowStd); + ZCLink::MakeRing(&AR_CutHead, AP_NowStd); + + mp_HeadLink = &AR_CutHead; + mp_TailLink = AP_NowStd ; + } + else + { + /************************************************************* + + ■ &AR_CutTail==mp_TailLink + + 현재 : VP_StdPrev - AP_NowStd - &AR_CutHead ~ &AR_CutTail + 이후 : VP_StdPrev - &AR_CutHead ~ &AR_CutTail - AP_NowStd + + *************************************************************/ + + ZCLink* VP_StdPrev = AP_NowStd->mp_PrevLink ; + + ZCLink::JoinLink(VP_StdPrev , &AR_CutHead); + ZCLink::JoinLink(&AR_CutTail, AP_NowStd ); + ZCLink::MakeRing(mp_HeadLink, AP_NowStd ); + + mp_TailLink = AP_NowStd ; + } + }/* + else if(&AR_CutHead==mp_HeadLink)*/ + + + // add codes + + + }/* + else if(AR_CutTail.mp_NextLink==AP_NowStd)*/ + /*================================================================= + AP_RhsStd!=0 : AP_RhsStd 의 앞이나 뒤에 삽입. + =================================================================*/ + + + + // add codes + + + + return *this; + }/* + TypeThis& CutLinkRangeIn /////////////////////////////////////////////// + ( + ZCLink& AR_CutHead , + ZCLink& AR_CutTail , + TypeSize AL_CutSize , + ZCLink* AP_RhsStd , + bool AB_After=true + ) + #######################################################################*/ + + + private : + /***************************************************************************/ public : ZtCBaseList() @@ -7480,7 +7843,6 @@ namespace ZNsMain - TypeThis& CopyThis(TypeThis& ARR_Rhs) const { // *this 를 복사해서, ARR_Rhs 의 끝에 연결한다.