diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index 755f750..19afd0a 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -5308,6 +5308,8 @@ namespace ZNsMain typedef ZtCObjOpt ZCLinkOpt; typedef ZtCObjOpt ZCDataOpt; public: + typedef ZtCBaseList TypeThis ; + public: typedef ZNsType::ZtCTypeNowCRTP /////////////////////////////////////// < @@ -5831,7 +5833,8 @@ namespace ZNsMain ZCLink& AR_CutTail , TypeSize AL_CutSize , ZtCBaseList& rhs , - ZCLink* AP_RhsStd + ZCLink* AP_RhsStd , + bool AB_After=true ) /*#####################################################################*/ { @@ -5841,8 +5844,14 @@ namespace ZNsMain AR_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크. AR_CutHead 의 앞과 AR_CutTail 의 뒤에서 연결 상태를 끊고, - rhs 의 AP_RhsStd 의 뒤에 삽입한다. AP_RhsStd==0 이면 - 맨 앞에 삽입한다. -- 2025-10-06 09:16 + rhs 의 AP_RhsStd 의 뒤에 삽입한다. + + AP_RhsStd==0 이면 맨 앞에 삽입한다. -- 2025-10-06 09:16 + + ■ bool AB_After=true 추가. AB_After==false 이면, rhs 의 + AP_RhsStd 의 앞에 삽입한다. + + AP_RhsStd==0 이면 맨 뒤에 삽입한다. -- 2025-10-07 08:36 ///////////////////////////////////////////////////////////*/ @@ -5880,24 +5889,47 @@ namespace ZNsMain rhs.mp_HeadLink = &AR_CutHead ; rhs.mp_TailLink = &AR_CutTail ; } - else if(AP_RhsStd==0) // 맨 앞에 삽입. + else if(AB_After) { - ZCLink::JoinLink(&AR_CutTail, rhs.mp_HeadLink); - ZCLink::MakeRing(&AR_CutHead, rhs.mp_TailLink); + if(AP_RhsStd==0) // 맨 앞에 삽입. + { + ZCLink::JoinLink(&AR_CutTail, rhs.mp_HeadLink); + ZCLink::MakeRing(&AR_CutHead, rhs.mp_TailLink); - rhs.mp_HeadLink = &AR_CutHead; + rhs.mp_HeadLink = &AR_CutHead; + } + else // AP_RhsStd 의 뒤에 삽입. + { + ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ; + + ZCLink::JoinLink(AP_RhsStd , &AR_CutHead ); + ZCLink::JoinLink(&AR_CutTail, VP_RhsStdNext); + + if(AP_RhsStd==rhs.mp_TailLink) + { rhs.mp_TailLink = &AR_CutTail; } + } } - else // AP_RhsStd 의 뒤에 삽입. + else // !AB_After { - ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ; + if(AP_RhsStd==0) // 맨 뒤에 삽입. + { + ZCLink::JoinLink(rhs.mp_TailLink, &AR_CutHead); + ZCLink::MakeRing(rhs.mp_HeadLink, &AR_CutTail); - ZCLink::JoinLink(AP_RhsStd , &AR_CutHead ); - ZCLink::JoinLink(&AR_CutTail, VP_RhsStdNext); + rhs.mp_TailLink = &AR_CutTail; + } + else // AP_RhsStd 의 앞에 삽입. + { + ZCLink* VP_RhsStdPrev = AP_RhsStd->mp_PrevLink ; - if(AP_RhsStd==rhs.mp_TailLink) - { rhs.mp_TailLink = &AR_CutTail; } + ZCLink::JoinLink(VP_RhsStdPrev, &AR_CutHead); + ZCLink::JoinLink(&AR_CutTail , AP_RhsStd ); + + if(AP_RhsStd==rhs.mp_HeadLink) + { rhs.mp_HeadLink = &AR_CutHead; } + } }/* - else*/ + else // !AB_After*/ rhs.ml_LinkSize += AL_CutSize; return rhs; }/* @@ -5907,7 +5939,8 @@ namespace ZNsMain ZCLink& AR_CutTail , TypeSize AL_CutSize , ZtCBaseList& rhs , - ZCLink* AP_RhsStd + ZCLink* AP_RhsStd , + bool AB_After=true ) #######################################################################*/ @@ -6198,7 +6231,7 @@ namespace ZNsMain void DeleteTail(TTypSize AL_DelSize)*/ - ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt) + ZtCBaseList& JoinAfter(TypeThis& rhs, ZCLinkOpt AO_StdOpt) { // AP_StdLink 의 뒤에 rhs 를 삽입. @@ -6247,10 +6280,10 @@ namespace ZNsMain ml_LinkSize += rhs.ml_LinkSize; return *this; }/* - ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/ + ZtCBaseList& JoinAfter(TypeThis& rhs, ZCLinkOpt AO_StdOpt)*/ - ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt) + ZtCBaseList& JoinBefore(TypeThis& rhs, ZCLinkOpt AO_StdOpt) { // AP_StdLink 의 앞에 rhs 를 삽입. @@ -6299,54 +6332,51 @@ namespace ZNsMain ml_LinkSize += rhs.ml_LinkSize; return *this; }/* - ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/ + ZtCBaseList& JoinBefore(TypeThis& rhs, ZCLinkOpt AO_StdOpt)*/ - ZtCBaseList& JoinHead(ZtCBaseList& rhs) + ZtCBaseList& JoinHead(TypeThis& rhs) { if(this==&rhs) return *this; return JoinAfter (rhs, ZCLinkOpt(0)); } - ZtCBaseList& JoinTail(ZtCBaseList& rhs) + ZtCBaseList& JoinTail(TypeThis& rhs) { if(this==&rhs) return *this; return JoinBefore(rhs, ZCLinkOpt(0)); } - void SendOutAfter (ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt) + void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLinkOpt AO_StdOpt) { // AP_CutLink 를 잘라서 rhs 의 AP_StdLink 뒤에 연결한다. CutLink(&AR_CutLink); rhs.AddLinkAfter(AO_StdOpt.Raw(), &AR_CutLink); }/* - void SendOutAfter (ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/ + void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLinkOpt AO_StdOpt)*/ - void SendOutBefore(ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt) + void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLinkOpt AO_StdOpt) { // AP_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다. CutLink(&AR_CutLink); rhs.AddLinkBefore(AO_StdOpt.Raw(), &AR_CutLink); }/* - void SendOutBefore(ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/ + void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLinkOpt AO_StdOpt)*/ - void SendOutHead(ZCLink& AR_CutLink, ZtCBaseList& rhs) + void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs) { // AP_CutLink 를 잘라서 rhs 의 앞에 연결한다. SendOutAfter (AR_CutLink, rhs, ZCLinkOpt(0)); } - void SendOutTail(ZCLink& AR_CutLink, ZtCBaseList& rhs) + void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs) { // AP_CutLink 를 잘라서 rhs 의 뒤에 연결한다. SendOutBefore(AR_CutLink, rhs, ZCLinkOpt(0)); }/* - void SendOutTail(ZCLink& AR_CutLink, ZtCBaseList& rhs)*/ + void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)*/ - ZtCBaseList& SendRangeOutAfter ////////////////////////////////////////// + ZtCBaseList& SendRangeOut /////////////////////////////////////////////// ( - ZCLink& AR_CutHead, - ZCLink& AR_CutTail, - TypeSize AI_CutSize, - ZtCBaseList& rhs , - ZCLinkOpt AO_LinkOpt + ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize, + TypeThis& rhs , ZCLinkOpt AO_LinkOpt, bool AB_After ) /*#####################################################################*/ { @@ -6354,21 +6384,66 @@ namespace ZNsMain return CutLinkRangeOut ( - AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw() + AR_CutHead, AR_CutTail , AI_CutSize, + rhs , AO_LinkOpt.Raw(), AB_After + ); + ////////////////////// + }/* + ZtCBaseList& SendRangeOut /////////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize, + TypeThis& rhs , ZCLinkOpt AO_LinkOpt, bool AB_After + ) + /*#####################################################################*/ + + + ZtCBaseList& SendRangeOutAfter ////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt + ) + /*#####################################################################*/ + { + // AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다. + + return CutLinkRangeOut + ( + AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), true ); ////////////////////// }/* ZtCBaseList& SendRangeOutAfter ////////////////////////////////////////// ( - ZCLink& AR_CutHead, - ZCLink& AR_CutTail, - TypeSize AI_CutSize, - ZtCBaseList& rhs , - ZCLinkOpt AO_LinkOpt + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt ) /*#####################################################################*/ + ZtCBaseList& SendRangeOutBefore ///////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt + ) + /*#####################################################################*/ + { + // AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다. + + return CutLinkRangeOut + ( + AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), false + ); + ////////////////////// + }/* + ZtCBaseList& SendRangeOutBefore ///////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt + ) + /*#####################################################################*/ + + + TypeData& GetHeadData(){return mp_HeadLink->mo_DataObjt;} TypeData& GetTailData(){return mp_TailLink->mo_DataObjt;} diff --git a/ZCppMain/ZtCLinkList.H b/ZCppMain/ZtCLinkList.H index 86ad2f8..77b3ceb 100644 --- a/ZCppMain/ZtCLinkList.H +++ b/ZCppMain/ZtCLinkList.H @@ -884,9 +884,11 @@ namespace ZNsMain class ZtCLinkList /*#####################################################*/ { public : + typedef ZtCLinkList TypeThis; + public : typedef ZNsType::ZtCTypeNowCRTP /////////////////////////////////////// < - ZtCLinkList, typename TTypeCRTP::TypeData, TTypeCRTP::ZEUseCRTP + TypeThis, typename TTypeCRTP::TypeData, TTypeCRTP::ZEUseCRTP > ZCTypeNowCRTP ; /////////////////////////////////////////////////////// @@ -1226,7 +1228,7 @@ namespace ZNsMain ZCLink& JoinBefore(ZCLink& AR_LinkNew, ZCLink* AP_StdLink)*/ - ZtCLinkList& JoinAfter(ZtCLinkList& rhs, ZCLink* AP_StdLink) + TypeThis& JoinAfter(TypeThis& rhs, ZCLink* AP_StdLink) { // AP_StdLink 의 뒤에 rhs 를 삽입. @@ -1274,10 +1276,10 @@ namespace ZNsMain ml_LinkSize += rhs.ml_LinkSize; return *this; }/* - ZtCLinkList& JoinAfter(ZtCLinkList& rhs, ZCLink* AP_StdLink)*/ + TypeThis& JoinAfter(TypeThis& rhs, ZCLink* AP_StdLink)*/ - ZtCLinkList& JoinBefore(ZtCLinkList& rhs, ZCLink* AP_StdLink) + TypeThis& JoinBefore(TypeThis& rhs, ZCLink* AP_StdLink) { // AP_StdLink 의 앞에 rhs 를 삽입. @@ -1325,7 +1327,7 @@ namespace ZNsMain ml_LinkSize += rhs.ml_LinkSize; return *this; }/* - ZtCLinkList& JoinBefore(ZtCLinkList& rhs, ZCLink* AP_StdLink)*/ + TypeThis& JoinBefore(TypeThis& rhs, ZCLink* AP_StdLink)*/ ZCLink& CutLink(ZCLink& AR_CutLink) @@ -1361,13 +1363,11 @@ namespace ZNsMain ZCLink& CutLink(ZCLink& AR_CutLink)*/ - ZtCLinkList& CutLinkRangeOut /*#######################################*/ + TypeThis& CutLinkRangeOut /*##########################################*/ ( - ZCLink& AR_CutHead , - ZCLink& AR_CutTail , - TypeSize AL_CutSize , - ZtCLinkList& rhs , - ZCLink* AP_RhsStd + ZCLink& AR_CutHead , ZCLink& AR_CutTail , + TypeSize AL_CutSize , TypeThis& rhs , + ZCLink* AP_RhsStd , bool AB_After=true ) /*#####################################################################*/ { @@ -1377,8 +1377,14 @@ namespace ZNsMain AR_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크. AR_CutHead 의 앞과 AR_CutTail 의 뒤에서 연결 상태를 끊고, - rhs 의 AP_RhsStd 의 뒤에 삽입한다. AP_RhsStd==0 이면 - 맨 앞에 삽입한다. -- 2025-10-06 09:16 + rhs 의 AP_RhsStd 의 뒤에 삽입한다. + + AP_RhsStd==0 이면 맨 앞에 삽입한다. -- 2025-10-06 09:16 + + ■ bool AB_After=true 추가 -- 2025-10-07 09:37 + + AB_After==true 이면, AP_RhsStd 의 뒤에 연결. + AB_After==false 이면, AP_RhsStd 의 앞에 연결. ///////////////////////////////////////////////////////////*/ @@ -1389,18 +1395,29 @@ namespace ZNsMain { mp_HeadLink=0; } - else if(&AR_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때. + else if(&AR_CutHead==mp_HeadLink) { - ZCLink::MakeRing - (mp_HeadLink=AR_CutTail.mp_NextLink, mp_TailLink); + ZCLink::MakeRing //////////// + ( + mp_HeadLink=AR_CutTail.mp_NextLink, mp_TailLink + ); + ///////////////////////////// } - else if(&AR_CutTail==mp_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때. + else if(&AR_CutTail==mp_TailLink) { - ZCLink::MakeRing(mp_HeadLink, mp_TailLink=AR_CutHead.mp_PrevLink); + ZCLink::MakeRing //////////// + ( + mp_HeadLink, mp_TailLink=AR_CutHead.mp_PrevLink + ); + ///////////////////////////// } - else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때. + else { - ZCLink::JoinLink(AR_CutHead.mp_PrevLink, AR_CutTail.mp_NextLink); + ZCLink::JoinLink //////////// + ( + AR_CutHead.mp_PrevLink, AR_CutTail.mp_NextLink + ); + ///////////////////////////// }/* else*/ @@ -1409,41 +1426,60 @@ namespace ZNsMain if(rhs.size()<1) { - // AP_CutHead 과 AP_CutTail 을 연결하여 이중 원형 연결리스트가 되도록 한다. - ZCLink::MakeRing(&AR_CutHead, &AR_CutTail); rhs.mp_HeadLink = &AR_CutHead ; rhs.mp_TailLink = &AR_CutTail ; } - else if(AP_RhsStd==0) // 맨 앞에 삽입. + else if(AB_After) // AP_RhsStd 뒤에 삽입. { - ZCLink::JoinLink(&AR_CutTail, rhs.mp_HeadLink); - ZCLink::MakeRing(&AR_CutHead, rhs.mp_TailLink); + if(AP_RhsStd==0) // 맨 앞에 삽입. + { + ZCLink::JoinLink(&AR_CutTail, rhs.mp_HeadLink); + ZCLink::MakeRing(&AR_CutHead, rhs.mp_TailLink); - rhs.mp_HeadLink = &AR_CutHead; + rhs.mp_HeadLink = &AR_CutHead; + } + else + { + ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ; + + ZCLink::JoinLink(AP_RhsStd , &AR_CutHead ); + ZCLink::JoinLink(&AR_CutTail, VP_RhsStdNext); + + if(AP_RhsStd==rhs.mp_TailLink) + { rhs.mp_TailLink = &AR_CutTail; } + } } - else // AP_RhsStd 의 뒤에 삽입. + else // !AB_After : AP_RhsStd 앞에 삽입. { - ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ; + if(AP_RhsStd==0) // 맨 뒤에 삽입. + { + ZCLink::JoinLink(rhs.mp_TailLink, &AR_CutHead); + ZCLink::MakeRing(rhs.mp_HeadLink, &AR_CutTail); - ZCLink::JoinLink(AP_RhsStd , &AR_CutHead ); - ZCLink::JoinLink(&AR_CutTail, VP_RhsStdNext); + rhs.mp_TailLink = &AR_CutTail; + } + else + { + ZCLink* VP_RhsStdPrev = AP_RhsStd->mp_PrevLink ; - if(AP_RhsStd==rhs.mp_TailLink) - { rhs.mp_TailLink = &AR_CutTail; } + ZCLink::JoinLink(VP_RhsStdPrev, &AR_CutHead); + ZCLink::JoinLink(&AR_CutTail , AP_RhsStd ); + + if(AP_RhsStd==rhs.mp_HeadLink) + { rhs.mp_HeadLink = &AR_CutHead; } + } }/* - else*/ + else // !AB_After : AP_RhsStd 앞에 삽입.*/ rhs.ml_LinkSize += AL_CutSize; return rhs; }/* - ZtCLinkList& CutLinkRangeOut ########################################### + TypeThis& CutLinkRangeOut ########################################### ( - ZCLink& AR_CutHead , - ZCLink& AR_CutTail , - TypeSize AL_CutSize , - ZtCLinkList& rhs , - ZCLink* AP_RhsStd + ZCLink& AR_CutHead , ZCLink& AR_CutTail , + TypeSize AL_CutSize , TypeThis& rhs , + ZCLink* AP_RhsStd , bool AB_After=true ) #######################################################################*/ @@ -1476,7 +1512,7 @@ namespace ZNsMain ~ZtCLinkList()*/ - ZtCLinkList& operator=(const ZtCLinkList& rhs) + TypeThis& operator=(const TypeThis& rhs) { if(this==&rhs) return *this; @@ -1550,7 +1586,7 @@ namespace ZNsMain return *this; }/* - ZtCLinkList& operator=(const ZtCLinkList& rhs)*/ + TypeThis& operator=(const TypeThis& rhs)*/ TypeSize GetSize() const{return ml_LinkSize ;} @@ -1615,54 +1651,75 @@ namespace ZNsMain void Delete(ZCLink& AR_DelLink)*/ - ZtCLinkList& JoinAfter (ZtCLinkList& rhs, ZCLink& AR_StdLink) + TypeThis& JoinAfter (TypeThis& rhs, ZCLink& AR_StdLink) { return JoinAfter (rhs, &AR_StdLink); } - ZtCLinkList& JoinBefore(ZtCLinkList& rhs, ZCLink& AR_StdLink) + TypeThis& JoinBefore(TypeThis& rhs, ZCLink& AR_StdLink) { return JoinBefore(rhs, &AR_StdLink); } - ZtCLinkList& JoinHead(ZtCLinkList& rhs){ return JoinAfter (rhs, 0); } - ZtCLinkList& JoinTail(ZtCLinkList& rhs){ return JoinBefore(rhs, 0); } + TypeThis& JoinHead(TypeThis& rhs){ return JoinAfter (rhs, 0); } + TypeThis& JoinTail(TypeThis& rhs){ return JoinBefore(rhs, 0); } - void SendOutAfter (ZCLink& AR_CutLink, ZtCLinkList& rhs, ZCLink& AR_StdLink) + void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink) { // AR_CutLink 를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다. CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, &AR_StdLink); }/* - void SendOutAfter (ZCLink& AR_CutLink, ZtCLinkList& rhs, ZCLink& AR_StdLink)*/ + void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/ - void SendOutBefore(ZCLink& AR_CutLink, ZtCLinkList& rhs, ZCLink& AR_StdLink) + void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink) { // AR_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다. CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, &AR_StdLink); }/* - void SendOutBefore(ZCLink& AR_CutLink, ZtCLinkList& rhs, ZCLink& AR_StdLink)*/ + void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/ - void SendOutHead(ZCLink& AR_CutLink, ZtCLinkList& rhs) + void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs) { // AR_CutLink 를 잘라서 rhs 의 앞에 연결한다. CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, 0); } - void SendOutTail(ZCLink& AR_CutLink, ZtCLinkList& rhs) + void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs) { // AR_CutLink 를 잘라서 rhs 의 뒤에 연결한다. CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, 0); }/* - void SendOutTail(ZCLink& AR_CutLink, ZtCLinkList& rhs)*/ + void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)*/ - ZtCLinkList& SendRangeOutAfter ////////////////////////////////////////// + TypeThis& SendRangeOut ////////////////////////////////////////////////// ( - ZCLink& AR_CutHead, - ZCLink& AR_CutTail, - TypeSize AI_CutSize, - ZtCLinkList& rhs , - ZCLinkOpt AO_LinkOpt + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , + ZCLinkOpt AO_LinkOpt, bool AB_After + ) + /*#####################################################################*/ + { + return CutLinkRangeOut + ( + AR_CutHead, AR_CutTail , AI_CutSize, + rhs , AO_LinkOpt.Raw(), AB_After + ); + ////////////////////// + }/* + TypeThis& SendRangeOutAfter ///////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , + ZCLinkOpt AO_LinkOpt, bool AB_After + ) + /*#####################################################################*/ + + + TypeThis& SendRangeOutAfter ///////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt ) /*#####################################################################*/ { @@ -1670,17 +1727,39 @@ namespace ZNsMain return CutLinkRangeOut ( - AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw() + AR_CutHead, AR_CutTail , AI_CutSize, + rhs , AO_LinkOpt.Raw(), true ); ////////////////////// }/* - ZtCLinkList& SendRangeOutAfter ////////////////////////////////////////// + TypeThis& SendRangeOutAfter ///////////////////////////////////////////// ( - ZCLink& AR_CutHead, - ZCLink& AR_CutTail, - TypeSize AI_CutSize, - ZtCLinkList& rhs , - ZCLinkOpt AO_LinkOpt + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt + ) + /*#####################################################################*/ + + + TypeThis& SendRangeOutBefore //////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt + ) + /*#####################################################################*/ + { + // AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AR_StdLink 앞에 연결한다. + + return CutLinkRangeOut + ( + AR_CutHead, AR_CutTail , AI_CutSize, + rhs , AO_LinkOpt.Raw(), false + ); + ////////////////////// + }/* + TypeThis& SendRangeOutBefore //////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt ) /*#####################################################################*/ @@ -1845,11 +1924,11 @@ namespace ZNsMain class ZtCLinkMoveList /*#################################################*/ { public : - typedef ZtCLinkMoveList ZCMoveList; + typedef ZtCLinkMoveList TypeThis; public : typedef ZNsType::ZtCTypeNowCRTP /////////////////////////////////////// < - ZCMoveList, typename TTypeCRTP::TypeData, TTypeCRTP::ZEUseCRTP + TypeThis, typename TTypeCRTP::TypeData, TTypeCRTP::ZEUseCRTP > ZCTypeNowCRTP ; /////////////////////////////////////////////////////// @@ -2134,7 +2213,7 @@ namespace ZNsMain ZCLink& JoinBefore(ZCLink& AR_LinkNew, ZCLink* AP_StdLink)*/ - ZCMoveList& JoinAfter (ZCMoveList& rhs, ZCLink* AP_StdLink) + TypeThis& JoinAfter (TypeThis& rhs, ZCLink* AP_StdLink) { // AP_StdLink 의 뒤에 rhs 를 삽입. // AP_StdLink==0 이면 맨 앞에 삽입. @@ -2159,10 +2238,10 @@ namespace ZNsMain return *this; }/* - ZCMoveList& JoinAfter (ZCMoveList& rhs, ZCLink* AP_StdLink)*/ + TypeThis& JoinAfter (TypeThis& rhs, ZCLink* AP_StdLink)*/ - ZCMoveList& JoinBefore(ZCMoveList& rhs, ZCLink* AP_StdLink) + TypeThis& JoinBefore(TypeThis& rhs, ZCLink* AP_StdLink) { // AP_StdLink 의 앞에 rhs 를 삽입. // AP_StdLink==0 이면 맨 뒤에 삽입. @@ -2187,7 +2266,7 @@ namespace ZNsMain return *this; }/* - ZCMoveList& JoinBefore(ZCMoveList& rhs, ZCLink* AP_StdLink)*/ + TypeThis& JoinBefore(TypeThis& rhs, ZCLink* AP_StdLink)*/ ZCLink& CutLink(ZCLink& AR_CutLink) @@ -2200,13 +2279,14 @@ namespace ZNsMain ZCLink& CutLink(ZCLink& AR_CutLink)*/ - ZCMoveList& CutLinkRangeOut /*########################################*/ + TypeThis& CutLinkRangeOut /*##########################################*/ ( - ZCLink& AR_CutHead , - ZCLink& AR_CutTail , - TypeSize AL_CutSize , - ZCMoveList& rhs , - ZCLink* AP_RhsStd + ZCLink& AR_CutHead , + ZCLink& AR_CutTail , + TypeSize AL_CutSize , + TypeThis& rhs , + ZCLink* AP_RhsStd , + bool AB_After=true ) /*#####################################################################*/ { @@ -2220,6 +2300,11 @@ namespace ZNsMain AP_RhsStd==0 이면 맨 앞에 삽입한다. -- 2025-10-06 09:16 + ■ bool AB_After=true 추가. -- 2025-10-07 09:26 + + AB_After==true 이면 AP_RhsStd 의 뒤에 삽입. + AB_After==false 이면 AP_RhsStd 의 앞에 삽입. + ///////////////////////////////////////////////////////////*/ if(this==&rhs ) return rhs; @@ -2233,25 +2318,41 @@ namespace ZNsMain ml_LinkSize -= AL_CutSize; - // rhs 의 AP_RhsStd 의 뒤에 삽입. - // AP_RhsStd==0 이면 rhs 의 맨 앞에 삽입. + if(AB_After) + { + // rhs 의 AP_RhsStd 의 뒤에 삽입. + // AP_RhsStd==0 이면 rhs 의 맨 앞에 삽입. - if(AP_RhsStd==0) AP_RhsStd=&rhs.mo_HeadFake ; + if(AP_RhsStd==0) AP_RhsStd=&rhs.mo_HeadFake ; - ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ; + ZCLink* VP_RhsStdNext=AP_RhsStd->mp_NextLink; - ZCLink::JoinLink(AP_RhsStd , &AR_CutHead ); - ZCLink::JoinLink(&AR_CutTail, VP_RhsStdNext); + ZCLink::JoinLink(AP_RhsStd , &AR_CutHead ); + ZCLink::JoinLink(&AR_CutTail, VP_RhsStdNext); + } + else + { + // rhs 의 AP_RhsStd 의 앞에 삽입. + // AP_RhsStd==0 이면 rhs 의 맨 뒤에 삽입. + + if(AP_RhsStd==0) AP_RhsStd=&rhs.mo_TailFake ; + + ZCLink* VP_RhsStdPrev=AP_RhsStd->mp_PrevLink; + + ZCLink::JoinLink(VP_RhsStdPrev, &AR_CutHead); + ZCLink::JoinLink(&AR_CutTail , AP_RhsStd ); + } rhs.ml_LinkSize += AL_CutSize; return rhs; }/* - ZCMoveList& CutLinkRangeOut ############################################ + TypeThis& CutLinkRangeOut ############################################## ( - ZCLink& AR_CutHead , - ZCLink& AR_CutTail , - TypeSize AL_CutSize , - ZCMoveList& rhs , - ZCLink* AP_RhsStd + ZCLink& AR_CutHead , + ZCLink& AR_CutTail , + TypeSize AL_CutSize , + TypeThis& rhs , + ZCLink* AP_RhsStd , + bool AB_After=true ) #######################################################################*/ @@ -2284,7 +2385,7 @@ namespace ZNsMain ~ZtCLinkMoveList()*/ - ZCMoveList& operator=(const ZCMoveList& rhs) + TypeThis& operator=(const TypeThis& rhs) { if(this==&rhs) return *this; @@ -2347,7 +2448,7 @@ namespace ZNsMain return *this; }/* - ZCMoveList& operator=(const ZCMoveList& rhs)*/ + TypeThis& operator=(const TypeThis& rhs)*/ TypeSize GetSize() const{return ml_LinkSize ;} @@ -2434,54 +2535,75 @@ namespace ZNsMain void Delete(ZCLink& AR_DelLink)*/ - ZCMoveList& JoinAfter (ZCMoveList& rhs, ZCLink& AR_StdLink) + TypeThis& JoinAfter (TypeThis& rhs, ZCLink& AR_StdLink) { return JoinAfter (rhs, &AR_StdLink); } - ZCMoveList& JoinBefore(ZCMoveList& rhs, ZCLink& AR_StdLink) + TypeThis& JoinBefore(TypeThis& rhs, ZCLink& AR_StdLink) { return JoinBefore(rhs, &AR_StdLink); } - ZCMoveList& JoinHead(ZCMoveList& rhs){ return JoinAfter (rhs, 0); } - ZCMoveList& JoinTail(ZCMoveList& rhs){ return JoinBefore(rhs, 0); } + TypeThis& JoinHead(TypeThis& rhs){ return JoinAfter (rhs, 0); } + TypeThis& JoinTail(TypeThis& rhs){ return JoinBefore(rhs, 0); } - void SendOutAfter (ZCLink& AR_CutLink, ZCMoveList& rhs, ZCLink& AR_StdLink) + void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink) { // AR_CutLink 를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다. CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, &AR_StdLink); }/* - void SendOutAfter (ZCLink& AR_CutLink, ZCMoveList& rhs, ZCLink& AR_StdLink)*/ + void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/ - void SendOutBefore(ZCLink& AR_CutLink, ZCMoveList& rhs, ZCLink& AR_StdLink) + void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink) { // AR_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다. CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, &AR_StdLink); }/* - void SendOutBefore(ZCLink& AR_CutLink, ZCMoveList& rhs, ZCLink& AR_StdLink)*/ + void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/ - void SendOutHead(ZCLink& AR_CutLink, ZCMoveList& rhs) + void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs) { // AR_CutLink 를 잘라서 rhs 의 앞에 연결한다. CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, 0); } - void SendOutTail(ZCLink& AR_CutLink, ZCMoveList& rhs) + void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs) { // AR_CutLink 를 잘라서 rhs 의 뒤에 연결한다. CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, 0); }/* - void SendOutTail(ZCLink& AR_CutLink, ZCMoveList& rhs)*/ + void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)*/ - ZCMoveList& SendRangeOutAfter /////////////////////////////////////////// + TypeThis& SendRangeOut ////////////////////////////////////////////////// ( - ZCLink& AR_CutHead, - ZCLink& AR_CutTail, - TypeSize AI_CutSize, - ZCMoveList& rhs , - ZCLinkOpt AO_LinkOpt + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , + ZCLinkOpt AO_LinkOpt, bool AB_After + ) + /*#####################################################################*/ + { + return CutLinkRangeOut + ( + AR_CutHead, AR_CutTail , AI_CutSize, + rhs , AO_LinkOpt.Raw(), AB_After + ); + ////////////////////// + }/* + TypeThis& SendRangeOut ////////////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , + ZCLinkOpt AO_LinkOpt, bool AB_After + ) + /*#####################################################################*/ + + + TypeThis& SendRangeOutAfter ///////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt ) /*#####################################################################*/ { @@ -2489,17 +2611,31 @@ namespace ZNsMain return CutLinkRangeOut ( - AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw() + AR_CutHead, AR_CutTail , AI_CutSize, + rhs , AO_LinkOpt.Raw(), true + ); + ////////////////////// + } + TypeThis& SendRangeOutBefore //////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt + ) + /*#####################################################################*/ + { + // AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AR_StdLink 앞에 연결한다. + + return CutLinkRangeOut + ( + AR_CutHead, AR_CutTail , AI_CutSize, + rhs , AO_LinkOpt.Raw(), false ); ////////////////////// }/* - ZCMoveList& SendRangeOutAfter /////////////////////////////////////////// + TypeThis& SendRangeOutBefore //////////////////////////////////////////// ( - ZCLink& AR_CutHead, - ZCLink& AR_CutTail, - TypeSize AI_CutSize, - ZCMoveList& rhs , - ZCLinkOpt AO_LinkOpt + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt ) /*#####################################################################*/ diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index 77e2def..931a23f 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -790,6 +790,8 @@ namespace ZNsMain typedef TTypSize TypeSize ; typedef TMoveObj TypeMoveObj; public: + typedef ZtCObjList TypeThis ; + public: class ZCIterator; class ZCLink ; public: @@ -1213,17 +1215,18 @@ namespace ZNsMain protected: ZCLink* CutLink(ZCLink* AP_CutLink)*/ - ZtCObjList& CutLink /*########################################################*/ + TypeThis& CutLink /*##########################################################*/ ( - ZCLink* AP_CutHead , - ZCLink* AP_CutTail , - TypeSize AL_CutSize , - ZtCObjList& ARR_StoreList + ZCLink* AP_CutHead , + ZCLink* AP_CutTail , + TypeSize AL_CutSize , + TypeThis& ARR_StoreList ) /*#############################################################################*/ { // AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크 // AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크 + // ARR_StoreList 은 비어 있어야 한다. if(this==&ARR_StoreList) return *this ; @@ -1235,72 +1238,76 @@ namespace ZNsMain { mp_HeadLink=0; // 모든 링크를 삭제할 때. } - else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때. + else if(AP_CutHead==mp_HeadLink) { ZCLink::MakeRing - (mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink); + ( + mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink + ); + //////////////// } - else if(AP_CutTail==VP_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때. + else if(AP_CutTail==VP_TailLink) { - ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink); + ZCLink::MakeRing + ( + mp_HeadLink, AP_CutHead->mp_PrevLink + ); + //////////////// } - else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때. + else { - ZCLink::JoinLink(AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink); - }/* - else*/ + ZCLink::JoinLink + ( + AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink + ); + //////////////// + } - ml_LinkSize -= AL_CutSize; ZCLink::MakeRing(AP_CutHead, AP_CutTail); + ml_LinkSize -= AL_CutSize; - #ifdef _DEBUG + // ARR_StoreList 은 비어 있어야 한다. - if(ARR_StoreList.IsEmpty()!=true) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<mp_NextLink, VP_TailLink); + ZCLink::MakeRing /////////////// + ( + mp_HeadLink = + AP_CutTail->mp_NextLink, + VP_TailLink + ); + //////////////////////////////// } - else if(AP_CutTail==VP_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때. + else if(AP_CutTail==VP_TailLink) { - ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink); + ZCLink::MakeRing /////////////// + ( + mp_HeadLink, + AP_CutHead->mp_PrevLink + ); + //////////////////////////////// } - else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때. + else { - ZCLink::JoinLink(AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink); - }/* - else*/ - + ZCLink::JoinLink /////////////// + ( + AP_CutHead->mp_PrevLink, + AP_CutTail->mp_NextLink + ); + //////////////////////////////// + } ml_LinkSize -= AL_CutSize; if(rhs.size()<1) { - // AP_CutHead 과 AP_CutTail 을 연결하여 이중 원형 연결리스트가 되도록 한다. - - ZCLink::MakeRing(AP_CutHead, AP_CutTail); + ZCLink::MakeRing + ( AP_CutHead, AP_CutTail ) ; rhs.mp_HeadLink = AP_CutHead ; } - else if(AP_RhsStd==0) // 맨 앞에 삽입. + else if(AB_After) { - ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink; + if(AP_RhsStd==0) // 맨 앞에 삽입. + { + ZCLink* VP_RhsHead = rhs.mp_HeadLink ; + ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink ; - ZCLink::JoinLink(AP_CutTail, rhs.mp_HeadLink); - ZCLink::MakeRing(AP_CutHead, VP_RhsTail ); + ZCLink::JoinLink(AP_CutTail, VP_RhsHead); + ZCLink::MakeRing(AP_CutHead, VP_RhsTail); - rhs.mp_HeadLink = AP_CutHead; + rhs.mp_HeadLink = AP_CutHead; + } + else // AP_RhsStd 의 뒤에 삽입. + { + ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ; + + ZCLink::JoinLink(AP_RhsStd , AP_CutHead ); + ZCLink::JoinLink(AP_CutTail, VP_RhsStdNext); + } } - else // AP_RhsStd 의 뒤에 삽입. + else // !AB_After { - ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ; + if(AP_RhsStd==0) // 맨 뒤에 삽입. + { + ZCLink* VP_RhsHead = rhs.mp_HeadLink ; + ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink ; - ZCLink::JoinLink(AP_RhsStd , AP_CutHead ); - ZCLink::JoinLink(AP_CutTail, VP_RhsStdNext); + ZCLink::JoinLink(VP_RhsTail, AP_CutHead); + ZCLink::MakeRing(VP_RhsHead, AP_CutTail); + } + else // AP_RhsStd 의 앞에 삽입. + { + ZCLink* VP_RhsStdPrev = AP_RhsStd->mp_PrevLink ; + + ZCLink::JoinLink(VP_RhsStdPrev, AP_CutHead); + ZCLink::JoinLink(AP_CutTail , AP_RhsStd ); + + if(AP_RhsStd==rhs.mp_HeadLink) + rhs.mp_HeadLink = AP_CutHead ; + } }/* - else*/ + else // !AB_After*/ rhs.ml_LinkSize += AL_CutSize; return rhs; }/* - ZtCObjList& CutLinkRangeOut #################################################### + TypeThis& CutLinkRangeOut ###################################################### ( - ZCLink* AP_CutHead , - ZCLink* AP_CutTail , - TypeSize AL_CutSize , - ZtCObjList& rhs , - ZCLink* AP_RhsStd + ZCLink* AP_CutHead , ZCLink* AP_CutTail , + TypeSize AL_CutSize , TypeThis& rhs , + ZCLink* AP_RhsStd , bool AB_After=true ) ###############################################################################*/ @@ -2121,37 +2163,55 @@ namespace ZNsMain ###############################################################################*/ - void SendOutAfter (ZCLink& AR_CutLink, ZtCObjList& rhs, ZCLink& AR_StdLink) + void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink) { // AR_CutLink 를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다. CutLink(&AR_CutLink); rhs.JoinAfter(&AR_CutLink, &AR_StdLink); }/* - void SendOutAfter (ZCLink& AR_CutLink, ZtCObjList& rhs, ZCLink& AR_StdLink)*/ + void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/ - void SendOutBefore(ZCLink& AR_CutLink, ZtCObjList& rhs, ZCLink& AR_StdLink) + void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink) { // AR_CutLink 를 잘라서 rhs 의 AR_StdLink 앞에 연결한다. CutLink(&AR_CutLink); rhs.JoinBefore(&AR_CutLink, &AR_StdLink); }/* - void SendOutBefore(ZCLink& AR_CutLink, ZtCObjList& rhs, ZCLink& AR_StdLink)*/ + void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/ - void SendOutHead(ZCLink& AR_CutLink, ZtCObjList& rhs) + void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs) { CutLink(&AR_CutLink); rhs.JoinAfter (&AR_CutLink, 0); } - void SendOutTail(ZCLink& AR_CutLink, ZtCObjList& rhs) + void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs) { CutLink(&AR_CutLink); rhs.JoinBefore(&AR_CutLink, 0); } - ZtCObjList& SendRangeOutAfter /////////////////////////////////////////// + TypeThis& SendRangeOut ////////////////////////////////////////////////// ( - ZCLink& AR_CutHead, - ZCLink& AR_CutTail, - TypeSize AI_CutSize, - ZtCObjList& rhs , - ZCLinkOpt AO_LinkOpt + ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize, + TypeThis& rhs , ZCLinkOpt AO_LinkOpt, bool AB_After + ) + /*#####################################################################*/ + { + return CutLinkRangeOut + ( + &AR_CutHead, &AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), AB_After + ); + ////////////////////// + }/* + TypeThis& SendRangeOutAfter ///////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt + ) + /*#####################################################################*/ + + + TypeThis& SendRangeOutAfter ///////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt ) /*#####################################################################*/ { @@ -2159,17 +2219,29 @@ namespace ZNsMain return CutLinkRangeOut ( - &AR_CutHead, &AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw() + &AR_CutHead, &AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), true + ); + ////////////////////// + } + TypeThis& SendRangeOutBefore //////////////////////////////////////////// + ( + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt + ) + /*#####################################################################*/ + { + // AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AO_ObjOpt 뒤에 연결한다. + + return CutLinkRangeOut + ( + &AR_CutHead, &AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), false ); ////////////////////// }/* - ZtCObjList& SendRangeOutAfter ////////////////////////////////////////// + TypeThis& SendRangeOutAfter ///////////////////////////////////////////// ( - ZCLink& AR_CutHead, - ZCLink& AR_CutTail, - TypeSize AI_CutSize, - ZtCObjList& rhs , - ZCLinkOpt AO_LinkOpt + ZCLink& AR_CutHead, ZCLink& AR_CutTail, + TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt ) /*#####################################################################*/ diff --git a/ZCppMainTest/ZtCBaseList_000.cpp b/ZCppMainTest/ZtCBaseList_000.cpp index 4e51f64..bdc9e17 100644 --- a/ZCppMainTest/ZtCBaseList_000.cpp +++ b/ZCppMainTest/ZtCBaseList_000.cpp @@ -524,6 +524,22 @@ namespace ZNsMain VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0)); + cout<