From 4c40e76abd6dc7f3967456148095dfc30790e305 Mon Sep 17 00:00:00 2001 From: sauron Date: Thu, 11 Sep 2025 13:31:10 +0900 Subject: [PATCH] commit 2025-09-11 13:31 edit codes for ZtCList in ZCppMain/ZMainHead.H --- ZCppMain/ZMainHead.H | 38 +++++++++++++++++++++++++++++++++++--- ZCppMain/ZtCObjList.H | 31 ++++++++++++++++++++++++------- 2 files changed, 59 insertions(+), 10 deletions(-) diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index d3bc219..4a2dcf8 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -4924,12 +4924,22 @@ namespace ZNsMain ZtCList() { - mp_HeadLink =0 ; - mp_TailLink =0 ; - ml_LinkCnt =0 ; + mp_HeadLink = 0 ; + mp_TailLink = 0 ; + ml_LinkCnt = 0 ; }/* ZtCList()*/ + ZtCList(const ZtCList& rhs) + { + mp_HeadLink = 0 ; + mp_TailLink = 0 ; + ml_LinkCnt = 0 ; + + *this = (rhs); + }/* + ZtCList(const ZtCList& rhs)*/ + ~ZtCList() { DeleteAll(); @@ -4937,6 +4947,28 @@ namespace ZNsMain ~ZtCList()*/ + ZtCList& operator=(const ZtCList& rhs) + { + if(this==&rhs) return *this; + + + this->DeleteAll(); + { + ZCLink* VP_NowLink = rhs.mp_HeadLink ; + + __for0(TypeSize, i, rhs.size()) + { + this->AddHead(VP_NowLink->mo_Data) ; + + VP_NowLink = VP_NowLink->mp_NextLink; + }/* + __for0(TypeSize, i, rhs.size())*/ + } + rhs. DeleteAll(); + }/* + ZtCList& operator=(const ZtCList& rhs)*/ + + void DeleteAll() { ZCLink* VP_NowLink = mp_HeadLink; diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index db71ec0..090ba66 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -231,6 +231,15 @@ namespace ZNsMain TypeSize ml_Size ; protected: + + void OnDelete(ZCLink* AP_CutLink) + { + if(TypeInit::EUseFini<1) return; + + TypeInit::OnFini(AP_CutLink->mo_Data, *this) ; + } + /*############################################################*/ + void OnDelete /*//////////////////////////////////////////////*/ ( ZCLink* AP_CutHead, TypeSize AI_CutHeadPos, @@ -238,9 +247,6 @@ namespace ZNsMain ) /*############################################################*/ { - // 상속클래스에서 추가된 멤버 데이타가 링크의 삭제시 변해야 - // 하는 값이라면, 이 함수를 overload 하여 값을 조종한다. - if(TypeInit::EUseFini<1) return; TypeSize VL_LoopCnt = AI_CutTailPos-AI_CutHeadPos+1 ; @@ -267,7 +273,7 @@ namespace ZNsMain { if(TypeInit::EUseInit<1) return; - ZCLink* VP_NowLink = AP_HeadInsert; + ZCLink* VP_NowLink = AP_HeadInsert; __for1(TypeSize, i, AI_InsertSize) { @@ -343,6 +349,19 @@ namespace ZNsMain if(AO_CObjList.ml_Size<1) return; + AO_CObjList.OnDelete //////////////////////// + ( + AO_CObjList.mp_HeadLink , 1 , + AO_CObjList.mp_HeadLink->mp_PrevLink, AO_CObjList.ml_Size + ); + /*/////////////////////////////////////////*/ + + this->OnInsert ////////////////////////////// + ( + this->ml_Size+1, AO_CObjList.ml_Size, AO_CObjList.mp_HeadLink + ); + /*/////////////////////////////////////////*/ + if(AP_LinkStd==0) { if(ml_Size==0) @@ -381,9 +400,7 @@ namespace ZNsMain protected: ZCLink* CutLink(ZCLink* AP_CutLink) { - // 삭제하려는 링크의 위치값을 알 수 없으므로 모든 링크를 삭제한다는 신호를 보낸다. - - OnDelete(mp_HeadLink, 1, mp_HeadLink->mp_PrevLink, ml_Size); + OnDelete(AP_CutLink); if(AP_CutLink==mp_HeadLink) {