commit 2025-10-13 10:55 add ZCLinkPointEx ZCppMain/ZtCObjList.H
This commit is contained in:
@ -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);}
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user