commit 2025-10-16 01:04 add ZtCBaseList::MoveLinkIn() & MoveRangeIn() ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-16 01:04:33 +09:00
parent 1e88508936
commit 023e1d8a0a
4 changed files with 641 additions and 70 deletions

View File

@ -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<ZCLink*>(&VO_FakeHead ) ;
ZCLink* VP_FakeTail =
reinterpret_cast<ZCLink*>(&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<ZCLink*>(&VO_FakeHead ) ;
ZCLink* VP_FakeTail =
reinterpret_cast<ZCLink*>(&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 의 앞에 연결한다.

View File

@ -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<ZCLink*>(&VO_FakeHead);
ZCLink* VP_FakeTail=reinterpret_cast<ZCLink*>(&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<ZCLink*>(&VO_FakeHead);
ZCLink* VP_FakeTail=reinterpret_cast<ZCLink*>(&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();}

View File

@ -713,6 +713,114 @@ namespace ZNsMain
cout<<"*****************************************************"<<endl;
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(1th, 3th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef( ),
VO_ZCBaseListEx10_2.HeadRef(2),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(3th, 6th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(2),
VO_ZCBaseListEx10_2.HeadRef(5),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(6th, 1th before)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(5),
VO_ZCBaseListEx10_2.HeadRef( ),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(1th, 6th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef( ),
VO_ZCBaseListEx10_2.HeadRef(5),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(2th, 3th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef(2),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(2th, 3th before)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef(2),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(2th, 1th before)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef( ),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeIn(1th, 3th, 6th after)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeIn
(
VO_ZCBaseListEx10_2.HeadRef( ),
VO_ZCBaseListEx10_2.HeadRef(2),
VO_ZCBaseListEx10_2.HeadRef(5),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeIn(5th, 6th, 1th before)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeIn
(
VO_ZCBaseListEx10_2.HeadRef(4),
VO_ZCBaseListEx10_2.HeadRef(5),
VO_ZCBaseListEx10_2.HeadRef( ),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeIn(2th, 3th, 4th after)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef(2),
VO_ZCBaseListEx10_2.HeadRef(3),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/

View File

@ -367,6 +367,51 @@ namespace ZNsMain
cout<<"*****************************************************"<<endl;
VO_ListOfStr11.MoveLinkIn
(
*VO_ListOfStr11.GetLinkPtr(1)
, *VO_ListOfStr11.GetLinkPtr(7)
, true
);
cout<<"# list11 MoveLinkIn(1th, 7th, after)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.MoveLinkIn
(
*VO_ListOfStr11.GetLinkPtr(5)
, *VO_ListOfStr11.GetLinkPtr(1)
, false
);
cout<<"# list11 MoveLinkIn(5th, 1th, before)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.MoveLinkIn
(
*VO_ListOfStr11.GetLinkPtr(6)
, *VO_ListOfStr11.GetLinkPtr(7)
, true
);
cout<<"# list11 MoveLinkIn(6th, 7th, after)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.MoveRangeIn
(
*VO_ListOfStr11.GetLinkPtr(1)
, *VO_ListOfStr11.GetLinkPtr(2)
, *VO_ListOfStr11.GetLinkPtr(7)
, true
);
cout<<"# list11 MoveRangeIn(1th, 2th, 7th, after)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
typedef CStringList1::iterator iterator1 ;
//typedef CStringList1::ZCLinkPointEx iteratorEx1;
typedef CStringList1::ZCNodePointN iteratorN1 ;