From 2c2b664d15e033ee4ec37f2eeb16ea9493887127 Mon Sep 17 00:00:00 2001 From: sauron Date: Sun, 12 Oct 2025 18:51:35 +0900 Subject: [PATCH] commit 2025-10-12 18:51 add iterator class in ZCppMain/ZtCObjList.H --- ZCppMain/ZMainHead.H | 483 +++++++++++++------------------------------------ ZCppMain/ZtCLinkList.H | 12 +- ZCppMain/ZtCObjList.H | 301 +++++++++++++++++++++--------- ZCppMain/ZtCStringEx.H | 9 + ZCppMain/ZtCTreeData.H | 2 +- 5 files changed, 359 insertions(+), 448 deletions(-) diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index f24bcfb..05c3046 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -5672,21 +5672,27 @@ namespace ZNsMain public: class ZCLink; class ZCLinkPoint; class ZCLinkRange; public: - typedef ZtCBaseList TypeThis ; - typedef ZtCBaseList TypeList ; - typedef TType TypeData ; - typedef TTypArgu TypeArg ; - typedef TTypeAlloc TypeAlloc ; - typedef TTypSize TypeSize ; - typedef TMoveObj TypeMoveObj ; - typedef ZCLink TypeLink ; - typedef ZCLinkPoint TypeLinkPoint ; - typedef ZCLinkRange TypeLinkRange ; - typedef ZCLink* IterEasy ; // 가장 쉽게 쓸 수 있는 반복자. - typedef TypeLinkPoint iterator ; // 다양한 기능을 가진 반복자. - public: - typedef ZtCObjOpt ZCLinkOpt; - typedef ZtCObjOpt ZCDataOpt; + typedef ZtCBaseList TypeThis ; + typedef ZtCBaseList TypeList ; + typedef TType TypeData ; + typedef TTypArgu TypeArg ; + typedef TTypeAlloc TypeAlloc ; + typedef TTypSize TypeSize ; + typedef TMoveObj TypeMoveObj ; + typedef ZCLink TypeLink ; + typedef ZCLinkPoint TypeLinkPoint ; + typedef ZCLinkRange TypeLinkRange ; + /*************************************************************************/ + typedef ZCLink* IterEasy ; // 가장 쉽게 쓸 수 있는 반복자. + typedef ZCLinkPoint iterator ; // 다양한 기능을 가진 반복자. + /*************************************************************************/ + typedef const TypeData TypeDataC ; + typedef const ZCLink TypeLinkC ; + typedef const iterator iteratorC ; + typedef const IterEasy IterEasyC ; + /*************************************************************************/ + typedef ZtCObjOpt ZCLinkOpt ; + typedef ZtCObjOpt ZCDataOpt ; public: typedef ZNsType::ZtCTypeNowCRTP /////////////////////////////////////// @@ -5818,9 +5824,9 @@ namespace ZNsMain class ZCLinkPoint { private: - TypeLink* mp_CurrLink; // 사실상 mp_CurrLink!=0 - TypeSize ml_CurrPos ; - TypeList& mr_CurrList; + mutable TypeLink* mp_CurrLink; // 사실상 mp_CurrLink!=0 + mutable TypeSize ml_CurrPos ; + /*****/ TypeList& mr_CurrList; public: ZCLinkPoint(TypeList& AR_TypeList) : mr_CurrList(AR_TypeList) @@ -5851,7 +5857,10 @@ namespace ZNsMain ZCLinkPoint& operator= (const ZCLinkPoint& rhs){ return *this; } - ZCLinkPoint& operator++() + /***/ TypeData& operator*() {return **mp_CurrLink;} + const TypeData& operator*() const{return **mp_CurrLink;} + + ZCLinkPoint& operator++() const { if(IsEmpty()){return *this;} @@ -5861,9 +5870,9 @@ namespace ZNsMain { ml_CurrPos -= mr_CurrList.size(); } return *this; /*******************/ }/* - ZCLinkPoint& operator++()*/ + ZCLinkPoint& operator++() const*/ - ZCLinkPoint& operator--() + ZCLinkPoint& operator--() const { if(IsEmpty()){return *this;} @@ -5873,9 +5882,9 @@ namespace ZNsMain { ml_CurrPos += mr_CurrList.size(); } return *this; }/* - ZCLinkPoint& operator--()*/ + ZCLinkPoint& operator--() const*/ - ZCLinkPoint operator++(int) + ZCLinkPoint operator++(int) const { ZCLinkPoint VO_NowPoint(*this); @@ -5887,9 +5896,9 @@ namespace ZNsMain { ml_CurrPos -= mr_CurrList.size(); } return VO_NowPoint; /*************/ }/* - ZCLinkPoint operator++(int)*/ + ZCLinkPoint operator++(int) const*/ - ZCLinkPoint operator--(int) + ZCLinkPoint operator--(int) const { ZCLinkPoint VO_NowPoint(*this); @@ -5901,10 +5910,10 @@ namespace ZNsMain { ml_CurrPos += mr_CurrList.size(); } return VO_NowPoint; }/* - ZCLinkPoint operator--(int)*/ + ZCLinkPoint operator--(int) const*/ - ZCLinkPoint& operator+=(TypeSize AL_Distance) + ZCLinkPoint& operator+=(TypeSize AL_Distance) const { if(IsEmpty()){return *this;} @@ -5916,9 +5925,9 @@ namespace ZNsMain { while(ml_CurrPos+= mr_CurrList.size()<1){} } return *this; /**********************/ }/* - ZCLinkPoint& operator+=(TypeSize AL_Distance)*/ + ZCLinkPoint& operator+=(TypeSize AL_Distance) const*/ - ZCLinkPoint& operator-=(TypeSize AL_Distance) + ZCLinkPoint& operator-=(TypeSize AL_Distance) const { if(IsEmpty()){return *this;} @@ -5930,261 +5939,13 @@ namespace ZNsMain { while(ml_CurrPos+= mr_CurrList.size()<1){} } return *this; /***********************/ }/* - ZCLinkPoint& operator-=(TypeSize AL_Distance)*/ - - - ZCLinkPoint& MoveAfter(ZCLinkPoint& rhs, bool AB_Forward=true) - { - if(IsEmpty()){return *this;} - - ZCLink* VP_HereLink = ///////////////// - ( - AB_Forward - ? mp_CurrLink->mp_NextLink - : mp_CurrLink->mp_PrevLink - ) ; - /////////////////////////////////////// - - if(&mr_CurrList!=&rhs.mr_CurrList) - { - mr_CurrList.SendOutAfter /********/ - ( - *mp_CurrLink , - rhs.mr_CurrList , - ZCLinkOpt(*rhs.mp_CurrLink) - ); - /*********************************/ - - if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} - }/* - if(&mr_CurrList!=&rhs.mr_CurrList)*/ - - - // &mr_CurrList == &rhs.mr_CurrList - - else if(rhs.mp_CurrLink==mp_CurrLink) - { - if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;} - }/* - else if(rhs.mp_CurrLink==mp_CurrLink)*/ - - else if(rhs.mp_CurrLink->mp_NextLink==mp_CurrLink) - { - // 이미 rhs 의 뒤에 *this 가 있는 경우. - - if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;} - }/* - else if(rhs.mp_CurrLink->mp_NextLink==mp_CurrLink)*/ - - else if(mp_CurrLink->mp_NextLink==rhs.mp_CurrLink) - { - // *this 뒤에 rhs 가 있어서 위치를 맞바꾸는 경우. - - mr_CurrList.SwapLinkNext( *mp_CurrLink ) ; - - if(--rhs.ml_CurrPos<1) - { rhs.ml_CurrPos += rhs.mr_CurrList.size(); } - - if(AB_Forward) - { - ++ml_CurrPos; VP_HereLink = mp_CurrLink; - } - else{ --ml_CurrPos; } - }/* - else if(mp_CurrLink->mp_NextLink==rhs.mp_CurrLink)*/ - - else ////////////////////////////////////////// - { - if(ml_CurrPosmp_NextLink - : mp_CurrLink->mp_PrevLink - ) ; - /////////////////////////////////////// - - if(&mr_CurrList!=&rhs.mr_CurrList) - { - mr_CurrList.SendOutBefore /*******/ - ( - *mp_CurrLink , - rhs.mr_CurrList , - ZCLinkOpt(*rhs.mp_CurrLink) - ); - /*********************************/ - - if(!AB_Forward) - {ml_CurrPos = ml_CurrPos-1;} - - ++rhs.ml_CurrPos ; - }/* - if(&mr_CurrList!=&rhs.mr_CurrList)*/ - - - // &mr_CurrList == &rhs.mr_CurrList - - else if(rhs.mp_CurrLink==mp_CurrLink) - { - if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;} - }/* - else if(rhs.mp_CurrLink==mp_CurrLink)*/ - - else if(rhs.mp_CurrLink->mp_PrevLink==mp_CurrLink) - { - // 이미 rhs 의 앞에 *this 가 있는 경우. - - if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;} - }/* - else if(rhs.mp_CurrLink->mp_PrevLink==mp_CurrLink)*/ - - else if(mp_CurrLink->mp_PrevLink==rhs.mp_CurrLink) - { - // *this 앞에 rhs 가 있어서 위치를 맞바꾸는 경우. - - rhs.mr_CurrList.SwapLinkNext(*rhs.mp_CurrLink) ; - - if(++rhs.ml_CurrPos>rhs.mr_CurrList.size()) - { rhs.ml_CurrPos -= rhs.mr_CurrList.size(); } - - if(AB_Forward){ ++ml_CurrPos; } else - { --ml_CurrPos; VP_HereLink = mp_CurrLink; } - }/* - else if(mp_CurrLink->mp_PrevLink==rhs.mp_CurrLink)*/ - - else ////////////////////////////////////////// - { - if(ml_CurrPos>rhs.ml_CurrPos) - { ++rhs.ml_CurrPos; } - - mr_CurrList.SendOutBefore /***************/ - ( - *mp_CurrLink, mr_CurrList, ZCLinkOpt(*mp_CurrLink) - ); - if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} - } - rhs.mp_CurrLink = VP_HereLink ; return *this ; - }/* - ZCLinkPoint& MoveBefore(ZCLinkPoint& rhs, bool AB_Forward=true)*/ - - - ZCLinkPoint& MoveHead(TypeList& AR_RhsList, bool AB_Forward=true) - { - if(IsEmpty()){return *this;} - - ZCLink* VP_HereLink = ///////////////// - ( - AB_Forward - ? mp_CurrLink->mp_NextLink - : mp_CurrLink->mp_PrevLink - ) ; - /////////////////////////////////////// - - if(&mr_CurrList!=&AR_RhsList) - { - mr_CurrList.SendOutAfter /********/ - ( - *mp_CurrLink, AR_RhsList, ZCLinkOpt(0) - ); - /*********************************/ - - if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} - }/* - if(&mr_CurrList!=&rhs.mr_CurrList)*/ - - - // &mr_CurrList == &rhs.mr_CurrList - - else if(mr_CurrList.mp_HeadLink==mp_CurrLink) - { - // *this 가 이미 머리인 경우. - - if(AB_Forward){++ml_CurrPos;}else{--ml_CurrPos;} - }/* - else if(rhs.mp_CurrLink->mp_NextLink==mp_CurrLink)*/ - - else ////////////////////////////////////////// - { - mr_CurrList.SendOutAfter /****************/ - ( - *mp_CurrLink, mr_CurrList, ZCLinkOpt(*mp_CurrLink) - ); - if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} - } - mp_CurrLink = VP_HereLink ; return *this ; - }/* - ZCLinkPoint& MoveHead(TypeList& AR_RhsList, bool AB_Forward=true)*/ - - - ZCLinkPoint& MoveTail(TypeList& AR_RhsList, bool AB_Forward=true) - { - if(IsEmpty()){return *this;} - - ZCLink* VP_HereLink = ///////////////// - ( - AB_Forward - ? mp_CurrLink->mp_NextLink - : mp_CurrLink->mp_PrevLink - ) ; - /////////////////////////////////////// - - if(&mr_CurrList!=&AR_RhsList) - { - mr_CurrList.SendOutBefore /*******/ - ( - *mp_CurrLink, AR_RhsList, ZCLinkOpt(0) - ); - /*********************************/ - - if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} - }/* - if(&mr_CurrList!=&rhs.mr_CurrList)*/ - - - // &mr_CurrList == &rhs.mr_CurrList - - else if(AR_RhsList.mp_TailLink==mp_CurrLink) - { - // 이미 *this 가 꼬리인 경우. - - if(AB_Forward){ml_CurrPos=1;}else{--ml_CurrPos;} - }/* - else if(AR_RhsList.mp_TailLink==mp_CurrLink)*/ - - else ////////////////////////////////////////// - { - mr_CurrList.SendOutAfter /****************/ - ( - *mp_CurrLink, mr_CurrList, ZCLinkOpt(*mp_CurrLink) - ); - if(!AB_Forward){ml_CurrPos = ml_CurrPos-1;} - } - mp_CurrLink = VP_HereLink ; return *this ; - }/* - ZCLinkPoint& MoveTail(TypeList& AR_RhsList, bool AB_Forward=true)*/ + ZCLinkPoint& operator-=(TypeSize AL_Distance) const*/ public: };/* class ZCLinkPoint*/ - public : /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ private : @@ -8419,103 +8180,109 @@ namespace ZNsMain 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*/ + void MoveNextIter(ZCLink* & APR_CLink ) const + { APR_CLink=APR_CLink->GetNextPtr(); + } + void MoveNextIter(IterEasyID & ARRI_IterEasyID ) const + { MoveNextIter((ZCLink*&)(ARRI_IterEasyID)); + } + void MoveNextIter(TypeLinkC* & APR_CLink ) const + { APR_CLink=APR_CLink->GetNextPtr(); + } + void MoveNextIter(IterEasyIDc& ARRI_IterEasyID ) const + { MoveNextIter((TypeLinkC*&)(ARRI_IterEasyID)); + } + void MoveNextIter(iterator & ARR_Iterator ) const{++ARR_Iterator;} + void MoveNextIter(iteratorC & ARR_Iterator ) const{++ARR_Iterator;} - void MovePrevIter(ZCLink*& APR_CLink ) const - { - APR_CLink=APR_CLink->GetPrevPtr(); - } - void MovePrevIter(IterEasyID& ARRI_IterEasyID) const - { - MovePrevIter((ZCLink*&)(ARRI_IterEasyID)); - } - void MovePrevIter(const ZCLink*& APR_CLink ) const - { - APR_CLink=APR_CLink->GetPrevPtr(); - } - void MovePrevIter(IterEasyIDc& ARRI_IterEasyID) const - { - MovePrevIter((const ZCLink*&)(ARRI_IterEasyID)); - }/* - void MovePrevIter(IterEasyIDc& ARRI_IterEasyID) const*/ + void MovePrevIter(ZCLink* & APR_CLink ) const + { APR_CLink=APR_CLink->GetPrevPtr(); + } + void MovePrevIter(IterEasyID & ARRI_IterEasyID ) const + { MovePrevIter((ZCLink*&)(ARRI_IterEasyID)); + } + void MovePrevIter(TypeLinkC* & APR_CLink ) const + { APR_CLink=APR_CLink->GetPrevPtr(); + } + void MovePrevIter(IterEasyIDc& ARRI_IterEasyID ) const + { MovePrevIter((TypeLinkC*&)(ARRI_IterEasyID)); + } + void MovePrevIter(iterator & ARR_Iterator ) const{--ARR_Iterator;} + void MovePrevIter(iteratorC & ARR_Iterator ) const{--ARR_Iterator;} - TypeData& GetDataInIter(ZCLink* AP_CLink ){return **AP_CLink ;} - TypeData& GetDataInIter(IterEasyID ARRI_IterEasyID) - { return GetDataInIter((ZCLink*)ARRI_IterEasyID); } + TypeData & GetDataInIter(ZCLink* AP_CLink ){return **AP_CLink ;} + TypeData & GetDataInIter(IterEasyID ARRI_IterEasyID ) + { return GetDataInIter((ZCLink*)ARRI_IterEasyID ); } + TypeData & GetDataInIter(iterator& ARR_Iterator ){return *ARR_Iterator;} - const TypeData& GetDataInIter(const ZCLink* AP_CLink ) const - { return **AP_CLink ; } - const TypeData& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const - { return GetDataInIter((const ZCLink*)ARRI_IterEasyID); } + TypeDataC& GetDataInIter(TypeLinkC* AP_CLink ) const + { return **AP_CLink ;} + TypeDataC& GetDataInIter(IterEasyIDc ARRI_IterEasyID ) const + { return GetDataInIter((TypeLinkC*)ARRI_IterEasyID); } + TypeDataC& GetDataInIter(iteratorC& ARR_Iterator ) + { return *ARR_Iterator;} - TypeData& GetDataInIter( ZCLink* AP_CLink , TypeSize AI_FarNum) + TypeData & GetDataInIter( ZCLink* AP_CLink , TypeSize AI_FarNum) {return **(AP_CLink->GetNextPrevPtr(AI_FarNum)) ; } - TypeData& GetDataInIter( IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum) + TypeData & GetDataInIter( IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum) { return GetDataInIter((ZCLink*)ARRI_IterEasyID, AI_FarNum); } - const TypeData& GetDataInIter( const ZCLink* AP_CLink , TypeSize AI_FarNum) const + TypeDataC& GetDataInIter( TypeLinkC* AP_CLink , TypeSize AI_FarNum) const {return **(AP_CLink->GetNextPrePtr(AI_FarNum)) ; } - const TypeData& GetDataInIter( IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const + TypeDataC& GetDataInIter( IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const { return GetDataInIter((ZCLink*)ARRI_IterEasyID, AI_FarNum); } - - 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)); } - - void ItPrev(ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;} - void ItPrev(IterEasyID& ARRI_IterEasyID) const{ItPrev((ZCLink*&)(ARRI_IterEasyID));} - void ItPrev(const ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;} - void ItPrev(IterEasyIDc& ARRI_IterEasyID) const - { ItPrev((const ZCLink*&)(ARRI_IterEasyID)); } - - TypeData& ItD(IterEasy AP_CLink ){return GetDataInIter(AP_CLink );} - TypeData& ItD(IterEasyID ARRI_IterEasyID){return GetDataInIter(ARRI_IterEasyID);} - - const TypeData& ItD(const IterEasy AP_CLink ) const{return GetDataInIter(AP_CLink );} - const TypeData& ItD(IterEasyIDc ARRI_IterEasyID ) const{return GetDataInIter(ARRI_IterEasyID);} + iterator begin() {return ZCLinkPoint(*this); } + iteratorC begin() const {return ZCLinkPoint(*this); } - TypeData& ItD(IterEasy 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);} + IterEasy ItHEasy() {return GetHeadIterEasy ();} + IterEasy ItTEasy() {return GetTailIterEasy ();} + IterEasyID ItHID () {return GetHeadIterEasyID ();} + IterEasyID ItTID () {return GetTailIterEasyID ();} - const TypeData& ItD(const IterEasy AP_CLink , TypeSize AI_FarNum) const{return GetDataInIter(AP_CLink , AI_FarNum);} - const TypeData& ItD(IterEasyIDc ARRI_IterEasyID , TypeSize AI_FarNum) const{return GetDataInIter(ARRI_IterEasyID, AI_FarNum);} + IterEasyIDc ItHIDc () const{return GetHeadIterEasyIDc();} + IterEasyIDc ItTIDc () const{return GetTailIterEasyIDc();} + + IterEasyC ItHEasy() const{return GetHeadIterEasy ();} + IterEasyC ItTEasy() const{return GetTailIterEasy ();} + IterEasyIDc ItHID () const{return GetHeadIterEasyID ();} + IterEasyIDc 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(TypeLinkC* & APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;} + void ItNext(iterator & ARR_Iterator ) const{++ARR_Iterator;} + void ItNext(iteratorC & ARR_Iterator ) const{++ARR_Iterator;} + void ItNext(IterEasyIDc& ARRI_IterEasyID) const + { ItNext((TypeLinkC*&)(ARRI_IterEasyID)); } + + void ItPrev(ZCLink* & APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;} + void ItPrev(IterEasyID & ARRI_IterEasyID) const{ItPrev((ZCLink*&)(ARRI_IterEasyID));} + void ItPrev(TypeLinkC* & APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;} + void ItPrev(iterator & ARR_Iterator ) const{--ARR_Iterator;} + void ItPrev(iteratorC & ARR_Iterator ) const{--ARR_Iterator;} + void ItPrev(IterEasyIDc& ARRI_IterEasyID) const + { ItPrev((TypeLinkC*&)(ARRI_IterEasyID)); } + + TypeData & ItD(IterEasy AP_CLink ) {return GetDataInIter(AP_CLink );} + TypeData & ItD(IterEasyID ARRI_IterEasyID) {return GetDataInIter(ARRI_IterEasyID);} + TypeData & ItD(iterator & ARR_Iterator ) {return GetDataInIter(ARR_Iterator );} + + TypeDataC& ItD(IterEasyC AP_CLink ) const {return GetDataInIter(AP_CLink );} + TypeDataC& ItD(IterEasyIDc ARRI_IterEasyID) const {return GetDataInIter(ARRI_IterEasyID);} + TypeDataC& ItD(iteratorC& ARR_Iterator ) const {return GetDataInIter(ARR_Iterator );} + + + TypeData & ItD(IterEasy 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);} + + TypeDataC& ItD(IterEasyC AP_CLink , TypeSize AI_FarNum) const {return GetDataInIter(AP_CLink , AI_FarNum);} + TypeDataC& ItD(IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const {return GetDataInIter(ARRI_IterEasyID, AI_FarNum);} public : };/* diff --git a/ZCppMain/ZtCLinkList.H b/ZCppMain/ZtCLinkList.H index 80aabd5..f4d98f8 100644 --- a/ZCppMain/ZtCLinkList.H +++ b/ZCppMain/ZtCLinkList.H @@ -2139,7 +2139,7 @@ namespace ZNsMain TypeThis& MoveLinkTail(ZCLink& AR_MoveLink) ::::::::::::::::::::::*/ - ZtCBaseList& SendRangeIn //////////////////////////////////////////////// + TypeThis& SendRangeIn /////////////////////////////////////////////////// ( ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt, bool AB_After @@ -2151,7 +2151,7 @@ namespace ZNsMain if(AI_CutSize < 1 ){return *this;} if(AI_CutSize >= size()){return *this;} - ZtCBaseList VO_Saver; CutLinkRangeOut /***********/ + TypeThis VO_Saver; CutLinkRangeOut /**************/ ( AR_CutHead , AR_CutTail , AI_CutSize, RR(VO_Saver), AO_LinkOpt.Raw(), AB_After @@ -2164,7 +2164,7 @@ namespace ZNsMain } /*#####################################################################*/ - ZtCBaseList& SendRangeInAfter /////////////////////////////////////////// + TypeThis& SendRangeInAfter ////////////////////////////////////////////// ( ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt @@ -2175,7 +2175,7 @@ namespace ZNsMain ( AR_CutHead, AR_CutTail, AI_CutSize, AO_LinkOpt, true ); } /*#####################################################################*/ - ZtCBaseList& SendRangeInBefore ////////////////////////////////////////// + TypeThis& SendRangeInBefore ///////////////////////////////////////////// ( ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt @@ -2187,7 +2187,7 @@ namespace ZNsMain } /*#####################################################################*/ - ZtCBaseList& SendRangeInHead //////////////////////////////////////////// + TypeThis& SendRangeInHead /////////////////////////////////////////////// ( ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt @@ -2198,7 +2198,7 @@ namespace ZNsMain ( AR_CutHead, AR_CutTail, AI_CutSize, ZCLinkOpt(0), true ); } /*#####################################################################*/ - ZtCBaseList& SendRangeInTail //////////////////////////////////////////// + TypeThis& SendRangeInTail /////////////////////////////////////////////// ( ZCLink& AR_CutHead, ZCLink& AR_CutTail, TypeSize AI_CutSize, ZCLinkOpt AO_LinkOpt diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index b547c56..0d8b750 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -796,22 +796,28 @@ namespace ZNsMain public: template friend class ZtCSortObjList; public: - typedef TType Type ; - typedef TType TypeData ; - typedef TTypArgu TypeArg ; - typedef TTypCAlloc TypeAlloc ; - typedef TTypeInit TypeInit ; - typedef TTypSize TypeSize ; - typedef TMoveObj TypeMoveObj; + typedef TType Type ; + typedef TType TypeData ; + typedef TTypArgu TypeArg ; + typedef TTypCAlloc TypeAlloc ; + typedef TTypeInit TypeInit ; + typedef TTypSize TypeSize ; + typedef TMoveObj TypeMoveObj ; public: - typedef ZtCObjList TypeThis ; + typedef ZtCObjList TypeThis ; public: - class ZCIterator; - class ZCLink ; + class ZCLink; class ZCLinkPoint ; public: - typedef ZCLink* IterEasy; // 가장 대표적으로 쓰일 수 있는 반복자. - typedef ZCIterator iterator; - typedef const ZCIterator const_iterator; + typedef ZCLink TypeLink ; + typedef TypeThis TypeList ; + public: + typedef ZCLink* IterEasy ; // 가장 대표적으로 쓰일 수 있는 반복자. + typedef ZCLinkPoint iterator ; + public: + typedef const IterEasy IterEasyC ; + typedef const TypeData TypeDataC ; + typedef const TypeLink TypeLinkC ; + typedef const iterator iteratorC ; public: typedef typename TFeeeHeap:: template ZtCBody ZCFreeHeap; @@ -1026,6 +1032,131 @@ namespace ZNsMain class ZCLink*/ + class ZCLinkPoint + { + private: + mutable TypeLink* mp_CurrLink; // 사실상 mp_CurrLink!=0 + mutable TypeSize ml_CurrPos ; + /*****/ TypeList& mr_CurrList; + public: + ZCLinkPoint(TypeList& AR_TypeList) : + mr_CurrList(AR_TypeList) + { + mp_CurrLink = AR_TypeList.HeadPtr(); + ml_CurrPos = 1 ; + } + ZCLinkPoint(const ZCLinkPoint& rhs) : + mr_CurrList(rhs.mr_CurrList), + mp_CurrLink(rhs.mp_CurrLink), + ml_CurrPos (rhs.ml_CurrPos ) + {} + public: + + TypeList& GetList(){return mr_CurrList;} + TypeLink& GetLink(){return *mp_CurrLink;} + /***************************************************/ + TypeSize GetPos () const{ return ml_CurrPos; } + /***************************************************/ + + const TypeList& GetList() const{return mr_CurrList;} + const TypeLink& GetLink() const{return *mp_CurrLink;} + + + bool IsValid() const{return mr_CurrList.size()>0;} + bool IsEmpty() const{return mr_CurrList.size()<1;} + + + ZCLinkPoint& operator= (const ZCLinkPoint& rhs){ return *this; } + + TypeData & operator*() {return **mp_CurrLink;} + TypeDataC& operator*() const{return **mp_CurrLink;} + + const ZCLinkPoint& operator++() const + { + if(IsEmpty()){*this;} + + mp_CurrLink = mp_CurrLink->mp_NextLink ; + + if(++ml_CurrPos>mr_CurrList.size()) + { ml_CurrPos -= mr_CurrList.size(); } + return *this; /*******************/ + }/* + const ZCLinkPoint& operator++() const*/ + + const ZCLinkPoint& operator--() const + { + if(IsEmpty()){return *this;} + + mp_CurrLink = mp_CurrLink->mp_PrevLink ; + + if(--ml_CurrPos<1) + { ml_CurrPos += mr_CurrList.size(); } + return *this; + }/* + const ZCLinkPoint& operator--() const*/ + + ZCLinkPoint operator++(int) const + { + ZCLinkPoint VO_NowPoint(*this); + + if(IsEmpty()){return VO_NowPoint;} + + mp_CurrLink = mp_CurrLink->mp_NextLink ; + + if(++ml_CurrPos>mr_CurrList.size()) + { ml_CurrPos -= mr_CurrList.size(); } + return VO_NowPoint; /*************/ + }/* + ZCLinkPoint operator++(int) const*/ + + ZCLinkPoint operator--(int) const + { + ZCLinkPoint VO_NowPoint(*this); + + if(IsEmpty()){return VO_NowPoint;} + + mp_CurrLink = mp_CurrLink->mp_PrevLink ; + + if(--ml_CurrPos<1) + { ml_CurrPos += mr_CurrList.size(); } + return VO_NowPoint; + }/* + ZCLinkPoint operator--(int) const*/ + + + const ZCLinkPoint& operator+=(TypeSize AL_Distance) const + { + if(IsEmpty()){return *this;} + + mp_CurrLink = &((*mp_CurrLink)+AL_Distance) ; + + if(ml_CurrPos+=AL_Distance > mr_CurrList.size()) + { ml_CurrPos %= mr_CurrList.size(); } + else if(ml_CurrPos<1) // AL_Distance<0 + { while(ml_CurrPos+= mr_CurrList.size()<1){} } + return *this; /**********************/ + }/* + const ZCLinkPoint& operator+=(TypeSize AL_Distance) const*/ + + const ZCLinkPoint& operator-=(TypeSize AL_Distance) const + { + if(IsEmpty()){return *this;} + + mp_CurrLink = &((*mp_CurrLink)-AL_Distance); + + if(ml_CurrPos-=AL_Distance > mr_CurrList.size()) + { ml_CurrPos %= mr_CurrList.size(); } + else if(ml_CurrPos<1) // AL_Distance>=0 + { while(ml_CurrPos+= mr_CurrList.size()<1){} } + return *this; /***********************/ + }/* + const ZCLinkPoint& operator-=(TypeSize AL_Distance) const*/ + + public: + };/* + class ZCLinkPoint*/ + + public : /******************************************************************/ protected: @@ -2645,103 +2776,107 @@ namespace ZNsMain 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*/ + void MoveNextIter(ZCLink*& APR_CLink ) const + { APR_CLink=APR_CLink->GetNextPtr(); + } + void MoveNextIter(IterEasyID& ARRI_IterEasyID ) const + { MoveNextIter((ZCLink*&)(ARRI_IterEasyID)); + } + void MoveNextIter(TypeLinkC*& APR_CLink ) const + { APR_CLink=APR_CLink->GetNextPtr(); + } + void MoveNextIter(IterEasyIDc& ARRI_IterEasyID ) const + { MoveNextIter((TypeLinkC*&)(ARRI_IterEasyID)); + } + void MoveNextIter(iterator& ARR_Iterator ) const{++ARR_Iterator;} + void MoveNextIter(iteratorC& ARR_Iterator ) const{++ARR_Iterator;} + + void MovePrevIter(ZCLink*& APR_CLink ) const + { APR_CLink=APR_CLink->GetPrevPtr(); + } + void MovePrevIter(IterEasyID& ARRI_IterEasyID) const + { MovePrevIter((ZCLink*&)(ARRI_IterEasyID)); + } + void MovePrevIter(TypeLinkC*& APR_CLink ) const + { APR_CLink=APR_CLink->GetPrevPtr(); + } + void MovePrevIter(IterEasyIDc& ARRI_IterEasyID) const + { MovePrevIter((TypeLinkC*&)(ARRI_IterEasyID)); + } + void MovePrevIter(iterator& ARR_Iterator ) const{--ARR_Iterator;} + void MovePrevIter(iteratorC& ARR_Iterator ) const{--ARR_Iterator;} - void MovePrevIter(ZCLink*& APR_CLink ) const - { - APR_CLink=APR_CLink->GetPrevPtr(); - } - void MovePrevIter(IterEasyID& ARRI_IterEasyID) const - { - MovePrevIter((ZCLink*&)(ARRI_IterEasyID)); - } - void MovePrevIter(const ZCLink*& APR_CLink ) const - { - APR_CLink=APR_CLink->GetPrevPtr(); - } - void MovePrevIter(IterEasyIDc& ARRI_IterEasyID) const - { - MovePrevIter((const ZCLink*&)(ARRI_IterEasyID)); - }/* - void MovePrevIter(IterEasyIDc& ARRI_IterEasyID) const*/ - - - TypeData& GetDataInIter(ZCLink* AP_CLink ){return **AP_CLink ;} - TypeData& GetDataInIter(IterEasyID ARRI_IterEasyID) + TypeData & GetDataInIter(ZCLink* AP_CLink ){return **AP_CLink ;} + TypeData & GetDataInIter(iterator AR_Iterator ){return *AR_Iterator;} + TypeData & GetDataInIter(IterEasyID ARRI_IterEasyID) { return GetDataInIter((ZCLink*)ARRI_IterEasyID); } - const TypeData& GetDataInIter(const ZCLink* AP_CLink ) const + TypeDataC& GetDataInIter(TypeLinkC* AP_CLink ) const { return **AP_CLink ; } - const TypeData& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const - { return GetDataInIter((const ZCLink*)ARRI_IterEasyID); } + TypeDataC& GetDataInIter(iteratorC AR_Iterator ) const{return *AR_Iterator;} + TypeDataC& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const + { return GetDataInIter((TypeLinkC*)ARRI_IterEasyID); } - TypeData& GetDataInIter( ZCLink* AP_CLink , TypeSize AI_FarNum) + TypeData& GetDataInIter(TypeLink* AP_CLink , TypeSize AI_FarNum) {return **(AP_CLink->GetNextPrevPtr(AI_FarNum)) ; } - TypeData& GetDataInIter( IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum) - { return GetDataInIter((ZCLink*)ARRI_IterEasyID, AI_FarNum); } + TypeData& GetDataInIter(IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum) + { return GetDataInIter((ZCLink*)ARRI_IterEasyID , AI_FarNum); } - const TypeData& GetDataInIter( const ZCLink* AP_CLink , TypeSize AI_FarNum) const - {return **(AP_CLink->GetNextPrePtr(AI_FarNum)) ; } - const TypeData& GetDataInIter( IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const - { return GetDataInIter((ZCLink*)ARRI_IterEasyID, AI_FarNum); } + TypeDataC& GetDataInIter(TypeLinkC* AP_CLink , TypeSize AI_FarNum) const + {return **(AP_CLink->GetNextPrePtr(AI_FarNum)) ; } + TypeDataC& GetDataInIter(IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const + { return GetDataInIter((ZCLink*)ARRI_IterEasyID , AI_FarNum); } + iterator begin() { return ZCLinkPoint(*this); } + iteratorC begin() const{ return ZCLinkPoint(*this); } + 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();} + 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 ();} + IterEasyC ItHEasy() const{return GetHeadIterEasy ();} + IterEasyC ItTEasy() const{return GetTailIterEasy ();} + IterEasyIDc ItHID () const{return GetHeadIterEasyID ();} + IterEasyIDc 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(TypeLink* & APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;} + void ItNext(iterator & ARR_Iterator ) const{++ARR_Iterator;} + void ItNext(IterEasyID & ARRI_IterEasyID) const{ItNext((ZCLink*&)(ARRI_IterEasyID));} + void ItNext(TypeLinkC* & APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;} + void ItNext(iteratorC & ARR_Iterator ) const{++ARR_Iterator;} void ItNext(IterEasyIDc& ARRI_IterEasyID) const - { ItNext((const ZCLink*&)(ARRI_IterEasyID)); } + { ItNext((TypeLinkC*&)(ARRI_IterEasyID)); } - void ItPrev(ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;} - void ItPrev(IterEasyID& ARRI_IterEasyID) const{ItPrev((ZCLink*&)(ARRI_IterEasyID));} - void ItPrev(const ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;} + void ItPrev(ZCLink* & APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;} + void ItPrev(iterator & ARR_Iterator ) const{--ARR_Iterator;} + void ItPrev(IterEasyID & ARRI_IterEasyID) const{ItPrev((ZCLink*&)(ARRI_IterEasyID));} + void ItPrev(TypeLinkC* & APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;} + void ItPrev(iteratorC & ARR_Iterator ) const{--ARR_Iterator;} void ItPrev(IterEasyIDc& ARRI_IterEasyID) const - { ItPrev((const ZCLink*&)(ARRI_IterEasyID)); } + { ItPrev((TypeLinkC*&)(ARRI_IterEasyID)); } - TypeData& ItD(IterEasy AP_CLink ){return GetDataInIter(AP_CLink );} - TypeData& ItD(IterEasyID ARRI_IterEasyID){return GetDataInIter(ARRI_IterEasyID);} + TypeData & ItD(IterEasy AP_CLink ) {return GetDataInIter(AP_CLink );} + TypeData & ItD(IterEasyID ARRI_IterEasyID) {return GetDataInIter(ARRI_IterEasyID);} + TypeData & ItD(iterator ARR_Iterator ) {return GetDataInIter(ARR_Iterator );} - const TypeData& ItD(const IterEasy AP_CLink ) const{return GetDataInIter(AP_CLink );} - const TypeData& ItD(IterEasyIDc ARRI_IterEasyID ) const{return GetDataInIter(ARRI_IterEasyID);} + TypeDataC& ItD(IterEasyC AP_CLink ) const{return GetDataInIter(AP_CLink );} + TypeDataC& ItD(IterEasyIDc ARRI_IterEasyID ) const{return GetDataInIter(ARRI_IterEasyID);} + TypeDataC& ItD(iteratorC ARR_Iterator ) const{return GetDataInIter(ARR_Iterator );} - TypeData& ItD(IterEasy 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);} + TypeData & ItD(IterEasy 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 , TypeSize AI_FarNum) const{return GetDataInIter(AP_CLink , AI_FarNum);} - const TypeData& ItD(IterEasyIDc ARRI_IterEasyID , TypeSize AI_FarNum) const{return GetDataInIter(ARRI_IterEasyID, AI_FarNum);} + TypeDataC& ItD(IterEasyC AP_CLink , TypeSize AI_FarNum) const{return GetDataInIter(AP_CLink , AI_FarNum);} + TypeDataC& ItD(IterEasyIDc ARRI_IterEasyID , TypeSize AI_FarNum) const{return GetDataInIter(ARRI_IterEasyID, AI_FarNum);} diff --git a/ZCppMain/ZtCStringEx.H b/ZCppMain/ZtCStringEx.H index 75341da..98ad7aa 100644 --- a/ZCppMain/ZtCStringEx.H +++ b/ZCppMain/ZtCStringEx.H @@ -7175,7 +7175,9 @@ namespace ZNsMain typedef ZtCStringBase ZCStringBase; typedef typename ZCStringBase::ZCStringList ZCStringList; + typedef typename ZCStringBase::ZCCharView ZCCharView ; typedef typename ZCStringBase::TypeLength TypeLength ; + typedef typename ZCStringBase::TypeLength TypeSize ; protected: typedef ZtCStringEx ZCStringEx ; protected: @@ -7219,6 +7221,13 @@ namespace ZNsMain }/* ZtCStringEx(const TypeChar* APC_Data)*/ + ZtCStringEx(const ZCCharView& AR_View) : TypeBase(AR_View) + { + ml_ListBuffAllByte=0; + }/* + ZtCStringEx(const ZCCharView& AR_View)*/ + + ZCStringEx& operator=(const ZtCStringEx& rhs) { if(this==&rhs) return *this; diff --git a/ZCppMain/ZtCTreeData.H b/ZCppMain/ZtCTreeData.H index bf96b64..d834470 100644 --- a/ZCppMain/ZtCTreeData.H +++ b/ZCppMain/ZtCTreeData.H @@ -674,7 +674,7 @@ namespace ZNsMain TypeSize VL_DataCnt= mo_CDataList .size(); TypeSize VL_NodeCnt=((ZCNodeList&)mo_CNodeList).size(); - IterOfData VO_iter_Data( mo_CDataList.begin()); + IterOfData VO_iter_Data( mo_CDataList .begin()); IterOfNode VO_iter_Node(((ZCNodeList&)mo_CNodeList).begin()); if(AR_CViewClass.OnDataStart(AI_StartDepth)==ZNsMain::ZNsEnum::ZERun_NO)