From 1876bdc2cecf64d6ca5fb5cc1aaf0543ce5300b0 Mon Sep 17 00:00:00 2001 From: sauron Date: Sun, 14 Sep 2025 12:37:17 +0900 Subject: [PATCH] commit 2025-09-14 12:37 apply ZNsIFaceEx::ZtCFreeHeapCDL in ZCppMain/ZtCObjList.H --- ZCppMain/ZMainHead.H | 12 +++ ZCppMain/ZtCObjList.H | 225 +++++++++++++++++++++++++++++--------------------- ZCppMain/ZtCSimList.H | 20 +++-- 3 files changed, 156 insertions(+), 101 deletions(-) diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index c462455..f11cda0 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -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;} diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index 28b0f24..f4bf4d6 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -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(); } diff --git a/ZCppMain/ZtCSimList.H b/ZCppMain/ZtCSimList.H index 7941147..1113382 100644 --- a/ZCppMain/ZtCSimList.H +++ b/ZCppMain/ZtCSimList.H @@ -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*/ }/*