From b5cf36be19ad01ea953db8611a2174bc51db95e6 Mon Sep 17 00:00:00 2001 From: sauron Date: Mon, 6 Oct 2025 11:48:10 +0900 Subject: [PATCH] commit 2025-10-06 11:48 add GetLinkOpt() : ZCppMain/ZtCObjList.H --- ZCppMain/ZMainHead.H | 7 ++- ZCppMain/ZtCLinkList.H | 19 ++++--- ZCppMain/ZtCObjList.H | 120 ++++++++++++++++++++++++++++++---------- ZCppMainTest/ZtCObjList_000.cpp | 28 ++++++++++ 4 files changed, 134 insertions(+), 40 deletions(-) diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index ca1e905..f1a2eed 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -4509,13 +4509,18 @@ namespace ZNsMain TypeData& operator* (){return *mp_TypeData;} operator TypeData& (){return *mp_TypeData;} + const TypeData* operator->() const{return mp_TypeData;} + const TypeData& operator* () const{return *mp_TypeData;} + operator const TypeData& () const{return *mp_TypeData;} + ZtCObjOpt& operator=(const ZtCObjOpt& rhs) { mp_TypeData=rhs.mp_TypeData; return *this; } operator bool () const{return mp_TypeData!=0;} bool has_value () const{return mp_TypeData!=0;} - TypeData& value() const{return *mp_TypeData ;} + /***/ TypeData& value() {return *mp_TypeData;} + const TypeData& value() const{return *mp_TypeData;} public : };/* diff --git a/ZCppMain/ZtCLinkList.H b/ZCppMain/ZtCLinkList.H index aa4ec27..470c964 100644 --- a/ZCppMain/ZtCLinkList.H +++ b/ZCppMain/ZtCLinkList.H @@ -815,7 +815,8 @@ namespace ZNsMain typedef typename ZCTypeNowCRTP::TypeData TypeChild; public : - typedef ZtCObjOpt ZCObjOpt; + typedef ZtCObjOpt ZCDataOpt; + typedef ZtCObjOpt ZCLinkOpt; public : typedef TCLink ZCLink ; typedef TCLink TypeData; @@ -1493,16 +1494,16 @@ namespace ZNsMain void clear(){DeleteAll();} - ZCObjOpt GetHeadOpt(){ return ZCObjOpt(mp_HeadLink); } - ZCObjOpt GetTailOpt(){ return ZCObjOpt(mp_TailLink); } + ZCDataOpt GetHeadOpt(){ return ZCDataOpt(mp_HeadLink); } + ZCDataOpt GetTailOpt(){ return ZCDataOpt(mp_TailLink); } - ZCObjOpt GetObjOpt(TypeSize AI_Index) + ZCDataOpt GetObjOpt(TypeSize AI_Index) { - if(ml_LinkSize<1) return ZCObjOpt(0); + if(ml_LinkSize<1) return ZCDataOpt(0); - return ZCObjOpt( (*mp_HeadLink)+(AI_Index-1) ); + return ZCDataOpt( (*mp_HeadLink)+(AI_Index-1) ); }/* - ZCObjOpt GetObjOpt(TypeSize AI_Index)*/ + ZCDataOpt GetObjOpt(TypeSize AI_Index)*/ ZCLink& AddHead(){ return JoinAfter (*NewLink(), 0); } @@ -1579,7 +1580,7 @@ namespace ZNsMain ZCLink& AR_CutTail, TypeSize AI_CutSize, ZtCLinkList& rhs , - ZCObjOpt AO_ObjOpt + ZCDataOpt AO_ObjOpt ) /*#####################################################################*/ { @@ -1598,7 +1599,7 @@ namespace ZNsMain ZCLink& AR_CutTail, TypeSize AI_CutSize, ZtCLinkList& rhs , - ZCObjOpt AO_ObjOpt + ZCDataOpt AO_ObjOpt ) /*#####################################################################*/ diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index 53b6fa6..6465f56 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -800,6 +800,9 @@ namespace ZNsMain typedef typename TFeeeHeap:: template ZtCBody ZCFreeHeap; public: + typedef ZtCObjOpt ZCLinkOpt; + typedef ZtCObjOpt ZCDataOpt; + public: class ZCLink : public TypeAlloc @@ -1509,6 +1512,26 @@ namespace ZNsMain const ZCLink* GetTailLinkPtr() const*/ + ZCLinkOpt GetHeadLinkOpt(){return ZCLinkOpt(mp_HeadLink);} + ZCLinkOpt GetTailLinkOpt() + { + if(mp_HeadLink==0) return ZCLinkOpt(0); + + return ZCLinkOpt(*mp_HeadLink->mp_PrevLink); + }/* + ZCLinkOpt GetTailLinkOpt()*/ + + const ZCLinkOpt GetHeadLinkOpt() const{return ZCLinkOpt(mp_HeadLink);} + const ZCLinkOpt GetTailLinkOpt() const + { + if(mp_HeadLink==0) return ZCLinkOpt(0); + + return ZCLinkOpt(*mp_HeadLink->mp_PrevLink); + }/* + const ZCLinkOpt GetTailLinkOpt()*/ + + + Type& operator[](TypeSize AL_Index) { // [] 에 들어가는 AL_Index 은 1 부터 시작하는 첨자이다. @@ -1690,21 +1713,6 @@ namespace ZNsMain ZCLink* GetLinkPtr(TypeSize AL_Index) { - #ifdef _DEBUG - - if(AL_Index<1 || AL_Index>ml_LinkSize) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<ml_LinkSize)*/ - - #endif // _DEBUG - TypeSize VI_LeftDistance =AL_Index-1 ; TypeSize VI_RightDistance=ml_LinkSize-AL_Index+1; TypeSize VI_ShortDistance= @@ -1716,21 +1724,6 @@ namespace ZNsMain const ZCLink* GetLinkPtr(TypeSize AL_Index) const // or 'ZCLink const * const GetLinkPtr(TypeSize AL_Index) const' { - #ifdef _DEBUG - - if(AL_Index<1 || AL_Index>ml_LinkSize) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<ml_LinkSize)*/ - - #endif // _DEBUG - TypeSize VI_LeftDistance = AL_Index-1 ; TypeSize VI_RightDistance= ml_LinkSize -AL_Index+1; TypeSize VI_ShortDistance= @@ -1741,6 +1734,24 @@ namespace ZNsMain const ZCLink* GetLinkPtr(TypeSize AL_Index) const*/ + ZCLinkOpt GetLinkOpt(TypeSize AL_Index) + { + if(mp_HeadLink==0) return ZCLinkOpt(0); + + return ZCLinkOpt(*GetLinkPtr(AL_Index)); + }/* + ZCLinkOpt GetLinkOpt(TypeSize AL_Index)*/ + + const ZCLinkOpt GetLinkOpt(TypeSize AL_Index) const + { + if(mp_HeadLink==0) return ZCLinkOpt(0); + + return ZCLinkOpt(*GetLinkPtr(AL_Index)); + }/* + const ZCLinkOpt GetLinkOpt(TypeSize AL_Index) const*/ + + + ZtCObjList& DeleteAll() { if(mp_HeadLink==0) return *this; @@ -2240,6 +2251,55 @@ namespace ZNsMain const Type& GetTailData() const*/ + ZCDataOpt GetHeadDataOpt() + { + if(mp_HeadLink==0) return ZCDataOpt(0); + + return ZCDataOpt(**mp_HeadLink); + }/* + ZCDataOpt GetHeadDataOpt()*/ + ZCDataOpt GetTailDataOpt() + { + if(mp_HeadLink==0) return ZCDataOpt(0); + + return ZCDataOpt(**mp_HeadLink->mp_PrevLink); + }/* + ZCDataOpt GetTailDataOpt()*/ + + + const ZCDataOpt GetHeadDataOpt() const + { + if(mp_HeadLink==0) return ZCDataOpt(0); + + return ZCDataOpt(**mp_HeadLink); + }/* + const ZCDataOpt GetHeadDataOpt() const*/ + const ZCDataOpt GetTailDataOpt() const + { + if(mp_HeadLink==0) return ZCDataOpt(0); + + return ZCDataOpt(**mp_HeadLink->mp_PrevLink); + }/* + const ZCDataOpt GetTailDataOpt() const*/ + + + ZCDataOpt GetDataOpt(TypeSize AI_Index) + { + if(mp_HeadLink==0) return ZCDataOpt(0); + + return ZCDataOpt( GetLinkPtr(AI_Index)->GetData() ); + }/* + ZCDataOpt GetDataOpt(TypeSize AI_Index)*/ + + const ZCDataOpt GetDataOpt(TypeSize AI_Index) const + { + if(mp_HeadLink==0) return ZCDataOpt(0); + + return ZCDataOpt( GetLinkPtr(AI_Index)->GetData() ); + }/* + const ZCDataOpt GetDataOpt(TypeSize AI_Index) const*/ + + Type& front(){return GetHeadData();} Type& back (){return GetTailData();} diff --git a/ZCppMainTest/ZtCObjList_000.cpp b/ZCppMainTest/ZtCObjList_000.cpp index e55381f..d7b91d0 100644 --- a/ZCppMainTest/ZtCObjList_000.cpp +++ b/ZCppMainTest/ZtCObjList_000.cpp @@ -36,6 +36,12 @@ namespace ZNsMain typedef CStringList1::ZCLink ZCLink1; typedef CStringList2::ZCLink ZCLink2; + typedef CStringList1::ZCLinkOpt ZCLinkOpt1; + typedef CStringList2::ZCLinkOpt ZCLinkOpt2; + + typedef CStringList1::ZCDataOpt ZCDataOpt1; + typedef CStringList2::ZCDataOpt ZCDataOpt2; + static void ShowDataInNode(const CStringBase& AR_Data) { @@ -104,6 +110,16 @@ namespace ZNsMain CStringList1 VO_ListOfStr10 ; CStringList2 VO_ListOfStr20 ; + ZCDataOpt1 VO_ZCDataOpt1 = VO_ListOfStr10.GetHeadDataOpt() ; + ZCLinkOpt1 VO_ZCLinkOpt1 = VO_ListOfStr10.GetTailLinkOpt() ; + + if(bool(VO_ZCDataOpt1)) + cout<<"# VO_ListOfStr10's head data : " <<*VO_ZCDataOpt1<