commit 2025-10-07 10:01 add SendRangeOut() : ZCppMain/ZtCLinkList.H & ZtCObjList.H & ZMainHead.H etc
This commit is contained in:
@ -790,6 +790,8 @@ namespace ZNsMain
|
||||
typedef TTypSize TypeSize ;
|
||||
typedef TMoveObj TypeMoveObj;
|
||||
public:
|
||||
typedef ZtCObjList TypeThis ;
|
||||
public:
|
||||
class ZCIterator;
|
||||
class ZCLink ;
|
||||
public:
|
||||
@ -1213,17 +1215,18 @@ namespace ZNsMain
|
||||
protected: ZCLink* CutLink(ZCLink* AP_CutLink)*/
|
||||
|
||||
|
||||
ZtCObjList& CutLink /*########################################################*/
|
||||
TypeThis& CutLink /*##########################################################*/
|
||||
(
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& ARR_StoreList
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
TypeThis& ARR_StoreList
|
||||
)
|
||||
/*#############################################################################*/
|
||||
{
|
||||
// AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크
|
||||
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크
|
||||
// ARR_StoreList 은 비어 있어야 한다.
|
||||
|
||||
if(this==&ARR_StoreList) return *this ;
|
||||
|
||||
@ -1235,72 +1238,76 @@ namespace ZNsMain
|
||||
{
|
||||
mp_HeadLink=0; // 모든 링크를 삭제할 때.
|
||||
}
|
||||
else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
||||
else if(AP_CutHead==mp_HeadLink)
|
||||
{
|
||||
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);
|
||||
}/*
|
||||
else*/
|
||||
ZCLink::JoinLink
|
||||
(
|
||||
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)
|
||||
{
|
||||
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
|
||||
ZCLink::MakeRing(AP_CutHead, AP_CutTail);
|
||||
|
||||
ARR_StoreList.mp_HeadLink = AP_CutHead ;
|
||||
ARR_StoreList.ml_LinkSize = AL_CutSize ;
|
||||
|
||||
return ARR_StoreList;
|
||||
}/*
|
||||
ZtCObjList& CutLink ############################################################
|
||||
TypeThis& CutLink ##############################################################
|
||||
(
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& ARR_StoreList
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
TypeThis& ARR_StoreList
|
||||
)
|
||||
###############################################################################*/
|
||||
|
||||
|
||||
ZtCObjList& CutLinkRangeOut /*################################################*/
|
||||
TypeThis& CutLinkRangeOut /*##################################################*/
|
||||
(
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& rhs ,
|
||||
ZCLink* AP_RhsStd
|
||||
ZCLink* AP_CutHead , ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize , TypeThis& rhs ,
|
||||
ZCLink* AP_RhsStd , bool AB_After=true
|
||||
)
|
||||
/*#############################################################################*/
|
||||
{
|
||||
// AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크
|
||||
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크
|
||||
// 이 범위의 링크를 AP_RhsStd 뒤에 붙인다.
|
||||
// AP_RhsStd 이 0 이면, rhs 의 앞에 붙인다.
|
||||
/*//////////////////////////////////////////////////
|
||||
|
||||
■ AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크
|
||||
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(ml_LinkSize<1) return rhs ;
|
||||
@ -1311,60 +1318,95 @@ namespace ZNsMain
|
||||
{
|
||||
mp_HeadLink=0; // 모든 링크를 삭제할 때.
|
||||
}
|
||||
else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
||||
else if(AP_CutHead==mp_HeadLink)
|
||||
{
|
||||
ZCLink::MakeRing
|
||||
(mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink);
|
||||
ZCLink::MakeRing ///////////////
|
||||
(
|
||||
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);
|
||||
}/*
|
||||
else*/
|
||||
|
||||
ZCLink::JoinLink ///////////////
|
||||
(
|
||||
AP_CutHead->mp_PrevLink,
|
||||
AP_CutTail->mp_NextLink
|
||||
);
|
||||
////////////////////////////////
|
||||
}
|
||||
|
||||
ml_LinkSize -= AL_CutSize;
|
||||
|
||||
|
||||
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 ;
|
||||
}
|
||||
else if(AP_RhsStd==0) // 맨 앞에 삽입.
|
||||
else if(AB_After)
|
||||
{
|
||||
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink;
|
||||
if(AP_RhsStd==0) // 맨 앞에 삽입.
|
||||
{
|
||||
ZCLink* VP_RhsHead = rhs.mp_HeadLink ;
|
||||
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink ;
|
||||
|
||||
ZCLink::JoinLink(AP_CutTail, rhs.mp_HeadLink);
|
||||
ZCLink::MakeRing(AP_CutHead, VP_RhsTail );
|
||||
ZCLink::JoinLink(AP_CutTail, VP_RhsHead);
|
||||
ZCLink::MakeRing(AP_CutHead, VP_RhsTail);
|
||||
|
||||
rhs.mp_HeadLink = AP_CutHead;
|
||||
rhs.mp_HeadLink = AP_CutHead;
|
||||
}
|
||||
else // AP_RhsStd 의 뒤에 삽입.
|
||||
{
|
||||
ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ;
|
||||
|
||||
ZCLink::JoinLink(AP_RhsStd , AP_CutHead );
|
||||
ZCLink::JoinLink(AP_CutTail, VP_RhsStdNext);
|
||||
}
|
||||
}
|
||||
else // AP_RhsStd 의 뒤에 삽입.
|
||||
else // !AB_After
|
||||
{
|
||||
ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ;
|
||||
if(AP_RhsStd==0) // 맨 뒤에 삽입.
|
||||
{
|
||||
ZCLink* VP_RhsHead = rhs.mp_HeadLink ;
|
||||
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink ;
|
||||
|
||||
ZCLink::JoinLink(AP_RhsStd , AP_CutHead );
|
||||
ZCLink::JoinLink(AP_CutTail, VP_RhsStdNext);
|
||||
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;
|
||||
}/*
|
||||
ZtCObjList& CutLinkRangeOut ####################################################
|
||||
TypeThis& CutLinkRangeOut ######################################################
|
||||
(
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& rhs ,
|
||||
ZCLink* AP_RhsStd
|
||||
ZCLink* AP_CutHead , ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize , TypeThis& rhs ,
|
||||
ZCLink* AP_RhsStd , bool AB_After=true
|
||||
)
|
||||
###############################################################################*/
|
||||
|
||||
@ -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 뒤에 연결한다.
|
||||
|
||||
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 앞에 연결한다.
|
||||
|
||||
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); }
|
||||
|
||||
void SendOutTail(ZCLink& AR_CutLink, ZtCObjList& rhs)
|
||||
void SendOutTail(ZCLink& AR_CutLink, TypeThis& rhs)
|
||||
{ CutLink(&AR_CutLink); rhs.JoinBefore(&AR_CutLink, 0); }
|
||||
|
||||
|
||||
ZtCObjList& SendRangeOutAfter ///////////////////////////////////////////
|
||||
TypeThis& SendRangeOut //////////////////////////////////////////////////
|
||||
(
|
||||
ZCLink& AR_CutHead,
|
||||
ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCObjList& rhs ,
|
||||
ZCLinkOpt AO_LinkOpt
|
||||
ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize,
|
||||
TypeThis& rhs , ZCLinkOpt AO_LinkOpt, bool AB_After
|
||||
)
|
||||
/*#####################################################################*/
|
||||
{
|
||||
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
|
||||
(
|
||||
&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_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCObjList& rhs ,
|
||||
ZCLinkOpt AO_LinkOpt
|
||||
ZCLink& AR_CutHead, ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize, TypeThis& rhs , ZCLinkOpt AO_LinkOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
|
||||
|
Reference in New Issue
Block a user