diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index 93229b1..bcbfbfb 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -6401,6 +6401,46 @@ namespace ZNsMain class ZCLinkPointEx*/ + + /*/////////////////////////////////////////////////////////////// + + ■ class ZCLinkFake 는 가상의 맨 앞과 맨 뒤를 표시하는 링크로써, + 연결리스트 내부에서 특정 링크를 어떤 기준 링크의 앞이나 뒤로 + 이동할 때, + + 이동 링크가 맨 앞에 있는지 맨 뒤에 있는지, + 기준 링크가 맨 앞에 있는지 맨 뒤에 있는지, + + 등을 판단해서 처리할 때, ZCLinkFake 를 2개 만들어 가상으로 + + 하나는 맨 앞 링크를, 또 하나는 맨 뒤 링크 + + 를 표시하게 해서 처리를 단순하게 한다. 따라서, ZCLink 와 메모 + 리 구조가 최대한 같아야 한다. 그래서 ZCLink 와 같이 TypeAlloc + 를 상속하고 있다. + + MoveLinkIn() 에서 사용한다. -- 2025-10-15 23:44 + + ///////////////////////////////////////////////////////////////*/ + + class ZCLinkFake : public TypeAlloc + { + public: + friend class ZtCBaseList; + private: + ZCLink* mp_NextLink; + ZCLink* mp_PrevLink; + public : + ZCLinkFake() + { + mp_NextLink = 0; + mp_PrevLink = 0; + } + public : + };/* + class ZCLinkFake : public TypeAlloc*/ + + public : /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ private : @@ -7886,45 +7926,227 @@ namespace ZNsMain ZtCBaseList& SwapLink(ZCLink& AR_LinkOne, ZCLink& AR_LinkTwo)*/ + ZtCBaseList& MoveLinkIn(ZCLink& AR_MoveLink, ZCLink& AR_StdLink, bool AB_After) + { + if(size()<=1 || &AR_MoveLink==&AR_StdLink){return *this;} + + const bool CB_NeedFakeLink = //////////////////////////////////// + ( + &AR_MoveLink==mp_HeadLink || &AR_MoveLink==mp_TailLink || + &AR_StdLink ==mp_HeadLink || &AR_StdLink ==mp_TailLink + ) ; + if(CB_NeedFakeLink) ///////////////////////////////////////////// + { + // AR_MoveLink 를 떼어 내고, AR_MoveLink 의 앞뒤 링크를 연결. + + ZCLinkFake VO_FakeHead; ZCLinkFake VO_FakeTail; + + ZCLink* VP_FakeHead = + reinterpret_cast(&VO_FakeHead ) ; + ZCLink* VP_FakeTail = + reinterpret_cast(&VO_FakeTail ) ; + + ZCLink::JoinLink( VP_FakeHead, mp_HeadLink ) ; + ZCLink::JoinLink( mp_TailLink, VP_FakeTail ) ; + + ZCLink* VP_MoveNext = AR_MoveLink.mp_NextLink; + ZCLink* VP_MovePrev = AR_MoveLink.mp_PrevLink; + + ZCLink::JoinLink(VP_MovePrev, VP_MoveNext); + /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + AR_MoveLink 떼어 내기 완료. + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + + ZCLink* VP_StdNext = AR_StdLink .mp_NextLink; + ZCLink* VP_StdPrev = AR_StdLink .mp_PrevLink; + + if(AB_After) + { + ZCLink::JoinLink(&AR_StdLink , &AR_MoveLink); + ZCLink::JoinLink(&AR_MoveLink, VP_StdNext ); + } + else + { + ZCLink::JoinLink( VP_StdPrev , &AR_MoveLink); + ZCLink::JoinLink(&AR_MoveLink, &AR_StdLink ); + } + mp_HeadLink = VP_FakeHead->mp_NextLink; + mp_TailLink = VP_FakeTail->mp_PrevLink; + + ZCLink::MakeRing(mp_HeadLink, mp_TailLink); + + return *this; /***************************/ + }/* + const bool CB_NeedFakeLink = //////////////////////////////////// + ( + &AR_MoveLink==mp_HeadLink || &AR_MoveLink==mp_TailLink || + &AR_StdLink ==mp_HeadLink || &AR_StdLink ==mp_TailLink + ) ; + if(CB_NeedFakeLink) ///////////////////////////////////////////*/ + + + if( AB_After && AR_MoveLink.mp_PrevLink==&AR_StdLink) + { return *this; } + if(!AB_After && AR_MoveLink.mp_NextLink==&AR_StdLink) + { return *this; } + /*:::::::::::::::::::::::::::::::::::::::::::::::::*/ + + + ZCLink* VP_MoveNext = AR_MoveLink.mp_NextLink; + ZCLink* VP_MovePrev = AR_MoveLink.mp_PrevLink; + + ZCLink::JoinLink( VP_MovePrev, VP_MoveNext ) ; + + ZCLink* VP_StdNext = AR_StdLink .mp_NextLink; + ZCLink* VP_StdPrev = AR_StdLink .mp_PrevLink; + + if(AB_After) + { + ZCLink::JoinLink(&AR_StdLink , &AR_MoveLink); + ZCLink::JoinLink(&AR_MoveLink, VP_StdNext ); + } + else + { + ZCLink::JoinLink( VP_StdPrev , &AR_MoveLink); + ZCLink::JoinLink(&AR_MoveLink, &AR_StdLink ); + } + return *this; /*::::::::::::::::::::::::::::::::*/ + }/* + ZtCBaseList& MoveLinkIn(ZCLink& AR_MoveLink, ZCLink& AR_StdLink, bool AB_After)*/ + + + ZtCBaseList& MoveLinkIn(ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt, bool AB_After) + { + ZCLink* VP_LinkStd = AO_StdOpt.Raw(); + + if(VP_LinkStd==0) + { + if(AB_After) + { VP_LinkStd = mp_HeadLink; AB_After=false; } + else{ VP_LinkStd = mp_TailLink; AB_After=true ; } + }/* + if(VP_LinkStd==0)*/ + + return MoveLinkIn(AR_MoveLink, *VP_LinkStd, AB_After); + }/* + ZtCBaseList& MoveLinkIn(ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt, bool AB_After)*/ + + ZtCBaseList& MoveLinkAfter (ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt) - { - if(&AR_MoveLink==AO_StdOpt.Raw()){return *this;} - - if(size()<=1){return *this;} AddLinkAfter - ( AO_StdOpt.Raw(), CutLink(&AR_MoveLink) ) ; - - return *this; /**************************/ - }/* - ZtCBaseList& MoveLinkAfter (ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt)*/ + { return MoveLinkIn(AR_MoveLink, AO_StdOpt, true ); } ZtCBaseList& MoveLinkBefore(ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt) + { return MoveLinkIn(AR_MoveLink, AO_StdOpt, false); } + + ZtCBaseList& MoveLinkHead(ZCLink& AR_MoveLink) + { return MoveLinkIn(AR_MoveLink, ZCLinkOpt(0), true ); } + ZtCBaseList& MoveLinkTail(ZCLink& AR_MoveLink) + { return MoveLinkIn(AR_MoveLink, ZCLinkOpt(0), false); } + + + ZtCBaseList& MoveRangeIn /*////////////////////////////////////////*/ + ( + ZCLink& AR_MoveHead , ZCLink& AR_MoveTail , + ZCLink& AR_StdLink , bool AB_After + ) + /*#################################################################*/ { - if(&AR_MoveLink==AO_StdOpt.Raw()){return *this;} + // AR_MoveHead ~ AR_MoveTail 밖에 AR_StdLink 이 있어야 한다. + // AR_MoveHead 이 AR_MoveTail 위에 와서는 안 된다. - if(size()<=1){return *this;} AddLinkBefore - ( AO_StdOpt.Raw(), CutLink(&AR_MoveLink) ) ; + if(size() <= 1 ){return *this;} + if(&AR_MoveHead == &AR_StdLink){return *this;} + if(&AR_MoveTail == &AR_StdLink){return *this;} - return *this; /**************************/ + const bool CB_NeedFakeLink = //////////////////////////////////// + ( + &AR_MoveHead==mp_HeadLink || &AR_MoveHead==mp_TailLink || + &AR_MoveTail==mp_HeadLink || &AR_MoveTail==mp_TailLink || + &AR_StdLink ==mp_HeadLink || &AR_StdLink ==mp_TailLink + ) ; + if(CB_NeedFakeLink) ///////////////////////////////////////////// + { + // AR_MoveHead~AR_MoveTail 를 떼어 내고, 그 앞뒤 링크를 연결. + + ZCLinkFake VO_FakeHead; ZCLinkFake VO_FakeTail; + + ZCLink* VP_FakeHead = + reinterpret_cast(&VO_FakeHead ) ; + ZCLink* VP_FakeTail = + reinterpret_cast(&VO_FakeTail ) ; + + ZCLink::JoinLink( VP_FakeHead, mp_HeadLink ) ; + ZCLink::JoinLink( mp_TailLink, VP_FakeTail ) ; + + ZCLink* VP_MoveNext = AR_MoveTail.mp_NextLink; + ZCLink* VP_MovePrev = AR_MoveHead.mp_PrevLink; + + ZCLink::JoinLink(VP_MovePrev, VP_MoveNext); + /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + AR_MoveHead~AR_MoveTail 떼어 내기 완료. + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + + ZCLink* VP_StdNext = AR_StdLink .mp_NextLink; + ZCLink* VP_StdPrev = AR_StdLink .mp_PrevLink; + + if(AB_After) + { + ZCLink::JoinLink(&AR_StdLink , &AR_MoveHead); + ZCLink::JoinLink(&AR_MoveTail, VP_StdNext ); + } + else + { + ZCLink::JoinLink( VP_StdPrev , &AR_MoveHead); + ZCLink::JoinLink(&AR_MoveTail, &AR_StdLink ); + } + mp_HeadLink = VP_FakeHead->mp_NextLink; + mp_TailLink = VP_FakeTail->mp_PrevLink; + + ZCLink::MakeRing(mp_HeadLink, mp_TailLink); + + return *this; /***************************/ + }/* + const bool CB_NeedFakeLink = //////////////////////////////////// + ( + &AR_MoveHead==mp_HeadLink || &AR_MoveHead==mp_TailLink || + &AR_MoveTail==mp_HeadLink || &AR_MoveTail==mp_TailLink || + &AR_StdLink ==mp_HeadLink || &AR_StdLink ==mp_TailLink + ) ; + if(CB_NeedFakeLink) ///////////////////////////////////////////*/ + + + if( AB_After && AR_MoveHead.mp_PrevLink==&AR_StdLink) + { return *this; } + if(!AB_After && AR_MoveTail.mp_NextLink==&AR_StdLink) + { return *this; } + /*:::::::::::::::::::::::::::::::::::::::::::::::::*/ + + + ZCLink* VP_MoveNext = AR_MoveTail.mp_NextLink; + ZCLink* VP_MovePrev = AR_MoveHead.mp_PrevLink; + + ZCLink::JoinLink( VP_MovePrev, VP_MoveNext ) ; + + ZCLink* VP_StdNext = AR_StdLink .mp_NextLink; + ZCLink* VP_StdPrev = AR_StdLink .mp_PrevLink; + + if(AB_After) + { + ZCLink::JoinLink(&AR_StdLink , &AR_MoveHead); + ZCLink::JoinLink(&AR_MoveTail, VP_StdNext ); + } + else + { + ZCLink::JoinLink( VP_StdPrev , &AR_MoveHead); + ZCLink::JoinLink(&AR_MoveTail, &AR_StdLink ); + } + return *this; /*::::::::::::::::::::::::::::::::*/ }/* - ZtCBaseList& MoveLinkBefore(ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt)*/ - - ZtCBaseList& MoveLinkHead(ZCLink& AR_MoveLink) /*::::::::::::::::::::*/ - { - if(&AR_MoveLink==mp_HeadLink){return *this;} - - if(size()<=1){return *this;} AddLinkAfter - ( 0, CutLink(&AR_MoveLink) ) ; - return *this; /**************************/ - }/* - ZtCBaseList& MoveLinkHead(ZCLink& AR_MoveLink) ::::::::::::::::::::::*/ - ZtCBaseList& MoveLinkTail(ZCLink& AR_MoveLink) /*::::::::::::::::::::*/ - { - if(&AR_MoveLink==mp_TailLink){return *this;} - - if(size()<=1){return *this;} AddLinkBefore - ( 0, CutLink(&AR_MoveLink) ) ; - return *this; /**************************/ - }/* - ZtCBaseList& MoveLinkTail(ZCLink& AR_MoveLink) ::::::::::::::::::::::*/ + ZtCBaseList& MoveRangeIn //////////////////////////////////////////// + ( + ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, + ZCLink& AR_StdLink , bool AB_After + ) + ###################################################################*/ void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs) // AP_CutLink 를 잘라서 rhs 의 앞에 연결한다. diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index 3c047cb..be9e3e2 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -1485,6 +1485,24 @@ namespace ZNsMain class ZCLinkPointEx*/ + class ZCLinkFake : public TypeAlloc + { + public: + friend class ZtCObjList; + private: + ZCLink* mp_NextLink; + ZCLink* mp_PrevLink; + public : + ZCLinkFake() + { + mp_NextLink = 0; + mp_PrevLink = 0; + } + public : + };/* + class ZCLinkFake : public TypeAlloc*/ + + public : /******************************************************************/ protected: @@ -2384,45 +2402,119 @@ namespace ZNsMain ZtCObjList& SwapLink(ZCLink& AR_LinkOne, ZCLink& AR_LinkTwo)*/ + ZtCObjList& MoveLinkIn(ZCLink& AR_MoveLink, ZCLink& AR_StdLink, bool AB_After) + { + if(size()<=1 || &AR_MoveLink==&AR_StdLink){return *this;} + + const bool CB_NeedFakeLink = //////////////////////////////////// + ( + &AR_MoveLink==mp_HeadLink || &AR_MoveLink==mp_TailLink || + &AR_StdLink ==mp_HeadLink || &AR_StdLink ==mp_TailLink + ) ; + if(CB_NeedFakeLink) ///////////////////////////////////////////// + { + // AR_MoveLink 를 떼어 내고, AR_MoveLink 의 앞뒤 링크를 연결. + + ZCLinkFake VO_FakeHead; ZCLinkFake VO_FakeTail; + + ZCLink* VP_FakeHead=reinterpret_cast(&VO_FakeHead); + ZCLink* VP_FakeTail=reinterpret_cast(&VO_FakeTail); + + ZCLink::JoinLink( VP_FakeHead, mp_HeadLink ) ; + ZCLink::JoinLink( mp_TailLink, VP_FakeTail ) ; + + ZCLink* VP_MoveNext = AR_MoveLink.mp_NextLink; + ZCLink* VP_MovePrev = AR_MoveLink.mp_PrevLink; + + ZCLink::JoinLink(VP_MovePrev, VP_MoveNext); + /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + AR_MoveLink 떼어 내기 완료. + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + + ZCLink* VP_StdNext = AR_StdLink .mp_NextLink; + ZCLink* VP_StdPrev = AR_StdLink .mp_PrevLink; + + if(AB_After) + { + ZCLink::JoinLink(&AR_StdLink , &AR_MoveLink); + ZCLink::JoinLink(&AR_MoveLink, VP_StdNext ); + } + else + { + ZCLink::JoinLink( VP_StdPrev , &AR_MoveLink); + ZCLink::JoinLink(&AR_MoveLink, &AR_StdLink ); + } + mp_HeadLink = VP_FakeHead->mp_NextLink; + mp_TailLink = VP_FakeTail->mp_PrevLink; + + ZCLink::MakeRing(mp_HeadLink, mp_TailLink); + + return *this; /***************************/ + }/* + const bool CB_NeedFakeLink = //////////////////////////////////// + ( + &AR_MoveLink==mp_HeadLink || &AR_MoveLink==mp_TailLink || + &AR_StdLink ==mp_HeadLink || &AR_StdLink ==mp_TailLink + ) ; + if(CB_NeedFakeLink) ///////////////////////////////////////////*/ + + + if( AB_After && AR_MoveLink.mp_PrevLink==&AR_StdLink) + { return *this; } + if(!AB_After && AR_MoveLink.mp_NextLink==&AR_StdLink) + { return *this; } + /*:::::::::::::::::::::::::::::::::::::::::::::::::*/ + + + ZCLink* VP_MoveNext = AR_MoveLink.mp_NextLink; + ZCLink* VP_MovePrev = AR_MoveLink.mp_PrevLink; + + ZCLink::JoinLink( VP_MovePrev, VP_MoveNext ) ; + + ZCLink* VP_StdNext = AR_StdLink .mp_NextLink; + ZCLink* VP_StdPrev = AR_StdLink .mp_PrevLink; + + if(AB_After) + { + ZCLink::JoinLink(&AR_StdLink , &AR_MoveLink); + ZCLink::JoinLink(&AR_MoveLink, VP_StdNext ); + } + else + { + ZCLink::JoinLink( VP_StdPrev , &AR_MoveLink); + ZCLink::JoinLink(&AR_MoveLink, &AR_StdLink ); + } + return *this; /*::::::::::::::::::::::::::::::::*/ + }/* + ZtCObjList& MoveLinkIn(ZCLink& AR_MoveLink, ZCLink& AR_StdLink, bool AB_After)*/ + + + ZtCObjList& MoveLinkIn(ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt, bool AB_After) + { + ZCLink* VP_LinkStd = AO_StdOpt.Raw(); + + if(VP_LinkStd==0) + { + if(AB_After) + { VP_LinkStd = mp_HeadLink; AB_After=false; } + else{ VP_LinkStd = mp_TailLink; AB_After=true ; } + }/* + if(VP_LinkStd==0)*/ + + return MoveLinkIn(AR_MoveLink, *VP_LinkStd, AB_After); + }/* + ZtCObjList& MoveLinkIn(ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt, bool AB_After)*/ + + ZtCObjList& MoveLinkAfter (ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt) - { - if(&AR_MoveLink==AO_StdOpt.Raw()){return *this;} - - if(size()<=1){return *this;} AddLinkAfter - ( AO_StdOpt.Raw(), CutLink(&AR_MoveLink) ) ; - - return *this; /**************************/ - }/* - ZtCObjList& MoveLinkAfter (ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt)*/ + { return MoveLinkIn(AR_MoveLink, AO_StdOpt, true ); } ZtCObjList& MoveLinkBefore(ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt) - { - if(&AR_MoveLink==AO_StdOpt.Raw()){return *this;} + { return MoveLinkIn(AR_MoveLink, AO_StdOpt, false); } - if(size()<=1){return *this;} AddLinkBefore - ( AO_StdOpt.Raw(), CutLink(&AR_MoveLink) ) ; - - return *this; /**************************/ - }/* - ZtCObjList& MoveLinkBefore(ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt)*/ - - ZtCObjList& MoveLinkHead(ZCLink& AR_MoveLink) /*::::::::::::::::::::*/ - { - if(&AR_MoveLink==mp_HeadLink){return *this;} - - if(size()<=1){return *this;} AddLinkAfter - ( 0, CutLink(&AR_MoveLink) ) ; - return *this; /**************************/ - }/* - ZtCObjList& MoveLinkHead(ZCLink& AR_MoveLink) ::::::::::::::::::::::*/ - ZtCObjList& MoveLinkTail(ZCLink& AR_MoveLink) /*::::::::::::::::::::*/ - { - if(&AR_MoveLink==mp_TailLink){return *this;} - - if(size()<=1){return *this;} AddLinkBefore - ( 0, CutLink(&AR_MoveLink) ) ; - return *this; /**************************/ - }/* - ZtCObjList& MoveLinkTail(ZCLink& AR_MoveLink) ::::::::::::::::::::::*/ + ZtCObjList& MoveLinkHead(ZCLink& AR_MoveLink) + { return MoveLinkIn(AR_MoveLink, ZCLinkOpt(0), true ); } + ZtCObjList& MoveLinkTail(ZCLink& AR_MoveLink) + { return MoveLinkIn(AR_MoveLink, ZCLinkOpt(0), false); } void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs) // AP_CutLink 를 잘라서 rhs 의 앞에 연결한다. @@ -2431,6 +2523,111 @@ namespace ZNsMain { SendOutBefore(AR_CutLink, rhs, ZCLinkOpt(0)); } + ZtCObjList& MoveRangeIn /*/////////////////////////////////////////*/ + ( + ZCLink& AR_MoveHead , ZCLink& AR_MoveTail , + ZCLink& AR_StdLink , bool AB_After + ) + /*#################################################################*/ + { + // AR_MoveHead ~ AR_MoveTail 밖에 AR_StdLink 이 있어야 한다. + // AR_MoveHead 이 AR_MoveTail 위에 와서는 안 된다. + + if(size() <= 1 ){return *this;} + if(&AR_MoveHead == &AR_StdLink){return *this;} + if(&AR_MoveTail == &AR_StdLink){return *this;} + + const bool CB_NeedFakeLink = //////////////////////////////////// + ( + &AR_MoveHead==mp_HeadLink || &AR_MoveHead==mp_TailLink || + &AR_MoveTail==mp_HeadLink || &AR_MoveTail==mp_TailLink || + &AR_StdLink ==mp_HeadLink || &AR_StdLink ==mp_TailLink + ) ; + if(CB_NeedFakeLink) ///////////////////////////////////////////// + { + // AR_MoveHead~AR_MoveTail 를 떼어 내고, 그 앞뒤 링크를 연결. + + ZCLinkFake VO_FakeHead; ZCLinkFake VO_FakeTail; + + ZCLink* VP_FakeHead=reinterpret_cast(&VO_FakeHead); + ZCLink* VP_FakeTail=reinterpret_cast(&VO_FakeTail); + + ZCLink::JoinLink( VP_FakeHead, mp_HeadLink ) ; + ZCLink::JoinLink( mp_TailLink, VP_FakeTail ) ; + + ZCLink* VP_MoveNext = AR_MoveTail.mp_NextLink; + ZCLink* VP_MovePrev = AR_MoveHead.mp_PrevLink; + + ZCLink::JoinLink(VP_MovePrev, VP_MoveNext); + /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + AR_MoveHead~AR_MoveTail 떼어 내기 완료. + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + + ZCLink* VP_StdNext = AR_StdLink .mp_NextLink; + ZCLink* VP_StdPrev = AR_StdLink .mp_PrevLink; + + if(AB_After) + { + ZCLink::JoinLink(&AR_StdLink , &AR_MoveHead); + ZCLink::JoinLink(&AR_MoveTail, VP_StdNext ); + } + else + { + ZCLink::JoinLink( VP_StdPrev , &AR_MoveHead); + ZCLink::JoinLink(&AR_MoveTail, &AR_StdLink ); + } + mp_HeadLink = VP_FakeHead->mp_NextLink; + mp_TailLink = VP_FakeTail->mp_PrevLink; + + ZCLink::MakeRing(mp_HeadLink, mp_TailLink); + + return *this; /***************************/ + }/* + const bool CB_NeedFakeLink = //////////////////////////////////// + ( + &AR_MoveHead==mp_HeadLink || &AR_MoveHead==mp_TailLink || + &AR_MoveTail==mp_HeadLink || &AR_MoveTail==mp_TailLink || + &AR_StdLink ==mp_HeadLink || &AR_StdLink ==mp_TailLink + ) ; + if(CB_NeedFakeLink) ///////////////////////////////////////////*/ + + + if( AB_After && AR_MoveHead.mp_PrevLink==&AR_StdLink) + { return *this; } + if(!AB_After && AR_MoveTail.mp_NextLink==&AR_StdLink) + { return *this; } + /*:::::::::::::::::::::::::::::::::::::::::::::::::*/ + + + ZCLink* VP_MoveNext = AR_MoveTail.mp_NextLink; + ZCLink* VP_MovePrev = AR_MoveHead.mp_PrevLink; + + ZCLink::JoinLink( VP_MovePrev, VP_MoveNext ) ; + + ZCLink* VP_StdNext = AR_StdLink .mp_NextLink; + ZCLink* VP_StdPrev = AR_StdLink .mp_PrevLink; + + if(AB_After) + { + ZCLink::JoinLink(&AR_StdLink , &AR_MoveHead); + ZCLink::JoinLink(&AR_MoveTail, VP_StdNext ); + } + else + { + ZCLink::JoinLink( VP_StdPrev , &AR_MoveHead); + ZCLink::JoinLink(&AR_MoveTail, &AR_StdLink ); + } + return *this; /*::::::::::::::::::::::::::::::::*/ + }/* + ZtCObjList& MoveRangeIn ///////////////////////////////////////////// + ( + ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, + ZCLink& AR_StdLink , bool AB_After + ) + ###################################################################*/ + + + ZtCObjList& SendRangeOut /////////////////////////////////////////////// ( ZCLink& AR_CutHead, ZCLink& AR_CutTail, @@ -3055,7 +3252,6 @@ namespace ZNsMain { if(mp_HeadLink==0) return ZCLinkOpt(0); return ZCLinkOpt(GetLinkPtr(AI_Index)); } - IterEasy GetHeadIterEasy () {return GetHeadLinkPtr();} IterEasy GetTailIterEasy () {return GetTailLinkPtr();} IterEasyID GetHeadIterEasyID () {return (IterEasyID )GetHeadLinkPtr();} diff --git a/ZCppMainTest/ZtCBaseList_000.cpp b/ZCppMainTest/ZtCBaseList_000.cpp index 06eb52d..c8e15e5 100644 --- a/ZCppMainTest/ZtCBaseList_000.cpp +++ b/ZCppMainTest/ZtCBaseList_000.cpp @@ -713,6 +713,114 @@ namespace ZNsMain cout<<"*****************************************************"<