commit 2025-10-06 08:36 add GetNextPrevPtr() in ZtCLink : ZCppMain/ZtCLinkList.H
This commit is contained in:
@ -108,7 +108,8 @@ namespace ZNsMain
|
||||
ZtCLink& operator=(TypeBase& AR_CBase)*/
|
||||
|
||||
|
||||
TypeBase& operator()(){ return *static_cast<TypeBase*>(this); }
|
||||
/***/ TypeBase& operator()() { return *static_cast< TypeBase*>(this); }
|
||||
const TypeBase& operator()() const{ return *static_cast<const TypeBase*>(this); }
|
||||
|
||||
|
||||
ZtCLink* GetNextPtr(){return mp_NextLink;}
|
||||
@ -168,6 +169,31 @@ namespace ZNsMain
|
||||
const ZtCLink* GetPrevPtr(TypeSize AL_Distance) const*/
|
||||
|
||||
|
||||
ZtCLink* GetNextPrevPtr(TypeSize AL_Distance)
|
||||
{
|
||||
ZtCLink* VP_TmpLink=this;
|
||||
|
||||
if(AL_Distance>=0)
|
||||
{ while(--AL_Distance>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
|
||||
else{ while(++AL_Distance<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
|
||||
|
||||
return VP_TmpLink;
|
||||
}/*
|
||||
ZtCLink* GetNextPrevPtr(TypeSize AL_Distance)*/
|
||||
|
||||
const ZtCLink* GetNextPrevPtr(TypeSize AL_Distance) const
|
||||
{
|
||||
ZtCLink* VP_TmpLink=const_cast<ZtCLink*>(this);
|
||||
|
||||
if(AL_Distance>=0)
|
||||
{ while(--AL_Distance>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
|
||||
else{ while(++AL_Distance<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
|
||||
|
||||
return VP_TmpLink;
|
||||
}/*
|
||||
const ZtCLink* GetNextPrevPtr(TypeSize AL_Distance) const*/
|
||||
|
||||
|
||||
ZtCLink& operator+(TypeSize AL_Distance)
|
||||
{
|
||||
if(AL_Distance>=0)
|
||||
@ -281,7 +307,8 @@ namespace ZNsMain
|
||||
TypeThis& operator=(TypeBase& AR_CBase)*/
|
||||
|
||||
|
||||
TypeBase& operator()(){ return *static_cast<TypeBase*>(this); }
|
||||
/***/ TypeBase& operator()() { return *static_cast< TypeBase*>(this); }
|
||||
const TypeBase& operator()() const{ return *static_cast<const TypeBase*>(this); }
|
||||
|
||||
|
||||
ZtCLink* GetNextPtr(){return mp_NextLink;}
|
||||
@ -341,6 +368,31 @@ namespace ZNsMain
|
||||
const ZtCLink* GetPrevPtr(TypeSize AL_Distance) const*/
|
||||
|
||||
|
||||
ZtCLink* GetNextPrevPtr(TypeSize AL_Distance)
|
||||
{
|
||||
ZtCLink* VP_TmpLink=this;
|
||||
|
||||
if(AL_Distance>=0)
|
||||
{ while(--AL_Distance>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
|
||||
else{ while(++AL_Distance<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
|
||||
|
||||
return VP_TmpLink;
|
||||
}/*
|
||||
ZtCLink* GetNextPrevPtr(TypeSize AL_Distance)*/
|
||||
|
||||
const ZtCLink* GetNextPrevPtr(TypeSize AL_Distance) const
|
||||
{
|
||||
ZtCLink* VP_TmpLink=const_cast<ZtCLink*>(this);
|
||||
|
||||
if(AL_Distance>=0)
|
||||
{ while(--AL_Distance>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
|
||||
else{ while(++AL_Distance<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
|
||||
|
||||
return VP_TmpLink;
|
||||
}/*
|
||||
const ZtCLink* GetNextPrevPtr(TypeSize AL_Distance) const*/
|
||||
|
||||
|
||||
ZtCLink& operator+(TypeSize AL_Distance)
|
||||
{
|
||||
if(AL_Distance>=0)
|
||||
@ -439,8 +491,8 @@ namespace ZNsMain
|
||||
TypeThis& operator=(const TypeThis& rhs)*/
|
||||
|
||||
|
||||
TypeThis& operator()(){ return *this; }
|
||||
|
||||
/***/ TypeThis& operator()() { return *this; }
|
||||
const TypeThis& operator()() const{ return *this; }
|
||||
|
||||
ZtCLink* GetNextPtr(){return mp_NextLink;}
|
||||
ZtCLink* GetPrevPtr(){return mp_PrevLink;}
|
||||
@ -499,6 +551,31 @@ namespace ZNsMain
|
||||
const ZtCLink* GetPrevPtr(TypeSize AL_Distance) const*/
|
||||
|
||||
|
||||
ZtCLink* GetNextPrevPtr(TypeSize AL_Distance)
|
||||
{
|
||||
ZtCLink* VP_TmpLink=this;
|
||||
|
||||
if(AL_Distance>=0)
|
||||
{ while(--AL_Distance>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
|
||||
else{ while(++AL_Distance<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
|
||||
|
||||
return VP_TmpLink;
|
||||
}/*
|
||||
ZtCLink* GetNextPrevPtr(TypeSize AL_Distance)*/
|
||||
|
||||
const ZtCLink* GetNextPrevPtr(TypeSize AL_Distance) const
|
||||
{
|
||||
ZtCLink* VP_TmpLink=const_cast<ZtCLink*>(this);
|
||||
|
||||
if(AL_Distance>=0)
|
||||
{ while(--AL_Distance>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
|
||||
else{ while(++AL_Distance<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
|
||||
|
||||
return VP_TmpLink;
|
||||
}/*
|
||||
const ZtCLink* GetNextPrevPtr(TypeSize AL_Distance) const*/
|
||||
|
||||
|
||||
ZtCLink& operator+(TypeSize AL_Distance)
|
||||
{
|
||||
if(AL_Distance>=0)
|
||||
@ -653,6 +730,31 @@ namespace ZNsMain
|
||||
const ZtCLink* GetPrevPtr(TypeSize AL_Distance) const*/
|
||||
|
||||
|
||||
ZtCLink* GetNextPrevPtr(TypeSize AL_Distance)
|
||||
{
|
||||
ZtCLink* VP_TmpLink=this;
|
||||
|
||||
if(AL_Distance>=0)
|
||||
{ while(--AL_Distance>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
|
||||
else{ while(++AL_Distance<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
|
||||
|
||||
return VP_TmpLink;
|
||||
}/*
|
||||
ZtCLink* GetNextPrevPtr(TypeSize AL_Distance)*/
|
||||
|
||||
const ZtCLink* GetNextPrevPtr(TypeSize AL_Distance) const
|
||||
{
|
||||
ZtCLink* VP_TmpLink=const_cast<ZtCLink*>(this);
|
||||
|
||||
if(AL_Distance>=0)
|
||||
{ while(--AL_Distance>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
|
||||
else{ while(++AL_Distance<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
|
||||
|
||||
return VP_TmpLink;
|
||||
}/*
|
||||
const ZtCLink* GetNextPrevPtr(TypeSize AL_Distance) const*/
|
||||
|
||||
|
||||
ZtCLink& operator+(TypeSize AL_Distance)
|
||||
{
|
||||
if(AL_Distance>=0)
|
||||
@ -1036,6 +1138,110 @@ namespace ZNsMain
|
||||
ZCLink& JoinBefore(ZCLink& AR_LinkNew, ZCLink* AP_LinkStd)*/
|
||||
|
||||
|
||||
ZtCLinkList& JoinAfter(ZtCLinkList& rhs, ZCLink* AP_StdLink)
|
||||
{
|
||||
// AP_StdLink 의 뒤에 rhs 를 삽입.
|
||||
|
||||
if(this==&rhs ) return *this;
|
||||
if(rhs.size()<1) return *this;
|
||||
|
||||
if(AP_StdLink==0) // 맨 앞에 삽입
|
||||
{
|
||||
if(ml_LinkSize<1)
|
||||
{
|
||||
mp_HeadLink = rhs.mp_HeadLink ;
|
||||
mp_TailLink = rhs.mp_TailLink ;
|
||||
ml_LinkSize = rhs.ml_LinkSize ;
|
||||
}
|
||||
else // ml_LinkSize>=1
|
||||
{
|
||||
ZCLink::JoinLink( rhs.mp_TailLink, mp_HeadLink );
|
||||
ZCLink::MakeRing( rhs.mp_HeadLink, mp_TailLink );
|
||||
|
||||
mp_HeadLink = rhs.mp_HeadLink ;
|
||||
ml_LinkSize = rhs.ml_LinkSize ;
|
||||
}/*
|
||||
else // ml_LinkSize>=1*/
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize;
|
||||
|
||||
rhs.mp_HeadLink = 0 ;
|
||||
rhs.mp_TailLink = 0 ;
|
||||
rhs.ml_LinkSize = 0 ;
|
||||
|
||||
return *this;
|
||||
}/*
|
||||
if(AP_StdLink==0)*/
|
||||
|
||||
|
||||
ZCLink* VP_StdNext=AP_StdLink->mp_NextLink;
|
||||
|
||||
ZCLink::JoinLink(AP_StdLink , rhs.mp_HeadLink );
|
||||
ZCLink::JoinLink(rhs.mp_TailLink, VP_StdNext );
|
||||
|
||||
if(AP_StdLink==mp_TailLink)
|
||||
{ mp_TailLink=rhs.mp_TailLink; }
|
||||
|
||||
rhs.mp_HeadLink =0 ;
|
||||
rhs.mp_TailLink =0 ;
|
||||
rhs.ml_LinkSize =0 ;
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
||||
}/*
|
||||
ZtCLinkList& JoinAfter(ZtCLinkList& rhs, ZCLink* AP_StdLink)*/
|
||||
|
||||
|
||||
ZtCLinkList& JoinBefore(ZtCLinkList& rhs, ZCLink* AP_StdLink)
|
||||
{
|
||||
// AP_StdLink 의 앞에 rhs 를 삽입.
|
||||
|
||||
if(this==&rhs ) return *this;
|
||||
if(rhs.size()<1) return *this;
|
||||
|
||||
if(AP_StdLink==0) // 맨 뒤에 삽입
|
||||
{
|
||||
if(ml_LinkSize<1)
|
||||
{
|
||||
mp_HeadLink = rhs.mp_HeadLink ;
|
||||
mp_TailLink = rhs.mp_TailLink ;
|
||||
ml_LinkSize = rhs.ml_LinkSize ;
|
||||
}
|
||||
else // ml_LinkSize>=1
|
||||
{
|
||||
ZCLink::JoinLink(mp_TailLink, rhs.mp_HeadLink );
|
||||
ZCLink::MakeRing(mp_HeadLink, rhs.mp_TailLink );
|
||||
|
||||
mp_TailLink = rhs.mp_TailLink ;
|
||||
ml_LinkSize += rhs.ml_LinkSize ;
|
||||
}/*
|
||||
else // ml_LinkSize>=1*/
|
||||
|
||||
rhs.mp_HeadLink=0;
|
||||
rhs.mp_TailLink=0;
|
||||
rhs.ml_LinkSize=0;
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
||||
}/*
|
||||
if(AP_StdLink==0)*/
|
||||
|
||||
|
||||
ZCLink* VP_StdPrev = AP_StdLink->mp_PrevLink;
|
||||
|
||||
ZCLink::JoinLink( VP_StdPrev , rhs.mp_HeadLink );
|
||||
ZCLink::JoinLink(rhs.mp_TailLink, AP_StdLink );
|
||||
|
||||
if(AP_StdLink==mp_HeadLink)
|
||||
{ mp_HeadLink = rhs.mp_HeadLink; }
|
||||
|
||||
rhs.mp_HeadLink =0 ;
|
||||
rhs.mp_TailLink =0 ;
|
||||
rhs.ml_LinkSize =0 ;
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
||||
}/*
|
||||
ZtCLinkList& JoinBefore(ZtCLinkList& rhs, ZCLink* AP_StdLink)*/
|
||||
|
||||
|
||||
ZCLink& CutLink(ZCLink& AR_CutLink)
|
||||
{
|
||||
if(&AR_CutLink==mp_HeadLink)
|
||||
@ -1084,6 +1290,8 @@ namespace ZNsMain
|
||||
mp_HeadLink=0;
|
||||
mp_TailLink=0;
|
||||
ml_LinkSize=0;
|
||||
|
||||
*this = rhs ;
|
||||
}/*
|
||||
ZtCLinkList(const ZtCLinkList& rhs)*/
|
||||
|
||||
@ -1154,7 +1362,7 @@ namespace ZNsMain
|
||||
|
||||
__for0(TypeSize, i, rhs.size())
|
||||
{
|
||||
**VP_LhsLink = **VP_RhsLink ;
|
||||
*VP_LhsLink = *VP_RhsLink ;
|
||||
|
||||
VP_RhsLink = VP_RhsLink->mp_NextLink;
|
||||
VP_LhsLink = VP_LhsLink->mp_NextLink;
|
||||
@ -1166,8 +1374,10 @@ namespace ZNsMain
|
||||
ZtCLinkList& operator=(const ZtCLinkList& rhs)*/
|
||||
|
||||
|
||||
TypeSize GetSize(){return ml_LinkSize;}
|
||||
TypeSize size (){return ml_LinkSize;}
|
||||
TypeSize GetSize() const{return ml_LinkSize ;}
|
||||
TypeSize size () const{return ml_LinkSize ;}
|
||||
|
||||
bool IsEmpty() const{return ml_LinkSize<1;}
|
||||
|
||||
|
||||
void DeleteAll()
|
||||
@ -1225,6 +1435,15 @@ namespace ZNsMain
|
||||
void Delete(ZCLink& AR_DelLink)*/
|
||||
|
||||
|
||||
ZtCLinkList& JoinAfter (ZtCLinkList& rhs, ZCLink& AR_StdLink)
|
||||
{ return JoinAfter (rhs, &AR_StdLink); }
|
||||
ZtCLinkList& JoinBefore(ZtCLinkList& rhs, ZCLink& AR_StdLink)
|
||||
{ return JoinBefore(rhs, &AR_StdLink); }
|
||||
|
||||
ZtCLinkList& JoinHead(ZtCLinkList& rhs){ return JoinAfter (rhs, 0); }
|
||||
ZtCLinkList& JoinTail(ZtCLinkList& rhs){ return JoinBefore(rhs, 0); }
|
||||
|
||||
|
||||
void SendOutAfter (ZCLink& AR_CutLink, ZtCLinkList& rhs, ZCLink& AR_StdLink)
|
||||
{
|
||||
// AR_CutLink 를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다.
|
||||
|
Reference in New Issue
Block a user