diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index fca80ec..2d51940 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -7937,6 +7937,24 @@ namespace ZNsMain ) ; if(CB_NeedFakeLink) ///////////////////////////////////////////// { + if ( &AR_MoveLink == mp_HeadLink && + mp_HeadLink->mp_NextLink== &AR_StdLink && !AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_MoveLink == mp_TailLink && + mp_TailLink->mp_PrevLink== &AR_StdLink && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_HeadLink && + mp_HeadLink->mp_NextLink== &AR_MoveLink && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_TailLink && + mp_TailLink->mp_PrevLink== &AR_MoveLink && !AB_After + ) + { return *this; } /*****************************************/ + + // AR_MoveLink 를 떼어 내고, AR_MoveLink 의 앞뒤 링크를 연결. ZCLinkFake VO_FakeHead ; @@ -8066,6 +8084,24 @@ namespace ZNsMain ) ; if(CB_NeedFakeLink) ///////////////////////////////////////////// { + if ( &AR_MoveHead == mp_HeadLink && + AR_MoveTail.mp_NextLink== &AR_StdLink && !AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_MoveTail == mp_TailLink && + AR_MoveHead.mp_PrevLink== &AR_StdLink && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_HeadLink && + AR_StdLink.mp_NextLink == &AR_MoveHead && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_TailLink && + AR_StdLink.mp_PrevLink == &AR_MoveTail && !AB_After + ) + { return *this; } /*****************************************/ + + // AR_MoveHead~AR_MoveTail 를 떼어 내고, 그 앞뒤 링크를 연결. ZCLinkFake VO_FakeHead ; @@ -8151,6 +8187,40 @@ namespace ZNsMain #######################################################################*/ + ZtCBaseList& MoveRangeIn //////////////////////////////////////////////// + ( + ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, + 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 MoveRangeIn(AR_MoveHead, AR_MoveTail, *VP_LinkStd, AB_After); + } + /*#####################################################################*/ + + ZtCBaseList& MoveRangeInAfter + ( ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, ZCLinkOpt AO_StdOpt) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, AO_StdOpt, true ); } + ZtCBaseList& MoveRangeInBefore + ( ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, ZCLinkOpt AO_StdOpt) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, AO_StdOpt, false); } + /***********************************************************************/ + ZtCBaseList& MoveRangeInHead(ZCLink& AR_MoveHead, ZCLink& AR_MoveTail) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, ZCLinkOpt(0), true ); } + ZtCBaseList& MoveRangeInTail(ZCLink& AR_MoveHead, ZCLink& AR_MoveTail) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, ZCLinkOpt(0), false); } + + 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 의 뒤에 연결한다. @@ -8210,78 +8280,6 @@ namespace ZNsMain /*#####################################################################*/ - ZtCBaseList& SendRangeIn //////////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt, bool AB_After - ) - /*#####################################################################*/ - { - // AR_CutHead 부터 AR_CutTail 까지를 잘라서 AR_StdLink 뒤에 연결한다. - - if(AI_CutSize < 1 ){return *this;} - if(AI_CutSize >= size()){return *this;} - - ZtCBaseList VO_Saver; CutLinkRangeOut /***********/ - ( - AR_CutHead , AR_CutTail , AI_CutSize, - RR(VO_Saver), AO_LinkOpt.Raw(), AB_After - ); - /*************************************************/ - - if(AB_After) - return JoinAfter (VO_Saver, AO_LinkOpt); - else return JoinBefore(VO_Saver, AO_LinkOpt); - } - /*#####################################################################*/ - - ZtCBaseList& SendRangeInAfter /////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, AO_LinkOpt, true ); - } - /*#####################################################################*/ - ZtCBaseList& SendRangeInBefore ////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, AO_LinkOpt, false); - } - /*#####################################################################*/ - - ZtCBaseList& SendRangeInHead //////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, ZCLinkOpt(0), true ); - } - /*#####################################################################*/ - ZtCBaseList& SendRangeInTail //////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, ZCLinkOpt(0), false); - } - /*#####################################################################*/ - - TypeThis& CopyThis(TypeThis& ARR_Rhs) const { diff --git a/ZCppMain/ZtCLinkList.H b/ZCppMain/ZtCLinkList.H index bc5ec02..ad6d404 100644 --- a/ZCppMain/ZtCLinkList.H +++ b/ZCppMain/ZtCLinkList.H @@ -2587,6 +2587,24 @@ namespace ZNsMain ) ; if(CB_NeedFakeLink) ///////////////////////////////////////////// { + if ( &AR_MoveLink == mp_HeadLink && + mp_HeadLink->mp_NextLink== &AR_StdLink && !AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_MoveLink == mp_TailLink && + mp_TailLink->mp_PrevLink== &AR_StdLink && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_HeadLink && + mp_HeadLink->mp_NextLink== &AR_MoveLink && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_TailLink && + mp_TailLink->mp_PrevLink== &AR_MoveLink && !AB_After + ) + { return *this; } /*****************************************/ + + // AR_MoveLink 를 떼어 내고, AR_MoveLink 의 앞뒤 링크를 연결. ZCLink VO_FakeHead ; @@ -2714,6 +2732,24 @@ namespace ZNsMain ) ; if(CB_NeedFakeLink) ///////////////////////////////////////////// { + if ( &AR_MoveHead == mp_HeadLink && + AR_MoveTail.mp_NextLink== &AR_StdLink && !AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_MoveTail == mp_TailLink && + AR_MoveHead.mp_PrevLink== &AR_StdLink && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_HeadLink && + AR_StdLink.mp_NextLink == &AR_MoveHead && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_TailLink && + AR_StdLink.mp_PrevLink == &AR_MoveTail && !AB_After + ) + { return *this; } /*****************************************/ + + // AR_MoveHead~AR_MoveTail 를 떼어 내고, 그 앞뒤 링크를 연결. ZCLink VO_FakeHead ; @@ -2797,76 +2833,39 @@ namespace ZNsMain #######################################################################*/ - TypeThis& SendRangeIn /////////////////////////////////////////////////// + TypeThis& MoveRangeIn /////////////////////////////////////////////////// ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt, bool AB_After + ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, + ZCLinkOpt AO_StdOpt , bool AB_After ) /*#####################################################################*/ { - // AR_CutHead 부터 AR_CutTail 까지를 잘라서 AR_StdLink 뒤에 연결한다. + ZCLink* VP_LinkStd = AO_StdOpt.Raw(); - if(AI_CutSize < 1 ){return *this;} - if(AI_CutSize >= size()){return *this;} + 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)*/ - TypeThis VO_Saver; CutLinkRangeOut /**************/ - ( - AR_CutHead , AR_CutTail , AI_CutSize, - RR(VO_Saver), AO_LinkOpt.Raw(), AB_After - ); - /*************************************************/ - - if(AB_After) - return JoinAfter (VO_Saver, AO_LinkOpt); - else return JoinBefore(VO_Saver, AO_LinkOpt); + return MoveRangeIn(AR_MoveHead, AR_MoveTail, *VP_LinkStd, AB_After); } /*#####################################################################*/ - TypeThis& SendRangeInAfter ////////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, AO_LinkOpt, true ); - } - /*#####################################################################*/ - TypeThis& SendRangeInBefore ///////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, AO_LinkOpt, false); - } - /*#####################################################################*/ + TypeThis& MoveRangeInAfter + ( ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, ZCLinkOpt AO_StdOpt) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, AO_StdOpt, true ); } + TypeThis& MoveRangeInBefore + ( ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, ZCLinkOpt AO_StdOpt) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, AO_StdOpt, false); } + /***********************************************************************/ + TypeThis& MoveRangeInHead(ZCLink& AR_MoveHead, ZCLink& AR_MoveTail) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, ZCLinkOpt(0), true ); } + TypeThis& MoveRangeInTail(ZCLink& AR_MoveHead, ZCLink& AR_MoveTail) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, ZCLinkOpt(0), false); } - TypeThis& SendRangeInHead /////////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, ZCLinkOpt(0), true ); - } - /*#####################################################################*/ - TypeThis& SendRangeInTail /////////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, ZCLinkOpt(0), false); - } - /*#####################################################################*/ TypeThis& CopyThis(TypeThis& ARR_Rhs) const diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index 966ea54..9c89011 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -2418,6 +2418,24 @@ namespace ZNsMain ) ; if(CB_NeedFakeLink) ///////////////////////////////////////////// { + if ( &AR_MoveLink == mp_HeadLink && + mp_HeadLink->mp_NextLink== &AR_StdLink && !AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_MoveLink == mp_TailLink && + mp_TailLink->mp_PrevLink== &AR_StdLink && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_HeadLink && + mp_HeadLink->mp_NextLink== &AR_MoveLink && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_TailLink && + mp_TailLink->mp_PrevLink== &AR_MoveLink && !AB_After + ) + { return *this; } /*****************************************/ + + // AR_MoveLink 를 떼어 내고, AR_MoveLink 의 앞뒤 링크를 연결. ZCLinkFake VO_FakeHead ; @@ -2547,6 +2565,24 @@ namespace ZNsMain ) ; if(CB_NeedFakeLink) ///////////////////////////////////////////// { + if ( &AR_MoveHead == mp_HeadLink && + AR_MoveTail.mp_NextLink== &AR_StdLink && !AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_MoveTail == mp_TailLink && + AR_MoveHead.mp_PrevLink== &AR_StdLink && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_HeadLink && + AR_StdLink.mp_NextLink == &AR_MoveHead && AB_After + ) + { return *this; } /*****************************************/ + if ( &AR_StdLink == mp_TailLink && + AR_StdLink.mp_PrevLink == &AR_MoveTail && !AB_After + ) + { return *this; } /*****************************************/ + + // AR_MoveHead~AR_MoveTail 를 떼어 내고, 그 앞뒤 링크를 연결. ZCLinkFake VO_FakeHead ; @@ -2632,6 +2668,39 @@ namespace ZNsMain #######################################################################*/ + ZtCObjList& MoveRangeIn ///////////////////////////////////////////////// + ( + ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, + 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 MoveRangeIn(AR_MoveHead, AR_MoveTail, *VP_LinkStd, AB_After); + } + /*#####################################################################*/ + + ZtCObjList& MoveRangeInAfter + ( ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, ZCLinkOpt AO_StdOpt) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, AO_StdOpt, true ); } + ZtCObjList& MoveRangeInBefore + ( ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, ZCLinkOpt AO_StdOpt) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, AO_StdOpt, false); } + /***********************************************************************/ + ZtCObjList& MoveRangeInHead(ZCLink& AR_MoveHead, ZCLink& AR_MoveTail) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, ZCLinkOpt(0), true ); } + ZtCObjList& MoveRangeInTail(ZCLink& AR_MoveHead, ZCLink& AR_MoveTail) + { return MoveRangeIn(AR_MoveHead, AR_MoveTail, ZCLinkOpt(0), false); } + ZtCObjList& SendRangeOut /////////////////////////////////////////////// ( @@ -2686,79 +2755,6 @@ namespace ZNsMain /*#####################################################################*/ - ZtCObjList& SendRangeIn ///////////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt, bool AB_After - ) - /*#####################################################################*/ - { - // AR_CutHead 부터 AR_CutTail 까지를 잘라서 AR_StdLink 뒤에 연결한다. - - if(AI_CutSize < 1 ){return *this;} - if(AI_CutSize >= size()){return *this;} - - ZtCObjList VO_Saver; CutLinkRangeOut /***********/ - ( - AR_CutHead , AR_CutTail , AI_CutSize, - RR(VO_Saver), AO_LinkOpt.Raw(), AB_After - ); - /*************************************************/ - - if(AB_After) - return JoinAfter (VO_Saver, AO_LinkOpt); - else return JoinBefore(VO_Saver, AO_LinkOpt); - } - /*#####################################################################*/ - - ZtCObjList& SendRangeInAfter //////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, AO_LinkOpt, true ); - } - /*#####################################################################*/ - ZtCObjList& SendRangeInBefore /////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, AO_LinkOpt, false); - } - /*#####################################################################*/ - - ZtCObjList& SendRangeInHead ///////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, ZCLinkOpt(0), true ); - } - /*#####################################################################*/ - ZtCObjList& SendRangeInTail //////////////////////////////////////////// - ( - ZCLink& AR_CutHead, ZCLink& AR_CutTail, - TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt - ) - /*#####################################################################*/ - { - return SendRangeIn - ( AR_CutHead, AR_CutTail, AI_CutSize, ZCLinkOpt(0), false); - } - /*#####################################################################*/ - - - TypeThis& CopyThis(TypeThis& ARR_Rhs) const { diff --git a/ZCppMainTest/ZtCLinkList_001.cpp b/ZCppMainTest/ZtCLinkList_001.cpp index 8305bdb..9f6e4ea 100644 --- a/ZCppMainTest/ZtCLinkList_001.cpp +++ b/ZCppMainTest/ZtCLinkList_001.cpp @@ -314,6 +314,18 @@ namespace ZNsMain VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0)); cout<<"***********************************************"<