From 6142ecd2e9a1ab12fd298c741bbfcd81ef5df7a1 Mon Sep 17 00:00:00 2001 From: sauron Date: Mon, 1 Sep 2025 11:26:41 +0900 Subject: [PATCH] commit 2025-09-01 11:26 add ZtCList in ZCppMain/ZMainHead.H --- ZCppMain/ZMainHead.H | 350 +++++++++++++++++++++++++++++++++++++++++++++++++- ZCppMain/ZtCObjAVL.H | 34 ++--- ZCppMain/ZtCObjList.H | 6 +- 3 files changed, 363 insertions(+), 27 deletions(-) diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index 615092c..700c9e7 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -2761,18 +2761,19 @@ namespace ZNsMain friend class ZCHeapAllocList; public: - ZCLink(ZCFreeAllocBase& ArCFreeAllocBase):mr_AllocBase(ArCFreeAllocBase), mp_NextLink(0) + ZCLink(ZCFreeAllocBase& ArCFreeAllocBase) : + mr_AllocBase(ArCFreeAllocBase), mp_NextLink(0) { }/* ZCLink(ZCFreeAllocBase& ArCFreeAllocBase)*/ - ZCLink* GetNextLink() + ZCLink* GetNextPtr() { return mp_NextLink; }/* - ZCLink* GetNextLink()*/ + ZCLink* GetNextPtr()*/ - ZCLink* GetNextLink(long AL_Distance) + ZCLink* GetNextPtr(long AL_Distance) { ZCLink* VP_NowLink=this; @@ -2781,7 +2782,7 @@ namespace ZNsMain return VP_NowLink; }/* - ZCLink* GetNextLink(long AL_Distance)*/ + ZCLink* GetNextPtr(long AL_Distance)*/ ZCFreeAllocBase& GetData() { @@ -2855,7 +2856,7 @@ namespace ZNsMain ZCFreeAllocBase& GetData(long AL_Index) { - return mp_HeadLink->GetNextLink(AL_Index-1)->mr_AllocBase; + return mp_HeadLink->GetNextPtr(AL_Index-1)->mr_AllocBase; }/* ZCFreeAllocBase& GetData(long AL_Index)*/ @@ -2867,7 +2868,7 @@ namespace ZNsMain template DeriveType& GetDataType(long AL_Index) { - return static_cast( mp_HeadLink->GetNextLink(AL_Index-1)->mr_AllocBase ); + return static_cast( mp_HeadLink->GetNextPtr(AL_Index-1)->mr_AllocBase ); }/* template DeriveType& GetDataType(long AL_Index) */ @@ -3713,6 +3714,341 @@ namespace ZNsMain template<> string& ZftMakeStr(string& ARR_SaveCStr, bool AB_Bool)*/ + template /////////////////////////////////////////////// + < + typename TType, + typename TTypeArg = const TType&, + typename TTypSize = ZTypLong + > + class ZtCList /*######################################*/ + { + public: + class ZCLink; + public: + typedef TType TypeData; + typedef TTypeArg TypeArg ; + typedef TTypSize TypeSize; + typedef ZCLink* IterEasy; // 가장 대표적으로 쓰일 수 있는 반복자. + typedef ZCLink* iterator; + public: + + + class ZCLink + { + public: + friend class ZtCList; + private: + TypeData mo_Data ; + ZCLink* mp_NextLink ; + private: + + ZCLink* GetNextPtr() {return mp_NextLink;} + const ZCLink* GetNextPtr()const{return mp_NextLink;} + + public: + + ZCLink() + { + mp_NextLink = 0; + }/* + ZCLink()*/ + + ZCLink(const ZCLink& rhs) + { + mo_Data = rhs.mo_Data ; + mp_NextLink = 0 ; + }/* + ZCLink(const ZCLink& rhs)*/ + + ZCLink(TypeArg AR_Data) + { + mo_Data = AR_Data ; + mp_NextLink = 0 ; + }/* + ZCLink(const ZCLink& rhs)*/ + + ZCLink& operator=(const ZCLink& rhs) + { + mo_Data = rhs.mo_Data; return *this; + }/* + ZCLink& operator=(const ZCLink& rhs)*/ + + + operator TypeData& (){return mo_Data;} + operator TypeData (){return mo_Data;} + TypeData& GetData (){return mo_Data;} + TypeData& operator*(){return mo_Data;} + + operator const TypeData& () const{return mo_Data;} + const TypeData& GetData () const{return mo_Data;} + const TypeData& operator*() const{return mo_Data;} + };/* + class ZCLink*/ + + + public : + private : + ZCLink* mp_HeadLink; + ZCLink* mp_TailLink; + TypeSize ml_LinkCnt ; + public : + + ZtCList() + { + mp_HeadLink =0 ; + mp_TailLink =0 ; + ml_LinkCnt =0 ; + }/* + ZtCList()*/ + + ~ZtCList() + { + DeleteAll(); + }/* + ~ZtCList()*/ + + void DeleteAll() + { + ZCLink* VP_NowLink = mp_HeadLink; + + while(VP_NowLink!=0) + { + ZCLink* VP_NextLink = + VP_NowLink->mp_NextLink ; + + delete VP_NowLink; + + VP_NowLink = VP_NextLink; + }/* + while(VP_NowLink!=0)*/ + + mp_HeadLink =0 ; + mp_TailLink =0 ; + ml_LinkCnt =0 ; + }/* + void DeleteAll()*/ + + + TypeData& AddTail() + { + ZCLink* VP_NewLink = new ZCLink; + + if(ml_LinkCnt<1) + { + mp_HeadLink = VP_NewLink; + mp_TailLink = VP_NewLink; + ml_LinkCnt = 1 ; + + return VP_NewLink->mo_Data; + }/* + if(ml_LinkCnt<1)*/ + + mp_TailLink-> + mp_NextLink = VP_NewLink; + mp_TailLink = VP_NewLink; + ml_LinkCnt ++ ; + + return VP_NewLink->mo_Data; + }/* + TypeData& AddTail()*/ + + TypeData& AddTail(TypeArg AO_ArgData) + { + ZCLink* VP_NewLink = new ZCLink(AO_ArgData); + + if(ml_LinkCnt<1) + { + mp_HeadLink = VP_NewLink; + mp_TailLink = VP_NewLink; + ml_LinkCnt = 1 ; + + return VP_NewLink->mo_Data; + }/* + if(ml_LinkCnt<1)*/ + + mp_TailLink-> + mp_NextLink = VP_NewLink; + mp_TailLink = VP_NewLink; + ml_LinkCnt ++ ; + + return VP_NewLink->mo_Data; + }/* + TypeData& AddTail(TypeArg AO_ArgData)*/ + + + operator TypeData&(){ return AddTail(); } + + + template void IterElement(TFunctor AO_Functor) + { + ZCLink* VP_LoopLink=mp_HeadLink; + + __for0(TypeSize, i, ml_LinkCnt) + { + ZtCTypeData:: + GetObjRef(AO_Functor)(VP_LoopLink->mo_Data); + + VP_LoopLink = VP_LoopLink->mp_NextLink ; + }/* + __for0(TypeSize, i, ml_Size)*/ + }/* + template void IterElement(TFunctor AO_Functor) */ + + template + void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) + { + typedef ZNsMain:: + ZtCCheckRef ZCCheckRef; + + ZCLink* VP_LoopLink=mp_HeadLink; + + __for0(TypeSize, i, ml_LinkCnt) + { + ZtCTypeData::GetObjRef(AO_Functor) + ( + VP_LoopLink->mo_Data, ZCCheckRef::PassData(AO_TypeHelp) + ); + //////////////////////////////////////////// + + VP_LoopLink = VP_LoopLink->mp_NextLink ; + }/* + __for0(TypeSize, i, ml_Size)*/ + }/* + template + void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */ + + + template + /*###########*/ + void IterElement + ( + TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 + ) + /*#############################################################################*/ + { + typedef ZNsMain::ZtCCheckRef ZCCheckRef1; + typedef ZNsMain::ZtCCheckRef ZCCheckRef2; + + ZCLink* VP_LoopLink=mp_HeadLink; + + __for0(TypeSize, i, ml_LinkCnt) + { + ZtCTypeData::GetObjRef(AO_Functor) + ( + VP_LoopLink->mo_Data + , ZCCheckRef1::PassData(AO_TypeHelp1) + , ZCCheckRef2::PassData(AO_TypeHelp2) + ); + //////////////////////////////////////////// + + VP_LoopLink = VP_LoopLink->mp_NextLink ; + }/* + __for0(TypeSize, i, ml_Size)*/ + }/* + template + ############### + void IterElement + ( + TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 + ) + ###############################################################################*/ + + + + ZCLink* GetHeadLinkPtr(){return mp_HeadLink;} + ZCLink* GetTailLinkPtr(){return mp_TailLink;} + + const ZCLink* GetHeadLinkPtr() const{return mp_HeadLink;} + const ZCLink* GetTailLinkPtr() const{return mp_TailLink;} + + + IterEasy GetHeadIterEasy (){return GetHeadLinkPtr();} + IterEasy GetTailIterEasy (){return GetTailLinkPtr();} + IterEasyID GetHeadIterEasyID (){return (IterEasyID)GetHeadLinkPtr();} + IterEasyID GetTailIterEasyID (){return (IterEasyID)GetTailLinkPtr();} + + IterEasy GetHeadIterEasy () const{return GetHeadLinkPtr();} + IterEasy GetTailIterEasy () const{return GetTailLinkPtr();} + IterEasyID GetHeadIterEasyID () const{return (IterEasyID)GetHeadLinkPtr();} + IterEasyID GetTailIterEasyID () const{return (IterEasyID)GetTailLinkPtr();} + + IterEasyIDc GetHeadIterEasyIDc() const{return (IterEasyIDc)GetHeadLinkPtr();} + IterEasyIDc GetTailIterEasyIDc() const{return (IterEasyIDc)GetTailLinkPtr();} + + void MoveNextIter(ZCLink*& APR_CLink ) const + { + APR_CLink=APR_CLink->GetNextPtr(); + } + void MoveNextIter(IterEasyID& ARRI_IterEasyID) const + { + MoveNextIter((ZCLink*&)(ARRI_IterEasyID)); + } + void MoveNextIter(const ZCLink*& APR_CLink ) const + { + APR_CLink=APR_CLink->GetNextPtr(); + } + void MoveNextIter(IterEasyIDc& ARRI_IterEasyID) const + { + MoveNextIter((const ZCLink*&)(ARRI_IterEasyID)); + }/* + void MoveNextIter(IterEasyIDc& ARRI_IterEasyID) const*/ + + TypeData& GetDataInIter(ZCLink* AP_CLink ){return **AP_CLink ;} + TypeData& GetDataInIter(IterEasyID ARRI_IterEasyID) + { return GetDataInIter((ZCLink*)ARRI_IterEasyID); } + + const TypeData& GetDataInIter(const ZCLink* AP_CLink) const + { + return **AP_CLink; + }/* + const TypeData& GetDataInIter(const ZCLink* AP_CLink) const*/ + + const TypeData& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const + { + return GetDataInIter((const ZCLink*)ARRI_IterEasyID); + }/* + const TypeData& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const*/ + + + IterEasy ItHEasy(){return GetHeadIterEasy ();} + IterEasy ItTEasy(){return GetTailIterEasy ();} + IterEasyID ItHID (){return GetHeadIterEasyID();} + IterEasyID ItTID (){return GetTailIterEasyID();} + + IterEasyIDc ItHIDc () const{return GetHeadIterEasyIDc();} + IterEasyIDc ItTIDc () const{return GetTailIterEasyIDc();} + + const IterEasy ItHEasy() const{return GetHeadIterEasy ();} + const IterEasy ItTEasy() const{return GetTailIterEasy ();} + const IterEasyID ItHID () const{return GetHeadIterEasyID ();} + const IterEasyID ItTID () const{return GetTailIterEasyID ();} + + void ItNext(ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;} + void ItNext(IterEasyID& ARRI_IterEasyID) const{ItNext((ZCLink*&)(ARRI_IterEasyID));} + void ItNext(const ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;} + void ItNext(IterEasyIDc& ARRI_IterEasyID) const + { ItNext((const ZCLink*&)(ARRI_IterEasyID)); } + + TypeData& ItD(IterEasy AP_CLink ){return GetDataInIter(AP_CLink );} + TypeData& ItD(IterEasyID ARRI_IterEasyID ){return GetDataInIter(ARRI_IterEasyID );} + TypeData& ItD(ZCLink* AP_CLink , TypeSize AI_FarNum){return GetDataInIter(AP_CLink , AI_FarNum);} + TypeData& ItD(IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum){return GetDataInIter(ARRI_IterEasyID, AI_FarNum);} + + const TypeData& ItD(const IterEasy AP_CLink ) const{return GetDataInIter(AP_CLink );} + const TypeData& ItD(IterEasyIDc ARRI_IterEasyID ) const{return GetDataInIter(ARRI_IterEasyID );} + const TypeData& ItD(const ZCLink* AP_CLink , TypeSize AI_FarNum) const{return GetDataInIter(AP_CLink );} + const TypeData& ItD(IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const{return GetDataInIter(ARRI_IterEasyID, AI_FarNum);} + + public : + };/* + template /////////////////////////////////////////////// + < + typename TType, + typename TTypeArg = const TType&, + typename TTypSize = ZTypLong + > + class ZtCList /*######################################*/ + namespace ZNsView { diff --git a/ZCppMain/ZtCObjAVL.H b/ZCppMain/ZtCObjAVL.H index 44e6a4c..bf39a0b 100644 --- a/ZCppMain/ZtCObjAVL.H +++ b/ZCppMain/ZtCObjAVL.H @@ -30,14 +30,14 @@ namespace ZNsMain /////////////////////////////////////////////////////////////////////////////////////////*/ - template< typename TType , - typename TTypArg =const TType& , - typename TTypBase =ZNsMain::ZNsIFace::ZtCAVL_BASE , - typename TNodeBase =ZNsMain::ZNsIFace::ZtCAVL_NodeBase , - typename TAlloc =ZNsMain::ZCAllocator , - typename TSize =ZNsMain::ZTypLong , - typename TCompare =ZNsMain::ZtCCompare , - typename TMoveObj =ZNsMain::ZtCMoveObj + template< typename TType , + typename TTypArg = const TType& , + typename TTypBase = ZNsMain::ZNsIFace::ZtCAVL_BASE , + typename TNodeBase = ZNsMain::ZNsIFace::ZtCAVL_NodeBase , + typename TAlloc = ZNsMain::ZCAllocator , + typename TSize = ZNsMain::ZTypLong , + typename TCompare = ZNsMain::ZtCCompare, + typename TMoveObj = ZNsMain::ZtCMoveObj > class ZtCObjAVL : public TTypBase /////////////////////////////////////////////////////// { @@ -2362,18 +2362,18 @@ namespace ZNsMain }/* else // AP_Node->mi_Balance==-1*/ }/* - ZCNode* Balance(ZCNode* AP_Node,int AI_AddState)*/ + ZCNode* Balance(ZCNode* AP_Node, int AI_AddState)*/ private: };/* - template< typename TType , - typename TTypArg =const TType& , - typename TTypBase =ZNsMain::ZNsIFace::ZtCAVL_BASE , - typename TNodeBase =ZNsMain::ZNsIFace::ZtCAVL_NodeBase , - typename TAlloc =ZNsMain::ZCAllocator , - typename TSize =ZNsMain::ZTypLong , - typename TCompare =ZNsMain::ZtCCompare, - typename TMoveObj =ZNsMain::ZtCMoveObj + template< typename TType , + typename TTypArg = const TType& , + typename TTypBase = ZNsMain::ZNsIFace::ZtCAVL_BASE , + typename TNodeBase = ZNsMain::ZNsIFace::ZtCAVL_NodeBase , + typename TAlloc = ZNsMain::ZCAllocator , + typename TSize = ZNsMain::ZTypLong , + typename TCompare = ZNsMain::ZtCCompare, + typename TMoveObj = ZNsMain::ZtCMoveObj > class ZtCObjAVL /////////////////////////////////////////////////////////////////////*/ diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index 9a74dc4..c3ef859 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -983,8 +983,8 @@ namespace ZNsMain #endif // _DEBUG - TypeSize VI_LeftDistance = AL_Index-1 ; - TypeSize VI_RightDistance= ml_Size-AL_Index+1; + TypeSize VI_LeftDistance = AL_Index-1 ; + TypeSize VI_RightDistance= ml_Size -AL_Index+1; TypeSize VI_ShortDistance= (VI_LeftDistance<=VI_RightDistance ? VI_LeftDistance : -VI_RightDistance); @@ -2130,7 +2130,7 @@ namespace ZNsMain void ItNext(ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;} void ItNext(iterator& ARR_CIterator ) {++ARR_CIterator;} void ItNext(IterEasyID& ARRI_IterEasyID) const{ItNext((ZCLink*&)(ARRI_IterEasyID));} - void ItNext(const ZCLink*& APR_CLink ) const {APR_CLink=APR_CLink->GetNextPtr() ;} + void ItNext(const ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;} void ItNext(const iterator& ARR_CIterator ) const{++ARR_CIterator;} void ItNext(IterEasyIDc& ARRI_IterEasyID) const { ItNext((const ZCLink*&)(ARRI_IterEasyID)); }