commit 2025-10-11 22:25 add ZtCLinkList::SwapLink() : ZCppMain/ZtCLinkList.H
This commit is contained in:
@ -1747,6 +1747,38 @@ namespace ZNsMain
|
||||
ZCDataOpt GetObjOpt(TypeSize AI_Index)*/
|
||||
|
||||
|
||||
ZCLink& HeadRef(){return *mp_HeadLink;}
|
||||
ZCLink& TailRef(){return *mp_TailLink;}
|
||||
|
||||
ZCLink& HeadRef(TypeSize AI_Distance){return (*mp_HeadLink)+AI_Distance;}
|
||||
ZCLink& TailRef(TypeSize AI_Distance){return (*mp_TailLink)-AI_Distance;}
|
||||
|
||||
const ZCLink& HeadRef() const{return *mp_HeadLink;}
|
||||
const ZCLink& TailRef() const{return *mp_TailLink;}
|
||||
|
||||
const ZCLink& HeadRef(TypeSize AI_Distance) const{return (*mp_HeadLink)+AI_Distance;}
|
||||
const ZCLink& TailRef(TypeSize AI_Distance) const{return (*mp_TailLink)-AI_Distance;}
|
||||
|
||||
|
||||
|
||||
ZCLinkOpt HeadOpt(){return ZCLinkOpt(mp_HeadLink);}
|
||||
ZCLinkOpt TailOpt(){return ZCLinkOpt(mp_TailLink);}
|
||||
|
||||
ZCLinkOpt HeadOpt(TypeSize AI_Distance)
|
||||
{if(mp_HeadLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_HeadLink)+AI_Distance);}
|
||||
ZCLinkOpt TailOpt(TypeSize AI_Distance)
|
||||
{if(mp_TailLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_TailLink)-AI_Distance);}
|
||||
|
||||
const ZCLinkOpt HeadOpt() const{return ZCLinkOpt(mp_HeadLink);}
|
||||
const ZCLinkOpt TailOpt() const{return ZCLinkOpt(mp_TailLink);}
|
||||
|
||||
const ZCLinkOpt HeadOpt(TypeSize AI_Distance) const
|
||||
{if(mp_HeadLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_HeadLink)+AI_Distance);}
|
||||
const ZCLinkOpt TailOpt(TypeSize AI_Distance) const
|
||||
{if(mp_TailLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_TailLink)-AI_Distance);}
|
||||
|
||||
|
||||
|
||||
ZCLink& AddHead(){ return JoinAfter (*NewLink(), 0); }
|
||||
ZCLink& AddTail(){ return JoinBefore(*NewLink(), 0); }
|
||||
|
||||
@ -1879,6 +1911,185 @@ namespace ZNsMain
|
||||
#######################################################################*/
|
||||
|
||||
|
||||
TypeThis& SwapLinkNext(ZCLink& AR_LinkPrev)
|
||||
{
|
||||
// 다음 링크와 위치를 맞바꾼다.
|
||||
|
||||
if(size()<=1){return *this;}
|
||||
|
||||
|
||||
ZCLink* VP_LinkNext = AR_LinkPrev.mp_NextLink;
|
||||
|
||||
if(&AR_LinkPrev == VP_LinkNext){ return *this; }
|
||||
|
||||
if(size()==2)
|
||||
{
|
||||
if(&AR_LinkPrev==mp_HeadLink) /*************************/
|
||||
{
|
||||
// VP_LinkNext==mp_TailLink
|
||||
|
||||
mp_HeadLink = VP_LinkNext ;
|
||||
mp_TailLink = &AR_LinkPrev;
|
||||
}
|
||||
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||
|
||||
else // VP_LinkNext==mp_HeadLink
|
||||
{
|
||||
mp_HeadLink = &AR_LinkPrev ;
|
||||
mp_TailLink = VP_LinkNext ;
|
||||
}
|
||||
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||
}
|
||||
else if(&AR_LinkPrev==mp_HeadLink)
|
||||
{
|
||||
// VP_LinkNext == mp_HeadLink.mp_NextLink;
|
||||
|
||||
ZCLink* VP_HeadNext2 =
|
||||
VP_LinkNext->mp_NextLink ;
|
||||
|
||||
ZCLink::JoinLink(VP_LinkNext , &AR_LinkPrev);
|
||||
ZCLink::JoinLink(&AR_LinkPrev, VP_HeadNext2);
|
||||
ZCLink::MakeRing(VP_LinkNext , mp_TailLink );
|
||||
|
||||
mp_HeadLink = VP_LinkNext ;
|
||||
}
|
||||
else if(&AR_LinkPrev==mp_TailLink)
|
||||
{
|
||||
// VP_LinkNext==mp_HeadLink
|
||||
|
||||
ZCLink* VP_HeadNext =
|
||||
mp_HeadLink->mp_NextLink ;
|
||||
ZCLink* VP_TailPrev =
|
||||
mp_TailLink->mp_PrevLink ;
|
||||
|
||||
ZCLink::JoinLink(mp_TailLink, VP_HeadNext);
|
||||
ZCLink::JoinLink(VP_TailPrev, mp_HeadLink);
|
||||
ZCLink::MakeRing(mp_TailLink, mp_HeadLink);
|
||||
|
||||
mp_HeadLink = &AR_LinkPrev ;
|
||||
mp_TailLink = VP_LinkNext ;
|
||||
}
|
||||
else if(VP_LinkNext==mp_TailLink)
|
||||
{
|
||||
ZCLink* VP_TailPrev2 =
|
||||
AR_LinkPrev.mp_PrevLink ;
|
||||
|
||||
ZCLink::JoinLink(VP_TailPrev2, VP_LinkNext );
|
||||
ZCLink::JoinLink(VP_LinkNext , &AR_LinkPrev );
|
||||
ZCLink::MakeRing(mp_HeadLink , &AR_LinkPrev );
|
||||
|
||||
mp_TailLink = &AR_LinkPrev ;
|
||||
}
|
||||
else
|
||||
{
|
||||
ZCLink* VP_SwapPrev = AR_LinkPrev. mp_PrevLink;
|
||||
ZCLink* VP_SwapNext = VP_LinkNext->mp_NextLink;
|
||||
|
||||
ZCLink::JoinLink(VP_SwapPrev , VP_LinkNext ) ;
|
||||
ZCLink::JoinLink(VP_LinkNext , &AR_LinkPrev ) ;
|
||||
ZCLink::JoinLink(&AR_LinkPrev, VP_SwapNext ) ;
|
||||
}
|
||||
return *this; /***********************************/
|
||||
}/*
|
||||
TypeThis& SwapLinkNext(ZCLink& AR_LinkPrev)*/
|
||||
|
||||
TypeThis& SwapLinkPrev(ZCLink& AR_LinkNext)
|
||||
{
|
||||
// 이전 링크와 위치를 맞바꾼다.
|
||||
|
||||
return SwapLinkNext(*AR_LinkNext.mp_PrevLink);
|
||||
}/*
|
||||
TypeThis& SwapLinkPrev(ZCLink& AR_LinkNext)*/
|
||||
|
||||
|
||||
TypeThis& SwapLink(ZCLink& AR_LinkOne, ZCLink& AR_LinkTwo)
|
||||
{
|
||||
// AR_LinkOne 와 AR_LinkTwo 의 위치를 바꾼다.
|
||||
|
||||
if(size()<=1){return *this;}
|
||||
|
||||
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;
|
||||
}/*
|
||||
TypeThis& SwapLink(ZCLink& AR_LinkOne, ZCLink& AR_LinkTwo)*/
|
||||
|
||||
|
||||
|
||||
TypeThis& CopyThis(TypeThis& ARR_Rhs) const
|
||||
{
|
||||
// *this 를 복사해서, ARR_Rhs 의 끝에 연결한다.
|
||||
|
@ -226,6 +226,24 @@ namespace ZNsMain
|
||||
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
|
||||
VO_ZCLinkStrLis1.SwapLink
|
||||
(VO_ZCLinkStrLis1.HeadRef(), VO_ZCLinkStrLis1.HeadRef(1));
|
||||
cout<<"# after VO_ZCLinkStrLis1.SwapLink(1th, 2th)"<<endl;
|
||||
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
|
||||
VO_ZCLinkStrLis1.SwapLink
|
||||
(VO_ZCLinkStrLis1.HeadRef(), VO_ZCLinkStrLis1.HeadRef(11));
|
||||
cout<<"# after VO_ZCLinkStrLis1.SwapLink(1th, 12th)"<<endl;
|
||||
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
|
||||
VO_ZCLinkStrLis1.SwapLink
|
||||
(VO_ZCLinkStrLis1.HeadRef(11), VO_ZCLinkStrLis1.HeadRef(10));
|
||||
cout<<"# after VO_ZCLinkStrLis1.SwapLink(12th, 11th)"<<endl;
|
||||
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
|
||||
|
||||
return 0;
|
||||
}/*
|
||||
|
Reference in New Issue
Block a user