diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index b32413c..66d8dd7 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -7564,6 +7564,7 @@ namespace ZNsMain bool IsEmpty() const{return ml_LinkSize<1;} bool empty () const{return ml_LinkSize<1;} + void clear(){DeleteAll();} void push_front(TypeArg AO_ArgData){AddHead(AO_ArgData);} void push_back (TypeArg AO_ArgData){AddTail(AO_ArgData);} diff --git a/ZCppMain/ZtCLinkList.H b/ZCppMain/ZtCLinkList.H index d68e99f..80aabd5 100644 --- a/ZCppMain/ZtCLinkList.H +++ b/ZCppMain/ZtCLinkList.H @@ -1453,6 +1453,13 @@ namespace ZNsMain TypeThis& JoinBefore(TypeThis& rhs, ZCLink* AP_StdLink)*/ + ZCLink* AddLinkAfter(ZCLink* AP_StdLink, ZCLink* AP_NewLink) + { return &JoinAfter(*AP_NewLink, AP_StdLink); } + + ZCLink* AddLinkBefore(ZCLink* AP_StdLink, ZCLink* AP_NewLink) + { return &JoinBefore(*AP_NewLink, AP_StdLink); } + + ZCLink& CutLink(ZCLink& AR_CutLink) { if(&AR_CutLink==mp_HeadLink) @@ -1485,6 +1492,8 @@ namespace ZNsMain }/* ZCLink& CutLink(ZCLink& AR_CutLink)*/ + ZCLink* CutLink(ZCLink* AP_CutLink){return &CutLink(*AP_CutLink);} + TypeThis& CutLinkRangeOut /*##########################################*/ ( @@ -2089,6 +2098,118 @@ namespace ZNsMain TypeThis& SwapLink(ZCLink& AR_LinkOne, ZCLink& AR_LinkTwo)*/ + TypeThis& 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; /**************************/ + }/* + TypeThis& MoveLinkAfter (ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt)*/ + TypeThis& MoveLinkBefore(ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt) + { + if(&AR_MoveLink==AO_StdOpt.Raw()){return *this;} + + if(size()<=1){return *this;} AddLinkBefore + ( AO_StdOpt.Raw(), CutLink(&AR_MoveLink) ) ; + + return *this; /**************************/ + }/* + TypeThis& MoveLinkBefore(ZCLink& AR_MoveLink, ZCLinkOpt AO_StdOpt)*/ + + TypeThis& MoveLinkHead(ZCLink& AR_MoveLink) /*::::::::::::::::::::*/ + { + if(&AR_MoveLink==mp_HeadLink){return *this;} + + if(size()<=1){return *this;} AddLinkAfter + ( 0, CutLink(&AR_MoveLink) ) ; + return *this; /**************************/ + }/* + TypeThis& MoveLinkHead(ZCLink& AR_MoveLink) ::::::::::::::::::::::*/ + TypeThis& MoveLinkTail(ZCLink& AR_MoveLink) /*::::::::::::::::::::*/ + { + if(&AR_MoveLink==mp_TailLink){return *this;} + + if(size()<=1){return *this;} AddLinkBefore + ( 0, CutLink(&AR_MoveLink) ) ; + return *this; /**************************/ + }/* + TypeThis& MoveLinkTail(ZCLink& AR_MoveLink) ::::::::::::::::::::::*/ + + + 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/ZCppMainTest/ZtCLinkList_001.cpp b/ZCppMainTest/ZtCLinkList_001.cpp index 2fdb5b3..2388f2c 100644 --- a/ZCppMainTest/ZtCLinkList_001.cpp +++ b/ZCppMainTest/ZtCLinkList_001.cpp @@ -244,6 +244,12 @@ namespace ZNsMain VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0)); cout<<"***********************************************"<