commit 2025-10-03 11:51 add ChangeCapacity() in ZtCBaseList : ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-03 11:51:55 +09:00
parent c0cc5540b5
commit 97b1280b15
4 changed files with 379 additions and 88 deletions

View File

@ -4035,68 +4035,75 @@ namespace ZNsMain
typedef typename TLinkList::TypeSize TypeSize;
public:
void RecvFreeIn(ZCLink* AP_CutLink){}
void RecvFreeIn /////////////////////
_NP_ void RecvFreeIn(ZCLink* AP_CutLink){}
_NP_ void RecvFreeIn /////////////////////
(
TypeSize AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
{ } /////////////////////////////////
{ } //////////////////////////////////////
ZCLink* SendFreeOut(){}
void SendFreeOut /////////////////
_NP_ ZCLink* SendFreeOut(){}
_NP_ void SendFreeOut /////////////////
(
TypeSize AL_NeedCnt ,
ZCLink*& APR_NewHead,
ZCLink*& APR_NewTail
)
{ } /////////////////////////////////
{ } //////////////////////////////////////
void SendFreeOutCopy /*////////////////////////////*/
_NP_ void SendFreeOutCopy /*////////////////////////////*/
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
{ } /*/////////////////////////////////////////////*/
{ } /*//////////////////////////////////////////////////*/
void DeleteHeap(){}
_NP_ void DeleteHeap(){}
void MakeEuqal(ZtCBody& rhs)
_NP_ void MakeEuqal(ZtCBody& rhs)
{
}/*
void MakeEuqal(ZtCBody& rhs)*/
_NP_ void MakeEuqal(ZtCBody& rhs)*/
TypeSize GetUseHeapSize() const
_NP_ TypeSize GetUseHeapSize() const
{
return 0;
}/*
TypeSize GetUseHeapSize() const*/
_NP_ TypeSize GetUseHeapSize() const*/
TypeSize GetAllHeapSize() const
_NP_ TypeSize GetAllHeapSize() const
{
return 0;
}/*
TypeSize GetAllHeapSize() const*/
_NP_ TypeSize GetAllHeapSize() const*/
TypeSize size() const
_NP_ TypeSize size() const
{
return GetUseHeapSize();
}/*
TypeSize GetHeapSize() const*/
_NP_ TypeSize size() const*/
TypeSize capacity() const
_NP_ TypeSize capacity() const
{
return GetAllHeapSize();
}/*
TypeSize GetHeapSize() const*/
_NP_ TypeSize capacity() const*/
_NP_ void ChangeCapacity(TypeSize AI_AddCut)
{
}/*
_NP_ void ChangeCapacity(TypeSize AI_AddCut)*/
public:
};/*
template<typename TLinkList> class ZtCBody*/
@ -4155,14 +4162,14 @@ namespace ZNsMain
:::::::::::::::::::::::::::::::::::::::::::::::::::*/
public:
void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}
void RecvFreeIn ///////////////////////////////////////
_NP_ void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}
_NP_ void RecvFreeIn ///////////////////////////////////////
(
TypeSize AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
///////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
{
ZCLink* VP_DelLink = AP_CutHead;
@ -4174,17 +4181,17 @@ namespace ZNsMain
}/*
__for0(TypeSize, i, AL_CutCnt)*/
}
///////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
ZCLink* SendFreeOut(){return new ZCLink;}
void SendFreeOut ///////////////////////////////////
_NP_ ZCLink* SendFreeOut(){return new ZCLink;}
_NP_ void SendFreeOut ///////////////////////////////////
(
TypeSize AL_NeedCnt ,
ZCLink*& APR_HeadLink ,
ZCLink*& APR_TailLink
)
///////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
{
APR_HeadLink = new ZCLink;
@ -4205,15 +4212,15 @@ namespace ZNsMain
APR_TailLink = VP_TailLink;
}
///////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
void SendFreeOutCopy /*////////////////////////////*/
_NP_ void SendFreeOutCopy /*////////////////////////////*/
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
/////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
{
// 총 AL_FarNum+1 개의 링크가 만들어짊.
@ -4239,47 +4246,53 @@ namespace ZNsMain
APR_TailCopy=VP_TailLink;
}/*
void SendFreeOutCopy //////////////////////////////
_NP_ void SendFreeOutCopy //////////////////////////////
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
///////////////////////////////////////////////////*/
////////////////////////////////////////////////////////*/
void DeleteHeap(){}
_NP_ void DeleteHeap(){}
void MakeEuqal(ZtCBody& rhs)
_NP_ void MakeEuqal(ZtCBody& rhs)
{
}/*
void MakeEuqal(ZtCBody& rhs)*/
_NP_ void MakeEuqal(ZtCBody& rhs)*/
TypeSize GetUseHeapSize() const
_NP_ TypeSize GetUseHeapSize() const
{
return 0;
}/*
TypeSize GetUseHeapSize() const*/
_NP_ TypeSize GetUseHeapSize() const*/
TypeSize GetAllHeapSize() const
_NP_ TypeSize GetAllHeapSize() const
{
return 0;
}/*
TypeSize GetAllHeapSize() const*/
_NP_ TypeSize GetAllHeapSize() const*/
TypeSize size() const
_NP_ TypeSize size() const
{
return GetUseHeapSize();
}/*
TypeSize GetHeapSize() const*/
_NP_ TypeSize GetHeapSize() const*/
TypeSize capacity() const
_NP_ TypeSize capacity() const
{
return GetAllHeapSize();
}/*
TypeSize GetHeapSize() const*/
_NP_ TypeSize capacity() const*/
_NP_ void ChangeCapacity(TypeSize AI_AddCut)
{
}/*
_NP_ void ChangeCapacity(TypeSize AI_AddCut)*/
};/*
template<typename TSnglList> class ZtCBody*/
@ -4300,14 +4313,14 @@ namespace ZNsMain
typedef typename TLinkList::TypeSize TypeSize;
public:
void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}
void RecvFreeIn ///////////////////////////////////////
_NP_ void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}
_NP_ void RecvFreeIn ///////////////////////////////////////
(
TypeSize AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
///////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
{
ZCLink* VP_DelLink = AP_CutHead;
@ -4319,17 +4332,17 @@ namespace ZNsMain
}/*
__for0(TypeSize, i, AL_CutCnt)*/
}
///////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
ZCLink* SendFreeOut(){return new ZCLink;}
void SendFreeOut ///////////////////////////////////
_NP_ ZCLink* SendFreeOut(){return new ZCLink;}
_NP_ void SendFreeOut ///////////////////////////////////
(
TypeSize AL_NeedCnt ,
ZCLink*& APR_HeadLink ,
ZCLink*& APR_TailLink
)
///////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
{
APR_HeadLink = new ZCLink;
@ -4351,15 +4364,15 @@ namespace ZNsMain
APR_TailLink = VP_TailLink;
}
///////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
void SendFreeOutCopy /*////////////////////////////*/
_NP_ void SendFreeOutCopy /*////////////////////////////*/
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
/////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
{
// 총 AL_FarNum+1 개의 링크가 만들어짊
@ -4385,47 +4398,53 @@ namespace ZNsMain
APR_TailCopy=VP_TailLink;
}/*
void SendFreeOutCopy //////////////////////////////
_NP_ void SendFreeOutCopy //////////////////////////////
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
///////////////////////////////////////////////////*/
////////////////////////////////////////////////////////*/
void DeleteHeap(){}
_NP_ void DeleteHeap(){}
void MakeEuqal(ZtCBody& rhs)
_NP_ void MakeEuqal(ZtCBody& rhs)
{
}/*
void MakeEuqal(ZtCBody& rhs)*/
_NP_ void MakeEuqal(ZtCBody& rhs)*/
TypeSize GetUseHeapSize() const
_NP_ TypeSize GetUseHeapSize() const
{
return 0;
}/*
TypeSize GetUseHeapSize() const*/
_NP_ TypeSize GetUseHeapSize() const*/
TypeSize GetAllHeapSize() const
_NP_ TypeSize GetAllHeapSize() const
{
return 0;
}/*
TypeSize GetAllHeapSize() const*/
_NP_ TypeSize GetAllHeapSize() const*/
TypeSize size() const
_NP_ TypeSize size() const
{
return GetUseHeapSize();
}/*
TypeSize GetHeapSize() const*/
TypeSize size() const*/
TypeSize capacity() const
_NP_ TypeSize capacity() const
{
return GetAllHeapSize();
}/*
TypeSize GetHeapSize() const*/
_NP_ TypeSize capacity() const*/
_NP_ void ChangeCapacity(TypeSize AI_AddCut)
{
}/*
_NP_ void ChangeCapacity(TypeSize AI_AddCut)*/
};/*
template<typename TLinkList> class ZtCBody*/
@ -5602,6 +5621,19 @@ namespace ZNsMain
)
/////////////////////////////////////////////////////*/
_VT_ void ChangeCapacity(TypeSize AI_AddCut)
{
if(TTypeCRTP::ZEUseCRTP<1)
{
return; /*nothing to do*/
}/*
if(TTypeCRTP::ZEUseCRTP<1)*/
GetChildObj().ChangeCapacity(AI_AddCut);
}/*
_VT_ void ChangeCapacity(TypeSize AI_AddCut)*/
/*private :*/
private :
@ -5807,6 +5839,29 @@ namespace ZNsMain
TypeData& AddTail(TypeArg AO_ArgData) ##########################*/
ZtCBaseList& AddHead(ZtCBaseList& rhs)
{
if(this == &rhs ) return *this;
if(rhs.size()<1 ) return *this;
ZtCBaseList VO_TempList(rhs);
return JoinHead(VO_TempList);
}/*
ZtCBaseList& AddHead(ZtCBaseList& rhs)*/
ZtCBaseList& AddTail(ZtCBaseList& rhs)
{
if(this == &rhs ) return *this;
if(rhs.size()<1 ) return *this;
ZtCBaseList VO_TempList(rhs);
return JoinTail(VO_TempList);
}/*
ZtCBaseList& AddTail(ZtCBaseList& rhs)*/
void DeleteHead()
{
if(ml_LinkCnt<1) return;
@ -5847,6 +5902,122 @@ namespace ZNsMain
void DeleteTail()*/
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLink* AP_StdLink)
{
// AP_StdLink 의 뒤에 rhs 를 삽입.
if(rhs.ml_LinkCnt<1) return *this;
this->ChangeCapacity( rhs.ml_LinkCnt) ;
rhs. ChangeCapacity(-rhs.ml_LinkCnt) ;
if(AP_StdLink==0) // 맨 앞에 삽입
{
if(ml_LinkCnt<1)
{
mp_HeadLink =rhs.mp_HeadLink;
mp_TailLink =rhs.mp_TailLink;
ml_LinkCnt =rhs.ml_LinkCnt ;
}
else // ml_LinkCnt>=1
{
ZCLink::JoinLink( rhs.mp_TailLink, mp_HeadLink );
ZCLink::MakeRing( rhs.mp_HeadLink, mp_TailLink );
mp_HeadLink =rhs.mp_HeadLink;
ml_LinkCnt =rhs.ml_LinkCnt ;
}/*
else // ml_LinkCnt>=1*/
ml_LinkCnt += rhs.ml_LinkCnt;
rhs.mp_HeadLink = 0 ;
rhs.mp_TailLink = 0 ;
rhs.ml_LinkCnt = 0 ;
return *this;
}/*
if(AP_StdLink==0)*/
ZCLink* VP_StdNext=AP_StdLink->mp_NextLink;
ZCLink::JoinLink(AP_StdLink , rhs.mp_HeadLink );
ZCLink::JoinLink(rhs.mp_TailLink, VP_StdNext );
if(AP_StdLink==mp_TailLink)
{ mp_TailLink=rhs.mp_TailLink; }
rhs.mp_HeadLink=0;
rhs.mp_TailLink=0;
rhs.ml_LinkCnt =0;
ml_LinkCnt += rhs.ml_LinkCnt; return *this;
}/*
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLink* AP_StdLink)
{
// AP_StdLink 의 앞에 rhs 를 삽입.
if(rhs.size()<1) return *this;
if(AP_StdLink==0) // 맨 뒤에 삽입
{
if(ml_LinkCnt<1)
{
mp_HeadLink =rhs.mp_HeadLink;
mp_TailLink =rhs.mp_TailLink;
ml_LinkCnt =rhs.ml_LinkCnt ;
}
else // ml_LinkCnt>=1
{
ZCLink::JoinLink(mp_TailLink, rhs.mp_HeadLink );
ZCLink::MakeRing(mp_HeadLink, rhs.mp_TailLink );
mp_TailLink = rhs.mp_TailLink ;
ml_LinkCnt += rhs.ml_LinkCnt ;
}/*
else // ml_LinkCnt>=1*/
this->ChangeCapacity( rhs.ml_LinkCnt) ;
rhs. ChangeCapacity(-rhs.ml_LinkCnt) ;
rhs.mp_HeadLink=0;
rhs.mp_TailLink=0;
rhs.ml_LinkCnt =0;
ml_LinkCnt += rhs.ml_LinkCnt; return *this;
}/*
if(AP_StdLink==0)*/
ZCLink* VP_StdPrev = AP_StdLink->mp_PrevLink;
ZCLink::JoinLink( VP_StdPrev , rhs.mp_HeadLink );
ZCLink::JoinLink(rhs.mp_TailLink, AP_StdLink );
if(AP_StdLink==mp_HeadLink)
{ mp_HeadLink = rhs.mp_HeadLink; }
this->ChangeCapacity( rhs.ml_LinkCnt) ;
rhs. ChangeCapacity(-rhs.ml_LinkCnt) ;
rhs.mp_HeadLink=0;
rhs.mp_TailLink=0;
rhs.ml_LinkCnt =0;
ml_LinkCnt += rhs.ml_LinkCnt; return *this;
}/*
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
ZtCBaseList& JoinHead(ZtCBaseList& rhs)
{ if(this==&rhs) return *this; return JoinAfter (rhs, 0); }
ZtCBaseList& JoinTail(ZtCBaseList& rhs)
{ if(this==&rhs) return *this; return JoinBefore(rhs, 0); }
TypeData& GetHeadData(){return mp_HeadLink->mo_Data;}
TypeData& GetTailData(){return mp_TailLink->mo_Data;}
@ -5980,6 +6151,72 @@ namespace ZNsMain
###############################################################################*/
template<typename TFunctor> void IterElemRev(TFunctor AO_Functor)
{
ZCLink* VP_LoopLink=mp_TailLink;
__for0(TypeSize, i, ml_LinkCnt)
{
ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(VP_LoopLink->mo_Data);
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template<typename TFunctor> void IterElemRev(TFunctor AO_Functor) */
template<typename TFunctor, typename TTypeHelp>
void IterElemRev(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::
ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZCLink* VP_LoopLink = mp_TailLink;
__for0(TypeSize, i, ml_LinkCnt)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_Data, ZCCheckRef::PassData(AO_TypeHelp)
);
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template<typename TFunctor, typename TTypeHelp>
void IterElemRev(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElemRev
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
/*#############################################################################*/
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp1> ZCCheckRef1;
typedef ZNsMain::ZtCCheckRef<TTypeHelp2> ZCCheckRef2;
ZCLink* VP_LoopLink = mp_TailLink;
__for0(TypeSize, i, ml_LinkCnt)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_Data
, ZCCheckRef1::PassData(AO_TypeHelp1)
, ZCCheckRef2::PassData(AO_TypeHelp2)
);
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElemRev
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
###############################################################################*/
ZCLink* GetHeadLinkPtr(){return mp_HeadLink;}
ZCLink* GetTailLinkPtr(){return mp_TailLink;}