commit 2025-09-14 18:37 is testing ZtCBody::Fetch() in ZCppMain/ZtCObjList.H

This commit is contained in:
2025-09-14 18:37:25 +09:00
parent 0bf7d2c290
commit a16a71084b
3 changed files with 261 additions and 8 deletions

View File

@ -213,7 +213,6 @@ namespace ZNsMain
else if( AL_FarNum < ml_UseSize) // ( (AL_FarNum<0 ? -AL_FarNum : AL_FarNum)+1 <= ml_UseSize)
{
ml_UseSize -= AL_FarNum+1 ;
**mp_NoUseHead = **AP_LinkOrgin ;
APR_HeadCopy = mp_NoUseHead ;
@ -357,8 +356,6 @@ namespace ZNsMain
if(VP_TempLink==APR_TailLink)
{
DeleteHeap();
// Add extra codes for memory over
return;
@ -558,6 +555,23 @@ namespace ZNsMain
}/*
~ZtCBody()*/
ZtCBody(const ZtCBody& rhs)
{
ml_AllSize =
ml_UseSize = 0 ;
mp_NoUseHead =
mp_NoUseTail = 0 ;
}/*
ZtCBody(const ZtCBody& rhs)*/
ZtCBody& operator=(const ZtCBody& rhs)
{
return *this;
}/*
ZtCBody& operator=(const ZtCBody& rhs)*/
void DeleteHeap()
{
@ -584,6 +598,127 @@ namespace ZNsMain
void DeleteHeap()*/
TypeSize DeleteHeap(TypeSize AI_DelCnt)
{
if(ml_UseSize<1) return 0;
if(AI_DelCnt <1) return 0;
if(AI_DelCnt > size())
{
AI_DelCnt=size(); DeleteHeap(); return AI_DelCnt;
}/*
if(AI_DelCnt > size())*/
TypeSize VI_DelCntCopy = AI_DelCnt ;
ZCLink* VP_DelLink = mp_NoUseHead ;
do /*+++++++++++++++++++++++++++*/
{
mp_NoUseHead =
mp_NoUseHead->GetNextPtr() ;
delete VP_DelLink;
VP_DelLink = mp_NoUseHead ;
}
while(--VI_DelCntCopy>0); /*+++++++*/
ml_AllSize -= AI_DelCnt;
ml_UseSize -= AI_DelCnt;
return AI_DelCnt;
}/*
TypeSize DeleteHeap(TypeSize AI_DelCnt)*/
void AddHeap(TypeSize AI_AddCnt)
{
if(AI_AddCnt<1) return;
if(size() < 1)
{
MakeLink
(AI_AddCnt, RR(mp_NoUseHead), RR(mp_NoUseTail));
}
else
{
ZCLink* VP_MakeHead = 0;
ZCLink* VP_MakeTail = 0;
MakeLink
(AI_AddCnt, RR(VP_MakeHead), RR(VP_MakeTail));
ZCLink::JoinLink(mp_NoUseTail, VP_MakeHead);
mp_NoUseTail = VP_MakeTail ;
}/*
else*/
ml_UseSize += AI_AddCnt;
}/*
void AddHeap(TypeSize AI_AddCnt)*/
void Fetch(ZtCBody& rhs)
{
if(this==&rhs ) return;
if(rhs.size()<1) return;
RecvFreeIn ////////////////////////
(
rhs.ml_UseSize ,
rhs.mp_NoUseHead,
rhs.mp_NoUseTail
);
///////////////////////////////////
this->ml_AllSize += rhs.ml_UseSize;
rhs. ml_AllSize -= rhs.ml_UseSize;
rhs. ml_UseSize = 0 ;
rhs. mp_NoUseHead = 0 ;
rhs. mp_NoUseTail = 0 ;
}/*
void Fetch(ZtCBody& rhs)*/
TypeSize Fetch(ZtCBody& rhs, TypeSize AI_FetchSize)
{
// rhs 의 앞에서 AI_FetchSize 개를 가져온다.
if(this==&rhs ) return 0;
if(AI_FetchSize<1 ) return 0;
if(rhs.size() <1 ) return 0;
if(AI_FetchSize>= rhs.size())
{
AI_FetchSize = rhs.size();
Fetch(rhs); return AI_FetchSize;
}/*
if(AI_FetchSize>= rhs.size())*/
ZCLink* VP_RhsCutTail =
rhs.mp_NoUseHead->GetNextPrevPtr(AI_FetchSize-1);
ZCLink* VP_RhsNewHead = VP_RhsCutTail->GetNextPtr( );
RecvFreeIn //////////////////////////////////////////
(
AI_FetchSize, rhs.mp_NoUseHead, VP_RhsCutTail
);
/////////////////////////////////////////////////////
this->ml_AllSize += AI_FetchSize ;
rhs. ml_AllSize -= AI_FetchSize ;
rhs. ml_UseSize -= AI_FetchSize ;
rhs. mp_NoUseHead = VP_RhsNewHead;
return AI_FetchSize;
}/*
TypeSize Fetch(ZtCBody& rhs, TypeSize AI_FetchSize)*/
TypeSize GetUseHeapSize() const
{
return ml_UseSize;
@ -1382,6 +1517,10 @@ namespace ZNsMain
TypeSize GetSize () const{return ml_Size;}
TypeSize size () const{return ml_Size;}
TypeSize capacity() const{return mo_FreeObjt.capacity();}
TypeSize GetFreeSize() const
{ return mo_FreeObjt.size(); }
ZCLink* GetHeadLinkPtr(){return mp_HeadLink;}
ZCLink* GetTailLinkPtr()
@ -2421,7 +2560,7 @@ namespace ZNsMain
template
<typename TFunctor, typename TTypeHelp1, typename TTypeHelp2> /*###########*/
<typename TFunctor, typename TTypeHelp1, typename TTypeHelp2>
void IterElemRef
(
TFunctor AO_Functor, TTypeHelp1& AR_TypeHelp1, TTypeHelp2& AR_TypeHelp2
@ -2442,7 +2581,7 @@ namespace ZNsMain
__for0(TypeSize, i, ml_Size)*/
}/*
template
<typename TFunctor, typename TTypeHelp1, typename TTypeHelp2> ###############
<typename TFunctor, typename TTypeHelp1, typename TTypeHelp2>
void IterElemRef
(
TFunctor AO_Functor, TTypeHelp1& AR_TypeHelp1, TTypeHelp2& AR_TypeHelp2
@ -2450,6 +2589,88 @@ namespace ZNsMain
/*#############################################################################*/
template<typename TFunctor> void IterElemRev(TFunctor AO_Functor)
{
// 끝에서부터 순회한다.
if(size()<1) return; ZCLink*
VP_LoopLink = mp_HeadLink->mp_PrevLink;
__for0(TypeSize, i, ml_Size)
{
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)
{
if(size()<1) return;
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZCLink* VP_LoopLink = mp_HeadLink->mp_PrevLink ;
__for0(TypeSize, i, ml_Size)
{
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
)
/*#############################################################################*/
{
if(size()<1) return;
typedef ZNsMain::ZtCCheckRef<TTypeHelp1> ZCCheckRef1;
typedef ZNsMain::ZtCCheckRef<TTypeHelp2> ZCCheckRef2;
ZCLink* VP_LoopLink = mp_HeadLink->mp_PrevLink ;
__for0(TypeSize, i, ml_Size)
{
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
)
###############################################################################*/
/*///////////////////////////////////////////////////////////////////////////
■ IterElement() 예제.

View File

@ -1935,6 +1935,12 @@ namespace ZNsMain
}/*
inline TTypSize size() const*/
inline TTypSize capacity() const
{
return mo_FreeObjt.capacity();
}/*
inline TTypSize capacity() const*/
inline bool IsEmpty() const
{

View File

@ -58,6 +58,10 @@ namespace ZNsMain
{
VO_ListOfStr1.IterElement(&ShowDataInNode);
}
cout<<"# 1th IterElemRev ####" <<endl;
{
VO_ListOfStr1.IterElemRev(&ShowDataInNode);
}
/*///////////////////////////////////*/
@ -76,9 +80,31 @@ namespace ZNsMain
{
VO_ListOfStr2.IterElement(&ShowDataInNode);
}
cout<<"# 2th IterElemRev ####" <<endl;
{
VO_ListOfStr2.IterElemRev(&ShowDataInNode);
}
/*///////////////////////////////////*/
cout<<"# list1 size : " <<VO_ListOfStr1.size ()<<endl;
cout<<"# list2 size : " <<VO_ListOfStr2.size ()<<endl;
cout<<"# list1 free size: " <<VO_ListOfStr1.GetFreeSize ()<<endl;
cout<<"# list2 free size: " <<VO_ListOfStr2.GetFreeSize ()<<endl;
cout<<"# list1 capacity : " <<VO_ListOfStr1.capacity ()<<endl;
cout<<"# list2 capacity : " <<VO_ListOfStr2.capacity ()<<endl;
VO_ListOfStr1.clear(); VO_ListOfStr2.clear();
cout<<"# After clear()" <<endl;
cout<<"# list1 size : " <<VO_ListOfStr1.size ()<<endl;
cout<<"# list2 size : " <<VO_ListOfStr2.size ()<<endl;
cout<<"# list1 free size: " <<VO_ListOfStr1.GetFreeSize ()<<endl;
cout<<"# list2 free size: " <<VO_ListOfStr2.GetFreeSize ()<<endl;
cout<<"# list1 capacity : " <<VO_ListOfStr1.capacity ()<<endl;
cout<<"# list2 capacity : " <<VO_ListOfStr2.capacity ()<<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/