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<ZCLink > ZCLinkOpt;
|
||||||
typedef ZtCObjOpt<TypeData> ZCDataOpt;
|
typedef ZtCObjOpt<TypeData> ZCDataOpt;
|
||||||
public:
|
public:
|
||||||
|
typedef ZtCBaseList TypeThis ;
|
||||||
|
public:
|
||||||
|
|
||||||
typedef ZNsType::ZtCTypeNowCRTP ///////////////////////////////////////
|
typedef ZNsType::ZtCTypeNowCRTP ///////////////////////////////////////
|
||||||
<
|
<
|
||||||
@ -5831,7 +5833,8 @@ namespace ZNsMain
|
|||||||
ZCLink& AR_CutTail ,
|
ZCLink& AR_CutTail ,
|
||||||
TypeSize AL_CutSize ,
|
TypeSize AL_CutSize ,
|
||||||
ZtCBaseList& rhs ,
|
ZtCBaseList& rhs ,
|
||||||
ZCLink* AP_RhsStd
|
ZCLink* AP_RhsStd ,
|
||||||
|
bool AB_After=true
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
{
|
{
|
||||||
@ -5841,8 +5844,14 @@ namespace ZNsMain
|
|||||||
AR_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크.
|
AR_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크.
|
||||||
|
|
||||||
AR_CutHead 의 앞과 AR_CutTail 의 뒤에서 연결 상태를 끊고,
|
AR_CutHead 의 앞과 AR_CutTail 의 뒤에서 연결 상태를 끊고,
|
||||||
rhs 의 AP_RhsStd 의 뒤에 삽입한다. AP_RhsStd==0 이면
|
rhs 의 AP_RhsStd 의 뒤에 삽입한다.
|
||||||
맨 앞에 삽입한다. -- 2025-10-06 09:16
|
|
||||||
|
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,7 +5889,9 @@ namespace ZNsMain
|
|||||||
rhs.mp_HeadLink = &AR_CutHead ;
|
rhs.mp_HeadLink = &AR_CutHead ;
|
||||||
rhs.mp_TailLink = &AR_CutTail ;
|
rhs.mp_TailLink = &AR_CutTail ;
|
||||||
}
|
}
|
||||||
else if(AP_RhsStd==0) // 맨 앞에 삽입.
|
else if(AB_After)
|
||||||
|
{
|
||||||
|
if(AP_RhsStd==0) // 맨 앞에 삽입.
|
||||||
{
|
{
|
||||||
ZCLink::JoinLink(&AR_CutTail, rhs.mp_HeadLink);
|
ZCLink::JoinLink(&AR_CutTail, rhs.mp_HeadLink);
|
||||||
ZCLink::MakeRing(&AR_CutHead, rhs.mp_TailLink);
|
ZCLink::MakeRing(&AR_CutHead, rhs.mp_TailLink);
|
||||||
@ -5896,8 +5907,29 @@ namespace ZNsMain
|
|||||||
|
|
||||||
if(AP_RhsStd==rhs.mp_TailLink)
|
if(AP_RhsStd==rhs.mp_TailLink)
|
||||||
{ rhs.mp_TailLink = &AR_CutTail; }
|
{ rhs.mp_TailLink = &AR_CutTail; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // !AB_After
|
||||||
|
{
|
||||||
|
if(AP_RhsStd==0) // 맨 뒤에 삽입.
|
||||||
|
{
|
||||||
|
ZCLink::JoinLink(rhs.mp_TailLink, &AR_CutHead);
|
||||||
|
ZCLink::MakeRing(rhs.mp_HeadLink, &AR_CutTail);
|
||||||
|
|
||||||
|
rhs.mp_TailLink = &AR_CutTail;
|
||||||
|
}
|
||||||
|
else // AP_RhsStd 의 앞에 삽입.
|
||||||
|
{
|
||||||
|
ZCLink* VP_RhsStdPrev = AP_RhsStd->mp_PrevLink ;
|
||||||
|
|
||||||
|
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;
|
rhs.ml_LinkSize += AL_CutSize; return rhs;
|
||||||
}/*
|
}/*
|
||||||
@ -5907,7 +5939,8 @@ namespace ZNsMain
|
|||||||
ZCLink& AR_CutTail ,
|
ZCLink& AR_CutTail ,
|
||||||
TypeSize AL_CutSize ,
|
TypeSize AL_CutSize ,
|
||||||
ZtCBaseList& rhs ,
|
ZtCBaseList& rhs ,
|
||||||
ZCLink* AP_RhsStd
|
ZCLink* AP_RhsStd ,
|
||||||
|
bool AB_After=true
|
||||||
)
|
)
|
||||||
#######################################################################*/
|
#######################################################################*/
|
||||||
|
|
||||||
@ -6198,7 +6231,7 @@ namespace ZNsMain
|
|||||||
void DeleteTail(TTypSize AL_DelSize)*/
|
void DeleteTail(TTypSize AL_DelSize)*/
|
||||||
|
|
||||||
|
|
||||||
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)
|
ZtCBaseList& JoinAfter(TypeThis& rhs, ZCLinkOpt AO_StdOpt)
|
||||||
{
|
{
|
||||||
// AP_StdLink 의 뒤에 rhs 를 삽입.
|
// AP_StdLink 의 뒤에 rhs 를 삽입.
|
||||||
|
|
||||||
@ -6247,10 +6280,10 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
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 를 삽입.
|
// AP_StdLink 의 앞에 rhs 를 삽입.
|
||||||
|
|
||||||
@ -6299,54 +6332,51 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
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)); }
|
{ 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)); }
|
{ 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 뒤에 연결한다.
|
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 뒤에 연결한다.
|
||||||
|
|
||||||
CutLink(&AR_CutLink); rhs.AddLinkAfter(AO_StdOpt.Raw(), &AR_CutLink);
|
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 앞에 연결한다.
|
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다.
|
||||||
|
|
||||||
CutLink(&AR_CutLink); rhs.AddLinkBefore(AO_StdOpt.Raw(), &AR_CutLink);
|
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 의 앞에 연결한다.
|
// AP_CutLink 를 잘라서 rhs 의 앞에 연결한다.
|
||||||
|
|
||||||
SendOutAfter (AR_CutLink, rhs, ZCLinkOpt(0));
|
SendOutAfter (AR_CutLink, rhs, ZCLinkOpt(0));
|
||||||
}
|
}
|
||||||
void SendOutTail(ZCLink& AR_CutLink, ZtCBaseList& rhs)
|
void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)
|
||||||
{
|
{
|
||||||
// AP_CutLink 를 잘라서 rhs 의 뒤에 연결한다.
|
// AP_CutLink 를 잘라서 rhs 의 뒤에 연결한다.
|
||||||
|
|
||||||
SendOutBefore(AR_CutLink, rhs, ZCLinkOpt(0));
|
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_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize,
|
||||||
ZCLink& AR_CutTail,
|
TypeThis& rhs , ZCLinkOpt AO_LinkOpt, bool AB_After
|
||||||
TypeSize AI_CutSize,
|
|
||||||
ZtCBaseList& rhs ,
|
|
||||||
ZCLinkOpt AO_LinkOpt
|
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
{
|
{
|
||||||
@ -6354,21 +6384,66 @@ namespace ZNsMain
|
|||||||
|
|
||||||
return CutLinkRangeOut
|
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 //////////////////////////////////////////
|
ZtCBaseList& SendRangeOutAfter //////////////////////////////////////////
|
||||||
(
|
(
|
||||||
ZCLink& AR_CutHead,
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
ZCLink& AR_CutTail,
|
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||||
TypeSize AI_CutSize,
|
|
||||||
ZtCBaseList& 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& GetHeadData(){return mp_HeadLink->mo_DataObjt;}
|
||||||
TypeData& GetTailData(){return mp_TailLink->mo_DataObjt;}
|
TypeData& GetTailData(){return mp_TailLink->mo_DataObjt;}
|
||||||
|
|
||||||
|
@ -884,9 +884,11 @@ namespace ZNsMain
|
|||||||
class ZtCLinkList /*#####################################################*/
|
class ZtCLinkList /*#####################################################*/
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
|
typedef ZtCLinkList TypeThis;
|
||||||
|
public :
|
||||||
typedef ZNsType::ZtCTypeNowCRTP ///////////////////////////////////////
|
typedef ZNsType::ZtCTypeNowCRTP ///////////////////////////////////////
|
||||||
<
|
<
|
||||||
ZtCLinkList, typename TTypeCRTP::TypeData, TTypeCRTP::ZEUseCRTP
|
TypeThis, typename TTypeCRTP::TypeData, TTypeCRTP::ZEUseCRTP
|
||||||
>
|
>
|
||||||
ZCTypeNowCRTP ; ///////////////////////////////////////////////////////
|
ZCTypeNowCRTP ; ///////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -1226,7 +1228,7 @@ namespace ZNsMain
|
|||||||
ZCLink& JoinBefore(ZCLink& AR_LinkNew, ZCLink* AP_StdLink)*/
|
ZCLink& JoinBefore(ZCLink& AR_LinkNew, ZCLink* AP_StdLink)*/
|
||||||
|
|
||||||
|
|
||||||
ZtCLinkList& JoinAfter(ZtCLinkList& rhs, ZCLink* AP_StdLink)
|
TypeThis& JoinAfter(TypeThis& rhs, ZCLink* AP_StdLink)
|
||||||
{
|
{
|
||||||
// AP_StdLink 의 뒤에 rhs 를 삽입.
|
// AP_StdLink 의 뒤에 rhs 를 삽입.
|
||||||
|
|
||||||
@ -1274,10 +1276,10 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
||||||
}/*
|
}/*
|
||||||
ZtCLinkList& JoinAfter(ZtCLinkList& rhs, ZCLink* AP_StdLink)*/
|
TypeThis& JoinAfter(TypeThis& rhs, ZCLink* AP_StdLink)*/
|
||||||
|
|
||||||
|
|
||||||
ZtCLinkList& JoinBefore(ZtCLinkList& rhs, ZCLink* AP_StdLink)
|
TypeThis& JoinBefore(TypeThis& rhs, ZCLink* AP_StdLink)
|
||||||
{
|
{
|
||||||
// AP_StdLink 의 앞에 rhs 를 삽입.
|
// AP_StdLink 의 앞에 rhs 를 삽입.
|
||||||
|
|
||||||
@ -1325,7 +1327,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
||||||
}/*
|
}/*
|
||||||
ZtCLinkList& JoinBefore(ZtCLinkList& rhs, ZCLink* AP_StdLink)*/
|
TypeThis& JoinBefore(TypeThis& rhs, ZCLink* AP_StdLink)*/
|
||||||
|
|
||||||
|
|
||||||
ZCLink& CutLink(ZCLink& AR_CutLink)
|
ZCLink& CutLink(ZCLink& AR_CutLink)
|
||||||
@ -1361,13 +1363,11 @@ namespace ZNsMain
|
|||||||
ZCLink& CutLink(ZCLink& AR_CutLink)*/
|
ZCLink& CutLink(ZCLink& AR_CutLink)*/
|
||||||
|
|
||||||
|
|
||||||
ZtCLinkList& CutLinkRangeOut /*#######################################*/
|
TypeThis& CutLinkRangeOut /*##########################################*/
|
||||||
(
|
(
|
||||||
ZCLink& AR_CutHead ,
|
ZCLink& AR_CutHead , ZCLink& AR_CutTail ,
|
||||||
ZCLink& AR_CutTail ,
|
TypeSize AL_CutSize , TypeThis& rhs ,
|
||||||
TypeSize AL_CutSize ,
|
ZCLink* AP_RhsStd , bool AB_After=true
|
||||||
ZtCLinkList& rhs ,
|
|
||||||
ZCLink* AP_RhsStd
|
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
{
|
{
|
||||||
@ -1377,8 +1377,14 @@ namespace ZNsMain
|
|||||||
AR_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크.
|
AR_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크.
|
||||||
|
|
||||||
AR_CutHead 의 앞과 AR_CutTail 의 뒤에서 연결 상태를 끊고,
|
AR_CutHead 의 앞과 AR_CutTail 의 뒤에서 연결 상태를 끊고,
|
||||||
rhs 의 AP_RhsStd 의 뒤에 삽입한다. AP_RhsStd==0 이면
|
rhs 의 AP_RhsStd 의 뒤에 삽입한다.
|
||||||
맨 앞에 삽입한다. -- 2025-10-06 09:16
|
|
||||||
|
AP_RhsStd==0 이면 맨 앞에 삽입한다. -- 2025-10-06 09:16
|
||||||
|
|
||||||
|
■ bool AB_After=true 추가 -- 2025-10-07 09:37
|
||||||
|
|
||||||
|
AB_After==true 이면, AP_RhsStd 의 뒤에 연결.
|
||||||
|
AB_After==false 이면, AP_RhsStd 의 앞에 연결.
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////*/
|
///////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
@ -1389,18 +1395,29 @@ namespace ZNsMain
|
|||||||
{
|
{
|
||||||
mp_HeadLink=0;
|
mp_HeadLink=0;
|
||||||
}
|
}
|
||||||
else if(&AR_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
else if(&AR_CutHead==mp_HeadLink)
|
||||||
{
|
{
|
||||||
ZCLink::MakeRing
|
ZCLink::MakeRing ////////////
|
||||||
(mp_HeadLink=AR_CutTail.mp_NextLink, mp_TailLink);
|
(
|
||||||
|
mp_HeadLink=AR_CutTail.mp_NextLink, mp_TailLink
|
||||||
|
);
|
||||||
|
/////////////////////////////
|
||||||
}
|
}
|
||||||
else if(&AR_CutTail==mp_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때.
|
else if(&AR_CutTail==mp_TailLink)
|
||||||
{
|
{
|
||||||
ZCLink::MakeRing(mp_HeadLink, mp_TailLink=AR_CutHead.mp_PrevLink);
|
ZCLink::MakeRing ////////////
|
||||||
|
(
|
||||||
|
mp_HeadLink, mp_TailLink=AR_CutHead.mp_PrevLink
|
||||||
|
);
|
||||||
|
/////////////////////////////
|
||||||
}
|
}
|
||||||
else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때.
|
else
|
||||||
{
|
{
|
||||||
ZCLink::JoinLink(AR_CutHead.mp_PrevLink, AR_CutTail.mp_NextLink);
|
ZCLink::JoinLink ////////////
|
||||||
|
(
|
||||||
|
AR_CutHead.mp_PrevLink, AR_CutTail.mp_NextLink
|
||||||
|
);
|
||||||
|
/////////////////////////////
|
||||||
}/*
|
}/*
|
||||||
else*/
|
else*/
|
||||||
|
|
||||||
@ -1409,21 +1426,21 @@ namespace ZNsMain
|
|||||||
|
|
||||||
if(rhs.size()<1)
|
if(rhs.size()<1)
|
||||||
{
|
{
|
||||||
// AP_CutHead 과 AP_CutTail 을 연결하여 이중 원형 연결리스트가 되도록 한다.
|
|
||||||
|
|
||||||
ZCLink::MakeRing(&AR_CutHead, &AR_CutTail);
|
ZCLink::MakeRing(&AR_CutHead, &AR_CutTail);
|
||||||
|
|
||||||
rhs.mp_HeadLink = &AR_CutHead ;
|
rhs.mp_HeadLink = &AR_CutHead ;
|
||||||
rhs.mp_TailLink = &AR_CutTail ;
|
rhs.mp_TailLink = &AR_CutTail ;
|
||||||
}
|
}
|
||||||
else if(AP_RhsStd==0) // 맨 앞에 삽입.
|
else if(AB_After) // AP_RhsStd 뒤에 삽입.
|
||||||
|
{
|
||||||
|
if(AP_RhsStd==0) // 맨 앞에 삽입.
|
||||||
{
|
{
|
||||||
ZCLink::JoinLink(&AR_CutTail, rhs.mp_HeadLink);
|
ZCLink::JoinLink(&AR_CutTail, rhs.mp_HeadLink);
|
||||||
ZCLink::MakeRing(&AR_CutHead, rhs.mp_TailLink);
|
ZCLink::MakeRing(&AR_CutHead, rhs.mp_TailLink);
|
||||||
|
|
||||||
rhs.mp_HeadLink = &AR_CutHead;
|
rhs.mp_HeadLink = &AR_CutHead;
|
||||||
}
|
}
|
||||||
else // AP_RhsStd 의 뒤에 삽입.
|
else
|
||||||
{
|
{
|
||||||
ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ;
|
ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ;
|
||||||
|
|
||||||
@ -1432,18 +1449,37 @@ namespace ZNsMain
|
|||||||
|
|
||||||
if(AP_RhsStd==rhs.mp_TailLink)
|
if(AP_RhsStd==rhs.mp_TailLink)
|
||||||
{ rhs.mp_TailLink = &AR_CutTail; }
|
{ rhs.mp_TailLink = &AR_CutTail; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // !AB_After : AP_RhsStd 앞에 삽입.
|
||||||
|
{
|
||||||
|
if(AP_RhsStd==0) // 맨 뒤에 삽입.
|
||||||
|
{
|
||||||
|
ZCLink::JoinLink(rhs.mp_TailLink, &AR_CutHead);
|
||||||
|
ZCLink::MakeRing(rhs.mp_HeadLink, &AR_CutTail);
|
||||||
|
|
||||||
|
rhs.mp_TailLink = &AR_CutTail;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ZCLink* VP_RhsStdPrev = AP_RhsStd->mp_PrevLink ;
|
||||||
|
|
||||||
|
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 : AP_RhsStd 앞에 삽입.*/
|
||||||
|
|
||||||
rhs.ml_LinkSize += AL_CutSize; return rhs;
|
rhs.ml_LinkSize += AL_CutSize; return rhs;
|
||||||
}/*
|
}/*
|
||||||
ZtCLinkList& CutLinkRangeOut ###########################################
|
TypeThis& CutLinkRangeOut ###########################################
|
||||||
(
|
(
|
||||||
ZCLink& AR_CutHead ,
|
ZCLink& AR_CutHead , ZCLink& AR_CutTail ,
|
||||||
ZCLink& AR_CutTail ,
|
TypeSize AL_CutSize , TypeThis& rhs ,
|
||||||
TypeSize AL_CutSize ,
|
ZCLink* AP_RhsStd , bool AB_After=true
|
||||||
ZtCLinkList& rhs ,
|
|
||||||
ZCLink* AP_RhsStd
|
|
||||||
)
|
)
|
||||||
#######################################################################*/
|
#######################################################################*/
|
||||||
|
|
||||||
@ -1476,7 +1512,7 @@ namespace ZNsMain
|
|||||||
~ZtCLinkList()*/
|
~ZtCLinkList()*/
|
||||||
|
|
||||||
|
|
||||||
ZtCLinkList& operator=(const ZtCLinkList& rhs)
|
TypeThis& operator=(const TypeThis& rhs)
|
||||||
{
|
{
|
||||||
if(this==&rhs) return *this;
|
if(this==&rhs) return *this;
|
||||||
|
|
||||||
@ -1550,7 +1586,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}/*
|
}/*
|
||||||
ZtCLinkList& operator=(const ZtCLinkList& rhs)*/
|
TypeThis& operator=(const TypeThis& rhs)*/
|
||||||
|
|
||||||
|
|
||||||
TypeSize GetSize() const{return ml_LinkSize ;}
|
TypeSize GetSize() const{return ml_LinkSize ;}
|
||||||
@ -1615,54 +1651,75 @@ namespace ZNsMain
|
|||||||
void Delete(ZCLink& AR_DelLink)*/
|
void Delete(ZCLink& AR_DelLink)*/
|
||||||
|
|
||||||
|
|
||||||
ZtCLinkList& JoinAfter (ZtCLinkList& rhs, ZCLink& AR_StdLink)
|
TypeThis& JoinAfter (TypeThis& rhs, ZCLink& AR_StdLink)
|
||||||
{ return JoinAfter (rhs, &AR_StdLink); }
|
{ return JoinAfter (rhs, &AR_StdLink); }
|
||||||
ZtCLinkList& JoinBefore(ZtCLinkList& rhs, ZCLink& AR_StdLink)
|
TypeThis& JoinBefore(TypeThis& rhs, ZCLink& AR_StdLink)
|
||||||
{ return JoinBefore(rhs, &AR_StdLink); }
|
{ return JoinBefore(rhs, &AR_StdLink); }
|
||||||
|
|
||||||
ZtCLinkList& JoinHead(ZtCLinkList& rhs){ return JoinAfter (rhs, 0); }
|
TypeThis& JoinHead(TypeThis& rhs){ return JoinAfter (rhs, 0); }
|
||||||
ZtCLinkList& JoinTail(ZtCLinkList& rhs){ return JoinBefore(rhs, 0); }
|
TypeThis& JoinTail(TypeThis& rhs){ return JoinBefore(rhs, 0); }
|
||||||
|
|
||||||
|
|
||||||
void SendOutAfter (ZCLink& AR_CutLink, ZtCLinkList& rhs, ZCLink& AR_StdLink)
|
void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)
|
||||||
{
|
{
|
||||||
// AR_CutLink 를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다.
|
// AR_CutLink 를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다.
|
||||||
|
|
||||||
CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, &AR_StdLink);
|
CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, &AR_StdLink);
|
||||||
}/*
|
}/*
|
||||||
void SendOutAfter (ZCLink& AR_CutLink, ZtCLinkList& rhs, ZCLink& AR_StdLink)*/
|
void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/
|
||||||
|
|
||||||
void SendOutBefore(ZCLink& AR_CutLink, ZtCLinkList& rhs, ZCLink& AR_StdLink)
|
void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)
|
||||||
{
|
{
|
||||||
// AR_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다.
|
// AR_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다.
|
||||||
|
|
||||||
CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, &AR_StdLink);
|
CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, &AR_StdLink);
|
||||||
}/*
|
}/*
|
||||||
void SendOutBefore(ZCLink& AR_CutLink, ZtCLinkList& rhs, ZCLink& AR_StdLink)*/
|
void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/
|
||||||
|
|
||||||
|
|
||||||
void SendOutHead(ZCLink& AR_CutLink, ZtCLinkList& rhs)
|
void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs)
|
||||||
{
|
{
|
||||||
// AR_CutLink 를 잘라서 rhs 의 앞에 연결한다.
|
// AR_CutLink 를 잘라서 rhs 의 앞에 연결한다.
|
||||||
|
|
||||||
CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, 0);
|
CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, 0);
|
||||||
}
|
}
|
||||||
void SendOutTail(ZCLink& AR_CutLink, ZtCLinkList& rhs)
|
void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)
|
||||||
{
|
{
|
||||||
// AR_CutLink 를 잘라서 rhs 의 뒤에 연결한다.
|
// AR_CutLink 를 잘라서 rhs 의 뒤에 연결한다.
|
||||||
|
|
||||||
CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, 0);
|
CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, 0);
|
||||||
}/*
|
}/*
|
||||||
void SendOutTail(ZCLink& AR_CutLink, ZtCLinkList& rhs)*/
|
void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)*/
|
||||||
|
|
||||||
|
|
||||||
ZtCLinkList& SendRangeOutAfter //////////////////////////////////////////
|
TypeThis& SendRangeOut //////////////////////////////////////////////////
|
||||||
(
|
(
|
||||||
ZCLink& AR_CutHead,
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
ZCLink& AR_CutTail,
|
TypeSize AI_CutSize, TypeThis& rhs ,
|
||||||
TypeSize AI_CutSize,
|
ZCLinkOpt AO_LinkOpt, bool AB_After
|
||||||
ZtCLinkList& rhs ,
|
)
|
||||||
ZCLinkOpt AO_LinkOpt
|
/*#####################################################################*/
|
||||||
|
{
|
||||||
|
return CutLinkRangeOut
|
||||||
|
(
|
||||||
|
AR_CutHead, AR_CutTail , AI_CutSize,
|
||||||
|
rhs , AO_LinkOpt.Raw(), AB_After
|
||||||
|
);
|
||||||
|
//////////////////////
|
||||||
|
}/*
|
||||||
|
TypeThis& SendRangeOutAfter /////////////////////////////////////////////
|
||||||
|
(
|
||||||
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
|
TypeSize AI_CutSize, TypeThis& rhs ,
|
||||||
|
ZCLinkOpt AO_LinkOpt, bool AB_After
|
||||||
|
)
|
||||||
|
/*#####################################################################*/
|
||||||
|
|
||||||
|
|
||||||
|
TypeThis& SendRangeOutAfter /////////////////////////////////////////////
|
||||||
|
(
|
||||||
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
|
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
{
|
{
|
||||||
@ -1670,17 +1727,39 @@ namespace ZNsMain
|
|||||||
|
|
||||||
return CutLinkRangeOut
|
return CutLinkRangeOut
|
||||||
(
|
(
|
||||||
AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw()
|
AR_CutHead, AR_CutTail , AI_CutSize,
|
||||||
|
rhs , AO_LinkOpt.Raw(), true
|
||||||
);
|
);
|
||||||
//////////////////////
|
//////////////////////
|
||||||
}/*
|
}/*
|
||||||
ZtCLinkList& SendRangeOutAfter //////////////////////////////////////////
|
TypeThis& SendRangeOutAfter /////////////////////////////////////////////
|
||||||
(
|
(
|
||||||
ZCLink& AR_CutHead,
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
ZCLink& AR_CutTail,
|
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||||
TypeSize AI_CutSize,
|
)
|
||||||
ZtCLinkList& rhs ,
|
/*#####################################################################*/
|
||||||
ZCLinkOpt AO_LinkOpt
|
|
||||||
|
|
||||||
|
TypeThis& 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
|
||||||
|
);
|
||||||
|
//////////////////////
|
||||||
|
}/*
|
||||||
|
TypeThis& SendRangeOutBefore ////////////////////////////////////////////
|
||||||
|
(
|
||||||
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
|
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
|
|
||||||
@ -1845,11 +1924,11 @@ namespace ZNsMain
|
|||||||
class ZtCLinkMoveList /*#################################################*/
|
class ZtCLinkMoveList /*#################################################*/
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
typedef ZtCLinkMoveList ZCMoveList;
|
typedef ZtCLinkMoveList TypeThis;
|
||||||
public :
|
public :
|
||||||
typedef ZNsType::ZtCTypeNowCRTP ///////////////////////////////////////
|
typedef ZNsType::ZtCTypeNowCRTP ///////////////////////////////////////
|
||||||
<
|
<
|
||||||
ZCMoveList, typename TTypeCRTP::TypeData, TTypeCRTP::ZEUseCRTP
|
TypeThis, typename TTypeCRTP::TypeData, TTypeCRTP::ZEUseCRTP
|
||||||
>
|
>
|
||||||
ZCTypeNowCRTP ; ///////////////////////////////////////////////////////
|
ZCTypeNowCRTP ; ///////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -2134,7 +2213,7 @@ namespace ZNsMain
|
|||||||
ZCLink& JoinBefore(ZCLink& AR_LinkNew, ZCLink* AP_StdLink)*/
|
ZCLink& JoinBefore(ZCLink& AR_LinkNew, ZCLink* AP_StdLink)*/
|
||||||
|
|
||||||
|
|
||||||
ZCMoveList& JoinAfter (ZCMoveList& rhs, ZCLink* AP_StdLink)
|
TypeThis& JoinAfter (TypeThis& rhs, ZCLink* AP_StdLink)
|
||||||
{
|
{
|
||||||
// AP_StdLink 의 뒤에 rhs 를 삽입.
|
// AP_StdLink 의 뒤에 rhs 를 삽입.
|
||||||
// AP_StdLink==0 이면 맨 앞에 삽입.
|
// AP_StdLink==0 이면 맨 앞에 삽입.
|
||||||
@ -2159,10 +2238,10 @@ namespace ZNsMain
|
|||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}/*
|
}/*
|
||||||
ZCMoveList& JoinAfter (ZCMoveList& rhs, ZCLink* AP_StdLink)*/
|
TypeThis& JoinAfter (TypeThis& rhs, ZCLink* AP_StdLink)*/
|
||||||
|
|
||||||
|
|
||||||
ZCMoveList& JoinBefore(ZCMoveList& rhs, ZCLink* AP_StdLink)
|
TypeThis& JoinBefore(TypeThis& rhs, ZCLink* AP_StdLink)
|
||||||
{
|
{
|
||||||
// AP_StdLink 의 앞에 rhs 를 삽입.
|
// AP_StdLink 의 앞에 rhs 를 삽입.
|
||||||
// AP_StdLink==0 이면 맨 뒤에 삽입.
|
// AP_StdLink==0 이면 맨 뒤에 삽입.
|
||||||
@ -2187,7 +2266,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}/*
|
}/*
|
||||||
ZCMoveList& JoinBefore(ZCMoveList& rhs, ZCLink* AP_StdLink)*/
|
TypeThis& JoinBefore(TypeThis& rhs, ZCLink* AP_StdLink)*/
|
||||||
|
|
||||||
|
|
||||||
ZCLink& CutLink(ZCLink& AR_CutLink)
|
ZCLink& CutLink(ZCLink& AR_CutLink)
|
||||||
@ -2200,13 +2279,14 @@ namespace ZNsMain
|
|||||||
ZCLink& CutLink(ZCLink& AR_CutLink)*/
|
ZCLink& CutLink(ZCLink& AR_CutLink)*/
|
||||||
|
|
||||||
|
|
||||||
ZCMoveList& CutLinkRangeOut /*########################################*/
|
TypeThis& CutLinkRangeOut /*##########################################*/
|
||||||
(
|
(
|
||||||
ZCLink& AR_CutHead ,
|
ZCLink& AR_CutHead ,
|
||||||
ZCLink& AR_CutTail ,
|
ZCLink& AR_CutTail ,
|
||||||
TypeSize AL_CutSize ,
|
TypeSize AL_CutSize ,
|
||||||
ZCMoveList& rhs ,
|
TypeThis& rhs ,
|
||||||
ZCLink* AP_RhsStd
|
ZCLink* AP_RhsStd ,
|
||||||
|
bool AB_After=true
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
{
|
{
|
||||||
@ -2220,6 +2300,11 @@ namespace ZNsMain
|
|||||||
|
|
||||||
AP_RhsStd==0 이면 맨 앞에 삽입한다. -- 2025-10-06 09:16
|
AP_RhsStd==0 이면 맨 앞에 삽입한다. -- 2025-10-06 09:16
|
||||||
|
|
||||||
|
■ bool AB_After=true 추가. -- 2025-10-07 09:26
|
||||||
|
|
||||||
|
AB_After==true 이면 AP_RhsStd 의 뒤에 삽입.
|
||||||
|
AB_After==false 이면 AP_RhsStd 의 앞에 삽입.
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////*/
|
///////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
if(this==&rhs ) return rhs;
|
if(this==&rhs ) return rhs;
|
||||||
@ -2233,6 +2318,8 @@ namespace ZNsMain
|
|||||||
ml_LinkSize -= AL_CutSize;
|
ml_LinkSize -= AL_CutSize;
|
||||||
|
|
||||||
|
|
||||||
|
if(AB_After)
|
||||||
|
{
|
||||||
// rhs 의 AP_RhsStd 의 뒤에 삽입.
|
// rhs 의 AP_RhsStd 의 뒤에 삽입.
|
||||||
// AP_RhsStd==0 이면 rhs 의 맨 앞에 삽입.
|
// AP_RhsStd==0 이면 rhs 의 맨 앞에 삽입.
|
||||||
|
|
||||||
@ -2242,16 +2329,30 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ZCLink::JoinLink(AP_RhsStd , &AR_CutHead );
|
ZCLink::JoinLink(AP_RhsStd , &AR_CutHead );
|
||||||
ZCLink::JoinLink(&AR_CutTail, VP_RhsStdNext);
|
ZCLink::JoinLink(&AR_CutTail, VP_RhsStdNext);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// rhs 의 AP_RhsStd 의 앞에 삽입.
|
||||||
|
// AP_RhsStd==0 이면 rhs 의 맨 뒤에 삽입.
|
||||||
|
|
||||||
|
if(AP_RhsStd==0) AP_RhsStd=&rhs.mo_TailFake ;
|
||||||
|
|
||||||
|
ZCLink* VP_RhsStdPrev=AP_RhsStd->mp_PrevLink;
|
||||||
|
|
||||||
|
ZCLink::JoinLink(VP_RhsStdPrev, &AR_CutHead);
|
||||||
|
ZCLink::JoinLink(&AR_CutTail , AP_RhsStd );
|
||||||
|
}
|
||||||
|
|
||||||
rhs.ml_LinkSize += AL_CutSize; return rhs;
|
rhs.ml_LinkSize += AL_CutSize; return rhs;
|
||||||
}/*
|
}/*
|
||||||
ZCMoveList& CutLinkRangeOut ############################################
|
TypeThis& CutLinkRangeOut ##############################################
|
||||||
(
|
(
|
||||||
ZCLink& AR_CutHead ,
|
ZCLink& AR_CutHead ,
|
||||||
ZCLink& AR_CutTail ,
|
ZCLink& AR_CutTail ,
|
||||||
TypeSize AL_CutSize ,
|
TypeSize AL_CutSize ,
|
||||||
ZCMoveList& rhs ,
|
TypeThis& rhs ,
|
||||||
ZCLink* AP_RhsStd
|
ZCLink* AP_RhsStd ,
|
||||||
|
bool AB_After=true
|
||||||
)
|
)
|
||||||
#######################################################################*/
|
#######################################################################*/
|
||||||
|
|
||||||
@ -2284,7 +2385,7 @@ namespace ZNsMain
|
|||||||
~ZtCLinkMoveList()*/
|
~ZtCLinkMoveList()*/
|
||||||
|
|
||||||
|
|
||||||
ZCMoveList& operator=(const ZCMoveList& rhs)
|
TypeThis& operator=(const TypeThis& rhs)
|
||||||
{
|
{
|
||||||
if(this==&rhs) return *this;
|
if(this==&rhs) return *this;
|
||||||
|
|
||||||
@ -2347,7 +2448,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}/*
|
}/*
|
||||||
ZCMoveList& operator=(const ZCMoveList& rhs)*/
|
TypeThis& operator=(const TypeThis& rhs)*/
|
||||||
|
|
||||||
|
|
||||||
TypeSize GetSize() const{return ml_LinkSize ;}
|
TypeSize GetSize() const{return ml_LinkSize ;}
|
||||||
@ -2434,54 +2535,75 @@ namespace ZNsMain
|
|||||||
void Delete(ZCLink& AR_DelLink)*/
|
void Delete(ZCLink& AR_DelLink)*/
|
||||||
|
|
||||||
|
|
||||||
ZCMoveList& JoinAfter (ZCMoveList& rhs, ZCLink& AR_StdLink)
|
TypeThis& JoinAfter (TypeThis& rhs, ZCLink& AR_StdLink)
|
||||||
{ return JoinAfter (rhs, &AR_StdLink); }
|
{ return JoinAfter (rhs, &AR_StdLink); }
|
||||||
ZCMoveList& JoinBefore(ZCMoveList& rhs, ZCLink& AR_StdLink)
|
TypeThis& JoinBefore(TypeThis& rhs, ZCLink& AR_StdLink)
|
||||||
{ return JoinBefore(rhs, &AR_StdLink); }
|
{ return JoinBefore(rhs, &AR_StdLink); }
|
||||||
|
|
||||||
ZCMoveList& JoinHead(ZCMoveList& rhs){ return JoinAfter (rhs, 0); }
|
TypeThis& JoinHead(TypeThis& rhs){ return JoinAfter (rhs, 0); }
|
||||||
ZCMoveList& JoinTail(ZCMoveList& rhs){ return JoinBefore(rhs, 0); }
|
TypeThis& JoinTail(TypeThis& rhs){ return JoinBefore(rhs, 0); }
|
||||||
|
|
||||||
|
|
||||||
void SendOutAfter (ZCLink& AR_CutLink, ZCMoveList& rhs, ZCLink& AR_StdLink)
|
void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)
|
||||||
{
|
{
|
||||||
// AR_CutLink 를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다.
|
// AR_CutLink 를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다.
|
||||||
|
|
||||||
CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, &AR_StdLink);
|
CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, &AR_StdLink);
|
||||||
}/*
|
}/*
|
||||||
void SendOutAfter (ZCLink& AR_CutLink, ZCMoveList& rhs, ZCLink& AR_StdLink)*/
|
void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/
|
||||||
|
|
||||||
void SendOutBefore(ZCLink& AR_CutLink, ZCMoveList& rhs, ZCLink& AR_StdLink)
|
void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)
|
||||||
{
|
{
|
||||||
// AR_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다.
|
// AR_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다.
|
||||||
|
|
||||||
CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, &AR_StdLink);
|
CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, &AR_StdLink);
|
||||||
}/*
|
}/*
|
||||||
void SendOutBefore(ZCLink& AR_CutLink, ZCMoveList& rhs, ZCLink& AR_StdLink)*/
|
void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/
|
||||||
|
|
||||||
|
|
||||||
void SendOutHead(ZCLink& AR_CutLink, ZCMoveList& rhs)
|
void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs)
|
||||||
{
|
{
|
||||||
// AR_CutLink 를 잘라서 rhs 의 앞에 연결한다.
|
// AR_CutLink 를 잘라서 rhs 의 앞에 연결한다.
|
||||||
|
|
||||||
CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, 0);
|
CutLink(AR_CutLink); rhs.JoinAfter (AR_CutLink, 0);
|
||||||
}
|
}
|
||||||
void SendOutTail(ZCLink& AR_CutLink, ZCMoveList& rhs)
|
void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)
|
||||||
{
|
{
|
||||||
// AR_CutLink 를 잘라서 rhs 의 뒤에 연결한다.
|
// AR_CutLink 를 잘라서 rhs 의 뒤에 연결한다.
|
||||||
|
|
||||||
CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, 0);
|
CutLink(AR_CutLink); rhs.JoinBefore(AR_CutLink, 0);
|
||||||
}/*
|
}/*
|
||||||
void SendOutTail(ZCLink& AR_CutLink, ZCMoveList& rhs)*/
|
void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)*/
|
||||||
|
|
||||||
|
|
||||||
ZCMoveList& SendRangeOutAfter ///////////////////////////////////////////
|
TypeThis& SendRangeOut //////////////////////////////////////////////////
|
||||||
(
|
(
|
||||||
ZCLink& AR_CutHead,
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
ZCLink& AR_CutTail,
|
TypeSize AI_CutSize, TypeThis& rhs ,
|
||||||
TypeSize AI_CutSize,
|
ZCLinkOpt AO_LinkOpt, bool AB_After
|
||||||
ZCMoveList& rhs ,
|
)
|
||||||
ZCLinkOpt AO_LinkOpt
|
/*#####################################################################*/
|
||||||
|
{
|
||||||
|
return CutLinkRangeOut
|
||||||
|
(
|
||||||
|
AR_CutHead, AR_CutTail , AI_CutSize,
|
||||||
|
rhs , AO_LinkOpt.Raw(), AB_After
|
||||||
|
);
|
||||||
|
//////////////////////
|
||||||
|
}/*
|
||||||
|
TypeThis& SendRangeOut //////////////////////////////////////////////////
|
||||||
|
(
|
||||||
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
|
TypeSize AI_CutSize, TypeThis& rhs ,
|
||||||
|
ZCLinkOpt AO_LinkOpt, bool AB_After
|
||||||
|
)
|
||||||
|
/*#####################################################################*/
|
||||||
|
|
||||||
|
|
||||||
|
TypeThis& SendRangeOutAfter /////////////////////////////////////////////
|
||||||
|
(
|
||||||
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
|
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
{
|
{
|
||||||
@ -2489,17 +2611,31 @@ namespace ZNsMain
|
|||||||
|
|
||||||
return CutLinkRangeOut
|
return CutLinkRangeOut
|
||||||
(
|
(
|
||||||
AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw()
|
AR_CutHead, AR_CutTail , AI_CutSize,
|
||||||
|
rhs , AO_LinkOpt.Raw(), true
|
||||||
|
);
|
||||||
|
//////////////////////
|
||||||
|
}
|
||||||
|
TypeThis& 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
|
||||||
);
|
);
|
||||||
//////////////////////
|
//////////////////////
|
||||||
}/*
|
}/*
|
||||||
ZCMoveList& SendRangeOutAfter ///////////////////////////////////////////
|
TypeThis& SendRangeOutBefore ////////////////////////////////////////////
|
||||||
(
|
(
|
||||||
ZCLink& AR_CutHead,
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
ZCLink& AR_CutTail,
|
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||||
TypeSize AI_CutSize,
|
|
||||||
ZCMoveList& rhs ,
|
|
||||||
ZCLinkOpt AO_LinkOpt
|
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
|
|
||||||
|
@ -790,6 +790,8 @@ namespace ZNsMain
|
|||||||
typedef TTypSize TypeSize ;
|
typedef TTypSize TypeSize ;
|
||||||
typedef TMoveObj TypeMoveObj;
|
typedef TMoveObj TypeMoveObj;
|
||||||
public:
|
public:
|
||||||
|
typedef ZtCObjList TypeThis ;
|
||||||
|
public:
|
||||||
class ZCIterator;
|
class ZCIterator;
|
||||||
class ZCLink ;
|
class ZCLink ;
|
||||||
public:
|
public:
|
||||||
@ -1213,17 +1215,18 @@ namespace ZNsMain
|
|||||||
protected: ZCLink* CutLink(ZCLink* AP_CutLink)*/
|
protected: ZCLink* CutLink(ZCLink* AP_CutLink)*/
|
||||||
|
|
||||||
|
|
||||||
ZtCObjList& CutLink /*########################################################*/
|
TypeThis& CutLink /*##########################################################*/
|
||||||
(
|
(
|
||||||
ZCLink* AP_CutHead ,
|
ZCLink* AP_CutHead ,
|
||||||
ZCLink* AP_CutTail ,
|
ZCLink* AP_CutTail ,
|
||||||
TypeSize AL_CutSize ,
|
TypeSize AL_CutSize ,
|
||||||
ZtCObjList& ARR_StoreList
|
TypeThis& ARR_StoreList
|
||||||
)
|
)
|
||||||
/*#############################################################################*/
|
/*#############################################################################*/
|
||||||
{
|
{
|
||||||
// AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크
|
// AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크
|
||||||
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크
|
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크
|
||||||
|
// ARR_StoreList 은 비어 있어야 한다.
|
||||||
|
|
||||||
if(this==&ARR_StoreList) return *this ;
|
if(this==&ARR_StoreList) return *this ;
|
||||||
|
|
||||||
@ -1235,72 +1238,76 @@ namespace ZNsMain
|
|||||||
{
|
{
|
||||||
mp_HeadLink=0; // 모든 링크를 삭제할 때.
|
mp_HeadLink=0; // 모든 링크를 삭제할 때.
|
||||||
}
|
}
|
||||||
else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
else if(AP_CutHead==mp_HeadLink)
|
||||||
{
|
{
|
||||||
ZCLink::MakeRing
|
ZCLink::MakeRing
|
||||||
(mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink);
|
(
|
||||||
|
mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink
|
||||||
|
);
|
||||||
|
////////////////
|
||||||
}
|
}
|
||||||
else if(AP_CutTail==VP_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때.
|
else if(AP_CutTail==VP_TailLink)
|
||||||
{
|
{
|
||||||
ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink);
|
ZCLink::MakeRing
|
||||||
|
(
|
||||||
|
mp_HeadLink, AP_CutHead->mp_PrevLink
|
||||||
|
);
|
||||||
|
////////////////
|
||||||
}
|
}
|
||||||
else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때.
|
else
|
||||||
{
|
{
|
||||||
ZCLink::JoinLink(AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink);
|
ZCLink::JoinLink
|
||||||
}/*
|
(
|
||||||
else*/
|
AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink
|
||||||
|
);
|
||||||
|
////////////////
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ml_LinkSize -= AL_CutSize; ZCLink::MakeRing(AP_CutHead, AP_CutTail);
|
ml_LinkSize -= AL_CutSize;
|
||||||
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
// ARR_StoreList 은 비어 있어야 한다.
|
||||||
|
|
||||||
if(ARR_StoreList.IsEmpty()!=true)
|
ZCLink::MakeRing(AP_CutHead, AP_CutTail);
|
||||||
{
|
|
||||||
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|
||||||
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|
||||||
fileout<<"Error In 'ZtCObjList& CutLink( ZCLink* AP_CutHead , ZCLink* AP_CutTail," <<std::endl;
|
|
||||||
fileout<<" TypeSize AL_CutSize, ZtCObjList& ARR_StoreList" <<std::endl;
|
|
||||||
fileout<<" /****************/ )" <<std::endl;
|
|
||||||
fileout<<"Object ARR_StoreList is not EMPTY !"<<std::endl;
|
|
||||||
fileout.close();
|
|
||||||
|
|
||||||
::exit(1); return ARR_StoreList;
|
|
||||||
}/*
|
|
||||||
if(ARR_StoreList.IsEmpty()!=true)*/
|
|
||||||
|
|
||||||
#endif //_DEBUG
|
|
||||||
|
|
||||||
ARR_StoreList.mp_HeadLink = AP_CutHead ;
|
ARR_StoreList.mp_HeadLink = AP_CutHead ;
|
||||||
ARR_StoreList.ml_LinkSize = AL_CutSize ;
|
ARR_StoreList.ml_LinkSize = AL_CutSize ;
|
||||||
|
|
||||||
return ARR_StoreList;
|
return ARR_StoreList;
|
||||||
}/*
|
}/*
|
||||||
ZtCObjList& CutLink ############################################################
|
TypeThis& CutLink ##############################################################
|
||||||
(
|
(
|
||||||
ZCLink* AP_CutHead ,
|
ZCLink* AP_CutHead ,
|
||||||
ZCLink* AP_CutTail ,
|
ZCLink* AP_CutTail ,
|
||||||
TypeSize AL_CutSize ,
|
TypeSize AL_CutSize ,
|
||||||
ZtCObjList& ARR_StoreList
|
TypeThis& ARR_StoreList
|
||||||
)
|
)
|
||||||
###############################################################################*/
|
###############################################################################*/
|
||||||
|
|
||||||
|
|
||||||
ZtCObjList& CutLinkRangeOut /*################################################*/
|
TypeThis& CutLinkRangeOut /*##################################################*/
|
||||||
(
|
(
|
||||||
ZCLink* AP_CutHead ,
|
ZCLink* AP_CutHead , ZCLink* AP_CutTail ,
|
||||||
ZCLink* AP_CutTail ,
|
TypeSize AL_CutSize , TypeThis& rhs ,
|
||||||
TypeSize AL_CutSize ,
|
ZCLink* AP_RhsStd , bool AB_After=true
|
||||||
ZtCObjList& rhs ,
|
|
||||||
ZCLink* AP_RhsStd
|
|
||||||
)
|
)
|
||||||
/*#############################################################################*/
|
/*#############################################################################*/
|
||||||
{
|
{
|
||||||
// AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크
|
/*//////////////////////////////////////////////////
|
||||||
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크
|
|
||||||
// 이 범위의 링크를 AP_RhsStd 뒤에 붙인다.
|
■ AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크
|
||||||
// AP_RhsStd 이 0 이면, rhs 의 앞에 붙인다.
|
AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크
|
||||||
|
이 범위의 링크를 AP_RhsStd 뒤에 붙인다.
|
||||||
|
|
||||||
|
AP_RhsStd 이 0 이면, rhs 의 앞에 붙인다.
|
||||||
|
|
||||||
|
■ bool AB_After 추가. -- 2025-10-07 09:36
|
||||||
|
|
||||||
|
AB_After==true 이면, AP_RhsStd 의 뒤에 연결.
|
||||||
|
AB_After==false 이면, AP_RhsStd 의 앞에 연결.
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////*/
|
||||||
|
|
||||||
if(this==&rhs ) return *this;
|
if(this==&rhs ) return *this;
|
||||||
if(ml_LinkSize<1) return rhs ;
|
if(ml_LinkSize<1) return rhs ;
|
||||||
@ -1311,38 +1318,53 @@ namespace ZNsMain
|
|||||||
{
|
{
|
||||||
mp_HeadLink=0; // 모든 링크를 삭제할 때.
|
mp_HeadLink=0; // 모든 링크를 삭제할 때.
|
||||||
}
|
}
|
||||||
else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
else if(AP_CutHead==mp_HeadLink)
|
||||||
{
|
{
|
||||||
ZCLink::MakeRing
|
ZCLink::MakeRing ///////////////
|
||||||
(mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink);
|
(
|
||||||
|
mp_HeadLink =
|
||||||
|
AP_CutTail->mp_NextLink,
|
||||||
|
VP_TailLink
|
||||||
|
);
|
||||||
|
////////////////////////////////
|
||||||
}
|
}
|
||||||
else if(AP_CutTail==VP_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때.
|
else if(AP_CutTail==VP_TailLink)
|
||||||
{
|
{
|
||||||
ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink);
|
ZCLink::MakeRing ///////////////
|
||||||
|
(
|
||||||
|
mp_HeadLink,
|
||||||
|
AP_CutHead->mp_PrevLink
|
||||||
|
);
|
||||||
|
////////////////////////////////
|
||||||
}
|
}
|
||||||
else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때.
|
else
|
||||||
{
|
{
|
||||||
ZCLink::JoinLink(AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink);
|
ZCLink::JoinLink ///////////////
|
||||||
}/*
|
(
|
||||||
else*/
|
AP_CutHead->mp_PrevLink,
|
||||||
|
AP_CutTail->mp_NextLink
|
||||||
|
);
|
||||||
|
////////////////////////////////
|
||||||
|
}
|
||||||
|
|
||||||
ml_LinkSize -= AL_CutSize;
|
ml_LinkSize -= AL_CutSize;
|
||||||
|
|
||||||
|
|
||||||
if(rhs.size()<1)
|
if(rhs.size()<1)
|
||||||
{
|
{
|
||||||
// AP_CutHead 과 AP_CutTail 을 연결하여 이중 원형 연결리스트가 되도록 한다.
|
ZCLink::MakeRing
|
||||||
|
( AP_CutHead, AP_CutTail ) ;
|
||||||
ZCLink::MakeRing(AP_CutHead, AP_CutTail);
|
|
||||||
|
|
||||||
rhs.mp_HeadLink = AP_CutHead ;
|
rhs.mp_HeadLink = AP_CutHead ;
|
||||||
}
|
}
|
||||||
else if(AP_RhsStd==0) // 맨 앞에 삽입.
|
else if(AB_After)
|
||||||
{
|
{
|
||||||
|
if(AP_RhsStd==0) // 맨 앞에 삽입.
|
||||||
|
{
|
||||||
|
ZCLink* VP_RhsHead = rhs.mp_HeadLink ;
|
||||||
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink ;
|
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink ;
|
||||||
|
|
||||||
ZCLink::JoinLink(AP_CutTail, rhs.mp_HeadLink);
|
ZCLink::JoinLink(AP_CutTail, VP_RhsHead);
|
||||||
ZCLink::MakeRing(AP_CutHead, VP_RhsTail);
|
ZCLink::MakeRing(AP_CutHead, VP_RhsTail);
|
||||||
|
|
||||||
rhs.mp_HeadLink = AP_CutHead;
|
rhs.mp_HeadLink = AP_CutHead;
|
||||||
@ -1353,18 +1375,38 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ZCLink::JoinLink(AP_RhsStd , AP_CutHead );
|
ZCLink::JoinLink(AP_RhsStd , AP_CutHead );
|
||||||
ZCLink::JoinLink(AP_CutTail, VP_RhsStdNext);
|
ZCLink::JoinLink(AP_CutTail, VP_RhsStdNext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // !AB_After
|
||||||
|
{
|
||||||
|
if(AP_RhsStd==0) // 맨 뒤에 삽입.
|
||||||
|
{
|
||||||
|
ZCLink* VP_RhsHead = rhs.mp_HeadLink ;
|
||||||
|
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink ;
|
||||||
|
|
||||||
|
ZCLink::JoinLink(VP_RhsTail, AP_CutHead);
|
||||||
|
ZCLink::MakeRing(VP_RhsHead, AP_CutTail);
|
||||||
|
}
|
||||||
|
else // AP_RhsStd 의 앞에 삽입.
|
||||||
|
{
|
||||||
|
ZCLink* VP_RhsStdPrev = AP_RhsStd->mp_PrevLink ;
|
||||||
|
|
||||||
|
ZCLink::JoinLink(VP_RhsStdPrev, AP_CutHead);
|
||||||
|
ZCLink::JoinLink(AP_CutTail , AP_RhsStd );
|
||||||
|
|
||||||
|
if(AP_RhsStd==rhs.mp_HeadLink)
|
||||||
|
rhs.mp_HeadLink = AP_CutHead ;
|
||||||
|
}
|
||||||
}/*
|
}/*
|
||||||
else*/
|
else // !AB_After*/
|
||||||
|
|
||||||
rhs.ml_LinkSize += AL_CutSize; return rhs;
|
rhs.ml_LinkSize += AL_CutSize; return rhs;
|
||||||
}/*
|
}/*
|
||||||
ZtCObjList& CutLinkRangeOut ####################################################
|
TypeThis& CutLinkRangeOut ######################################################
|
||||||
(
|
(
|
||||||
ZCLink* AP_CutHead ,
|
ZCLink* AP_CutHead , ZCLink* AP_CutTail ,
|
||||||
ZCLink* AP_CutTail ,
|
TypeSize AL_CutSize , TypeThis& rhs ,
|
||||||
TypeSize AL_CutSize ,
|
ZCLink* AP_RhsStd , bool AB_After=true
|
||||||
ZtCObjList& rhs ,
|
|
||||||
ZCLink* AP_RhsStd
|
|
||||||
)
|
)
|
||||||
###############################################################################*/
|
###############################################################################*/
|
||||||
|
|
||||||
@ -2121,37 +2163,55 @@ namespace ZNsMain
|
|||||||
###############################################################################*/
|
###############################################################################*/
|
||||||
|
|
||||||
|
|
||||||
void SendOutAfter (ZCLink& AR_CutLink, ZtCObjList& rhs, ZCLink& AR_StdLink)
|
void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)
|
||||||
{
|
{
|
||||||
// AR_CutLink 를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다.
|
// AR_CutLink 를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다.
|
||||||
|
|
||||||
CutLink(&AR_CutLink); rhs.JoinAfter(&AR_CutLink, &AR_StdLink);
|
CutLink(&AR_CutLink); rhs.JoinAfter(&AR_CutLink, &AR_StdLink);
|
||||||
}/*
|
}/*
|
||||||
void SendOutAfter (ZCLink& AR_CutLink, ZtCObjList& rhs, ZCLink& AR_StdLink)*/
|
void SendOutAfter (ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/
|
||||||
|
|
||||||
void SendOutBefore(ZCLink& AR_CutLink, ZtCObjList& rhs, ZCLink& AR_StdLink)
|
void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)
|
||||||
{
|
{
|
||||||
// AR_CutLink 를 잘라서 rhs 의 AR_StdLink 앞에 연결한다.
|
// AR_CutLink 를 잘라서 rhs 의 AR_StdLink 앞에 연결한다.
|
||||||
|
|
||||||
CutLink(&AR_CutLink); rhs.JoinBefore(&AR_CutLink, &AR_StdLink);
|
CutLink(&AR_CutLink); rhs.JoinBefore(&AR_CutLink, &AR_StdLink);
|
||||||
}/*
|
}/*
|
||||||
void SendOutBefore(ZCLink& AR_CutLink, ZtCObjList& rhs, ZCLink& AR_StdLink)*/
|
void SendOutBefore(ZCLink& AR_CutLink, TypeThis& rhs, ZCLink& AR_StdLink)*/
|
||||||
|
|
||||||
|
|
||||||
void SendOutHead(ZCLink& AR_CutLink, ZtCObjList& rhs)
|
void SendOutHead(ZCLink& AR_CutLink, TypeThis& rhs)
|
||||||
{ CutLink(&AR_CutLink); rhs.JoinAfter (&AR_CutLink, 0); }
|
{ CutLink(&AR_CutLink); rhs.JoinAfter (&AR_CutLink, 0); }
|
||||||
|
|
||||||
void SendOutTail(ZCLink& AR_CutLink, ZtCObjList& rhs)
|
void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)
|
||||||
{ CutLink(&AR_CutLink); rhs.JoinBefore(&AR_CutLink, 0); }
|
{ CutLink(&AR_CutLink); rhs.JoinBefore(&AR_CutLink, 0); }
|
||||||
|
|
||||||
|
|
||||||
ZtCObjList& SendRangeOutAfter ///////////////////////////////////////////
|
TypeThis& SendRangeOut //////////////////////////////////////////////////
|
||||||
(
|
(
|
||||||
ZCLink& AR_CutHead,
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize,
|
||||||
ZCLink& AR_CutTail,
|
TypeThis& rhs , ZCLinkOpt AO_LinkOpt, bool AB_After
|
||||||
TypeSize AI_CutSize,
|
)
|
||||||
ZtCObjList& rhs ,
|
/*#####################################################################*/
|
||||||
ZCLinkOpt AO_LinkOpt
|
{
|
||||||
|
return CutLinkRangeOut
|
||||||
|
(
|
||||||
|
&AR_CutHead, &AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), AB_After
|
||||||
|
);
|
||||||
|
//////////////////////
|
||||||
|
}/*
|
||||||
|
TypeThis& SendRangeOutAfter /////////////////////////////////////////////
|
||||||
|
(
|
||||||
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
|
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||||
|
)
|
||||||
|
/*#####################################################################*/
|
||||||
|
|
||||||
|
|
||||||
|
TypeThis& SendRangeOutAfter /////////////////////////////////////////////
|
||||||
|
(
|
||||||
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
|
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
{
|
{
|
||||||
@ -2159,17 +2219,29 @@ namespace ZNsMain
|
|||||||
|
|
||||||
return CutLinkRangeOut
|
return CutLinkRangeOut
|
||||||
(
|
(
|
||||||
&AR_CutHead, &AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw()
|
&AR_CutHead, &AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), true
|
||||||
|
);
|
||||||
|
//////////////////////
|
||||||
|
}
|
||||||
|
TypeThis& SendRangeOutBefore ////////////////////////////////////////////
|
||||||
|
(
|
||||||
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
|
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||||
|
)
|
||||||
|
/*#####################################################################*/
|
||||||
|
{
|
||||||
|
// AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AO_ObjOpt 뒤에 연결한다.
|
||||||
|
|
||||||
|
return CutLinkRangeOut
|
||||||
|
(
|
||||||
|
&AR_CutHead, &AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw(), false
|
||||||
);
|
);
|
||||||
//////////////////////
|
//////////////////////
|
||||||
}/*
|
}/*
|
||||||
ZtCObjList& SendRangeOutAfter //////////////////////////////////////////
|
TypeThis& SendRangeOutAfter /////////////////////////////////////////////
|
||||||
(
|
(
|
||||||
ZCLink& AR_CutHead,
|
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||||
ZCLink& AR_CutTail,
|
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||||
TypeSize AI_CutSize,
|
|
||||||
ZtCObjList& rhs ,
|
|
||||||
ZCLinkOpt AO_LinkOpt
|
|
||||||
)
|
)
|
||||||
/*#####################################################################*/
|
/*#####################################################################*/
|
||||||
|
|
||||||
|
@ -524,6 +524,22 @@ namespace ZNsMain
|
|||||||
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
|
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
|
||||||
|
|
||||||
|
|
||||||
|
cout<<endl<<"# after VO_ZCBaseListEx10.SendRangeOutBefore(1th, 2th, 2, rhs, 1th)"<<endl;
|
||||||
|
|
||||||
|
VO_ZCBaseListEx10.SendRangeOutBefore
|
||||||
|
(
|
||||||
|
*VO_ZCBaseListEx10.GetLinkPtr(1)
|
||||||
|
, *VO_ZCBaseListEx10.GetLinkPtr(2)
|
||||||
|
, 2
|
||||||
|
, VO_ZCBaseListEx10_2
|
||||||
|
, VO_ZCBaseListEx10_2.GetLinkOpt(1)
|
||||||
|
);
|
||||||
|
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
||||||
|
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
|
||||||
|
cout<<"*****************************************************"<<endl;
|
||||||
|
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}/*
|
}/*
|
||||||
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
||||||
|
@ -136,6 +136,23 @@ namespace ZNsMain
|
|||||||
cout<<"***********************************************"<<endl;
|
cout<<"***********************************************"<<endl;
|
||||||
|
|
||||||
|
|
||||||
|
VO_ZCLinkStrLis2.SendRangeOutBefore
|
||||||
|
(
|
||||||
|
VO_ZCLinkStrLis2.GetObjOpt(7).value()
|
||||||
|
, VO_ZCLinkStrLis2.GetObjOpt(8).value()
|
||||||
|
, 2
|
||||||
|
, VO_ZCLinkStrLis1
|
||||||
|
, VO_ZCLinkStrLis1.GetObjOpt(1)
|
||||||
|
) ;
|
||||||
|
cout<<"# after VO_ZCLinkStrLis2.SendRangeOutAfter(7th, 8th, 2, rhs, rhs's 1th)"<<endl;
|
||||||
|
|
||||||
|
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
||||||
|
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||||
|
cout<<"***********************************************"<<endl;
|
||||||
|
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||||
|
cout<<"***********************************************"<<endl;
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}/*
|
}/*
|
||||||
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
||||||
|
@ -134,6 +134,23 @@ namespace ZNsMain
|
|||||||
cout<<"***********************************************"<<endl;
|
cout<<"***********************************************"<<endl;
|
||||||
|
|
||||||
|
|
||||||
|
VO_ZCLinkStrLis2.SendRangeOutBefore
|
||||||
|
(
|
||||||
|
VO_ZCLinkStrLis2.GetObjOpt(2).value()
|
||||||
|
, VO_ZCLinkStrLis2.GetObjOpt(3).value()
|
||||||
|
, 2
|
||||||
|
, VO_ZCLinkStrLis1
|
||||||
|
, VO_ZCLinkStrLis1.GetObjOpt(1)
|
||||||
|
) ;
|
||||||
|
cout<<"# after VO_ZCLinkStrLis2.SendRangeOutBefore(VO_ZCLinkStrLis2 1th, 2th, 2, rhs, rhs's 1th)"<<endl;
|
||||||
|
|
||||||
|
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
||||||
|
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||||
|
cout<<"***********************************************"<<endl;
|
||||||
|
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||||
|
cout<<"***********************************************"<<endl;
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}/*
|
}/*
|
||||||
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
||||||
|
@ -66,6 +66,13 @@ namespace ZNsMain
|
|||||||
static void ShowNode2(ZCLink2& AR_CLink)*/
|
static void ShowNode2(ZCLink2& AR_CLink)*/
|
||||||
|
|
||||||
|
|
||||||
|
static void Append1(ZCLink1& AR_CLink)
|
||||||
|
{
|
||||||
|
(*AR_CLink).append("__");
|
||||||
|
}/*
|
||||||
|
static void Append1(ZCLink1& AR_CLink)*/
|
||||||
|
|
||||||
|
|
||||||
static void ShowNode1_2(ZCLink1& AR_CLink, int& ARRI_CallCnt)
|
static void ShowNode1_2(ZCLink1& AR_CLink, int& ARRI_CallCnt)
|
||||||
{
|
{
|
||||||
++ARRI_CallCnt;
|
++ARRI_CallCnt;
|
||||||
@ -318,6 +325,8 @@ namespace ZNsMain
|
|||||||
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
|
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
|
||||||
|
|
||||||
|
|
||||||
|
VO_ListOfStr11.IterElemLink(&Append1);
|
||||||
|
|
||||||
VO_ListOfStr11.SendRangeOutAfter
|
VO_ListOfStr11.SendRangeOutAfter
|
||||||
(
|
(
|
||||||
*VO_ListOfStr11.GetLinkPtr(2)
|
*VO_ListOfStr11.GetLinkPtr(2)
|
||||||
@ -333,6 +342,21 @@ namespace ZNsMain
|
|||||||
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
|
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
|
||||||
|
|
||||||
|
|
||||||
|
VO_ListOfStr10.SendRangeOutBefore
|
||||||
|
(
|
||||||
|
*VO_ListOfStr10.GetLinkPtr(3)
|
||||||
|
, *VO_ListOfStr10.GetLinkPtr(4)
|
||||||
|
, 2
|
||||||
|
, RR(VO_ListOfStr11)
|
||||||
|
, VO_ListOfStr11.GetLinkOpt(1)
|
||||||
|
);
|
||||||
|
cout<<"# list10's 3th ~ 4th link to list11's 1th link before"<<endl;
|
||||||
|
cout<<"# list10 IterElemLink ################"<<endl;
|
||||||
|
VO_ListOfStr10.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
|
||||||
|
cout<<"# list11 IterElemLink ################"<<endl;
|
||||||
|
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}/*
|
}/*
|
||||||
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
||||||
|
Reference in New Issue
Block a user