commit 2025-10-16 10:16 add skipping contdition code in list, SendRangeIn() => MoveRangeIn() : ZCppMain/ZtCLinkList.H etc

This commit is contained in:
2025-10-16 10:17:15 +09:00
parent 8cc267707f
commit 84299e59a5
4 changed files with 210 additions and 205 deletions

View File

@ -7937,6 +7937,24 @@ namespace ZNsMain
) ; ) ;
if(CB_NeedFakeLink) ///////////////////////////////////////////// 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 의 앞뒤 링크를 연결. // AR_MoveLink 를 떼어 내고, AR_MoveLink 의 앞뒤 링크를 연결.
ZCLinkFake VO_FakeHead ; ZCLinkFake VO_FakeHead ;
@ -8066,6 +8084,24 @@ namespace ZNsMain
) ; ) ;
if(CB_NeedFakeLink) ///////////////////////////////////////////// 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 를 떼어 내고, 그 앞뒤 링크를 연결. // AR_MoveHead~AR_MoveTail 를 떼어 내고, 그 앞뒤 링크를 연결.
ZCLinkFake VO_FakeHead ; 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 의 앞에 연결한다. void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs) // AP_CutLink 를 잘라서 rhs 의 앞에 연결한다.
{ SendOutAfter (AR_CutLink, rhs, ZCLinkOpt(0)); } { SendOutAfter (AR_CutLink, rhs, ZCLinkOpt(0)); }
void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs) // AP_CutLink 를 잘라서 rhs 의 뒤에 연결한다. 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 TypeThis& CopyThis(TypeThis& ARR_Rhs) const
{ {

View File

@ -2587,6 +2587,24 @@ namespace ZNsMain
) ; ) ;
if(CB_NeedFakeLink) ///////////////////////////////////////////// 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 의 앞뒤 링크를 연결. // AR_MoveLink 를 떼어 내고, AR_MoveLink 의 앞뒤 링크를 연결.
ZCLink VO_FakeHead ; ZCLink VO_FakeHead ;
@ -2714,6 +2732,24 @@ namespace ZNsMain
) ; ) ;
if(CB_NeedFakeLink) ///////////////////////////////////////////// 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 를 떼어 내고, 그 앞뒤 링크를 연결. // AR_MoveHead~AR_MoveTail 를 떼어 내고, 그 앞뒤 링크를 연결.
ZCLink VO_FakeHead ; ZCLink VO_FakeHead ;
@ -2797,76 +2833,39 @@ namespace ZNsMain
#######################################################################*/ #######################################################################*/
TypeThis& SendRangeIn /////////////////////////////////////////////////// TypeThis& MoveRangeIn ///////////////////////////////////////////////////
( (
ZCLink& AR_CutHead, ZCLink& AR_CutTail, ZCLink& AR_MoveHead, ZCLink& AR_MoveTail,
TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt, bool AB_After 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(VP_LinkStd==0)
if(AI_CutSize >= size()){return *this;} {
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 /**************/ return MoveRangeIn(AR_MoveHead, AR_MoveTail, *VP_LinkStd, AB_After);
(
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);
} }
/*#####################################################################*/ /*#####################################################################*/
TypeThis& SendRangeInAfter ////////////////////////////////////////////// TypeThis& MoveRangeInAfter
( ( ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, ZCLinkOpt AO_StdOpt)
ZCLink& AR_CutHead, ZCLink& AR_CutTail, { return MoveRangeIn(AR_MoveHead, AR_MoveTail, AO_StdOpt, true ); }
TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt TypeThis& MoveRangeInBefore
) ( ZCLink& AR_MoveHead, ZCLink& AR_MoveTail, ZCLinkOpt AO_StdOpt)
/*#####################################################################*/ { return MoveRangeIn(AR_MoveHead, AR_MoveTail, AO_StdOpt, false); }
{ /***********************************************************************/
return SendRangeIn TypeThis& MoveRangeInHead(ZCLink& AR_MoveHead, ZCLink& AR_MoveTail)
( AR_CutHead, AR_CutTail, AI_CutSize, AO_LinkOpt, true ); { 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& 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& 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 TypeThis& CopyThis(TypeThis& ARR_Rhs) const

View File

@ -2418,6 +2418,24 @@ namespace ZNsMain
) ; ) ;
if(CB_NeedFakeLink) ///////////////////////////////////////////// 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 의 앞뒤 링크를 연결. // AR_MoveLink 를 떼어 내고, AR_MoveLink 의 앞뒤 링크를 연결.
ZCLinkFake VO_FakeHead ; ZCLinkFake VO_FakeHead ;
@ -2547,6 +2565,24 @@ namespace ZNsMain
) ; ) ;
if(CB_NeedFakeLink) ///////////////////////////////////////////// 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 를 떼어 내고, 그 앞뒤 링크를 연결. // AR_MoveHead~AR_MoveTail 를 떼어 내고, 그 앞뒤 링크를 연결.
ZCLinkFake VO_FakeHead ; 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 /////////////////////////////////////////////// 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 TypeThis& CopyThis(TypeThis& ARR_Rhs) const
{ {

View File

@ -314,6 +314,18 @@ namespace ZNsMain
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0)); VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl; cout<<"***********************************************"<<endl;
VO_CDataList1.MoveRangeIn
(
VO_CDataList1.HeadRef( ),
VO_CDataList1.HeadRef(1),
VO_CDataList1.HeadRef(2),
false
);
cout<<"# after VO_CDataList1.MoveRangeIn(1th, 2th, 3th, before)"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
return 0; return 0;
}/* }/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/ static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/