commit 2025-10-13 10:55 add ZCLinkPointEx ZCppMain/ZtCObjList.H

This commit is contained in:
2025-10-13 10:55:10 +09:00
parent 17e25f8f5d
commit 870b50066d
3 changed files with 411 additions and 101 deletions

View File

@ -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 :
};/*

View File

@ -813,6 +813,7 @@ namespace ZNsMain
public:
typedef ZCLink* IterEasy ; // 가장 간단하게 쓰일 수 있는 반복자.
typedef ZCLinkPoint iterator ; // 다양한 기능을 가진 반복자.
typedef ZCLinkPoint TypeIter ;
public:
typedef ZtCObjOpt<ZCLink > ZCLinkOpt;
typedef ZtCObjOpt<TypeData> 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);}

View File

@ -357,6 +357,32 @@ namespace ZNsMain
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.Rotate();
cout<<"# list11 Rotate() ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
cout<<"# list11 IterElemLinkRev() ################"<<endl;
VO_ListOfStr11.IterElemLinkRev(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
typedef CStringList1::iterator iterator1 ;
typedef CStringList1::ZCLinkPointEx iteratorEx1;
iterator1 VO_Iter1 = VO_ListOfStr11.end();
iteratorEx1 VO_IterEx1 = VO_ListOfStr11.end();
int VI_LoopCnt = 0;
while(VO_Iter1>0)
{
cout<<"(by iter)"<<++VI_LoopCnt<<" : "<<*VO_Iter1<<endl;
--VO_Iter1;
}/*
while(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