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

View File

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

View File

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