commit 2025-10-07 10:01 add SendRangeOut() : ZCppMain/ZtCLinkList.H & ZtCObjList.H & ZMainHead.H etc
This commit is contained in:
@ -5308,6 +5308,8 @@ namespace ZNsMain
|
||||
typedef ZtCObjOpt<ZCLink > ZCLinkOpt;
|
||||
typedef ZtCObjOpt<TypeData> ZCDataOpt;
|
||||
public:
|
||||
typedef ZtCBaseList TypeThis ;
|
||||
public:
|
||||
|
||||
typedef ZNsType::ZtCTypeNowCRTP ///////////////////////////////////////
|
||||
<
|
||||
@ -5831,7 +5833,8 @@ namespace ZNsMain
|
||||
ZCLink& AR_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCBaseList& rhs ,
|
||||
ZCLink* AP_RhsStd
|
||||
ZCLink* AP_RhsStd ,
|
||||
bool AB_After=true
|
||||
)
|
||||
/*#####################################################################*/
|
||||
{
|
||||
@ -5841,8 +5844,14 @@ namespace ZNsMain
|
||||
AR_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크.
|
||||
|
||||
AR_CutHead 의 앞과 AR_CutTail 의 뒤에서 연결 상태를 끊고,
|
||||
rhs 의 AP_RhsStd 의 뒤에 삽입한다. AP_RhsStd==0 이면
|
||||
맨 앞에 삽입한다. -- 2025-10-06 09:16
|
||||
rhs 의 AP_RhsStd 의 뒤에 삽입한다.
|
||||
|
||||
AP_RhsStd==0 이면 맨 앞에 삽입한다. -- 2025-10-06 09:16
|
||||
|
||||
■ bool AB_After=true 추가. AB_After==false 이면, rhs 의
|
||||
AP_RhsStd 의 앞에 삽입한다.
|
||||
|
||||
AP_RhsStd==0 이면 맨 뒤에 삽입한다. -- 2025-10-07 08:36
|
||||
|
||||
///////////////////////////////////////////////////////////*/
|
||||
|
||||
@ -5880,24 +5889,47 @@ namespace ZNsMain
|
||||
rhs.mp_HeadLink = &AR_CutHead ;
|
||||
rhs.mp_TailLink = &AR_CutTail ;
|
||||
}
|
||||
else if(AP_RhsStd==0) // 맨 앞에 삽입.
|
||||
else if(AB_After)
|
||||
{
|
||||
ZCLink::JoinLink(&AR_CutTail, rhs.mp_HeadLink);
|
||||
ZCLink::MakeRing(&AR_CutHead, rhs.mp_TailLink);
|
||||
if(AP_RhsStd==0) // 맨 앞에 삽입.
|
||||
{
|
||||
ZCLink::JoinLink(&AR_CutTail, rhs.mp_HeadLink);
|
||||
ZCLink::MakeRing(&AR_CutHead, rhs.mp_TailLink);
|
||||
|
||||
rhs.mp_HeadLink = &AR_CutHead;
|
||||
rhs.mp_HeadLink = &AR_CutHead;
|
||||
}
|
||||
else // AP_RhsStd 의 뒤에 삽입.
|
||||
{
|
||||
ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ;
|
||||
|
||||
ZCLink::JoinLink(AP_RhsStd , &AR_CutHead );
|
||||
ZCLink::JoinLink(&AR_CutTail, VP_RhsStdNext);
|
||||
|
||||
if(AP_RhsStd==rhs.mp_TailLink)
|
||||
{ rhs.mp_TailLink = &AR_CutTail; }
|
||||
}
|
||||
}
|
||||
else // AP_RhsStd 의 뒤에 삽입.
|
||||
else // !AB_After
|
||||
{
|
||||
ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ;
|
||||
if(AP_RhsStd==0) // 맨 뒤에 삽입.
|
||||
{
|
||||
ZCLink::JoinLink(rhs.mp_TailLink, &AR_CutHead);
|
||||
ZCLink::MakeRing(rhs.mp_HeadLink, &AR_CutTail);
|
||||
|
||||
ZCLink::JoinLink(AP_RhsStd , &AR_CutHead );
|
||||
ZCLink::JoinLink(&AR_CutTail, VP_RhsStdNext);
|
||||
rhs.mp_TailLink = &AR_CutTail;
|
||||
}
|
||||
else // AP_RhsStd 의 앞에 삽입.
|
||||
{
|
||||
ZCLink* VP_RhsStdPrev = AP_RhsStd->mp_PrevLink ;
|
||||
|
||||
if(AP_RhsStd==rhs.mp_TailLink)
|
||||
{ rhs.mp_TailLink = &AR_CutTail; }
|
||||
ZCLink::JoinLink(VP_RhsStdPrev, &AR_CutHead);
|
||||
ZCLink::JoinLink(&AR_CutTail , AP_RhsStd );
|
||||
|
||||
if(AP_RhsStd==rhs.mp_HeadLink)
|
||||
{ rhs.mp_HeadLink = &AR_CutHead; }
|
||||
}
|
||||
}/*
|
||||
else*/
|
||||
else // !AB_After*/
|
||||
|
||||
rhs.ml_LinkSize += AL_CutSize; return rhs;
|
||||
}/*
|
||||
@ -5907,7 +5939,8 @@ namespace ZNsMain
|
||||
ZCLink& AR_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCBaseList& rhs ,
|
||||
ZCLink* AP_RhsStd
|
||||
ZCLink* AP_RhsStd ,
|
||||
bool AB_After=true
|
||||
)
|
||||
#######################################################################*/
|
||||
|
||||
@ -6198,7 +6231,7 @@ namespace ZNsMain
|
||||
void DeleteTail(TTypSize AL_DelSize)*/
|
||||
|
||||
|
||||
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)
|
||||
ZtCBaseList& JoinAfter(TypeThis& rhs, ZCLinkOpt AO_StdOpt)
|
||||
{
|
||||
// AP_StdLink 의 뒤에 rhs 를 삽입.
|
||||
|
||||
@ -6247,10 +6280,10 @@ namespace ZNsMain
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
||||
}/*
|
||||
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
ZtCBaseList& JoinAfter(TypeThis& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
|
||||
|
||||
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)
|
||||
ZtCBaseList& JoinBefore(TypeThis& rhs, ZCLinkOpt AO_StdOpt)
|
||||
{
|
||||
// AP_StdLink 의 앞에 rhs 를 삽입.
|
||||
|
||||
@ -6299,54 +6332,51 @@ namespace ZNsMain
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
||||
}/*
|
||||
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
ZtCBaseList& JoinBefore(TypeThis& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
|
||||
|
||||
ZtCBaseList& JoinHead(ZtCBaseList& rhs)
|
||||
ZtCBaseList& JoinHead(TypeThis& rhs)
|
||||
{ if(this==&rhs) return *this; return JoinAfter (rhs, ZCLinkOpt(0)); }
|
||||
ZtCBaseList& JoinTail(ZtCBaseList& rhs)
|
||||
ZtCBaseList& JoinTail(TypeThis& rhs)
|
||||
{ if(this==&rhs) return *this; return JoinBefore(rhs, ZCLinkOpt(0)); }
|
||||
|
||||
|
||||
void SendOutAfter (ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)
|
||||
void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLinkOpt AO_StdOpt)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 뒤에 연결한다.
|
||||
|
||||
CutLink(&AR_CutLink); rhs.AddLinkAfter(AO_StdOpt.Raw(), &AR_CutLink);
|
||||
}/*
|
||||
void SendOutAfter (ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
|
||||
void SendOutBefore(ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)
|
||||
void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLinkOpt AO_StdOpt)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다.
|
||||
|
||||
CutLink(&AR_CutLink); rhs.AddLinkBefore(AO_StdOpt.Raw(), &AR_CutLink);
|
||||
}/*
|
||||
void SendOutBefore(ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
|
||||
|
||||
void SendOutHead(ZCLink& AR_CutLink, ZtCBaseList& rhs)
|
||||
void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 앞에 연결한다.
|
||||
|
||||
SendOutAfter (AR_CutLink, rhs, ZCLinkOpt(0));
|
||||
}
|
||||
void SendOutTail(ZCLink& AR_CutLink, ZtCBaseList& rhs)
|
||||
void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 뒤에 연결한다.
|
||||
|
||||
SendOutBefore(AR_CutLink, rhs, ZCLinkOpt(0));
|
||||
}/*
|
||||
void SendOutTail(ZCLink& AR_CutLink, ZtCBaseList& rhs)*/
|
||||
void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)*/
|
||||
|
||||
|
||||
ZtCBaseList& SendRangeOutAfter //////////////////////////////////////////
|
||||
ZtCBaseList& SendRangeOut ///////////////////////////////////////////////
|
||||
(
|
||||
ZCLink& AR_CutHead,
|
||||
ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCBaseList& rhs ,
|
||||
ZCLinkOpt AO_LinkOpt
|
||||
ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize,
|
||||
TypeThis& rhs , ZCLinkOpt AO_LinkOpt, bool AB_After
|
||||
)
|
||||
/*#####################################################################*/
|
||||
{
|
||||
@ -6354,21 +6384,66 @@ namespace ZNsMain
|
||||
|
||||
return CutLinkRangeOut
|
||||
(
|
||||
AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw()
|
||||
AR_CutHead, AR_CutTail , AI_CutSize,
|
||||
rhs , AO_LinkOpt.Raw(), AB_After
|
||||
);
|
||||
//////////////////////
|
||||
}/*
|
||||
ZtCBaseList& SendRangeOut ///////////////////////////////////////////////
|
||||
(
|
||||
ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize,
|
||||
TypeThis& rhs , ZCLinkOpt AO_LinkOpt, bool AB_After
|
||||
)
|
||||
/*#####################################################################*/
|
||||
|
||||
|
||||
ZtCBaseList& SendRangeOutAfter //////////////////////////////////////////
|
||||
(
|
||||
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
{
|
||||
// AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다.
|
||||
|
||||
return CutLinkRangeOut
|
||||
(
|
||||
AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), true
|
||||
);
|
||||
//////////////////////
|
||||
}/*
|
||||
ZtCBaseList& SendRangeOutAfter //////////////////////////////////////////
|
||||
(
|
||||
ZCLink& AR_CutHead,
|
||||
ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCBaseList& rhs ,
|
||||
ZCLinkOpt AO_LinkOpt
|
||||
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
|
||||
|
||||
ZtCBaseList& SendRangeOutBefore /////////////////////////////////////////
|
||||
(
|
||||
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
{
|
||||
// AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다.
|
||||
|
||||
return CutLinkRangeOut
|
||||
(
|
||||
AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), false
|
||||
);
|
||||
//////////////////////
|
||||
}/*
|
||||
ZtCBaseList& SendRangeOutBefore /////////////////////////////////////////
|
||||
(
|
||||
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
|
||||
|
||||
|
||||
TypeData& GetHeadData(){return mp_HeadLink->mo_DataObjt;}
|
||||
TypeData& GetTailData(){return mp_TailLink->mo_DataObjt;}
|
||||
|
||||
|
Reference in New Issue
Block a user