commit 2025-10-05 12:02 add SendOutAfter() & SendOutBefore() etc ZCppMain/ZtCObjList.H

This commit is contained in:
2025-10-05 12:02:59 +09:00
parent bc20d259f5
commit cb73c93360
4 changed files with 380 additions and 163 deletions

View File

@ -5620,7 +5620,7 @@ namespace ZNsMain
return AP_NewLink; /*::::::::::::::::::::*/
}/*
ZCLink* AddTailLink(ZCLink* AP_CLink)*/
ZCLink* AddTailLink(ZCLink* AP_NewLink)*/
ZCLink* AddHeadLink(ZCLink* AP_NewLink)
{
@ -5643,7 +5643,126 @@ namespace ZNsMain
return AP_NewLink; /*::::::::::::::::::::*/
}/*
ZCLink* AddHeadLink(ZCLink* AP_CLink)*/
ZCLink* AddHeadLink(ZCLink* AP_NewLink)*/
ZCLink* AddLinkAfter(ZCLink* AP_StdLink, ZCLink* AP_NewLink)
{
// *this 에 속한 AP_StdLink 의 뒤에, AP_NewLink 를 삽입한다.
// AP_StdLink 이 0 이면, 맨 앞에 삽입한다.
if(AP_StdLink==0) // 맨 앞에 삽입
{
if(ml_LinkSize<1)
{
mp_HeadLink = AP_NewLink;
mp_TailLink = AP_NewLink;
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
}
else
{
ZCLink::JoinLink(AP_NewLink, mp_HeadLink) ;
ZCLink::MakeRing(AP_NewLink, mp_TailLink) ;
mp_HeadLink = AP_NewLink;
}
}
else if(AP_StdLink==mp_TailLink)
{
ZCLink::JoinLink(mp_TailLink, AP_NewLink) ;
ZCLink::MakeRing(mp_HeadLink, AP_NewLink) ;
mp_TailLink = AP_NewLink;
}
else
{
ZCLink* VP_StdNext = AP_StdLink->mp_NextLink ;
ZCLink::JoinLink(AP_StdLink, AP_NewLink) ;
ZCLink::JoinLink(AP_NewLink, VP_StdNext) ;
}
++ml_LinkSize; return AP_NewLink;
}/*
ZCLink* AddLinkAfter(ZCLink* AP_StdLink, ZCLink* AP_NewLink)*/
ZCLink* AddLinkBefore(ZCLink* AP_StdLink, ZCLink* AP_NewLink)
{
// *this 에 속한 AP_StdLink 의 앞에, AP_NewLink 를 삽입한다.
// AP_StdLink 이 0 이면, 맨 뒤에 삽입한다.
if(AP_StdLink==0) // 맨 뒤에 삽입
{
if(ml_LinkSize<1)
{
mp_HeadLink = AP_NewLink;
mp_TailLink = AP_NewLink;
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
}
else
{
ZCLink::JoinLink(mp_TailLink, AP_NewLink) ;
ZCLink::MakeRing(mp_HeadLink, AP_NewLink) ;
mp_TailLink = AP_NewLink;
}
}
else if(AP_StdLink==mp_HeadLink)
{
ZCLink::JoinLink(AP_NewLink, mp_HeadLink) ;
ZCLink::MakeRing(AP_NewLink, mp_TailLink) ;
mp_HeadLink = AP_NewLink;
}
else
{
ZCLink* VP_StdPrev = AP_StdLink->mp_PrevLink ;
ZCLink::JoinLink(VP_StdPrev, AP_NewLink) ;
ZCLink::JoinLink(AP_NewLink, AP_StdLink) ;
}
++ml_LinkSize; return AP_NewLink;
}/*
ZCLink* AddLinkBefore(ZCLink* AP_StdLink, ZCLink* AP_NewLink)*/
void CutLink(ZCLink* AP_StdLink)
{
if(mp_HeadLink==AP_StdLink)
{
if(ml_LinkSize==1)
{
mp_HeadLink = 0;
mp_TailLink = 0;
}
else // ml_LinkSize>1
{
mp_HeadLink = mp_HeadLink->mp_NextLink ;
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
}/*
else*/
}
else if(mp_TailLink==AP_StdLink)
{
mp_TailLink = mp_TailLink->mp_PrevLink ;
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
}
else
{
ZCLink::JoinLink
(AP_StdLink->mp_PrevLink, AP_StdLink->mp_NextLink) ;
}/*
else*/
--ml_LinkSize ;
}/*
void CutLink(ZCLink* AP_StdLink)*/
/*private :*/
@ -6036,6 +6155,39 @@ namespace ZNsMain
{ if(this==&rhs) return *this; return JoinBefore(rhs, 0); }
void SendOutAfter(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)
{
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 뒤에 연결한다.
CutLink(AP_CutLink); rhs.AddLinkAfter(AP_StdLink, AP_CutLink);
}/*
void SendOutAfter(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
void SendOutBefore(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)
{
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다.
CutLink(AP_CutLink); rhs.AddLinkBefore(AP_StdLink, AP_CutLink);
}/*
void SendOutBefore(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
void SendOutHead(ZCLink* AP_CutLink, ZtCBaseList& rhs)
{
// AP_CutLink 를 잘라서 rhs 의 앞에 연결한다.
SendOutAfter (AP_CutLink, rhs, 0);
}
void SendOutTail(ZCLink* AP_CutLink, ZtCBaseList& rhs)
{
// AP_CutLink 를 잘라서 rhs 의 뒤에 연결한다.
SendOutBefore(AP_CutLink, rhs, 0);
}/*
void SendOutTail(ZCLink* AP_CutLink, ZtCBaseList& rhs)*/
TypeData& GetHeadData(){return mp_HeadLink->mo_DataObjt;}
TypeData& GetTailData(){return mp_TailLink->mo_DataObjt;}
@ -6316,12 +6468,27 @@ namespace ZNsMain
###############################################################################*/
ZCLink* GetHeadLinkPtr(){return mp_HeadLink;}
ZCLink* GetTailLinkPtr(){return mp_TailLink;}
const ZCLink* GetHeadLinkPtr() const{return mp_HeadLink;}
const ZCLink* GetTailLinkPtr() const{return mp_TailLink;}
ZCLink* GetLinkPtr(TypeSize AI_Distance) {return mp_HeadLink->GetNextPrevPtr(AI_Distance);}
const ZCLink* GetLinkPtr(TypeSize AI_Distance) const{return mp_HeadLink->GetNextPrevPtr(AI_Distance);}
ZCLink& GetHeadLink(TypeSize AI_Distance){return (*mp_HeadLink)+AI_Distance;}
ZCLink& GetTailLink(TypeSize AI_Distance){return (*mp_TailLink)-AI_Distance;}
const ZCLink& GetHeadLink(TypeSize AI_Distance) const{return (*mp_HeadLink)+AI_Distance;}
const ZCLink& GetTailLink(TypeSize AI_Distance) const{return (*mp_TailLink)-AI_Distance;}
ZCLink& GetLink(TypeSize AI_Distance) {return (*mp_HeadLink)+AI_Distance;}
const ZCLink& GetLink(TypeSize AI_Distance) const{return (*mp_HeadLink)+AI_Distance;}
IterEasy GetHeadIterEasy (){return GetHeadLinkPtr();}
IterEasy GetTailIterEasy (){return GetTailLinkPtr();}