commit 2025-10-11 16:51 add ZtCBaseList::SwapLinkNext() : ZCppMain/ZMainHead.H
This commit is contained in:
@ -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();}
|
||||
|
@ -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)*/
|
||||
|
Reference in New Issue
Block a user