commit 2025-10-06 15:02 add Raw() in ZtCObjOpt : ZCppMain/ZMainHead.H
This commit is contained in:
@ -4522,6 +4522,8 @@ namespace ZNsMain
|
||||
/***/ TypeData& value() {return *mp_TypeData;}
|
||||
const TypeData& value() const{return *mp_TypeData;}
|
||||
|
||||
TypeData* Raw() const{return mp_TypeData;}
|
||||
|
||||
public :
|
||||
};/*
|
||||
template<typename TType> class ZtCObjOpt */
|
||||
@ -5303,6 +5305,9 @@ namespace ZNsMain
|
||||
typedef ZCLink* IterEasy ; // 가장 대표적으로 쓰일 수 있는 반복자.
|
||||
typedef ZCLink* iterator ;
|
||||
public:
|
||||
typedef ZtCObjOpt<ZCLink > ZCLinkOpt;
|
||||
typedef ZtCObjOpt<TypeData> ZCDataOpt;
|
||||
public:
|
||||
|
||||
typedef ZNsType::ZtCTypeNowCRTP ///////////////////////////////////////
|
||||
<
|
||||
@ -5820,6 +5825,92 @@ namespace ZNsMain
|
||||
void CutLink(ZCLink* AP_StdLink)*/
|
||||
|
||||
|
||||
ZtCBaseList& CutLinkRangeOut /*#######################################*/
|
||||
(
|
||||
ZCLink& AR_CutHead ,
|
||||
ZCLink& AR_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCBaseList& rhs ,
|
||||
ZCLink* AP_RhsStd
|
||||
)
|
||||
/*#####################################################################*/
|
||||
{
|
||||
/*///////////////////////////////////////////////////////////
|
||||
|
||||
■ AR_CutHead 는 삭제하려는 링크의 범위의 앞의 링크.
|
||||
AR_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크.
|
||||
|
||||
AR_CutHead 의 앞과 AR_CutTail 의 뒤에서 연결 상태를 끊고,
|
||||
rhs 의 AP_RhsStd 의 뒤에 삽입한다. AP_RhsStd==0 이면
|
||||
맨 앞에 삽입한다. -- 2025-10-06 09:16
|
||||
|
||||
///////////////////////////////////////////////////////////*/
|
||||
|
||||
if(this==&rhs ) return rhs;
|
||||
if(ml_LinkSize<1) return rhs;
|
||||
|
||||
if(AL_CutSize>=ml_LinkSize) // 모든 링크를 삭제할 때.
|
||||
{
|
||||
mp_HeadLink=0;
|
||||
}
|
||||
else if(&AR_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
||||
{
|
||||
ZCLink::MakeRing
|
||||
(mp_HeadLink=AR_CutTail.mp_NextLink, mp_TailLink);
|
||||
}
|
||||
else if(&AR_CutTail==mp_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때.
|
||||
{
|
||||
ZCLink::MakeRing(mp_HeadLink, mp_TailLink=AR_CutHead.mp_PrevLink);
|
||||
}
|
||||
else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때.
|
||||
{
|
||||
ZCLink::JoinLink(AR_CutHead.mp_PrevLink, AR_CutTail.mp_NextLink);
|
||||
}/*
|
||||
else*/
|
||||
|
||||
ml_LinkSize -= AL_CutSize;
|
||||
|
||||
|
||||
if(rhs.size()<1)
|
||||
{
|
||||
// AP_CutHead 과 AP_CutTail 을 연결하여 이중 원형 연결리스트가 되도록 한다.
|
||||
|
||||
ZCLink::MakeRing(&AR_CutHead, &AR_CutTail);
|
||||
|
||||
rhs.mp_HeadLink = &AR_CutHead ;
|
||||
rhs.mp_TailLink = &AR_CutTail ;
|
||||
}
|
||||
else if(AP_RhsStd==0) // 맨 앞에 삽입.
|
||||
{
|
||||
ZCLink::JoinLink(&AR_CutTail, rhs.mp_HeadLink);
|
||||
ZCLink::MakeRing(&AR_CutHead, rhs.mp_TailLink);
|
||||
|
||||
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*/
|
||||
|
||||
rhs.ml_LinkSize += AL_CutSize; return rhs;
|
||||
}/*
|
||||
ZtCBaseList& CutLinkRangeOut ###########################################
|
||||
(
|
||||
ZCLink& AR_CutHead ,
|
||||
ZCLink& AR_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCBaseList& rhs ,
|
||||
ZCLink* AP_RhsStd
|
||||
)
|
||||
#######################################################################*/
|
||||
|
||||
/*private :*/
|
||||
public :
|
||||
|
||||
@ -6102,13 +6193,15 @@ namespace ZNsMain
|
||||
void DeleteTail(TTypSize AL_DelSize)*/
|
||||
|
||||
|
||||
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLink* AP_StdLink)
|
||||
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)
|
||||
{
|
||||
// AP_StdLink 의 뒤에 rhs 를 삽입.
|
||||
|
||||
if(rhs.ml_LinkSize<1) return *this;
|
||||
|
||||
if(AP_StdLink==0) // 맨 앞에 삽입
|
||||
ZCLink* VP_StdLink = AO_StdOpt.Raw();
|
||||
|
||||
if(VP_StdLink==0) // 맨 앞에 삽입
|
||||
{
|
||||
if(ml_LinkSize<1)
|
||||
{
|
||||
@ -6134,15 +6227,15 @@ namespace ZNsMain
|
||||
|
||||
return *this;
|
||||
}/*
|
||||
if(AP_StdLink==0)*/
|
||||
if(VP_StdLink==0)*/
|
||||
|
||||
|
||||
ZCLink* VP_StdNext=AP_StdLink->mp_NextLink;
|
||||
ZCLink* VP_StdNext=VP_StdLink->mp_NextLink;
|
||||
|
||||
ZCLink::JoinLink(AP_StdLink , rhs.mp_HeadLink );
|
||||
ZCLink::JoinLink(VP_StdLink , rhs.mp_HeadLink );
|
||||
ZCLink::JoinLink(rhs.mp_TailLink, VP_StdNext );
|
||||
|
||||
if(AP_StdLink==mp_TailLink)
|
||||
if(VP_StdLink==mp_TailLink)
|
||||
{ mp_TailLink=rhs.mp_TailLink; }
|
||||
|
||||
rhs.mp_HeadLink =0 ;
|
||||
@ -6151,16 +6244,18 @@ namespace ZNsMain
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
||||
}/*
|
||||
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
|
||||
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
|
||||
|
||||
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLink* AP_StdLink)
|
||||
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)
|
||||
{
|
||||
// AP_StdLink 의 앞에 rhs 를 삽입.
|
||||
|
||||
if(rhs.size()<1) return *this;
|
||||
|
||||
if(AP_StdLink==0) // 맨 뒤에 삽입
|
||||
ZCLink* VP_StdLink = AO_StdOpt.Raw();
|
||||
|
||||
if(VP_StdLink==0) // 맨 뒤에 삽입
|
||||
{
|
||||
if(ml_LinkSize<1)
|
||||
{
|
||||
@ -6184,15 +6279,15 @@ namespace ZNsMain
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
||||
}/*
|
||||
if(AP_StdLink==0)*/
|
||||
if(VP_StdLink==0)*/
|
||||
|
||||
|
||||
ZCLink* VP_StdPrev = AP_StdLink->mp_PrevLink;
|
||||
ZCLink* VP_StdPrev = VP_StdLink->mp_PrevLink;
|
||||
|
||||
ZCLink::JoinLink( VP_StdPrev , rhs.mp_HeadLink );
|
||||
ZCLink::JoinLink(rhs.mp_TailLink, AP_StdLink );
|
||||
ZCLink::JoinLink(rhs.mp_TailLink, VP_StdLink );
|
||||
|
||||
if(AP_StdLink==mp_HeadLink)
|
||||
if(VP_StdLink==mp_HeadLink)
|
||||
{ mp_HeadLink = rhs.mp_HeadLink; }
|
||||
|
||||
rhs.mp_HeadLink =0 ;
|
||||
@ -6201,47 +6296,75 @@ namespace ZNsMain
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize; return *this;
|
||||
}/*
|
||||
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
|
||||
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
|
||||
|
||||
ZtCBaseList& JoinHead(ZtCBaseList& rhs)
|
||||
{ if(this==&rhs) return *this; return JoinAfter (rhs, 0); }
|
||||
{ if(this==&rhs) return *this; return JoinAfter (rhs, ZCLinkOpt(0)); }
|
||||
ZtCBaseList& JoinTail(ZtCBaseList& rhs)
|
||||
{ if(this==&rhs) return *this; return JoinBefore(rhs, 0); }
|
||||
{ if(this==&rhs) return *this; return JoinBefore(rhs, ZCLinkOpt(0)); }
|
||||
|
||||
|
||||
void SendOutAfter(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)
|
||||
void SendOutAfter (ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 뒤에 연결한다.
|
||||
|
||||
CutLink(AP_CutLink); rhs.AddLinkAfter(AP_StdLink, AP_CutLink);
|
||||
CutLink(&AR_CutLink); rhs.AddLinkAfter(AO_StdOpt.Raw(), &AR_CutLink);
|
||||
}/*
|
||||
void SendOutAfter(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
|
||||
void SendOutAfter (ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
|
||||
void SendOutBefore(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)
|
||||
void SendOutBefore(ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다.
|
||||
|
||||
CutLink(AP_CutLink); rhs.AddLinkBefore(AP_StdLink, AP_CutLink);
|
||||
CutLink(&AR_CutLink); rhs.AddLinkBefore(AO_StdOpt.Raw(), &AR_CutLink);
|
||||
}/*
|
||||
void SendOutBefore(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
|
||||
void SendOutBefore(ZCLink& AR_CutLink, ZtCBaseList& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
|
||||
|
||||
void SendOutHead(ZCLink* AP_CutLink, ZtCBaseList& rhs)
|
||||
void SendOutHead(ZCLink& AR_CutLink, ZtCBaseList& rhs)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 앞에 연결한다.
|
||||
|
||||
SendOutAfter (AP_CutLink, rhs, 0);
|
||||
SendOutAfter (AR_CutLink, rhs, ZCLinkOpt(0));
|
||||
}
|
||||
void SendOutTail(ZCLink* AP_CutLink, ZtCBaseList& rhs)
|
||||
void SendOutTail(ZCLink& AR_CutLink, ZtCBaseList& rhs)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 뒤에 연결한다.
|
||||
|
||||
SendOutBefore(AP_CutLink, rhs, 0);
|
||||
SendOutBefore(AR_CutLink, rhs, ZCLinkOpt(0));
|
||||
}/*
|
||||
void SendOutTail(ZCLink* AP_CutLink, ZtCBaseList& rhs)*/
|
||||
void SendOutTail(ZCLink& AR_CutLink, ZtCBaseList& rhs)*/
|
||||
|
||||
|
||||
ZtCBaseList& SendRangeOutAfter //////////////////////////////////////////
|
||||
(
|
||||
ZCLink& AR_CutHead,
|
||||
ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCBaseList& rhs ,
|
||||
ZCLinkOpt AO_LinkOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
{
|
||||
// AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AR_StdLink 뒤에 연결한다.
|
||||
|
||||
return CutLinkRangeOut
|
||||
(
|
||||
AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw()
|
||||
);
|
||||
//////////////////////
|
||||
}/*
|
||||
ZtCBaseList& SendRangeOutAfter //////////////////////////////////////////
|
||||
(
|
||||
ZCLink& AR_CutHead,
|
||||
ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCBaseList& rhs ,
|
||||
ZCLinkOpt AO_LinkOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
|
||||
|
||||
TypeData& GetHeadData(){return mp_HeadLink->mo_DataObjt;}
|
||||
TypeData& GetTailData(){return mp_TailLink->mo_DataObjt;}
|
||||
@ -6252,6 +6375,37 @@ namespace ZNsMain
|
||||
operator TypeData&() { return AddTail() ; }
|
||||
|
||||
|
||||
ZCDataOpt GetHeadDataOpt()
|
||||
{
|
||||
if(mp_HeadLink==0) return ZCDataOpt(0);
|
||||
|
||||
return ZCDataOpt(mp_HeadLink->mo_DataObjt);
|
||||
}
|
||||
ZCDataOpt GetTailDataOpt()
|
||||
{
|
||||
if(mp_TailLink==0) return ZCDataOpt(0);
|
||||
|
||||
return ZCDataOpt(mp_TailLink->mo_DataObjt);
|
||||
}/*
|
||||
ZCDataOpt GetTailDataOpt()*/
|
||||
|
||||
|
||||
const ZCDataOpt GetHeadDataOpt() const
|
||||
{
|
||||
if(mp_HeadLink==0) return ZCDataOpt(0);
|
||||
|
||||
return ZCDataOpt(mp_HeadLink->mo_DataObjt);
|
||||
}
|
||||
const ZCDataOpt GetTailDataOpt() const
|
||||
{
|
||||
if(mp_TailLink==0) return ZCDataOpt(0);
|
||||
|
||||
return ZCDataOpt(mp_TailLink->mo_DataObjt);
|
||||
}/*
|
||||
const ZCDataOpt GetTailDataOpt()*/
|
||||
|
||||
|
||||
|
||||
TypeSize size() const{ return ml_LinkSize; }
|
||||
TypeSize GetSize() const{ return ml_LinkSize; }
|
||||
|
||||
@ -6534,6 +6688,21 @@ namespace ZNsMain
|
||||
const ZCLink* GetLinkPtr(TypeSize AI_Index) const{return mp_HeadLink->GetNextPrevPtr(AI_Index-1);}
|
||||
|
||||
|
||||
ZCLinkOpt GetLinkOpt(TypeSize AI_Index)
|
||||
{
|
||||
if(mp_HeadLink==0) return ZCLinkOpt(0);
|
||||
|
||||
return ZCLinkOpt(GetLinkPtr(AI_Index));
|
||||
}
|
||||
const ZCLinkOpt GetLinkOpt(TypeSize AI_Index) const
|
||||
{
|
||||
if(mp_HeadLink==0) return ZCLinkOpt(0);
|
||||
|
||||
return ZCLinkOpt(GetLinkPtr(AI_Index));
|
||||
}/*
|
||||
const ZCLinkOpt GetLinkOpt(TypeSize AI_Index) const*/
|
||||
|
||||
|
||||
ZCLink& GetHeadLink(TypeSize AI_Distance){return (*mp_HeadLink)+AI_Distance;}
|
||||
ZCLink& GetTailLink(TypeSize AI_Distance){return (*mp_TailLink)-AI_Distance;}
|
||||
|
||||
|
@ -1298,9 +1298,10 @@ namespace ZNsMain
|
||||
{
|
||||
/*///////////////////////////////////////////////////////////
|
||||
|
||||
■ AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크.
|
||||
AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크.
|
||||
AP_CutHead 의 앞과 AP_CutTail 의 뒤에서 연결 상태를 끊고,
|
||||
■ AR_CutHead 는 삭제하려는 링크의 범위의 앞의 링크.
|
||||
AR_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크.
|
||||
|
||||
AR_CutHead 의 앞과 AR_CutTail 의 뒤에서 연결 상태를 끊고,
|
||||
rhs 의 AP_RhsStd 의 뒤에 삽입한다. AP_RhsStd==0 이면
|
||||
맨 앞에 삽입한다. -- 2025-10-06 09:16
|
||||
|
||||
@ -1580,7 +1581,7 @@ namespace ZNsMain
|
||||
ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCLinkList& rhs ,
|
||||
ZCDataOpt AO_ObjOpt
|
||||
ZCLinkOpt AO_LinkOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
{
|
||||
@ -1588,8 +1589,7 @@ namespace ZNsMain
|
||||
|
||||
return CutLinkRangeOut
|
||||
(
|
||||
AR_CutHead, AR_CutTail, AI_CutSize, rhs,
|
||||
( bool(AO_ObjOpt) ? &AO_ObjOpt.value() : 0 )
|
||||
AR_CutHead, AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw()
|
||||
);
|
||||
//////////////////////
|
||||
}/*
|
||||
@ -1599,7 +1599,7 @@ namespace ZNsMain
|
||||
ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCLinkList& rhs ,
|
||||
ZCDataOpt AO_ObjOpt
|
||||
ZCLinkOpt AO_LinkOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
|
||||
|
@ -1097,13 +1097,12 @@ namespace ZNsMain
|
||||
public :
|
||||
|
||||
|
||||
void JoinAfter
|
||||
(ZtCObjList& rhs, ZCLink* AP_LinkStd)
|
||||
void JoinAfter(ZtCObjList& rhs, ZCLinkOpt AO_StdOpt)
|
||||
{
|
||||
if(this == &rhs ) return;
|
||||
if(rhs.ml_LinkSize<1) return;
|
||||
|
||||
if(AP_LinkStd==0) // 맨 앞에 삽입
|
||||
if(!bool(AO_StdOpt)) // 맨 앞에 삽입
|
||||
{
|
||||
if(ml_LinkSize==0)
|
||||
{
|
||||
@ -1115,38 +1114,37 @@ namespace ZNsMain
|
||||
ZCLink* VP_TailLink = rhs.mp_HeadLink->mp_PrevLink;
|
||||
|
||||
ZCLink::MakeRing(rhs.mp_HeadLink, mp_HeadLink->mp_PrevLink);
|
||||
ZCLink::JoinLink(VP_TailLink , mp_HeadLink );
|
||||
ZCLink::JoinLink( VP_TailLink, mp_HeadLink );
|
||||
|
||||
mp_HeadLink = rhs.mp_HeadLink ;
|
||||
ml_LinkSize += rhs.ml_LinkSize ;
|
||||
}/*
|
||||
else*/
|
||||
}
|
||||
else // AP_LinkStd!=0
|
||||
else // bool(AO_StdOpt)
|
||||
{
|
||||
ZCLink* VP_RhsTail=rhs.mp_HeadLink->mp_PrevLink;
|
||||
ZCLink* VP_RhsTail= rhs.mp_HeadLink->mp_PrevLink ;
|
||||
ZCLink* VP_LinkStd= &AO_StdOpt.value() ;
|
||||
ZCLink* VP_StdNext= VP_LinkStd->mp_NextLink ;
|
||||
|
||||
ZCLink::JoinLink(VP_RhsTail, AP_LinkStd->mp_NextLink);
|
||||
ZCLink::JoinLink(AP_LinkStd, rhs.mp_HeadLink);
|
||||
ZCLink::JoinLink(VP_LinkStd, rhs.mp_HeadLink);
|
||||
ZCLink::JoinLink(VP_RhsTail, VP_StdNext );
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize ;
|
||||
}/*
|
||||
else // AP_LinkStd!=0*/
|
||||
else // bool(AO_StdOpt)*/
|
||||
|
||||
rhs.mp_HeadLink = 0;
|
||||
rhs.ml_LinkSize = 0;
|
||||
}/*
|
||||
void JoinAfter
|
||||
(ZtCObjList& rhs, ZCLink* AP_LinkStd)*/
|
||||
void JoinAfter (ZtCObjList& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
|
||||
|
||||
void JoinBefore
|
||||
(ZtCObjList& rhs, ZCLink* AP_LinkStd)
|
||||
void JoinBefore(ZtCObjList& rhs, ZCLinkOpt AO_StdOpt)
|
||||
{
|
||||
if(this == &rhs ) return;
|
||||
if(rhs.ml_LinkSize<1) return;
|
||||
|
||||
if(AP_LinkStd==0) // 맨 뒤에 삽입
|
||||
if(!bool(AO_StdOpt)) // 맨 뒤에 삽입
|
||||
{
|
||||
if(ml_LinkSize==0)
|
||||
{
|
||||
@ -1165,24 +1163,24 @@ namespace ZNsMain
|
||||
}/*
|
||||
else*/
|
||||
}
|
||||
else // AP_LinkStd!=0
|
||||
else // bool(AO_StdOpt)
|
||||
{
|
||||
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink;
|
||||
ZCLink* VP_RhsHead = rhs.mp_HeadLink ;
|
||||
ZCLink* VP_PrevStd = AP_LinkStd ->mp_PrevLink;
|
||||
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink;
|
||||
ZCLink* VP_LinkStd= &AO_StdOpt.value() ;
|
||||
ZCLink* VP_PrevStd = VP_LinkStd ->mp_PrevLink;
|
||||
|
||||
ZCLink::JoinLink(VP_PrevStd, VP_RhsHead);
|
||||
ZCLink::JoinLink(VP_RhsTail, AP_LinkStd);
|
||||
ZCLink::JoinLink(VP_RhsTail, VP_LinkStd);
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize ;
|
||||
}/*
|
||||
else // AP_LinkStd!=0*/
|
||||
else // bool(AO_StdOpt)*/
|
||||
|
||||
rhs.mp_HeadLink = 0;
|
||||
rhs.ml_LinkSize = 0;
|
||||
}/*
|
||||
void JoinBefore
|
||||
(ZtCObjList& rhs, ZCLink* AP_LinkStd)*/
|
||||
void JoinBefore(ZtCObjList& rhs, ZCLinkOpt AO_StdOpt)*/
|
||||
|
||||
|
||||
/*public :*/
|
||||
@ -1289,6 +1287,88 @@ namespace ZNsMain
|
||||
###############################################################################*/
|
||||
|
||||
|
||||
ZtCObjList& CutLinkRangeOut /*################################################*/
|
||||
(
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& rhs ,
|
||||
ZCLink* AP_RhsStd
|
||||
)
|
||||
/*#############################################################################*/
|
||||
{
|
||||
// AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크
|
||||
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크
|
||||
// 이 범위의 링크를 AP_RhsStd 뒤에 붙인다.
|
||||
// AP_RhsStd 이 0 이면, rhs 의 앞에 붙인다.
|
||||
|
||||
if(this==&rhs ) return *this;
|
||||
if(ml_LinkSize<1) return rhs ;
|
||||
|
||||
ZCLink* VP_TailLink = mp_HeadLink->mp_PrevLink;
|
||||
|
||||
if(AP_CutHead==mp_HeadLink && AP_CutTail==VP_TailLink)
|
||||
{
|
||||
mp_HeadLink=0; // 모든 링크를 삭제할 때.
|
||||
}
|
||||
else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
||||
{
|
||||
ZCLink::MakeRing
|
||||
(mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink);
|
||||
}
|
||||
else if(AP_CutTail==VP_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때.
|
||||
{
|
||||
ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink);
|
||||
}
|
||||
else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때.
|
||||
{
|
||||
ZCLink::JoinLink(AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink);
|
||||
}/*
|
||||
else*/
|
||||
|
||||
|
||||
ml_LinkSize -= AL_CutSize;
|
||||
|
||||
|
||||
if(rhs.size()<1)
|
||||
{
|
||||
// AP_CutHead 과 AP_CutTail 을 연결하여 이중 원형 연결리스트가 되도록 한다.
|
||||
|
||||
ZCLink::MakeRing(AP_CutHead, AP_CutTail);
|
||||
|
||||
rhs.mp_HeadLink = AP_CutHead ;
|
||||
}
|
||||
else if(AP_RhsStd==0) // 맨 앞에 삽입.
|
||||
{
|
||||
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink;
|
||||
|
||||
ZCLink::JoinLink(AP_CutTail, rhs.mp_HeadLink);
|
||||
ZCLink::MakeRing(AP_CutHead, VP_RhsTail );
|
||||
|
||||
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*/
|
||||
|
||||
rhs.ml_LinkSize += AL_CutSize; return rhs;
|
||||
}/*
|
||||
ZtCObjList& CutLinkRangeOut ####################################################
|
||||
(
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& rhs ,
|
||||
ZCLink* AP_RhsStd
|
||||
)
|
||||
###############################################################################*/
|
||||
|
||||
|
||||
ZtCObjList& CopyLink /*########################################################*/
|
||||
(
|
||||
const ZCLink* AP_CopyLink ,
|
||||
@ -1297,29 +1377,24 @@ namespace ZNsMain
|
||||
) const
|
||||
/*#############################################################################*/
|
||||
{
|
||||
// AP_CopyLink 부터 AP_CopyLink->GetNextPrevPtr(AL_FarNum) 링크까지를 복사한다.
|
||||
// AL_FarNum 은 0 이거나 음수일 수 있다.
|
||||
// 총 (FarNum의 절대값) + 1 개의 링크가 만들어 진다.
|
||||
/*/////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef _DEBUG
|
||||
■ AP_CopyLink 부터 AP_CopyLink->GetNextPrevPtr(AL_FarNum)
|
||||
링크까지를 복사한다.
|
||||
|
||||
AL_FarNum 은 0 이거나 음수일 수 있다.
|
||||
총 (FarNum의 절대값) + 1 개의 링크가 만들어진다.
|
||||
|
||||
ARR_StoreList 은 비어 있어야 한다. -- 2025-10-06 13:01
|
||||
|
||||
/////////////////////////////////////////////////////////*/
|
||||
|
||||
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& CopyLink( const ZCLink* AP_CopyLink,"<<std::endl;
|
||||
fileout<<" TypeSize AL_FarNum, ZtCObjList& ARR_StoreList" <<std::endl;
|
||||
fileout<<" /*///////////////*/ )" <<std::endl;
|
||||
fileout<<"Static Object ARR_StoreList is not EMPTY !" <<std::endl;
|
||||
fileout.close();
|
||||
|
||||
::exit(1); return ARR_StoreList;
|
||||
return ARR_StoreList;
|
||||
}/*
|
||||
if(ARR_StoreList.IsEmpty()!=true)*/
|
||||
|
||||
#endif //_DEBUG
|
||||
|
||||
|
||||
ZCLink* VP_HeadLink=0;
|
||||
ZCLink* VP_TailLink=0;
|
||||
|
||||
@ -1532,46 +1607,14 @@ namespace ZNsMain
|
||||
|
||||
|
||||
|
||||
Type& operator[](TypeSize AL_Index)
|
||||
Type& operator[](TypeSize AL_Index) // start by 1
|
||||
{
|
||||
// [] 에 들어가는 AL_Index 은 1 부터 시작하는 첨자이다.
|
||||
|
||||
#ifdef _DEBUG
|
||||
|
||||
if(AL_Index<1 || AL_Index>ml_LinkSize)
|
||||
{
|
||||
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 'Type& ZtCObjList::operator[](TypeSize AL_Index)' : Parameter is bad index("<<AL_Index<<")"<<std::endl;
|
||||
fileout.close();
|
||||
|
||||
::exit(1); return *(new Type);
|
||||
}/*
|
||||
if(AL_Index<1 || AL_Index>ml_LinkSize)*/
|
||||
|
||||
#endif //_DEBUG
|
||||
|
||||
return GetLinkPtr(AL_Index)->GetData();
|
||||
}/*
|
||||
Type& operator[](TypeSize AL_Index)*/
|
||||
|
||||
const Type& operator[](TypeSize AL_Index) const
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
|
||||
if(AL_Index<1 || AL_Index>ml_LinkSize)
|
||||
{
|
||||
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 'const Type& ZtCObjList::operator[](TypeSize AL_Index) const' : Parameter is bad index("<<AL_Index<<")"<<std::endl;
|
||||
fileout.close();
|
||||
|
||||
::exit(1); return *(new Type);
|
||||
}/*
|
||||
if(AL_Index<1 || AL_Index>ml_LinkSize)*/
|
||||
|
||||
#endif //_DEBUG
|
||||
|
||||
return GetLinkPtr(AL_Index)->GetData();
|
||||
}/*
|
||||
Type& operator[](TypeSize AL_Index) const*/
|
||||
@ -1644,7 +1687,7 @@ namespace ZNsMain
|
||||
|
||||
TypeSize Find /*##############################################################*/
|
||||
(
|
||||
const ZCLink* AP_SearchLink ,
|
||||
const ZCLink& AR_SearchLink ,
|
||||
TypeSize AL_FirstFindIndex =1,
|
||||
bool AB_DoFindFromFront=true
|
||||
) const
|
||||
@ -1662,8 +1705,8 @@ namespace ZNsMain
|
||||
{
|
||||
do /**/
|
||||
{
|
||||
if(VP_TempLink ==AP_SearchLink) return VL_FindIndex;
|
||||
if(VL_FindIndex==ml_LinkSize ) return 0 ;
|
||||
if(VP_TempLink ==&AR_SearchLink) return VL_FindIndex;
|
||||
if(VL_FindIndex==ml_LinkSize ) return 0 ;
|
||||
|
||||
VP_TempLink=VP_TempLink->mp_NextLink; ++VL_FindIndex;
|
||||
}
|
||||
@ -1673,8 +1716,8 @@ namespace ZNsMain
|
||||
{
|
||||
do /**/
|
||||
{
|
||||
if(VP_TempLink ==AP_SearchLink) return VL_FindIndex;
|
||||
if(VL_FindIndex==1 ) return 0 ;
|
||||
if(VP_TempLink ==&AR_SearchLink) return VL_FindIndex;
|
||||
if(VL_FindIndex==1 ) return 0 ;
|
||||
|
||||
VP_TempLink=VP_TempLink->mp_PrevLink; --VL_FindIndex;
|
||||
}
|
||||
@ -1686,7 +1729,7 @@ namespace ZNsMain
|
||||
}/*
|
||||
TypeSize Find ##################################################################
|
||||
(
|
||||
ZCLink* AP_SearchLink ,
|
||||
ZCLink& AR_SearchLink ,
|
||||
TypeSize AL_FirstFindIndex =1 ,
|
||||
bool AB_DoFindFromFront=true
|
||||
) const
|
||||
@ -1777,40 +1820,24 @@ namespace ZNsMain
|
||||
ZtCObjList& DeleteHeap()*/
|
||||
|
||||
|
||||
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)
|
||||
ZtCObjList& DeleteLink(ZCLink& AR_DeleteLink)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
|
||||
if(Find(AP_DeleteLink)<1)
|
||||
{
|
||||
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& DeleteLink(ZCLink* AP_DeleteLink)"<<std::endl;
|
||||
fileout<<"Parameter ZCLink* type AP_DeleteLink Is Not Valid !"<<std::endl;
|
||||
fileout.close();
|
||||
|
||||
::exit(1); return *this;
|
||||
}/*
|
||||
if(Find(AP_DeleteLink)<1)*/
|
||||
|
||||
#endif //_DEBUG
|
||||
|
||||
#if(_CODE_NEW_)
|
||||
mo_FreeObjt.RecvFreeIn
|
||||
( this->CutLink(AP_DeleteLink) );
|
||||
( this->CutLink(&AR_DeleteLink) );
|
||||
#else
|
||||
delete this->CutLink(AP_DeleteLink);
|
||||
delete this->CutLink(&AR_DeleteLink);
|
||||
#endif
|
||||
return *this;
|
||||
}/*
|
||||
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)*/
|
||||
ZtCObjList& DeleteLink(ZCLink& AR_DeleteLink)*/
|
||||
|
||||
|
||||
ZtCObjList& Delete(ZCLink* AP_DeleteLink)
|
||||
ZtCObjList& Delete(ZCLink& AR_DeleteLink)
|
||||
{
|
||||
return DeleteLink(AP_DeleteLink);
|
||||
return DeleteLink(&AR_DeleteLink);
|
||||
}/*
|
||||
ZtCObjList& Delete(ZCLink* AP_DeleteLink)*/
|
||||
ZtCObjList& Delete(ZCLink& AR_DeleteLink)*/
|
||||
|
||||
ZtCObjList& Delete(TypeSize AL_DeletePos)
|
||||
{
|
||||
@ -1855,9 +1882,8 @@ namespace ZNsMain
|
||||
}/*
|
||||
if(AL_DelSize==ml_LinkSize)*/
|
||||
|
||||
ZCLink* VP_TailLink= mp_HeadLink->mp_PrevLink;
|
||||
ZCLink* VP_NewHead = mp_HeadLink->
|
||||
GetNextPtr( AL_DelSize );
|
||||
ZCLink* VP_TailLink= mp_HeadLink->mp_PrevLink ;
|
||||
ZCLink* VP_NewHead = &((*mp_HeadLink)+AL_DelSize);
|
||||
GetCFreeHeap().RecvFreeIn
|
||||
(AL_DelSize, mp_HeadLink, VP_NewHead->mp_PrevLink);
|
||||
|
||||
@ -1901,9 +1927,8 @@ namespace ZNsMain
|
||||
}/*
|
||||
if(AL_DelSize==ml_LinkSize)*/
|
||||
|
||||
ZCLink* VP_TailLink= mp_HeadLink->mp_PrevLink;
|
||||
ZCLink* VP_NewTail = VP_TailLink->
|
||||
GetPrevPtr( AL_DelSize ) ;
|
||||
ZCLink* VP_TailLink= mp_HeadLink->mp_PrevLink ;
|
||||
ZCLink* VP_NewTail = &((*VP_TailLink)-AL_DelSize);
|
||||
GetCFreeHeap().RecvFreeIn
|
||||
(AL_DelSize, VP_NewTail->mp_NextLink, VP_TailLink);
|
||||
|
||||
@ -1914,28 +1939,23 @@ namespace ZNsMain
|
||||
void DeleteTail(TypeSize AL_DelSize)*/
|
||||
|
||||
|
||||
ZCLink* AddDefault(TypeSize AL_DefaultSize, TypeSize AL_AddPos)
|
||||
ZCLink& AddDefault(TypeSize AL_DefSize, TypeSize AL_AddPos)
|
||||
{
|
||||
const bool CB_IsTrue = ///////////////////
|
||||
(
|
||||
AL_DefaultSize< 1 ||
|
||||
AL_AddPos < 1 ||
|
||||
AL_AddPos > ml_LinkSize+1
|
||||
);
|
||||
if(CB_IsTrue) return 0; //////////////////
|
||||
if(AL_DefSize<1) AL_DefSize= 1;
|
||||
if(AL_AddPos <1) AL_AddPos = 1;
|
||||
|
||||
ZtCObjList VO_StoreList; MakeDefault
|
||||
( AL_DefaultSize, RR(VO_StoreList) ) ;
|
||||
( AL_DefSize, RR(VO_StoreList) ) ;
|
||||
|
||||
ZCLink* VP_HeadLink= VO_StoreList.mp_HeadLink;
|
||||
|
||||
if(AL_AddPos==1)
|
||||
JoinAfter(VO_StoreList, 0 );
|
||||
else JoinAfter(VO_StoreList, GetLinkPtr(AL_AddPos-1));
|
||||
JoinAfter(VO_StoreList, ZCLinkOpt(0) );
|
||||
else JoinAfter(VO_StoreList, GetLinkOpt(AL_AddPos-1));
|
||||
|
||||
return VP_HeadLink;
|
||||
return *VP_HeadLink;
|
||||
}/*
|
||||
ZCLink* AddDefault(TypeSize AL_DefaultSize, TypeSize AL_AddPos)*/
|
||||
ZCLink& AddDefault(TypeSize AL_DefSize, TypeSize AL_AddPos)*/
|
||||
|
||||
|
||||
ZtCObjList& AddHead(TypeArg AR_Type)
|
||||
@ -2014,23 +2034,23 @@ namespace ZNsMain
|
||||
|
||||
///////////////////////////////////////////////////////////////////*/
|
||||
|
||||
ZCLink* AddHeadDef()
|
||||
ZCLink& AddHeadDef()
|
||||
{
|
||||
#if(_CODE_NEW_)
|
||||
ZCLink* VP_NewLink = mo_FreeObjt.SendFreeOut();
|
||||
#else
|
||||
ZCLink* VP_NewLink = new ZCLink ;
|
||||
#endif
|
||||
JoinAfter(VP_NewLink, 0); return VP_NewLink;
|
||||
JoinAfter(VP_NewLink, 0); return *VP_NewLink;
|
||||
}
|
||||
ZCLink* AddTailDef()
|
||||
ZCLink& AddTailDef()
|
||||
{
|
||||
#if(_CODE_NEW_)
|
||||
ZCLink* VP_NewLink = mo_FreeObjt.SendFreeOut();
|
||||
#else
|
||||
ZCLink* VP_NewLink = new ZCLink ;
|
||||
#endif
|
||||
JoinAfter(VP_NewLink, GetTailLinkPtr()); return VP_NewLink;
|
||||
JoinAfter(VP_NewLink, GetTailLinkPtr()); return *VP_NewLink;
|
||||
}
|
||||
|
||||
|
||||
@ -2044,18 +2064,18 @@ namespace ZNsMain
|
||||
}/*
|
||||
ZtCObjList& JoinHead(ZtCObjList& rhs)*/
|
||||
|
||||
ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink* AP_CLink)
|
||||
ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink& AR_CLink)
|
||||
{
|
||||
// rhs 의 AP_CLink 를 앞으로 연결한다.
|
||||
|
||||
if(this==&rhs) return *this;
|
||||
|
||||
JoinAfter
|
||||
(rhs.CutLink(AP_CLink), 0);
|
||||
(rhs.CutLink(&AR_CLink), 0);
|
||||
|
||||
return *this;
|
||||
}/*
|
||||
ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink* AP_CLink)*/
|
||||
ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink& AR_CLink)*/
|
||||
|
||||
ZtCObjList& JoinTail(ZtCObjList& rhs)
|
||||
{
|
||||
@ -2063,121 +2083,43 @@ namespace ZNsMain
|
||||
}/*
|
||||
ZtCObjList& JoinTail(ZtCObjList& rhs)*/
|
||||
|
||||
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink* AP_CLink)
|
||||
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink& AR_CLink)
|
||||
{
|
||||
// rhs 의 AP_CLink 를 뒤로 연결한다.
|
||||
// rhs 의 AR_CLink 를 뒤로 연결한다.
|
||||
|
||||
if(this==&rhs) return *this;
|
||||
|
||||
JoinAfter /////////////////////////////////////
|
||||
JoinAfter //////////////////////////////////////
|
||||
(
|
||||
rhs.CutLink(AP_CLink), GetTailLinkPtr()
|
||||
rhs.CutLink(&AR_CLink), GetTailLinkPtr()
|
||||
);
|
||||
return *this; /////////////////////////////////
|
||||
return *this; //////////////////////////////////
|
||||
}/*
|
||||
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink* AP_CLink)*/
|
||||
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink& AR_CLink)*/
|
||||
|
||||
|
||||
ZtCObjList& JoinAfter /*######################################################*/
|
||||
(
|
||||
ZtCObjList& rhs ,
|
||||
ZCLink* AP_LinkOfRhs,
|
||||
ZCLink* AP_LinkStd
|
||||
ZCLink& AR_LinkOfRhs,
|
||||
ZCLinkOpt AO_StdOpt
|
||||
)
|
||||
/*#############################################################################*/
|
||||
{
|
||||
// rhs 의 AP_LinkOfRhs 링크를 잘라서 AP_LinkStd 앞에 붙인다.
|
||||
// rhs 의 AP_LinkOfRhs 링크를 잘라서 AO_StdOpt 뒤에 붙인다.
|
||||
|
||||
if(this==&rhs) return *this;
|
||||
|
||||
JoinAfter(
|
||||
rhs.CutLink(AP_LinkOfRhs), AP_LinkStd);
|
||||
rhs.CutLink(&AR_LinkOfRhs), AO_StdOpt.Raw() );
|
||||
|
||||
return *this;
|
||||
}/*
|
||||
ZtCObjList& JoinAfter ##########################################################
|
||||
(
|
||||
ZtCObjList& rhs ,
|
||||
ZCLink* AP_LinkOfRhs,
|
||||
ZCLink* AP_LinkStd
|
||||
)
|
||||
###############################################################################*/
|
||||
|
||||
|
||||
ZtCObjList& CutLinkOut /*#####################################################*/
|
||||
(
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& ARR_StoreList
|
||||
)
|
||||
/*#############################################################################*/
|
||||
{
|
||||
// AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크
|
||||
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크
|
||||
|
||||
if(this==&ARR_StoreList) return *this ;
|
||||
|
||||
if(ml_LinkSize<1) return ARR_StoreList;
|
||||
|
||||
ZCLink* VP_TailLink = mp_HeadLink->mp_PrevLink;
|
||||
|
||||
if(AP_CutHead==mp_HeadLink && AP_CutTail==VP_TailLink)
|
||||
{
|
||||
mp_HeadLink=0; // 모든 링크를 삭제할 때.
|
||||
}
|
||||
else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
||||
{
|
||||
ZCLink::MakeRing
|
||||
(mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink);
|
||||
}
|
||||
else if(AP_CutTail==VP_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때.
|
||||
{
|
||||
ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink);
|
||||
}
|
||||
else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때.
|
||||
{
|
||||
ZCLink::JoinLink(AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink);
|
||||
}/*
|
||||
else*/
|
||||
|
||||
|
||||
ml_LinkSize -= AL_CutSize;
|
||||
|
||||
/* 여기까지는
|
||||
|
||||
CutLink(ZCLink*, ZCLink*, TypeSize, ZtCObjList&)
|
||||
|
||||
와 같다. 이후에 CutLink() 에서는 ARR_StoreList 가 비어 있는 것으로
|
||||
간주하지만, CutLinkOut() 는 ARR_StoreList 이 비어 있지 않은 경우에
|
||||
도 대비한다.
|
||||
*/
|
||||
if(ARR_StoreList.ml_LinkSize<1)
|
||||
{
|
||||
// AP_CutHead 과 AP_CutTail 을 연결하여 이중 원형 연결리스트가 되도록 한다.
|
||||
|
||||
ZCLink::MakeRing(AP_CutHead, AP_CutTail);
|
||||
|
||||
ARR_StoreList.mp_HeadLink = AP_CutHead ;
|
||||
ARR_StoreList.ml_LinkSize = AL_CutSize ;
|
||||
}
|
||||
else
|
||||
{
|
||||
ZCLink::JoinLink(ARR_StoreList.mp_HeadLink->mp_PrevLink, AP_CutHead);
|
||||
ZCLink::MakeRing(ARR_StoreList.mp_HeadLink , AP_CutTail);
|
||||
|
||||
ARR_StoreList.ml_LinkSize += AL_CutSize ;
|
||||
}/*
|
||||
else*/
|
||||
|
||||
return ARR_StoreList;
|
||||
}/*
|
||||
ZtCObjList& CutLinkOut #########################################################
|
||||
(
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& ARR_StoreList
|
||||
ZCLink& AR_LinkOfRhs,
|
||||
ZCLinkOpt AO_StdOpt
|
||||
)
|
||||
###############################################################################*/
|
||||
|
||||
@ -2206,6 +2148,35 @@ namespace ZNsMain
|
||||
{ CutLink(&AR_CutLink); rhs.JoinBefore(&AR_CutLink, 0); }
|
||||
|
||||
|
||||
ZtCObjList& SendRangeOutAfter ///////////////////////////////////////////
|
||||
(
|
||||
ZCLink& AR_CutHead,
|
||||
ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCObjList& rhs ,
|
||||
ZCLinkOpt AO_LinkOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
{
|
||||
// AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AO_ObjOpt 뒤에 연결한다.
|
||||
|
||||
return CutLinkRangeOut
|
||||
(
|
||||
&AR_CutHead, &AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw()
|
||||
);
|
||||
//////////////////////
|
||||
}/*
|
||||
ZtCObjList& SendRangeOutAfter //////////////////////////////////////////
|
||||
(
|
||||
ZCLink& AR_CutHead,
|
||||
ZCLink& AR_CutTail,
|
||||
TypeSize AI_CutSize,
|
||||
ZtCObjList& rhs ,
|
||||
ZCLinkOpt AO_LinkOpt
|
||||
)
|
||||
/*#####################################################################*/
|
||||
|
||||
|
||||
operator Type&()
|
||||
{
|
||||
return AddDefault(1, ml_LinkSize+1)->GetData();
|
||||
|
@ -300,47 +300,64 @@ namespace ZNsMain
|
||||
typedef typename ZCBaseListEx11::ZCLink ZCLink11;
|
||||
|
||||
|
||||
static void ShowDataInNode(const CStringBase& AR_Data)
|
||||
static void ShowDataInNode(const CStringBase& AR_Data, ZTypLong& ARRI_CallCnt)
|
||||
{
|
||||
cout<<"* Data : "<<AR_Data<<endl;
|
||||
cout<<++ARRI_CallCnt<<"* Data : "<<AR_Data<<endl;
|
||||
}/*
|
||||
static void ShowDataInNode(const CStringBase& AR_Data)*/
|
||||
static void ShowDataInNode(const CStringBase& AR_Data, ZTypLong& ARRI_CallCnt)*/
|
||||
|
||||
|
||||
static void ShowNode10(ZCLink10& AR_CLink)
|
||||
static void Append10(ZCLink10& AR_CLink)
|
||||
{
|
||||
cout<<"* Node10 Prev : "<<*(AR_CLink-1)<<endl;
|
||||
cout<<"* Node10 Curr : " <<*(AR_CLink )<<endl;
|
||||
cout<<"* Node10 Prev : "<<*(AR_CLink+1)<<endl;
|
||||
(*AR_CLink).append("__");
|
||||
}/*
|
||||
static void ShowNode10(ZCLink10& AR_CLink)*/
|
||||
static void ShowNode11(ZCLink11& AR_CLink)
|
||||
{
|
||||
cout<<"* Node11 Prev : "<<*(AR_CLink-1)<<endl;
|
||||
cout<<"* Node11 Curr : " <<*(AR_CLink )<<endl;
|
||||
cout<<"* Node11 Prev : "<<*(AR_CLink+1)<<endl;
|
||||
}/*
|
||||
static void ShowNode11(ZCLink11& AR_CLink)*/
|
||||
static void Append10(ZCLink10& AR_CLink)*/
|
||||
|
||||
|
||||
static void ShowNode10_2(ZCLink10& AR_CLink, ostream& AR_OS)
|
||||
static void ShowNode10(ZCLink10& AR_CLink, ZTypLong& ARRI_CallCnt)
|
||||
{
|
||||
cout<<"* Node10_2 Prev : "<<*(AR_CLink-1)<<endl;
|
||||
cout<<"* Node10_2 Curr : " <<*(AR_CLink )<<endl;
|
||||
cout<<"* Node10_2 Prev : "<<*(AR_CLink+1)<<endl;
|
||||
++ARRI_CallCnt;
|
||||
|
||||
cout<<ARRI_CallCnt<<" * Node10 Prev : "<<*(AR_CLink-1)<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node10 Curr : " <<*(AR_CLink )<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node10 Prev : "<<*(AR_CLink+1)<<endl;
|
||||
}/*
|
||||
static void ShowNode10_2(ZCLink10& AR_CLink, ostream& AR_OS)*/
|
||||
static void ShowNode11_2(ZCLink11& AR_CLink, ostream& AR_OS)
|
||||
static void ShowNode10(ZCLink10& AR_CLink, ZTypLong& ARRI_CallCnt)*/
|
||||
static void ShowNode11(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)
|
||||
{
|
||||
cout<<"* Node11_2 Prev : "<<*(AR_CLink-1)<<endl;
|
||||
cout<<"* Node11_2 Curr : " <<*(AR_CLink )<<endl;
|
||||
cout<<"* Node11_2 Prev : "<<*(AR_CLink+1)<<endl;
|
||||
++ARRI_CallCnt;
|
||||
|
||||
cout<<ARRI_CallCnt<<" * Node11 Prev : "<<*(AR_CLink-1)<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node11 Curr : " <<*(AR_CLink )<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node11 Prev : "<<*(AR_CLink+1)<<endl;
|
||||
}/*
|
||||
static void ShowNode11_2(ZCLink11& AR_CLink, ostream& AR_OS)*/
|
||||
static void ShowNode11(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)*/
|
||||
|
||||
|
||||
static void ShowNode10_2(ZCLink10& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)
|
||||
{
|
||||
++ARRI_CallCnt;
|
||||
|
||||
cout<<ARRI_CallCnt<<" * Node10_2 Prev : "<<*(AR_CLink-1)<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node10_2 Curr : " <<*(AR_CLink )<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node10_2 Prev : "<<*(AR_CLink+1)<<endl;
|
||||
}/*
|
||||
static void ShowNode10_2(ZCLink10& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)*/
|
||||
static void ShowNode11_2(ZCLink11& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)
|
||||
{
|
||||
++ARRI_CallCnt;
|
||||
|
||||
cout<<ARRI_CallCnt<<" * Node11_2 Prev : "<<*(AR_CLink-1)<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node11_2 Curr : " <<*(AR_CLink )<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node11_2 Prev : "<<*(AR_CLink+1)<<endl;
|
||||
}/*
|
||||
static void ShowNode11_2(ZCLink11& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)*/
|
||||
|
||||
|
||||
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
|
||||
{
|
||||
ZTypLong VI_CallCnt=0;
|
||||
|
||||
CStringBase VO_CStringBase;
|
||||
CStringList1 VO_ListOfStr1 ;
|
||||
CStringList2 VO_ListOfStr2 ;
|
||||
@ -355,7 +372,7 @@ namespace ZNsMain
|
||||
|
||||
cout<<"# 1th IterElement ####" <<endl;
|
||||
{
|
||||
VO_ListOfStr1.IterElement(&ShowDataInNode);
|
||||
VO_ListOfStr1.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
|
||||
}
|
||||
/*///////////////////////////////////*/
|
||||
|
||||
@ -373,7 +390,7 @@ namespace ZNsMain
|
||||
|
||||
cout<<"# 2th IterElement ####" <<endl;
|
||||
{
|
||||
VO_ListOfStr2.IterElement(&ShowDataInNode);
|
||||
VO_ListOfStr2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
|
||||
}
|
||||
/*///////////////////////////////////*/
|
||||
|
||||
@ -415,7 +432,7 @@ namespace ZNsMain
|
||||
cout<<endl<<"# VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10"<<endl<<endl;
|
||||
|
||||
VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ;
|
||||
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode);
|
||||
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
VO_ZCBaseListEx10.AddTail().Fetch(VO_CStringBase("data ex 10-3"));
|
||||
VO_ZCBaseListEx10.AddTail().Fetch(VO_CStringBase("data ex 10-4"));
|
||||
@ -423,45 +440,67 @@ namespace ZNsMain
|
||||
cout<<endl<<"# VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 after VO_ZCBaseListEx10.AddTail() 2 times"<<endl<<endl;
|
||||
|
||||
VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ;
|
||||
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode);
|
||||
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
cout<<endl<<"# VO_ZCBaseListEx10_2.AddHead(VO_ZCBaseListEx10)"<<endl<<endl;
|
||||
|
||||
VO_ZCBaseListEx10_2.AddHead(VO_ZCBaseListEx10) ;
|
||||
VO_ZCBaseListEx10_2.IterElemRev(&ShowDataInNode);
|
||||
VO_ZCBaseListEx10_2.IterElemRev(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
|
||||
cout<<endl<<"# VO_ZCBaseListEx10_2 : DeleteTail(2)"<<endl<<endl;
|
||||
|
||||
VO_ZCBaseListEx10_2.DeleteTail(2);
|
||||
VO_ZCBaseListEx10_2.IterElemRev(&ShowDataInNode);
|
||||
VO_ZCBaseListEx10_2.IterElemRev(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
|
||||
cout<<endl<<"# VO_ZCBaseListEx10_2 : DeleteHead(1)"<<endl<<endl;
|
||||
|
||||
VO_ZCBaseListEx10_2.DeleteHead(1);
|
||||
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode);
|
||||
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
cout<<"# VO_ZCBaseListEx10 : capacity()="<<VO_ZCBaseListEx10 .capacity()<<endl;
|
||||
cout<<"# VO_ZCBaseListEx10_2 : capacity()="<<VO_ZCBaseListEx10_2.capacity()<<endl;
|
||||
|
||||
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10);
|
||||
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10 , ZftMCP(VI_CallCnt=0));
|
||||
cout<<"*****************************************************"<<endl;
|
||||
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_2, ZftMCP(cout));
|
||||
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_2, ZftMCP(cout), ZftMCP(VI_CallCnt=0));
|
||||
|
||||
|
||||
cout<<endl<<"# show VO_ZCBaseListEx10 element"<<endl;
|
||||
|
||||
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10);
|
||||
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10, ZftMCP(VI_CallCnt=0));
|
||||
VO_ZCBaseListEx10_2.SendOutTail
|
||||
(VO_ZCBaseListEx10_2.GetLinkPtr(2), VO_ZCBaseListEx10);
|
||||
(*VO_ZCBaseListEx10_2.GetLinkPtr(2), VO_ZCBaseListEx10);
|
||||
|
||||
cout<<endl<<"# after VO_ZCBaseListEx10_2's 2th link to VO_ZCBaseListEx10's tail"<<endl;
|
||||
|
||||
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
||||
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10);
|
||||
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10 , ZftMCP(VI_CallCnt=0));
|
||||
cout<<"*****************************************************"<<endl;
|
||||
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_2, ZftMCP(cout));
|
||||
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_2, ZftMCP(cout), ZftMCP(VI_CallCnt=0));
|
||||
|
||||
VO_ZCBaseListEx10.IterElemLink(&Append10);
|
||||
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
||||
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"*****************************************************"<<endl;
|
||||
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
|
||||
VO_ZCBaseListEx10.SendRangeOutAfter
|
||||
(
|
||||
*VO_ZCBaseListEx10.GetLinkPtr(2)
|
||||
, *VO_ZCBaseListEx10.GetLinkPtr(3)
|
||||
, 2
|
||||
, VO_ZCBaseListEx10_2
|
||||
, VO_ZCBaseListEx10_2.GetLinkOpt(2)
|
||||
);
|
||||
cout<<endl<<"# after VO_ZCBaseListEx10's 2~3th link to VO_ZCBaseListEx10_2's 2th link after"<<endl;
|
||||
|
||||
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
||||
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"*****************************************************"<<endl;
|
||||
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
return 0;
|
||||
}/*
|
||||
|
@ -20,7 +20,7 @@ namespace ZNsMain
|
||||
public:
|
||||
typedef ZNsIFaceEx::ZtCLink<string, ZCEmpty> ZCLinkCStr ;
|
||||
typedef ZtCLinkList<ZCLinkCStr> ZCLinkStrList;
|
||||
typedef ZCLinkStrList::ZCObjOpt ZCStrLinkOpt ;
|
||||
typedef ZCLinkStrList::ZCLinkOpt ZCStrLinkOpt ;
|
||||
public:
|
||||
|
||||
|
||||
|
@ -318,6 +318,21 @@ namespace ZNsMain
|
||||
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
|
||||
VO_ListOfStr11.SendRangeOutAfter
|
||||
(
|
||||
*VO_ListOfStr11.GetLinkPtr(2)
|
||||
,*VO_ListOfStr11.GetLinkPtr(3)
|
||||
, 2
|
||||
, RR(VO_ListOfStr10)
|
||||
, VO_ListOfStr10.GetLinkOpt(2)
|
||||
);
|
||||
cout<<"# list11's 2th ~ 3th link to list10's 2th link after"<<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;
|
||||
}/*
|
||||
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
||||
|
Reference in New Issue
Block a user