diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index 0df5a56..0c3eaf9 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -7148,7 +7148,7 @@ namespace ZNsMain { // 다음 링크와 위치를 맞바꾼다. - if(IsEmpty()){return *this;} + if(size()<=1){return *this;} ZCLink* VP_LinkNext = AR_LinkPrev.mp_NextLink; @@ -7235,19 +7235,98 @@ namespace ZNsMain ZtCBaseList& SwapLinkPrev(ZCLink& AR_LinkNext)*/ - void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs) + ZtCBaseList& SwapLink(ZCLink& AR_LinkOne, ZCLink& AR_LinkTwo) { - // AP_CutLink 를 잘라서 rhs 의 앞에 연결한다. + // AR_LinkOne 와 AR_LinkTwo 의 위치를 바꾼다. - SendOutAfter (AR_CutLink, rhs, ZCLinkOpt(0)); - } - void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs) - { - // AP_CutLink 를 잘라서 rhs 의 뒤에 연결한다. + if(size()<=1){return *this;} - SendOutBefore(AR_CutLink, rhs, ZCLinkOpt(0)); + if(&AR_LinkOne==&AR_LinkTwo){return *this;} + + if(&AR_LinkOne==mp_HeadLink && &AR_LinkTwo==mp_TailLink) + { return SwapLinkNext(AR_LinkTwo); } + if(&AR_LinkOne==mp_TailLink && &AR_LinkTwo==mp_HeadLink) + { return SwapLinkNext(AR_LinkOne); } + /******************************************************/ + if(&AR_LinkTwo==AR_LinkOne.mp_NextLink) + { return SwapLinkNext(AR_LinkOne); } + if(&AR_LinkOne==AR_LinkTwo.mp_NextLink) + { return SwapLinkNext(AR_LinkTwo); } + /******************************************************/ + + if(&AR_LinkOne==mp_HeadLink) + { + ZCLink* VP_HeadNext=mp_HeadLink->mp_NextLink; + ZCLink* VP_TwoNext =AR_LinkTwo. mp_NextLink; + ZCLink* VP_TwoPrev =AR_LinkTwo. mp_PrevLink; + + ZCLink::JoinLink(&AR_LinkTwo, VP_HeadNext) ; + ZCLink::JoinLink( VP_TwoPrev, &AR_LinkOne ) ; + ZCLink::JoinLink(&AR_LinkOne, VP_TwoNext ) ; + ZCLink::MakeRing(&AR_LinkTwo, mp_TailLink) ; + + mp_HeadLink = &AR_LinkTwo ; return *this; + } + if(&AR_LinkOne==mp_TailLink) + { + ZCLink* VP_TailPrev= mp_TailLink->mp_PrevLink; + ZCLink* VP_TwoNext = AR_LinkTwo. mp_NextLink; + ZCLink* VP_TwoPrev = AR_LinkTwo. mp_PrevLink; + + ZCLink::JoinLink( VP_TwoPrev , &AR_LinkOne ) ; + ZCLink::JoinLink(&AR_LinkOne , VP_TwoNext ) ; + ZCLink::JoinLink( VP_TailPrev, &AR_LinkTwo ) ; + ZCLink::MakeRing( mp_HeadLink, &AR_LinkTwo ) ; + + mp_TailLink = &AR_LinkTwo ; return *this; + } + /******************************************************/ + if(&AR_LinkTwo==mp_HeadLink) + { + ZCLink* VP_HeadNext=mp_HeadLink->mp_NextLink; + ZCLink* VP_OneNext =AR_LinkOne. mp_NextLink; + ZCLink* VP_OnePrev =AR_LinkOne. mp_PrevLink; + + ZCLink::JoinLink(&AR_LinkTwo, VP_HeadNext) ; + ZCLink::JoinLink(VP_OnePrev , &AR_LinkOne ) ; + ZCLink::JoinLink(&AR_LinkOne, VP_OneNext ) ; + ZCLink::MakeRing(&AR_LinkTwo, mp_TailLink) ; + + mp_HeadLink = &AR_LinkTwo ; return *this; + } + if(&AR_LinkTwo==mp_TailLink) + { + ZCLink* VP_TailPrev=mp_TailLink->mp_PrevLink; + ZCLink* VP_OneNext =AR_LinkOne. mp_NextLink; + ZCLink* VP_OnePrev =AR_LinkOne. mp_PrevLink; + + ZCLink::JoinLink(VP_OnePrev , &AR_LinkTwo ) ; + ZCLink::JoinLink(&AR_LinkTwo, VP_OneNext ) ; + ZCLink::JoinLink(VP_TailPrev, &AR_LinkTwo ) ; + ZCLink::MakeRing(mp_HeadLink, &AR_LinkTwo ) ; + + mp_TailLink = &AR_LinkTwo ; return *this; + } + /********************************************************/ + + ZCLink* VP_OnePrev= AR_LinkOne.mp_PrevLink ; + ZCLink* VP_OneNext= AR_LinkOne.mp_NextLink ; + ZCLink* VP_TwoPrev= AR_LinkTwo.mp_PrevLink ; + ZCLink* VP_TwoNext= AR_LinkTwo.mp_NextLink ; + + ZCLink::JoinLink( VP_OnePrev, &AR_LinkTwo) ; + ZCLink::JoinLink(&AR_LinkTwo, VP_OneNext) ; + ZCLink::JoinLink( VP_TwoPrev, &AR_LinkOne) ; + ZCLink::JoinLink(&AR_LinkOne, VP_TwoNext) ; return *this; }/* - void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)*/ + ZtCBaseList& SwapLink(ZCLink& AR_LinkOne, ZCLink& AR_LinkTwo)*/ + + + + void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs) // AP_CutLink 를 잘라서 rhs 의 앞에 연결한다. + { SendOutAfter (AR_CutLink, rhs, ZCLinkOpt(0)); } + void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs) // AP_CutLink 를 잘라서 rhs 의 뒤에 연결한다. + { SendOutBefore(AR_CutLink, rhs, ZCLinkOpt(0)); } ZtCBaseList& SendRangeOut /////////////////////////////////////////////// diff --git a/ZCppMainTest/ZtCBaseList_000.cpp b/ZCppMainTest/ZtCBaseList_000.cpp index a487c68..38d067a 100644 --- a/ZCppMainTest/ZtCBaseList_000.cpp +++ b/ZCppMainTest/ZtCBaseList_000.cpp @@ -577,6 +577,29 @@ namespace ZNsMain cout<<"*****************************************************"<