commit 2025-10-11 16:51 add ZtCBaseList::SwapLinkNext() : ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-11 16:51:09 +09:00
parent 22f85f03a4
commit 15edbd80d8
2 changed files with 620 additions and 27 deletions

View File

@ -5686,17 +5686,20 @@ namespace ZNsMain
class ZtCBaseList /*#####################################################*/
{
public:
class ZCLink;
class ZCLink; class ZCLinkPoint; class ZCLinkRange;
public:
typedef ZtCBaseList TypeThis ;
typedef TType TypeData ;
typedef TTypArgu TypeArg ;
typedef TTypeAlloc TypeAlloc ;
typedef TTypSize TypeSize ;
typedef TMoveObj TypeMoveObj ;
typedef ZCLink TypeLink ;
typedef ZCLink* IterEasy ; // 가장 대표적으로 쓰일 수 있는 반복자.
typedef ZCLink* iterator ;
typedef ZtCBaseList TypeThis ;
typedef ZtCBaseList TypeList ;
typedef TType TypeData ;
typedef TTypArgu TypeArg ;
typedef TTypeAlloc TypeAlloc ;
typedef TTypSize TypeSize ;
typedef TMoveObj TypeMoveObj ;
typedef ZCLink TypeLink ;
typedef ZCLinkPoint TypeLinkPoint ;
typedef ZCLinkRange TypeLinkRange ;
typedef ZCLink* IterEasy ; // 가장 쉽게 쓸 수 있는 반복자.
typedef TypeLinkPoint iterator ; // 다양한 기능을 가진 반복자.
public:
typedef ZtCObjOpt<ZCLink > ZCLinkOpt;
typedef ZtCObjOpt<TypeData> ZCDataOpt;
@ -5827,6 +5830,377 @@ namespace ZNsMain
class ZCLink*/
class ZCLinkPoint
{
private:
TypeLink* mp_CurrLink; // 사실상 mp_CurrLink!=0
TypeSize ml_CurrPos ;
TypeList& mr_CurrList;
public:
ZCLinkPoint(TypeList& AR_TypeList) :
mr_CurrList(AR_TypeList)
{
mp_CurrLink = AR_TypeList.HeadPtr();
ml_CurrPos = 1 ;
}
ZCLinkPoint(const ZCLinkPoint& rhs) :
mr_CurrList(rhs.mr_CurrList),
mp_CurrLink(rhs.mp_CurrLink),
ml_CurrPos (rhs.ml_CurrPos )
{}
public:
TypeList& GetList(){return mr_CurrList;}
TypeLink& GetLink(){return *mp_CurrLink;}
/***************************************************/
TypeSize GetPos () const{ return ml_CurrPos; }
/***************************************************/
const TypeList& GetList() const{return mr_CurrList;}
const TypeLink& GetLink() const{return *mp_CurrLink;}
bool IsValid() const{return mr_CurrList.size()>0;}
bool IsEmpty() const{return mr_CurrList.size()<1;}
ZCLinkPoint& operator= (const ZCLinkPoint& rhs){ return *this; }
ZCLinkPoint& operator++()
{
if(IsEmpty()){return *this;}
mp_CurrLink = mp_CurrLink->mp_NextLink ;
if(++ml_CurrPos>mr_CurrList.size())
{ ml_CurrPos -= mr_CurrList.size(); }
return *this; /*******************/
}/*
ZCLinkPoint& operator++()*/
ZCLinkPoint& operator--()
{
if(IsEmpty()){return *this;}
mp_CurrLink = mp_CurrLink->mp_PrevLink ;
if(--ml_CurrPos<1)
{ ml_CurrPos += mr_CurrList.size(); }
return *this;
}/*
ZCLinkPoint& operator--()*/
ZCLinkPoint operator++(int)
{
ZCLinkPoint VO_NowPoint(*this);
if(IsEmpty()){return VO_NowPoint;}
mp_CurrLink = mp_CurrLink->mp_NextLink ;
if(++ml_CurrPos>mr_CurrList.size())
{ ml_CurrPos -= mr_CurrList.size(); }
return VO_NowPoint; /*************/
}/*
ZCLinkPoint operator++(int)*/
ZCLinkPoint operator--(int)
{
ZCLinkPoint VO_NowPoint(*this);
if(IsEmpty()){return VO_NowPoint;}
mp_CurrLink = mp_CurrLink->mp_PrevLink ;
if(--ml_CurrPos<1)
{ ml_CurrPos += mr_CurrList.size(); }
return VO_NowPoint;
}/*
ZCLinkPoint operator--(int)*/
ZCLinkPoint& operator+=(TypeSize AL_Distance)
{
if(IsEmpty()){return *this;}
mp_CurrLink = &((*mp_CurrLink)+AL_Distance) ;
if(ml_CurrPos+=AL_Distance > mr_CurrList.size())
{ ml_CurrPos %= mr_CurrList.size(); }
else if(ml_CurrPos<1) // AL_Distance<0
{ while(ml_CurrPos+= mr_CurrList.size()<1){} }
return *this; /**********************/
}/*
ZCLinkPoint& operator+=(TypeSize AL_Distance)*/
ZCLinkPoint& operator-=(TypeSize AL_Distance)
{
if(IsEmpty()){return *this;}
mp_CurrLink = &((*mp_CurrLink)-AL_Distance);
if(ml_CurrPos-=AL_Distance > mr_CurrList.size())
{ ml_CurrPos %= mr_CurrList.size(); }
else if(ml_CurrPos<1) // AL_Distance>=0
{ while(ml_CurrPos+= mr_CurrList.size()<1){} }
return *this; /***********************/
}/*
ZCLinkPoint& operator-=(TypeSize AL_Distance)*/
ZCLinkPoint& MoveAfter(ZCLinkPoint& rhs, bool AB_Forward=true)
{
if(IsEmpty()){return *this;}
ZCLink* VP_HereLink = /////////////////
(
AB_Forward
? mp_CurrLink->mp_NextLink
: mp_CurrLink->mp_PrevLink
) ;
///////////////////////////////////////
if(&mr_CurrList!=&rhs.mr_CurrList)
{
mr_CurrList.SendOutAfter /********/
(
*mp_CurrLink ,
rhs.mr_CurrList ,
ZCLinkOpt(*rhs.mp_CurrLink)
);
/*********************************/
if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;}
}/*
if(&mr_CurrList!=&rhs.mr_CurrList)*/
// &mr_CurrList == &rhs.mr_CurrList
else if(rhs.mp_CurrLink==mp_CurrLink)
{
if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;}
}/*
else if(rhs.mp_CurrLink==mp_CurrLink)*/
else if(rhs.mp_CurrLink->mp_NextLink==mp_CurrLink)
{
// 이미 rhs 의 뒤에 *this 가 있는 경우.
if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;}
}/*
else if(rhs.mp_CurrLink->mp_NextLink==mp_CurrLink)*/
else if(mp_CurrLink->mp_NextLink==rhs.mp_CurrLink)
{
// *this 뒤에 rhs 가 있어서 위치를 맞바꾸는 경우.
mr_CurrList.SwapLinkNext( *mp_CurrLink ) ;
if(--rhs.ml_CurrPos<1)
{ rhs.ml_CurrPos += rhs.mr_CurrList.size(); }
if(AB_Forward)
{
++ml_CurrPos; VP_HereLink = mp_CurrLink;
}
else{ --ml_CurrPos; }
}/*
else if(mp_CurrLink->mp_NextLink==rhs.mp_CurrLink)*/
else //////////////////////////////////////////
{
if(ml_CurrPos<rhs.ml_CurrPos)
{ --rhs.ml_CurrPos; }
mr_CurrList.SendOutAfter /****************/
(
*mp_CurrLink, mr_CurrList, ZCLinkOpt(*mp_CurrLink)
);
if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;}
}
rhs.mp_CurrLink = VP_HereLink ; return *this ;
}/*
ZCLinkPoint& MoveAfter (ZCLinkPoint& rhs, bool AB_Forward=true)*/
ZCLinkPoint& MoveBefore(ZCLinkPoint& rhs, bool AB_Forward=true)
{
if(IsEmpty()){return *this;}
ZCLink* VP_HereLink = /////////////////
(
AB_Forward
? mp_CurrLink->mp_NextLink
: mp_CurrLink->mp_PrevLink
) ;
///////////////////////////////////////
if(&mr_CurrList!=&rhs.mr_CurrList)
{
mr_CurrList.SendOutBefore /*******/
(
*mp_CurrLink ,
rhs.mr_CurrList ,
ZCLinkOpt(*rhs.mp_CurrLink)
);
/*********************************/
if(!AB_Forward)
{ml_CurrPos = ml_CurrPos-1;}
++rhs.ml_CurrPos ;
}/*
if(&mr_CurrList!=&rhs.mr_CurrList)*/
// &mr_CurrList == &rhs.mr_CurrList
else if(rhs.mp_CurrLink==mp_CurrLink)
{
if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;}
}/*
else if(rhs.mp_CurrLink==mp_CurrLink)*/
else if(rhs.mp_CurrLink->mp_PrevLink==mp_CurrLink)
{
// 이미 rhs 의 앞에 *this 가 있는 경우.
if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;}
}/*
else if(rhs.mp_CurrLink->mp_PrevLink==mp_CurrLink)*/
else if(mp_CurrLink->mp_PrevLink==rhs.mp_CurrLink)
{
// *this 앞에 rhs 가 있어서 위치를 맞바꾸는 경우.
rhs.mr_CurrList.SwapLinkNext(*rhs.mp_CurrLink) ;
if(++rhs.ml_CurrPos>rhs.mr_CurrList.size())
{ rhs.ml_CurrPos -= rhs.mr_CurrList.size(); }
if(AB_Forward){ ++ml_CurrPos; } else
{ --ml_CurrPos; VP_HereLink = mp_CurrLink; }
}/*
else if(mp_CurrLink->mp_PrevLink==rhs.mp_CurrLink)*/
else //////////////////////////////////////////
{
if(ml_CurrPos>rhs.ml_CurrPos)
{ ++rhs.ml_CurrPos; }
mr_CurrList.SendOutBefore /***************/
(
*mp_CurrLink, mr_CurrList, ZCLinkOpt(*mp_CurrLink)
);
if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;}
}
rhs.mp_CurrLink = VP_HereLink ; return *this ;
}/*
ZCLinkPoint& MoveBefore(ZCLinkPoint& rhs, bool AB_Forward=true)*/
ZCLinkPoint& MoveHead(TypeList& AR_RhsList, bool AB_Forward=true)
{
if(IsEmpty()){return *this;}
ZCLink* VP_HereLink = /////////////////
(
AB_Forward
? mp_CurrLink->mp_NextLink
: mp_CurrLink->mp_PrevLink
) ;
///////////////////////////////////////
if(&mr_CurrList!=&AR_RhsList)
{
mr_CurrList.SendOutAfter /********/
(
*mp_CurrLink, AR_RhsList, ZCLinkOpt(0)
);
/*********************************/
if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;}
}/*
if(&mr_CurrList!=&rhs.mr_CurrList)*/
// &mr_CurrList == &rhs.mr_CurrList
else if(mr_CurrList.mp_HeadLink==mp_CurrLink)
{
// *this 가 이미 머리인 경우.
if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;}
}/*
else if(rhs.mp_CurrLink->mp_NextLink==mp_CurrLink)*/
else //////////////////////////////////////////
{
mr_CurrList.SendOutAfter /****************/
(
*mp_CurrLink, mr_CurrList, ZCLinkOpt(*mp_CurrLink)
);
if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;}
}
mp_CurrLink = VP_HereLink ; return *this ;
}/*
ZCLinkPoint& MoveHead(TypeList& AR_RhsList, bool AB_Forward=true)*/
ZCLinkPoint& MoveTail(TypeList& AR_RhsList, bool AB_Forward=true)
{
if(IsEmpty()){return *this;}
ZCLink* VP_HereLink = /////////////////
(
AB_Forward
? mp_CurrLink->mp_NextLink
: mp_CurrLink->mp_PrevLink
) ;
///////////////////////////////////////
if(&mr_CurrList!=&AR_RhsList)
{
mr_CurrList.SendOutBefore /*******/
(
*mp_CurrLink, AR_RhsList, ZCLinkOpt(0)
);
/*********************************/
if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;}
}/*
if(&mr_CurrList!=&rhs.mr_CurrList)*/
// &mr_CurrList == &rhs.mr_CurrList
else if(AR_RhsList.mp_TailLink==mp_CurrLink)
{
// 이미 *this 가 꼬리인 경우.
if(AB_Forward){ml_CurrPos=1;}else{--ml_CurrPos;}
}/*
else if(AR_RhsList.mp_TailLink==mp_CurrLink)*/
else //////////////////////////////////////////
{
mr_CurrList.SendOutAfter /****************/
(
*mp_CurrLink, mr_CurrList, ZCLinkOpt(*mp_CurrLink)
);
if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;}
}
mp_CurrLink = VP_HereLink ; return *this ;
}/*
ZCLinkPoint& MoveTail(TypeList& AR_RhsList, bool AB_Forward=true)*/
public:
};/*
class ZCLinkPoint*/
public :
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
private :
@ -6770,6 +7144,86 @@ namespace ZNsMain
void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLinkOpt AO_StdOpt)*/
ZtCBaseList& SwapLinkNext(ZCLink& AR_LinkPrev)
{
// 다음 링크와 위치를 맞바꾼다.
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; /***********************************/
}/*
ZtCBaseList& SwapLinkNext(ZCLink& AR_LinkPrev)*/
void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs)
{
// AP_CutLink 를 잘라서 rhs 의 앞에 연결한다.
@ -6820,11 +7274,11 @@ namespace ZNsMain
{
// AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다.
return CutLinkRangeOut
return CutLinkRangeOut /////////////
(
AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), true
);
//////////////////////
////////////////////////////////////
}
ZtCBaseList& SendRangeOutBefore /////////////////////////////////////////
(
@ -7191,6 +7645,77 @@ namespace ZNsMain
###############################################################################*/
template<typename TFunctor> void IterElemLinkRev(TFunctor AO_Functor)
{
ZCLink* VP_LoopLink = mp_TailLink ;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)( *VP_LoopLink );
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_LinkSize)*/
}/*
template<typename TFunctor> void IterElemLinkRev(TFunctor AO_Functor) */
template<typename TFunctor, typename TTypeHelp>
void IterElemLinkRev(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::
ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZCLink* VP_LoopLink=mp_TailLink;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
*VP_LoopLink, ZCCheckRef::PassData(AO_TypeHelp)
);
////////////////////////////////////////////
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_LinkSize)*/
}/*
template<typename TFunctor, typename TTypeHelp>
void IterElemLinkRev(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElemLinkRev
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
/*#############################################################################*/
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp1> ZCCheckRef1;
typedef ZNsMain::ZtCCheckRef<TTypeHelp2> ZCCheckRef2;
ZCLink* VP_LoopLink=mp_TailLink;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
*VP_LoopLink
, ZCCheckRef1::PassData(AO_TypeHelp1)
, ZCCheckRef2::PassData(AO_TypeHelp2)
);
////////////////////////////////////////////
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_LinkSize)*/
}/*
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElemLinkRev
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
###############################################################################*/
ZCLink* GetHeadLinkPtr(){return mp_HeadLink;}
ZCLink* GetTailLinkPtr(){return mp_TailLink;}
@ -7202,21 +7727,6 @@ namespace ZNsMain
const ZCLink* GetLinkPtr(TypeSize AI_Index) const{return mp_HeadLink->GetNextPrevPtr(AI_Index-1);}
ZCLinkOpt GetLinkOpt(TypeSize AI_Index)
{
if(mp_HeadLink==0) return ZCLinkOpt(0);
return ZCLinkOpt(GetLinkPtr(AI_Index));
}
const ZCLinkOpt GetLinkOpt(TypeSize AI_Index) const
{
if(mp_HeadLink==0) return ZCLinkOpt(0);
return ZCLinkOpt(GetLinkPtr(AI_Index));
}/*
const ZCLinkOpt GetLinkOpt(TypeSize AI_Index) const*/
ZCLink& GetHeadLink(TypeSize AI_Distance){return (*mp_HeadLink)+AI_Distance;}
ZCLink& GetTailLink(TypeSize AI_Distance){return (*mp_TailLink)-AI_Distance;}
@ -7228,6 +7738,70 @@ namespace ZNsMain
const ZCLink& GetLink(TypeSize AI_Index) const{return (*mp_HeadLink)+(AI_Index-1);}
ZCLink* HeadPtr(){return mp_HeadLink;}
ZCLink* TailPtr(){return mp_TailLink;}
ZCLink* HeadPtr(TypeSize AI_Distance){return &((*mp_HeadLink)+AI_Distance);}
ZCLink* TailPtr(TypeSize AI_Distance){return &((*mp_TailLink)-AI_Distance);}
const ZCLink* HeadPtr() const{return mp_HeadLink;}
const ZCLink* TailPtr() const{return mp_TailLink;}
const ZCLink* HeadPtr(TypeSize AI_Distance) const{return &((*mp_HeadLink)+AI_Distance);}
const ZCLink* TailPtr(TypeSize AI_Distance) const{return &((*mp_TailLink)-AI_Distance);}
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& _1(){return HeadRef();}
ZCLink& _0(){return TailRef();}
ZCLink& _1(TypeSize AI_Distance){return HeadRef(AI_Distance);}
ZCLink& _0(TypeSize AI_Distance){return TailRef(AI_Distance);}
const ZCLink& _1() const{return HeadRef();}
const ZCLink& _0() const{return TailRef();}
const ZCLink& _1(TypeSize AI_Distance) const{return HeadRef(AI_Distance);}
const ZCLink& _0(TypeSize AI_Distance) const{return TailRef(AI_Distance);}
/***/ ZCLinkOpt GetLinkOpt(TypeSize AI_Index)
{ if(mp_HeadLink==0) return ZCLinkOpt(0); return ZCLinkOpt(GetLinkPtr(AI_Index)); }
const ZCLinkOpt GetLinkOpt(TypeSize AI_Index) const
{ 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

@ -548,6 +548,25 @@ namespace ZNsMain
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkNext(1th)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkNext(VO_ZCBaseListEx10_2.HeadRef());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkNext(last)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkNext(VO_ZCBaseListEx10_2.TailRef());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkNext(last-1)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkNext(VO_ZCBaseListEx10_2.TailRef(1));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2 : Iter Rev"<<endl;
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLinkRev(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/