commit 2025-09-14 12:37 apply ZNsIFaceEx::ZtCFreeHeapCDL<ZNsConst::CI_ListKind_Double> in ZCppMain/ZtCObjList.H

This commit is contained in:
2025-09-14 12:37:17 +09:00
parent 82761030c8
commit 1876bdc2ce
3 changed files with 156 additions and 101 deletions

View File

@ -3906,6 +3906,18 @@ namespace ZNsMain
public:
typedef typename TSnglList::ZCLink ZCLink ;
typedef typename TSnglList::TypeSize TypeSize;
/*:::::::::::::::::::::::::::::::::::::::::::::::::::
■ 만약 ZCLink 의 non-public 멤버에 접근해야 하는 경우,
ZCLink 에서 ZtCBody 에 friend 선언을 해줘야 하는 것
이 맞겠지만, friend 선언 없이 해야 한다면, ZCLink 와
같은 멤버를 가진 class 를 선언하고 그 class 로 강제
형변환을 해서 해결하자.
-- 2025-09-14 12:34
:::::::::::::::::::::::::::::::::::::::::::::::::::*/
public:
void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}

View File

@ -848,11 +848,14 @@ namespace ZNsMain
/*public :*/
protected:
ZCLink* mp_HeadLink;
TypeSize ml_Size ;
ZCLink* mp_HeadLink;
TypeSize ml_Size ;
ZCFreeHeap mo_FreeObjt;
protected:
#if(_CODE_OLD_)
void OnDelete(ZCLink* AP_CutLink)
{
if(TypeInit::ZEUseFini<1) return;
@ -906,6 +909,8 @@ namespace ZNsMain
}
/*############################################################*/
#endif //_CODE_OLD_
void JoinAfter(ZCLink* AP_LinkInsert, ZCLink* AP_LinkStd, TypeSize AL_PosStd)
{
@ -914,7 +919,9 @@ namespace ZNsMain
if(AP_LinkStd==0)
{
#if(_CODE_OLD_)
OnInsert(1, 1, AP_LinkInsert);
#endif
if(++ml_Size==1)
{
@ -935,7 +942,11 @@ namespace ZNsMain
}
else
{
OnInsert(AL_PosStd+1, 1, AP_LinkInsert); ++ml_Size;
#if(_CODE_OLD_)
OnInsert(AL_PosStd+1, 1, AP_LinkInsert);
#endif
++ml_Size;
AP_LinkInsert->mp_NextLink = AP_LinkStd->mp_NextLink ;
AP_LinkStd ->mp_NextLink = AP_LinkInsert ;
@ -972,6 +983,7 @@ namespace ZNsMain
if(this == &AO_CObjList ) return;
if(AO_CObjList.ml_Size<1) return;
#if(_CODE_OLD_)
AO_CObjList.OnDelete ////////////////////////
(
AO_CObjList.mp_HeadLink , 1 ,
@ -984,6 +996,7 @@ namespace ZNsMain
this->ml_Size+1, AO_CObjList.ml_Size, AO_CObjList.mp_HeadLink
);
/*/////////////////////////////////////////*/
#endif //_CODE_OLD_
if(AP_LinkStd==0)
{
@ -1024,7 +1037,9 @@ namespace ZNsMain
protected: ZCLink* CutLink(ZCLink* AP_CutLink)
{
#if(_CODE_OLD_)
OnDelete(AP_CutLink);
#endif
if(AP_CutLink==mp_HeadLink)
{
@ -1052,7 +1067,9 @@ namespace ZNsMain
ZCLink* CutLink(ZCLink* AP_CutLink, TypeSize AL_CutPos)
{
#if(_CODE_OLD_)
OnDelete(AP_CutLink, AL_CutPos, AP_CutLink, AL_CutPos);
#endif
if(AL_CutPos==1) // 첫째 링크를 삭제.
{
@ -1107,8 +1124,9 @@ namespace ZNsMain
#endif // _DEBUG
#if(_CODE_OLD_)
OnDelete(AP_CutHead, AL_CutHeadPos, AP_CutTail, AL_CutTailPos);
#endif
if(AL_CutHeadPos==1 && AL_CutTailPos==ml_Size) // 모든 링크를 삭제할 때.
{
@ -1243,9 +1261,8 @@ namespace ZNsMain
ZCLink* VP_TailLink=0;
GetManyLink
(AL_DefaultSize, VP_HeadLink, VP_TailLink);
ZCLink::MakeCircle
(VP_HeadLink , VP_TailLink );
(AL_DefaultSize, RR(VP_HeadLink), RR(VP_TailLink));
ZCLink::MakeCircle( VP_HeadLink, VP_TailLink );
ARR_StoreList.mp_HeadLink=VP_HeadLink ;
ARR_StoreList.ml_Size =AL_DefaultSize;
@ -1257,26 +1274,13 @@ namespace ZNsMain
void GetManyLink(
TypeSize AL_LinkSize , ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) const
TypeSize AL_LinkSize, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) const
{
#ifdef _DEBUG
ZNsMain::ZCCheckAlloc::ZCAllowAlloc VO_CAllowAllocObj;
#endif //_DEBUG
APR_HeadLink=new ZCLink; ZCLink* VP_TempLink=APR_HeadLink;
for(TypeSize i=2; i<=AL_LinkSize; ++i)
{
ZCLink::JoinLink(VP_TempLink, new ZCLink);
VP_TempLink=VP_TempLink->mp_NextLink;
}/*
for(TypeSize i=2; i<=AL_LinkSize; ++i)*/
APR_TailLink=VP_TempLink;
mo_FreeObjt.SendFreeOut
(AL_LinkSize, RR(APR_HeadLink), RR(APR_TailLink));
}/*
void GetManyLink(
TypeSize AL_LinkSize , ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) const */
TypeSize AL_LinkSize, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) const */
void GetManyLinkCopy /*#######################################################*/
@ -1288,51 +1292,8 @@ namespace ZNsMain
{
// AL_FarNum 의 절대값 + 1 개의 링크가 생성된다.
#ifdef _DEBUG
ZNsMain::ZCCheckAlloc::ZCAllowAlloc VO_CAllowAllocObj;
#endif //_DEBUG
if(AL_FarNum>0)
{
APR_HeadLink = new
ZCLink(AP_CopyLink->GetData());
ZCLink* VP_TempLink=APR_HeadLink;
for(TypeSize i=1; i<=AL_FarNum; ++i) /*<<<<<<<<<<<<<<<<<*/
{
AP_CopyLink=AP_CopyLink->mp_NextLink;
ZCLink::JoinLink(
VP_TempLink, new ZCLink(AP_CopyLink->GetData()));
VP_TempLink=VP_TempLink->mp_NextLink;
}
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
APR_TailLink=VP_TempLink;
}
else //AL_FarNum<=0
{
APR_TailLink=
new ZCLink( AP_CopyLink->GetData() );
ZCLink* VP_TempLink=APR_TailLink;
for(TypeSize i=AL_FarNum; i<0; ++i) /*<<<<<<<<<<<<<<<<<<*/
{
AP_CopyLink=AP_CopyLink->mp_PrevLink;
ZCLink::JoinLink(
VP_TempLink, new ZCLink(AP_CopyLink->GetData()));
VP_TempLink=VP_TempLink->mp_PrevLink;
}
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
APR_HeadLink=VP_TempLink;
}/*
else //AL_FarNum<=0*/
mo_FreeObjt.SendFreeOutCopy
(AP_CopyLink, AL_FarNum, RR(APR_HeadLink), RR(APR_TailLink));
}/*
void GetManyLinkCopy ###########################################################
(
@ -1363,6 +1324,9 @@ namespace ZNsMain
virtual ~ZtCObjList()
{
DeleteAll();
#if(_CODE_NEW_)
mo_FreeObjt.DeleteHeap();
#endif
}/*
virtual ~ZtCObjList()*/
@ -1377,15 +1341,15 @@ namespace ZNsMain
{
AddDefault(rhs.ml_Size-ml_Size, ml_Size+1);
ZCLink* pRhsLink=rhs.mp_HeadLink;
ZCLink* pLhsLink= mp_HeadLink;
ZCLink* pRhsLink = rhs.mp_HeadLink;
ZCLink* pLhsLink = mp_HeadLink;
__for1(TypeSize, i, ml_Size)
{
pLhsLink->GetData()=pRhsLink->GetData();
**pLhsLink = ** pRhsLink ;
pLhsLink=pLhsLink->mp_NextLink;
pRhsLink=pRhsLink->mp_NextLink;
pLhsLink = pLhsLink->mp_NextLink;
pRhsLink = pRhsLink->mp_NextLink;
}/*
__for1(TypeSize, i, ml_Size)*/
}
@ -1479,12 +1443,19 @@ namespace ZNsMain
Type& operator[](TypeSize AL_Index) const*/
ZCFreeHeap& GetCFreeHeap()
{
return mo_FreeObjt;
}/*
ZCFreeHeap& GetCFreeHeap()*/
TypeSize Find /*###############################################################*/
(
TypeArg AR_SearchType ,
TypeSize AL_FirstFindIndex =1 ,
bool AB_DoFindFromFront=true
) const
) const
/*#############################################################################*/
{
// AB_DoFindFromFront==true 이면 AL_FirstFindIndex 번째 링크부터
@ -1663,6 +1634,13 @@ namespace ZNsMain
{
if(mp_HeadLink==0) return *this;
mo_FreeObjt.RecvFreeIn
( ml_Size, mp_HeadLink, mp_HeadLink->mp_PrevLink );
mp_HeadLink= 0; ml_Size= 0; return *this;
#if(_CODE_OLD_)
OnDelete /*============================*/
(
mp_HeadLink , 1 ,
@ -1682,6 +1660,7 @@ namespace ZNsMain
while(--ml_Size>0);
mp_HeadLink =0; return *this;
#endif //_CODE_OLD_
}/*
ZtCObjList& DeleteAll()*/
@ -1692,6 +1671,13 @@ namespace ZNsMain
ZtCObjList& clear()*/
ZtCObjList& DeleteHeap()
{
mo_FreeObjt.DeleteHeap(); return *this;
}/*
ZtCObjList& DeleteHeap()*/
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)
{
#ifdef _DEBUG
@ -1710,7 +1696,13 @@ namespace ZNsMain
#endif //_DEBUG
delete this->CutLink(AP_DeleteLink); return *this;
#if(_CODE_NEW_)
mo_FreeObjt.RecvFreeIn
( this->CutLink(AP_DeleteLink) );
#else
delete this->CutLink(AP_DeleteLink);
#endif
return *this;
}/*
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)*/
@ -1732,7 +1724,13 @@ namespace ZNsMain
#endif //_DEBUG
delete this->CutLink(AP_DeleteLink, AL_DeletePos); return *this;
#if(_CODE_NEW_)
mo_FreeObjt.RecvFreeIn
( this->CutLink(AP_DeleteLink, AL_DeletePos) );
#else
delete this->CutLink(AP_DeleteLink, AL_DeletePos);
#endif
return *this;
}/*
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink, TypeSize AL_DeletePos)*/
@ -1761,7 +1759,12 @@ namespace ZNsMain
ZtCObjList& DeleteHead()
{
if(ml_Size>0)
delete this->CutLink(mp_HeadLink);
#if(_CODE_NEW_)
mo_FreeObjt.RecvFreeIn
( this->CutLink(mp_HeadLink) );
#else
delete this->CutLink(mp_HeadLink) ;
#endif
return *this;
}/*
@ -1773,7 +1776,12 @@ namespace ZNsMain
{
if(this->size()<1) return *this;
delete this->CutLink(mp_HeadLink);
#if(_CODE_NEW_)
mo_FreeObjt.RecvFreeIn
( this->CutLink(mp_HeadLink) );
#else
delete this->CutLink(mp_HeadLink) ;
#endif
}/*
__for1(TypeSize, i, AI_DeleteCnt)*/
@ -1784,7 +1792,12 @@ namespace ZNsMain
ZtCObjList& DeleteTail()
{
if(ml_Size>0)
delete this->CutLink(mp_HeadLink->mp_PrevLink);
#if(_CODE_NEW_)
mo_FreeObjt.RecvFreeIn
( this->CutLink(mp_HeadLink->mp_PrevLink) );
#else
delete this->CutLink(mp_HeadLink->mp_PrevLink) ;
#endif
return *this;
}/*
@ -1800,7 +1813,7 @@ namespace ZNsMain
ZtCObjList VO_StoreList; MakeDefault(
AL_DefaultSize, VO_StoreList);
ZCLink* VP_HeadLink=VO_StoreList.mp_HeadLink;
ZCLink* VP_HeadLink= VO_StoreList.mp_HeadLink;
if(AL_AddPos==1)
JoinAfter(VO_StoreList, 0 , 1 );
@ -1814,10 +1827,14 @@ namespace ZNsMain
ZtCObjList& AddHead(TypeArg AR_Type)
{
#if(_CODE_NEW_)
ZCLink* VP_NewNode = mo_FreeObjt.SendFreeOut();
#else
ZCLink* VP_NewNode = new ZCLink ;
#endif
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
ZCLink* VP_NewNode = new ZCLink;
TypeMoveObj::Exec(VP_NewNode->mo_Data, AR_Type);
JoinAfter(VP_NewNode, 0, 0); return *this;
@ -1825,13 +1842,15 @@ namespace ZNsMain
////////////////////////////////////////////////////
#endif
JoinAfter(new ZCLink(AR_Type), 0, 0); return *this;
**VP_NewNode = AR_Type;
JoinAfter(VP_NewNode, 0, 0); return *this;
}/*
ZtCObjList& AddHead(TypeArg AR_Type)*/
ZtCObjList& AddHead(const ZtCObjList& rhs)
{
if(this==&rhs) return *this;
if(this==&rhs) return *this ;
ZtCObjList VO_StoreList(rhs);
@ -1843,10 +1862,14 @@ namespace ZNsMain
ZtCObjList& AddTail(TypeArg AR_Type)
{
#if(_CODE_NEW_)
ZCLink* VP_NewNode = mo_FreeObjt.SendFreeOut();
#else
ZCLink* VP_NewNode = new ZCLink ;
#endif
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
ZCLink* VP_NewNode = new ZCLink;
TypeMoveObj::Exec(VP_NewNode->mo_Data, AR_Type);
JoinAfter(VP_NewNode, GetTailLinkPtr(), 0); return *this;
@ -1854,13 +1877,17 @@ namespace ZNsMain
////////////////////////////////////////////////////
#endif
JoinAfter(new ZCLink(AR_Type), GetTailLinkPtr(), ml_Size); return *this;
**VP_NewNode = AR_Type;
JoinAfter
(VP_NewNode, GetTailLinkPtr(), ml_Size);
return *this ;
}/*
ZtCObjList& AddTail(TypeArg AR_Type)*/
ZtCObjList& AddTail(const ZtCObjList& rhs)
{
ZtCObjList VO_StoreList(rhs); return JoinTail(VO_StoreList);
ZtCObjList VO_StoreList(rhs); return JoinTail(VO_StoreList);
}/*
ZtCObjList& AddTail(const ZtCObjList& rhs)*/
@ -1874,11 +1901,23 @@ namespace ZNsMain
///////////////////////////////////////////////////////////////////*/
ZCLink* AddHeadDefault()
{ ZCLink* VP_NewLink = new ZCLink ;
JoinAfter(VP_NewLink, 0 /*/////////*/ , 0 ); return VP_NewLink; }
{
#if(_CODE_NEW_)
ZCLink* VP_NewLink = mo_FreeObjt.SendFreeOut();
#else
ZCLink* VP_NewLink = new ZCLink ;
#endif
JoinAfter(VP_NewLink, 0 /*/////////*/ , 0 ); return VP_NewLink;
}
ZCLink* AddTailDefault()
{ ZCLink* VP_NewLink = new ZCLink ;
JoinAfter(VP_NewLink, GetTailLinkPtr(), ml_Size); return VP_NewLink; }
{
#if(_CODE_NEW_)
ZCLink* VP_NewLink = mo_FreeObjt.SendFreeOut();
#else
ZCLink* VP_NewLink = new ZCLink ;
#endif
JoinAfter(VP_NewLink, GetTailLinkPtr(), ml_Size); return VP_NewLink;
}
ZCLink* AddHeadDef(){ return AddHeadDefault(); }
ZCLink* AddTailDef(){ return AddTailDefault(); }

View File

@ -1187,8 +1187,9 @@ namespace ZNsMain
}
else
{
VP_AddLink->mp_NextLink =mp_HeadLink;
mp_HeadLink=VP_AddLink;
ZCLink::JoinLink(VP_AddLink, mp_HeadLink);
mp_HeadLink = VP_AddLink ;
}/*
else*/
}/*
@ -1205,8 +1206,9 @@ namespace ZNsMain
}
else
{
VP_AddLink->mp_NextLink =mp_HeadLink;
mp_HeadLink=VP_AddLink;
ZCLink::JoinLink(VP_AddLink, mp_HeadLink);
mp_HeadLink = VP_AddLink ;
}
//else
}/*
@ -1233,8 +1235,9 @@ namespace ZNsMain
}
else
{
mp_TailLink->mp_NextLink=VP_AddLink ;
mp_TailLink=mp_TailLink->mp_NextLink;
ZCLink::JoinLink(mp_TailLink, VP_AddLink);
mp_TailLink = VP_AddLink;
}/*
else*/
}/*
@ -1251,8 +1254,9 @@ namespace ZNsMain
}
else
{
mp_TailLink->mp_NextLink = VP_AddLink ;
mp_TailLink=mp_TailLink->mp_NextLink;
ZCLink::JoinLink(mp_TailLink, VP_AddLink);
mp_TailLink = VP_AddLink ;
}/*
else*/
}/*