diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index 27f2403..ce093bb 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -5681,6 +5681,7 @@ namespace ZNsMain typedef TMoveObj TypeMoveObj ; typedef ZCLink TypeLink ; typedef ZCLinkPoint TypeLinkPoint ; + typedef ZCLinkPoint TypeIter ; typedef ZCLinkRange TypeLinkRange ; /*************************************************************************/ typedef ZCLink* IterEasy ; // 가장 쉽게 쓸 수 있는 반복자. @@ -5695,6 +5696,7 @@ namespace ZNsMain typedef const TypeThis TypeThisC ; typedef const TypeList TypeListC ; typedef const TypeData TypeDataC ; + typedef const TypeIter TypeIterC ; typedef const ZCLink TypeLinkC ; typedef const ZCLink ZCLinkC ; typedef const ZCLinkOpt ZCLinkOptC ; @@ -5799,26 +5801,26 @@ namespace ZNsMain const ZCLink* GetNextPrevPtr(TypeSize AL_FarNum) const*/ - operator TypeData& (){return mo_DataObjt;} - operator TypeData (){return mo_DataObjt;} - TypeData& GetData (){return mo_DataObjt;} - TypeData& operator* (){return mo_DataObjt;} - TypeData& operator()(){return mo_DataObjt;} + operator TypeData& () {return mo_DataObjt;} + operator TypeData () {return mo_DataObjt;} + TypeData & GetData () {return mo_DataObjt;} + TypeData & operator* () {return mo_DataObjt;} + TypeData & operator()() {return mo_DataObjt;} - operator const TypeData& () const{return mo_DataObjt;} - const TypeData& GetData () const{return mo_DataObjt;} - const TypeData& operator* () const{return mo_DataObjt;} - const TypeData& operator()() const{return mo_DataObjt;} + operator TypeDataC&() const{return mo_DataObjt;} + TypeDataC& GetData () const{return mo_DataObjt;} + TypeDataC& operator* () const{return mo_DataObjt;} + TypeDataC& operator()() const{return mo_DataObjt;} - ZCLink& operator+(TypeSize AL_Distance) + ZCLink & operator+(TypeSize AL_Distance) { return *GetNextPrevPtr( AL_Distance); } - ZCLink& operator-(TypeSize AL_Distance) + ZCLink & operator-(TypeSize AL_Distance) { return *GetNextPrevPtr(-AL_Distance); } - const ZCLink& operator+(TypeSize AL_Distance) const + ZCLinkC& operator+(TypeSize AL_Distance) const { return *GetNextPrevPtr( AL_Distance); } - const ZCLink& operator-(TypeSize AL_Distance) const + ZCLinkC& operator-(TypeSize AL_Distance) const { return *GetNextPrevPtr(-AL_Distance); } public: @@ -5845,12 +5847,35 @@ namespace ZNsMain mp_CurrLink(rhs.mp_CurrLink), ml_CurrPos (rhs.ml_CurrPos ) {} - public: + public : + + static ZCLinkPoint MakeTailPoint(TypeList& AR_TypeList) + { + ZCLinkPoint VO_ZCLinkPoint(AR_TypeList); + + VO_ZCLinkPoint.mp_CurrLink = AR_TypeList.mp_TailLink; + VO_ZCLinkPoint.ml_CurrPos = AR_TypeList.ml_LinkSize; + + return VO_ZCLinkPoint; /****************************/ + }/* + static ZCLinkPoint MakeTailPoint(TypeList& AR_TypeList)*/ + static ZCLinkPoint MakeTailPoint(TypeIterC& AR_TypeIter) + { + ZCLinkPoint VO_ZCLinkPoint(AR_TypeIter); + + VO_ZCLinkPoint.mp_CurrLink = VO_ZCLinkPoint.mr_TypeList.mp_TailLink; + VO_ZCLinkPoint.ml_CurrPos = VO_ZCLinkPoint.mr_TypeList.ml_LinkSize; + + return VO_ZCLinkPoint; /****************************/ + }/* + static ZCLinkPoint MakeTailPoint(TypeIterC& AR_TypeIter)*/ + + public : TypeList & GetList() {return mr_CurrList;} TypeLink & GetLink() {return *mp_CurrLink;} - TypeThisC& GetList() const{return mr_CurrList;} + TypeListC& GetList() const{return mr_CurrList;} TypeLinkC& GetLink() const{return *mp_CurrLink;} /***************************************************/ TypeSize GetPos () const{return ml_CurrPos ;} @@ -5874,27 +5899,46 @@ namespace ZNsMain operator TypeLinkC& () const{return *mp_CurrLink;} + bool operator == (const ZCLinkPoint& rhs) const + { return ml_CurrPos == rhs.ml_CurrPos; } + bool operator != (const ZCLinkPoint& rhs) const + { return ml_CurrPos != rhs.ml_CurrPos; } + bool operator > (const ZCLinkPoint& rhs) const + { return ml_CurrPos > rhs.ml_CurrPos; } + bool operator >= (const ZCLinkPoint& rhs) const + { return ml_CurrPos >= rhs.ml_CurrPos; } + bool operator < (const ZCLinkPoint& rhs) const + { return ml_CurrPos < rhs.ml_CurrPos; } + bool operator <= (const ZCLinkPoint& rhs) const + { return ml_CurrPos <= rhs.ml_CurrPos; } + + bool operator == (TypeSize AL_Size) const + { return ml_CurrPos == AL_Size; } + bool operator != (TypeSize AL_Size) const + { return ml_CurrPos != AL_Size; } + bool operator > (TypeSize AL_Size) const + { return ml_CurrPos > AL_Size; } + bool operator >= (TypeSize AL_Size) const + { return ml_CurrPos >= AL_Size; } + bool operator < (TypeSize AL_Size) const + { return ml_CurrPos < AL_Size; } + bool operator <= (TypeSize AL_Size) const + { return ml_CurrPos <= AL_Size; } + + const ZCLinkPoint& operator++() const { - if(IsEmpty()){return *this;} + mp_CurrLink = mp_CurrLink->mp_NextLink; - mp_CurrLink = mp_CurrLink->mp_NextLink ; - - if(++ml_CurrPos>mr_CurrList.size()) - { ml_CurrPos -= mr_CurrList.size(); } - return *this; /*******************/ + ++ml_CurrPos; return *this ; }/* const ZCLinkPoint& operator++() const*/ const ZCLinkPoint& operator--() const { - if(IsEmpty()){return *this;} + mp_CurrLink = mp_CurrLink->mp_PrevLink; - mp_CurrLink = mp_CurrLink->mp_PrevLink ; - - if(--ml_CurrPos<1) - { ml_CurrPos += mr_CurrList.size(); } - return *this; + --ml_CurrPos; return *this ; }/* const ZCLinkPoint& operator--() const*/ @@ -5902,13 +5946,9 @@ namespace ZNsMain { ZCLinkPoint VO_NowPoint(*this); - if(IsEmpty()){return VO_NowPoint;} + mp_CurrLink = mp_CurrLink->mp_NextLink; - mp_CurrLink = mp_CurrLink->mp_NextLink ; - - if(++ml_CurrPos>mr_CurrList.size()) - { ml_CurrPos -= mr_CurrList.size(); } - return VO_NowPoint; /*************/ + ++ml_CurrPos ; return VO_NowPoint ; }/* ZCLinkPoint operator++(int) const*/ @@ -5916,13 +5956,9 @@ namespace ZNsMain { ZCLinkPoint VO_NowPoint(*this); - if(IsEmpty()){return VO_NowPoint;} + mp_CurrLink = mp_CurrLink->mp_PrevLink; - mp_CurrLink = mp_CurrLink->mp_PrevLink ; - - if(--ml_CurrPos<1) - { ml_CurrPos += mr_CurrList.size(); } - return VO_NowPoint; + --ml_CurrPos; return VO_NowPoint ; }/* ZCLinkPoint operator--(int) const*/ @@ -5932,26 +5968,18 @@ namespace ZNsMain if(IsEmpty()){return *this;} mp_CurrLink = &((*mp_CurrLink)+AL_Distance) ; + ml_CurrPos += 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; /**********************/ + 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); + ml_CurrPos -= 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; /***********************/ + return *this; /*::::::::::::::::::::::::::*/ }/* const ZCLinkPoint& operator-=(TypeSize AL_Distance) const*/ @@ -5960,6 +5988,117 @@ namespace ZNsMain class ZCLinkPoint*/ + class ZCLinkPointEx : public ZCLinkPoint + { + public: + ZCLinkPointEx(TypeList& AR_TypeList): ZCLinkPoint(AR_TypeList){} + ZCLinkPointEx(const ZCLinkPoint& rhs): ZCLinkPoint(rhs ){} + ZCLinkPointEx(const ZCLinkPointEx& rhs): ZCLinkPoint(rhs ){} + public: + + static ZCLinkPointEx MakeTailPoint(const ZCLinkPointEx& AR_TypeIter) + { + ZCLinkPointEx VO_ZCLinkPoint(AR_TypeIter); + + if(!AR_TypeIter.IsEmpty()) /****************************/ + { + VO_ZCLinkPoint.mp_CurrLink = VO_ZCLinkPoint.mr_TypeList.mp_TailLink; + VO_ZCLinkPoint.ml_CurrPos = VO_ZCLinkPoint.mr_TypeList.ml_LinkSize; + } + return VO_ZCLinkPoint; /********************************/ + }/* + static ZCLinkPointEx MakeTailPoint(const ZCLinkPointEx& AR_TypeIter)*/ + + public: + + ZCLinkPointEx& operator= (const ZCLinkPointEx& rhs){ return *this; } + + const ZCLinkPointEx& operator++() const + { + if(this->IsEmpty()){return *this;} + + this->mp_CurrLink = this->mp_CurrLink->mp_NextLink ; + + if(++this->ml_CurrPos>this->mr_CurrList.size()) + { this->ml_CurrPos -= this->mr_CurrList.size(); } + return *this; /*******************************/ + }/* + const ZCLinkPointEx& operator++() const*/ + + const ZCLinkPointEx& operator--() const + { + if(this->IsEmpty()){return *this;} + + this->mp_CurrLink = this->mp_CurrLink->mp_PrevLink ; + + if(--this->ml_CurrPos<1) + { this->ml_CurrPos += this->mr_CurrList.size(); } + return *this; /********/ + }/* + const ZCLinkPointEx& operator--() const*/ + + ZCLinkPointEx operator++(int) const + { + ZCLinkPointEx VO_NowPoint(*this); + + if(this->IsEmpty()){return VO_NowPoint;} + + this->mp_CurrLink = this->mp_CurrLink->mp_NextLink ; + + if(++this->ml_CurrPos>this->mr_CurrList.size()) + { this->ml_CurrPos -= this->mr_CurrList.size(); } + return VO_NowPoint; /*************************/ + }/* + ZCLinkPointEx operator++(int) const*/ + + ZCLinkPointEx operator--(int) const + { + ZCLinkPointEx VO_NowPoint(*this); + + if(this->IsEmpty()){return VO_NowPoint;} + + this->mp_CurrLink = this->mp_CurrLink->mp_PrevLink ; + + if(--this->ml_CurrPos<1) + { this->ml_CurrPos += this->mr_CurrList.size(); } + return VO_NowPoint; + }/* + ZCLinkPointEx operator--(int) const*/ + + + const ZCLinkPointEx& operator+=(TypeSize AL_Distance) const + { + if(this->IsEmpty()){return *this;} + + this->mp_CurrLink = &((*this->mp_CurrLink)+AL_Distance) ; + + if(this->ml_CurrPos+=AL_Distance > this->mr_CurrList.size()) + { this->ml_CurrPos %= this->mr_CurrList.size(); } + else if(this->ml_CurrPos<1) // AL_Distance<0 + { while(this->ml_CurrPos+= this->mr_CurrList.size()<1){} } + return *this; /****************************/ + }/* + const ZCLinkPointEx& operator+=(TypeSize AL_Distance) const*/ + + const ZCLinkPointEx& operator-=(TypeSize AL_Distance) const + { + if(this->IsEmpty()){return *this;} + + this->mp_CurrLink = &((*this->mp_CurrLink)-AL_Distance); + + if(this->ml_CurrPos-=AL_Distance > this->mr_CurrList.size()) + { this->ml_CurrPos %= this->mr_CurrList.size(); } + else if(this->ml_CurrPos<1) // AL_Distance>=0 + { while(this->ml_CurrPos+= this->mr_CurrList.size()<1){} } + return *this; /*****************************/ + }/* + const ZCLinkPointEx& operator-=(TypeSize AL_Distance) const*/ + + public: + };/* + class ZCLinkPointEx*/ + + public : /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ private : @@ -8202,7 +8341,7 @@ namespace ZNsMain { return *ARR_Iterator ;} - 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); } @@ -8217,8 +8356,10 @@ namespace ZNsMain { return GetDataInIter((ZCLinkC*)ARR_Iterator , AI_FarNum); } - iterator begin() {return ZCLinkPoint(*this); } - iteratorC begin() const {return ZCLinkPoint(*this); } + iterator begin () { return ZCLinkPoint(*this); } + iteratorC begin () const{ return ZCLinkPoint(*this); } + iterator end () { return ZCLinkPoint::MakeTailPoint(*this); } + iteratorC end () const{ return ZCLinkPoint::MakeTailPoint(*this); } IterEasy ItHEasy() {return GetHeadIterEasy ();} @@ -8260,11 +8401,11 @@ namespace ZNsMain /********************************************************************************************************************************/ 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(iterator ARR_Iterator , TypeSize AI_FarNum) {return GetDataInIter(ARR_Iterator , AI_FarNum);} + TypeData & ItD(iterator& ARR_Iterator , TypeSize AI_FarNum) {return GetDataInIter(ARR_Iterator , 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);} - TypeDataC& ItD(iteratorC ARR_Iterator , TypeSize AI_FarNum) const {return GetDataInIter(ARR_Iterator , AI_FarNum);} + TypeDataC& ItD(iteratorC& ARR_Iterator , TypeSize AI_FarNum) const {return GetDataInIter(ARR_Iterator , AI_FarNum);} public : };/* diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index f094066..59baa9d 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -813,6 +813,7 @@ namespace ZNsMain public: typedef ZCLink* IterEasy ; // 가장 간단하게 쓰일 수 있는 반복자. typedef ZCLinkPoint iterator ; // 다양한 기능을 가진 반복자. + typedef ZCLinkPoint TypeIter ; public: typedef ZtCObjOpt ZCLinkOpt; typedef ZtCObjOpt ZCDataOpt; @@ -821,6 +822,7 @@ namespace ZNsMain typedef const TypeData TypeDataC ; typedef const TypeLink TypeLinkC ; typedef const TypeThis TypeThisC ; + typedef const TypeIter TypeIterC ; typedef const IterEasy IterEasyC ; typedef const iterator iteratorC ; typedef const ZCLink ZCLinkC ; @@ -1039,11 +1041,11 @@ namespace ZNsMain class ZCLinkPoint { - private: + protected: mutable TypeLink* mp_CurrLink; // 사실상 mp_CurrLink!=0 mutable TypeSize ml_CurrPos ; /*****/ TypeList& mr_CurrList; - public: + public : ZCLinkPoint(TypeList& AR_TypeList) : mr_CurrList(AR_TypeList) { @@ -1055,7 +1057,30 @@ namespace ZNsMain mp_CurrLink(rhs.mp_CurrLink), ml_CurrPos (rhs.ml_CurrPos ) {} - public: + public : + + static ZCLinkPoint MakeTailPoint(TypeList& AR_TypeList) + { + ZCLinkPoint VO_ZCLinkPoint(AR_TypeList); + + VO_ZCLinkPoint.mp_CurrLink = AR_TypeList.mp_TailLink; + VO_ZCLinkPoint.ml_CurrPos = AR_TypeList.ml_LinkSize; + + return VO_ZCLinkPoint; /****************************/ + }/* + static ZCLinkPoint MakeTailPoint(TypeList& AR_TypeList)*/ + static ZCLinkPoint MakeTailPoint(TypeIterC& AR_TypeIter) + { + ZCLinkPoint VO_ZCLinkPoint(AR_TypeIter); + + VO_ZCLinkPoint.mp_CurrLink = VO_ZCLinkPoint.mr_TypeList.mp_TailLink; + VO_ZCLinkPoint.ml_CurrPos = VO_ZCLinkPoint.mr_TypeList.ml_LinkSize; + + return VO_ZCLinkPoint; /****************************/ + }/* + static ZCLinkPoint MakeTailPoint(TypeIterC& AR_TypeIter)*/ + + public : TypeList & GetList() {return mr_CurrList;} TypeLink & GetLink() {return *mp_CurrLink;} @@ -1084,27 +1109,46 @@ namespace ZNsMain operator TypeLinkC& () const{return *mp_CurrLink;} + bool operator == (const ZCLinkPoint& rhs) const + { return ml_CurrPos == rhs.ml_CurrPos; } + bool operator != (const ZCLinkPoint& rhs) const + { return ml_CurrPos != rhs.ml_CurrPos; } + bool operator > (const ZCLinkPoint& rhs) const + { return ml_CurrPos > rhs.ml_CurrPos; } + bool operator >= (const ZCLinkPoint& rhs) const + { return ml_CurrPos >= rhs.ml_CurrPos; } + bool operator < (const ZCLinkPoint& rhs) const + { return ml_CurrPos < rhs.ml_CurrPos; } + bool operator <= (const ZCLinkPoint& rhs) const + { return ml_CurrPos <= rhs.ml_CurrPos; } + + bool operator == (TypeSize AL_Size) const + { return ml_CurrPos == AL_Size; } + bool operator != (TypeSize AL_Size) const + { return ml_CurrPos != AL_Size; } + bool operator > (TypeSize AL_Size) const + { return ml_CurrPos > AL_Size; } + bool operator >= (TypeSize AL_Size) const + { return ml_CurrPos >= AL_Size; } + bool operator < (TypeSize AL_Size) const + { return ml_CurrPos < AL_Size; } + bool operator <= (TypeSize AL_Size) const + { return ml_CurrPos <= AL_Size; } + + const ZCLinkPoint& operator++() const { - if(IsEmpty()){*this;} + mp_CurrLink = mp_CurrLink->mp_NextLink; - mp_CurrLink = mp_CurrLink->mp_NextLink ; - - if(++ml_CurrPos>mr_CurrList.size()) - { ml_CurrPos -= mr_CurrList.size(); } - return *this; /*******************/ + ++ml_CurrPos; return *this ; }/* const ZCLinkPoint& operator++() const*/ const ZCLinkPoint& operator--() const { - if(IsEmpty()){return *this;} + mp_CurrLink = mp_CurrLink->mp_PrevLink; - mp_CurrLink = mp_CurrLink->mp_PrevLink ; - - if(--ml_CurrPos<1) - { ml_CurrPos += mr_CurrList.size(); } - return *this; + --ml_CurrPos; return *this ; }/* const ZCLinkPoint& operator--() const*/ @@ -1112,13 +1156,9 @@ namespace ZNsMain { ZCLinkPoint VO_NowPoint(*this); - if(IsEmpty()){return VO_NowPoint;} + mp_CurrLink = mp_CurrLink->mp_NextLink; - mp_CurrLink = mp_CurrLink->mp_NextLink ; - - if(++ml_CurrPos>mr_CurrList.size()) - { ml_CurrPos -= mr_CurrList.size(); } - return VO_NowPoint; /*************/ + ++ml_CurrPos ; return VO_NowPoint ; }/* ZCLinkPoint operator++(int) const*/ @@ -1126,13 +1166,9 @@ namespace ZNsMain { ZCLinkPoint VO_NowPoint(*this); - if(IsEmpty()){return VO_NowPoint;} + mp_CurrLink = mp_CurrLink->mp_PrevLink; - mp_CurrLink = mp_CurrLink->mp_PrevLink ; - - if(--ml_CurrPos<1) - { ml_CurrPos += mr_CurrList.size(); } - return VO_NowPoint; + --ml_CurrPos; return VO_NowPoint ; }/* ZCLinkPoint operator--(int) const*/ @@ -1142,26 +1178,18 @@ namespace ZNsMain if(IsEmpty()){return *this;} mp_CurrLink = &((*mp_CurrLink)+AL_Distance) ; + ml_CurrPos += 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; /**********************/ + 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); + ml_CurrPos -= 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; /***********************/ + return *this; /*::::::::::::::::::::::::::*/ }/* const ZCLinkPoint& operator-=(TypeSize AL_Distance) const*/ @@ -1170,6 +1198,117 @@ namespace ZNsMain class ZCLinkPoint*/ + class ZCLinkPointEx : public ZCLinkPoint + { + public: + ZCLinkPointEx(TypeList& AR_TypeList): ZCLinkPoint(AR_TypeList){} + ZCLinkPointEx(const ZCLinkPoint& rhs): ZCLinkPoint(rhs ){} + ZCLinkPointEx(const ZCLinkPointEx& rhs): ZCLinkPoint(rhs ){} + public: + + static ZCLinkPointEx MakeTailPoint(const ZCLinkPointEx& AR_TypeIter) + { + ZCLinkPointEx VO_ZCLinkPoint(AR_TypeIter); + + if(!AR_TypeIter.IsEmpty()) /****************************/ + { + VO_ZCLinkPoint.mp_CurrLink = VO_ZCLinkPoint.mr_TypeList.mp_TailLink; + VO_ZCLinkPoint.ml_CurrPos = VO_ZCLinkPoint.mr_TypeList.ml_LinkSize; + } + return VO_ZCLinkPoint; /********************************/ + }/* + static ZCLinkPointEx MakeTailPoint(const ZCLinkPointEx& AR_TypeIter)*/ + + public: + + ZCLinkPointEx& operator= (const ZCLinkPointEx& rhs){ return *this; } + + const ZCLinkPointEx& operator++() const + { + if(this->IsEmpty()){return *this;} + + this->mp_CurrLink = this->mp_CurrLink->mp_NextLink ; + + if(++this->ml_CurrPos>this->mr_CurrList.size()) + { this->ml_CurrPos -= this->mr_CurrList.size(); } + return *this; /*******************************/ + }/* + const ZCLinkPointEx& operator++() const*/ + + const ZCLinkPointEx& operator--() const + { + if(this->IsEmpty()){return *this;} + + this->mp_CurrLink = this->mp_CurrLink->mp_PrevLink ; + + if(--this->ml_CurrPos<1) + { this->ml_CurrPos += this->mr_CurrList.size(); } + return *this; /********/ + }/* + const ZCLinkPointEx& operator--() const*/ + + ZCLinkPointEx operator++(int) const + { + ZCLinkPointEx VO_NowPoint(*this); + + if(this->IsEmpty()){return VO_NowPoint;} + + this->mp_CurrLink = this->mp_CurrLink->mp_NextLink ; + + if(++this->ml_CurrPos>this->mr_CurrList.size()) + { this->ml_CurrPos -= this->mr_CurrList.size(); } + return VO_NowPoint; /*************************/ + }/* + ZCLinkPointEx operator++(int) const*/ + + ZCLinkPointEx operator--(int) const + { + ZCLinkPointEx VO_NowPoint(*this); + + if(this->IsEmpty()){return VO_NowPoint;} + + this->mp_CurrLink = this->mp_CurrLink->mp_PrevLink ; + + if(--this->ml_CurrPos<1) + { this->ml_CurrPos += this->mr_CurrList.size(); } + return VO_NowPoint; + }/* + ZCLinkPointEx operator--(int) const*/ + + + const ZCLinkPointEx& operator+=(TypeSize AL_Distance) const + { + if(this->IsEmpty()){return *this;} + + this->mp_CurrLink = &((*this->mp_CurrLink)+AL_Distance) ; + + if(this->ml_CurrPos+=AL_Distance > this->mr_CurrList.size()) + { this->ml_CurrPos %= this->mr_CurrList.size(); } + else if(this->ml_CurrPos<1) // AL_Distance<0 + { while(this->ml_CurrPos+= this->mr_CurrList.size()<1){} } + return *this; /****************************/ + }/* + const ZCLinkPointEx& operator+=(TypeSize AL_Distance) const*/ + + const ZCLinkPointEx& operator-=(TypeSize AL_Distance) const + { + if(this->IsEmpty()){return *this;} + + this->mp_CurrLink = &((*this->mp_CurrLink)-AL_Distance); + + if(this->ml_CurrPos-=AL_Distance > this->mr_CurrList.size()) + { this->ml_CurrPos %= this->mr_CurrList.size(); } + else if(this->ml_CurrPos<1) // AL_Distance>=0 + { while(this->ml_CurrPos+= this->mr_CurrList.size()<1){} } + return *this; /*****************************/ + }/* + const ZCLinkPointEx& operator-=(TypeSize AL_Distance) const*/ + + public: + };/* + class ZCLinkPointEx*/ + + public : /******************************************************************/ protected: @@ -2847,8 +2986,10 @@ namespace ZNsMain { return GetDataInIter((ZCLinkC*)ARR_Iterator , AI_FarNum); } - iterator begin() { return ZCLinkPoint(*this); } - iteratorC begin() const { return ZCLinkPoint(*this); } + iterator begin () { return ZCLinkPoint(*this); } + iteratorC begin () const{ return ZCLinkPoint(*this); } + iterator end () { return ZCLinkPoint::MakeTailPoint(*this); } + iteratorC end () const{ return ZCLinkPoint::MakeTailPoint(*this); } IterEasy ItHEasy() {return GetHeadIterEasy (); } @@ -2889,11 +3030,13 @@ namespace ZNsMain 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);} + TypeData & ItD(iterator& ARR_Iterator , TypeSize AI_FarNum) {return GetDataInIter(ARR_Iterator , 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);} + TypeDataC& ItD(iteratorC& ARR_Iterator , TypeSize AI_FarNum) const{return GetDataInIter(ARR_Iterator , AI_FarNum);} diff --git a/ZCppMainTest/ZtCObjList_000.cpp b/ZCppMainTest/ZtCObjList_000.cpp index 879514d..7a3e103 100644 --- a/ZCppMainTest/ZtCObjList_000.cpp +++ b/ZCppMainTest/ZtCObjList_000.cpp @@ -357,6 +357,32 @@ namespace ZNsMain VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0)); + VO_ListOfStr11.Rotate(); + cout<<"# list11 Rotate() ################"<0) + { + cout<<"(by iter)"<<++VI_LoopCnt<<" : "<<*VO_Iter1<0)*/ + + return 0; }/* static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/ @@ -412,8 +438,8 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/ ■ Linux 컴파일 - g++ -std=c++98 -o ZtCObjList_000.exe ZtCObjList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation - g++ -std=c++98 -o ZtCObjList_000_D.exe ZtCObjList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG + g++ -std=c++98 -o ZtCObjList_000.exe ZtCObjList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -Wno-reorder + g++ -std=c++98 -o ZtCObjList_000_D.exe ZtCObjList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -Wno-reorder -D_DEBUG sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0