commit 2025-10-13 12:28 add ZCLinkPointC ZCppMain/ZtCObjList.H

This commit is contained in:
2025-10-13 12:28:24 +09:00
parent 870b50066d
commit 3629380b37
4 changed files with 417 additions and 72 deletions

View File

@ -470,6 +470,10 @@ using namespace std;
#define __forD1(i, LoopCount) for(i=1; i<=LoopCount; ++i) #define __forD1(i, LoopCount) for(i=1; i<=LoopCount; ++i)
#define __for_iter(IterClass, IterObj, IterVar) \
for(IterClass::iterator IterVar=IterObj.begin(); IterVar<=IterObj.size(); ++IterVar)
namespace ZNsMain namespace ZNsMain
{ {
@ -5670,7 +5674,7 @@ namespace ZNsMain
class ZtCBaseList /*#####################################################*/ class ZtCBaseList /*#####################################################*/
{ {
public: public:
class ZCLink; class ZCLinkPoint; class ZCLinkRange; class ZCLink; class ZCLinkPoint; class ZCLinkPointC;
public: public:
typedef ZtCBaseList TypeThis ; typedef ZtCBaseList TypeThis ;
typedef ZtCBaseList TypeList ; typedef ZtCBaseList TypeList ;
@ -5682,23 +5686,23 @@ namespace ZNsMain
typedef ZCLink TypeLink ; typedef ZCLink TypeLink ;
typedef ZCLinkPoint TypeLinkPoint ; typedef ZCLinkPoint TypeLinkPoint ;
typedef ZCLinkPoint TypeIter ; typedef ZCLinkPoint TypeIter ;
typedef ZCLinkRange TypeLinkRange ; typedef ZCLinkPointC TypeIterC ;
/*************************************************************************/ /*************************************************************************/
typedef ZCLink* IterEasy ; // 가장 쉽게 쓸 수 있는 반복자. typedef ZCLink* IterEasy ; // 가장 쉽게 쓸 수 있는 반복자.
typedef ZCLinkPoint iterator ; // 다양한 기능을 가진 반복자. typedef ZCLinkPoint iterator ; // 다양한 기능을 가진 반복자.
typedef ZCLinkPointC iteratorC ;
typedef ZCLinkPointC const_iterator;
/*************************************************************************/ /*************************************************************************/
typedef ZtCObjOpt<ZCLink > ZCLinkOpt ; typedef ZtCObjOpt<ZCLink > ZCLinkOpt ;
typedef ZtCObjOpt<TypeData> ZCDataOpt ; typedef ZtCObjOpt<TypeData> ZCDataOpt ;
/*************************************************************************/ /*************************************************************************/
typedef const iterator iteratorC ;
typedef const IterEasy IterEasyC ;
/*************************************************************************/
typedef const TypeThis TypeThisC ; typedef const TypeThis TypeThisC ;
typedef const TypeList TypeListC ; typedef const TypeList TypeListC ;
typedef const TypeData TypeDataC ; typedef const TypeData TypeDataC ;
typedef const TypeIter TypeIterC ; /*typedef ZCLinkPointC TypeIterC ;*/
typedef const ZCLink TypeLinkC ; typedef const ZCLink TypeLinkC ;
typedef const ZCLink ZCLinkC ; typedef const ZCLink ZCLinkC ;
typedef const IterEasy IterEasyC ;
typedef const ZCLinkOpt ZCLinkOptC ; typedef const ZCLinkOpt ZCLinkOptC ;
typedef const ZCDataOpt ZCDataOptC ; typedef const ZCDataOpt ZCDataOptC ;
public: public:
@ -5859,7 +5863,7 @@ namespace ZNsMain
return VO_ZCLinkPoint; /****************************/ return VO_ZCLinkPoint; /****************************/
}/* }/*
static ZCLinkPoint MakeTailPoint(TypeList& AR_TypeList)*/ static ZCLinkPoint MakeTailPoint(TypeList& AR_TypeList)*/
static ZCLinkPoint MakeTailPoint(TypeIterC& AR_TypeIter) static ZCLinkPoint MakeTailPoint(const TypeIter& AR_TypeIter)
{ {
ZCLinkPoint VO_ZCLinkPoint(AR_TypeIter); ZCLinkPoint VO_ZCLinkPoint(AR_TypeIter);
@ -5868,7 +5872,7 @@ namespace ZNsMain
return VO_ZCLinkPoint; /****************************/ return VO_ZCLinkPoint; /****************************/
}/* }/*
static ZCLinkPoint MakeTailPoint(TypeIterC& AR_TypeIter)*/ static ZCLinkPoint MakeTailPoint(const TypeIter& AR_TypeIter)*/
public : public :
@ -5988,6 +5992,172 @@ namespace ZNsMain
class ZCLinkPoint*/ class ZCLinkPoint*/
class ZCLinkPointC
{
protected:
const TypeList& mr_CurrList;
mutable TypeLinkC* mp_CurrLink; // 사실상 mp_CurrLink!=0
mutable TypeSize ml_CurrPos ;
public :
ZCLinkPointC(const TypeList& AR_TypeList) :
mr_CurrList(AR_TypeList)
{
mp_CurrLink = AR_TypeList.HeadPtr();
ml_CurrPos = 1 ;
}
ZCLinkPointC(const ZCLinkPoint & rhs) :
mr_CurrList( rhs.GetList()),
mp_CurrLink(&rhs.GetLink()),
ml_CurrPos ( rhs.GetPos ())
{}
ZCLinkPointC(const ZCLinkPointC& rhs) :
mr_CurrList(rhs.mr_CurrList),
mp_CurrLink(rhs.mp_CurrLink),
ml_CurrPos (rhs.ml_CurrPos )
{}
public :
static ZCLinkPointC MakeTailPoint(const TypeList& AR_TypeList)
{
ZCLinkPointC VO_ZCLinkPoint(AR_TypeList);
VO_ZCLinkPoint.mp_CurrLink = AR_TypeList.mp_TailLink;
VO_ZCLinkPoint.ml_CurrPos = AR_TypeList.ml_LinkSize;
return VO_ZCLinkPoint; /****************/
}/*
static ZCLinkPointC MakeTailPoint(const TypeList& AR_TypeList)*/
static ZCLinkPointC MakeTailPoint(const ZCLinkPoint& AR_TypeIter)
{
ZCLinkPointC 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 ZCLinkPointC MakeTailPoint(const ZCLinkPoint& AR_TypeIter)*/
static ZCLinkPointC MakeTailPoint(const ZCLinkPointC& AR_TypeIter)
{
ZCLinkPointC 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 ZCLinkPointC MakeTailPoint(const ZCLinkPointC& AR_TypeIter)*/
public :
TypeListC& GetList() const{return mr_CurrList;}
TypeLinkC& GetLink() const{return *mp_CurrLink;}
/***************************************************/
TypeSize GetPos () const{return ml_CurrPos ;}
/***************************************************/
bool IsValid() const{return mr_CurrList.size()>0;}
bool IsEmpty() const{return mr_CurrList.size()<1;}
ZCLinkPointC& operator= (const ZCLinkPointC& rhs){ return *this; }
TypeDataC& operator*() const{return **mp_CurrLink;}
operator TypeLinkC* () const{return mp_CurrLink;}
operator TypeLinkC& () const{return *mp_CurrLink;}
bool operator == (const ZCLinkPointC& rhs) const
{ return ml_CurrPos == rhs.ml_CurrPos; }
bool operator != (const ZCLinkPointC& rhs) const
{ return ml_CurrPos != rhs.ml_CurrPos; }
bool operator > (const ZCLinkPointC& rhs) const
{ return ml_CurrPos > rhs.ml_CurrPos; }
bool operator >= (const ZCLinkPointC& rhs) const
{ return ml_CurrPos >= rhs.ml_CurrPos; }
bool operator < (const ZCLinkPointC& rhs) const
{ return ml_CurrPos < rhs.ml_CurrPos; }
bool operator <= (const ZCLinkPointC& 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 ZCLinkPointC& operator++() const
{
mp_CurrLink = mp_CurrLink->mp_NextLink;
++ml_CurrPos; return *this ;
}/*
const ZCLinkPointC& operator++() const*/
const ZCLinkPointC& operator--() const
{
mp_CurrLink = mp_CurrLink->mp_PrevLink;
--ml_CurrPos; return *this ;
}/*
const ZCLinkPointC& operator--() const*/
ZCLinkPointC operator++(int) const
{
ZCLinkPointC VO_NowPoint(*this);
mp_CurrLink = mp_CurrLink->mp_NextLink;
++ml_CurrPos ; return VO_NowPoint ;
}/*
ZCLinkPointC operator++(int) const*/
ZCLinkPointC operator--(int) const
{
ZCLinkPointC VO_NowPoint(*this);
mp_CurrLink = mp_CurrLink->mp_PrevLink;
--ml_CurrPos; return VO_NowPoint ;
}/*
ZCLinkPointC operator--(int) const*/
const ZCLinkPointC& operator+=(TypeSize AL_Distance) const
{
if(IsEmpty()){return *this;}
mp_CurrLink = &((*mp_CurrLink)+AL_Distance) ;
ml_CurrPos += AL_Distance ;
return *this; /*:::::::::::::::::::::::::::*/
}/*
const ZCLinkPointC& operator+=(TypeSize AL_Distance) const*/
const ZCLinkPointC& operator-=(TypeSize AL_Distance) const
{
mp_CurrLink = &((*mp_CurrLink)-AL_Distance);
ml_CurrPos -= AL_Distance ;
return *this; /*::::::::::::::::::::::::::*/
}/*
const ZCLinkPointC& operator-=(TypeSize AL_Distance) const*/
public:
};/*
class ZCLinkPointC*/
class ZCLinkPointEx : public ZCLinkPoint class ZCLinkPointEx : public ZCLinkPoint
{ {
public: public:
@ -8356,10 +8526,10 @@ namespace ZNsMain
{ return GetDataInIter((ZCLinkC*)ARR_Iterator , AI_FarNum); } { return GetDataInIter((ZCLinkC*)ARR_Iterator , AI_FarNum); }
iterator begin () { return ZCLinkPoint(*this); } iterator begin () { return ZCLinkPoint (*this); }
iteratorC begin () const{ return ZCLinkPoint(*this); } iteratorC begin () const{ return ZCLinkPointC(*this); }
iterator end () { return ZCLinkPoint::MakeTailPoint(*this); } iterator end () { return ZCLinkPoint ::MakeTailPoint(*this); }
iteratorC end () const{ return ZCLinkPoint::MakeTailPoint(*this); } iteratorC end () const{ return ZCLinkPointC::MakeTailPoint(*this); }
IterEasy ItHEasy() {return GetHeadIterEasy ();} IterEasy ItHEasy() {return GetHeadIterEasy ();}

View File

@ -22,15 +22,21 @@ namespace ZNsMain
typedef TTypArg TypeArg ; typedef TTypArg TypeArg ;
typedef TSize TypeSize; typedef TSize TypeSize;
public: public:
class ZCIterator; class ZCDataPoint;
public: public:
typedef Type* IterEasy; typedef Type* IterEasy;
typedef ZCIterator iterator; typedef ZCDataPoint iterator;
typedef const ZCIterator const_iterator; typedef ZCDataPoint TypeIter;
public:
typedef const IterEasy IterEasyC;
typedef const ZCDataPoint iteratorC;
typedef const TypeData TypeDataC;
public:
typedef const ZCDataPoint const_iterator;
public: public:
class ZCIterator class ZCDataPoint
{ {
private: mutable private: mutable
Type* mp_Data ; mutable Type* mp_Data ; mutable
@ -38,37 +44,37 @@ namespace ZNsMain
ZtCArray* mp_CArray; ZtCArray* mp_CArray;
public: public:
ZCIterator() ZCDataPoint()
{ {
mp_Data =0; mp_Data =0;
mp_CArray=0; mp_CArray=0;
ml_ElePos=0; ml_ElePos=0;
}/* }/*
ZCIterator()*/ ZCDataPoint()*/
ZCIterator(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos) ZCDataPoint(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)
{ {
mp_Data =&AR_CData ; mp_Data =&AR_CData ;
mp_CArray=&AR_CArray; mp_CArray=&AR_CArray;
ml_ElePos=AL_ElePos ; ml_ElePos=AL_ElePos ;
}/* }/*
ZCIterator(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)*/ ZCDataPoint(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)*/
ZCIterator(ZtCArray& AR_CArray) ZCDataPoint(ZtCArray& AR_CArray)
{ {
mp_Data = AR_CArray.mp_TypeArr ; mp_Data = AR_CArray.mp_TypeArr ;
mp_CArray=&AR_CArray ; mp_CArray=&AR_CArray ;
ml_ElePos=(AR_CArray.size()>0 ? 1 : 0 ) ; ml_ElePos=(AR_CArray.size()>0 ? 1 : 0 ) ;
}/* }/*
ZCIterator(ZtCArray& AR_CArray)*/ ZCDataPoint(ZtCArray& AR_CArray)*/
ZCIterator(const ZtCArray& AR_CArray) ZCDataPoint(const ZtCArray& AR_CArray)
{ {
mp_Data = AR_CArray.mp_TypeArr ; mp_Data = AR_CArray.mp_TypeArr ;
mp_CArray= const_cast<ZtCArray*>(&AR_CArray); mp_CArray= const_cast<ZtCArray*>(&AR_CArray);
ml_ElePos= (AR_CArray.size()>0 ? 1 : 0 ) ; ml_ElePos= (AR_CArray.size()>0 ? 1 : 0 ) ;
}/* }/*
ZCIterator(const ZtCArray& AR_CArray)*/ ZCDataPoint(const ZtCArray& AR_CArray)*/
Type& operator*( ){return *mp_Data;} Type& operator*( ){return *mp_Data;}
Type* operator->(){return mp_Data;} Type* operator->(){return mp_Data;}
@ -76,21 +82,21 @@ namespace ZNsMain
const Type& operator* () const{return *mp_Data;} const Type& operator* () const{return *mp_Data;}
const Type* operator->() const{return mp_Data;} const Type* operator->() const{return mp_Data;}
ZCIterator& operator++( ){++mp_Data; ++ml_ElePos; return *this;} ZCDataPoint& operator++( ){++mp_Data; ++ml_ElePos; return *this;}
ZCIterator operator++(int){++mp_Data; ++ml_ElePos; return *this;} ZCDataPoint operator++(int){++mp_Data; ++ml_ElePos; return *this;}
const ZCIterator& operator++( ) const{++mp_Data; ++ml_ElePos; return *this;} const ZCDataPoint& operator++( ) const{++mp_Data; ++ml_ElePos; return *this;}
const ZCIterator operator++(int) const{++mp_Data; ++ml_ElePos; return *this;} const ZCDataPoint operator++(int) const{++mp_Data; ++ml_ElePos; return *this;}
ZCIterator operator+(TSize AL_AddPos) const ZCDataPoint operator+(TSize AL_AddPos) const
{ {
return ZCIterator(*this, mp_Data+AL_AddPos, ml_ElePos+AL_AddPos); return ZCDataPoint(*this, mp_Data+AL_AddPos, ml_ElePos+AL_AddPos);
}/* }/*
ZCIterator operator+(TSize AL_AddPos) const*/ ZCDataPoint operator+(TSize AL_AddPos) const*/
public: public:
};/* };/*
class ZCIterator class ZCDataPoint
public :*/ public :*/
@ -339,8 +345,8 @@ namespace ZNsMain
Type& push_front(){return AddHead();} Type& push_front(){return AddHead();}
Type& push_back (){return AddTail();} Type& push_back (){return AddTail();}
/***/ ZCIterator begin() {return ZCIterator(*this);} /***/ ZCDataPoint begin() {return ZCDataPoint(*this);}
const ZCIterator begin() const{return ZCIterator(*this);} const ZCDataPoint begin() const{return ZCDataPoint(*this);}
template<typename TFunctor> void IterElement(TFunctor AO_Functor) template<typename TFunctor> void IterElement(TFunctor AO_Functor)

View File

@ -806,7 +806,9 @@ namespace ZNsMain
public: public:
typedef ZtCObjList TypeThis ; typedef ZtCObjList TypeThis ;
public: public:
class ZCLink; class ZCLinkPoint ; class ZCLink ;
class ZCLinkPoint ;
class ZCLinkPointC ;
public: public:
typedef ZCLink TypeLink ; typedef ZCLink TypeLink ;
typedef TypeThis TypeList ; typedef TypeThis TypeList ;
@ -814,6 +816,9 @@ namespace ZNsMain
typedef ZCLink* IterEasy ; // 가장 간단하게 쓰일 수 있는 반복자. typedef ZCLink* IterEasy ; // 가장 간단하게 쓰일 수 있는 반복자.
typedef ZCLinkPoint iterator ; // 다양한 기능을 가진 반복자. typedef ZCLinkPoint iterator ; // 다양한 기능을 가진 반복자.
typedef ZCLinkPoint TypeIter ; typedef ZCLinkPoint TypeIter ;
typedef ZCLinkPointC TypeIterC ;
typedef ZCLinkPointC iteratorC ;
typedef ZCLinkPointC const_iterator;
public: public:
typedef ZtCObjOpt<ZCLink > ZCLinkOpt; typedef ZtCObjOpt<ZCLink > ZCLinkOpt;
typedef ZtCObjOpt<TypeData> ZCDataOpt; typedef ZtCObjOpt<TypeData> ZCDataOpt;
@ -822,12 +827,11 @@ namespace ZNsMain
typedef const TypeData TypeDataC ; typedef const TypeData TypeDataC ;
typedef const TypeLink TypeLinkC ; typedef const TypeLink TypeLinkC ;
typedef const TypeThis TypeThisC ; typedef const TypeThis TypeThisC ;
typedef const TypeIter TypeIterC ;
typedef const IterEasy IterEasyC ; typedef const IterEasy IterEasyC ;
typedef const iterator iteratorC ; //typedef ZCLinkPointC iteratorC ;
typedef const ZCLink ZCLinkC ; typedef const ZCLink ZCLinkC ;
typedef const ZCLinkOpt ZCLinkOptC; typedef const ZCLinkOpt ZCLinkOptC ;
typedef const ZCDataOpt ZCDataOptC; typedef const ZCDataOpt ZCDataOptC ;
public: public:
typedef typename TFeeeHeap:: typedef typename TFeeeHeap::
template ZtCBody<ZtCObjList> ZCFreeHeap; template ZtCBody<ZtCObjList> ZCFreeHeap;
@ -1069,7 +1073,7 @@ namespace ZNsMain
return VO_ZCLinkPoint; /****************************/ return VO_ZCLinkPoint; /****************************/
}/* }/*
static ZCLinkPoint MakeTailPoint(TypeList& AR_TypeList)*/ static ZCLinkPoint MakeTailPoint(TypeList& AR_TypeList)*/
static ZCLinkPoint MakeTailPoint(TypeIterC& AR_TypeIter) static ZCLinkPoint MakeTailPoint(const TypeIter& AR_TypeIter)
{ {
ZCLinkPoint VO_ZCLinkPoint(AR_TypeIter); ZCLinkPoint VO_ZCLinkPoint(AR_TypeIter);
@ -1078,7 +1082,7 @@ namespace ZNsMain
return VO_ZCLinkPoint; /****************************/ return VO_ZCLinkPoint; /****************************/
}/* }/*
static ZCLinkPoint MakeTailPoint(TypeIterC& AR_TypeIter)*/ static ZCLinkPoint MakeTailPoint(const TypeIter& AR_TypeIter)*/
public : public :
@ -1198,6 +1202,172 @@ namespace ZNsMain
class ZCLinkPoint*/ class ZCLinkPoint*/
class ZCLinkPointC
{
protected:
const TypeList& mr_CurrList;
mutable TypeLinkC* mp_CurrLink; // 사실상 mp_CurrLink!=0
mutable TypeSize ml_CurrPos ;
public :
ZCLinkPointC(const TypeList& AR_TypeList) :
mr_CurrList(AR_TypeList)
{
mp_CurrLink = AR_TypeList.HeadPtr();
ml_CurrPos = 1 ;
}
ZCLinkPointC(const ZCLinkPoint & rhs) :
mr_CurrList( rhs.GetList()),
mp_CurrLink(&rhs.GetLink()),
ml_CurrPos ( rhs.GetPos ())
{}
ZCLinkPointC(const ZCLinkPointC& rhs) :
mr_CurrList(rhs.mr_CurrList),
mp_CurrLink(rhs.mp_CurrLink),
ml_CurrPos (rhs.ml_CurrPos )
{}
public :
static ZCLinkPointC MakeTailPoint(const TypeList& AR_TypeList)
{
ZCLinkPointC VO_ZCLinkPoint(AR_TypeList);
VO_ZCLinkPoint.mp_CurrLink = AR_TypeList.mp_TailLink;
VO_ZCLinkPoint.ml_CurrPos = AR_TypeList.ml_LinkSize;
return VO_ZCLinkPoint; /****************/
}/*
static ZCLinkPointC MakeTailPoint(const TypeList& AR_TypeList)*/
static ZCLinkPointC MakeTailPoint(const ZCLinkPoint& AR_TypeIter)
{
ZCLinkPointC 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 ZCLinkPointC MakeTailPoint(const ZCLinkPoint& AR_TypeIter)*/
static ZCLinkPointC MakeTailPoint(const ZCLinkPointC& AR_TypeIter)
{
ZCLinkPointC 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 ZCLinkPointC MakeTailPoint(const ZCLinkPointC& AR_TypeIter)*/
public :
TypeListC& GetList() const{return mr_CurrList;}
TypeLinkC& GetLink() const{return *mp_CurrLink;}
/***************************************************/
TypeSize GetPos () const{return ml_CurrPos ;}
/***************************************************/
bool IsValid() const{return mr_CurrList.size()>0;}
bool IsEmpty() const{return mr_CurrList.size()<1;}
ZCLinkPointC& operator= (const ZCLinkPointC& rhs){ return *this; }
TypeDataC& operator*() const{return **mp_CurrLink;}
operator TypeLinkC* () const{return mp_CurrLink;}
operator TypeLinkC& () const{return *mp_CurrLink;}
bool operator == (const ZCLinkPointC& rhs) const
{ return ml_CurrPos == rhs.ml_CurrPos; }
bool operator != (const ZCLinkPointC& rhs) const
{ return ml_CurrPos != rhs.ml_CurrPos; }
bool operator > (const ZCLinkPointC& rhs) const
{ return ml_CurrPos > rhs.ml_CurrPos; }
bool operator >= (const ZCLinkPointC& rhs) const
{ return ml_CurrPos >= rhs.ml_CurrPos; }
bool operator < (const ZCLinkPointC& rhs) const
{ return ml_CurrPos < rhs.ml_CurrPos; }
bool operator <= (const ZCLinkPointC& 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 ZCLinkPointC& operator++() const
{
mp_CurrLink = mp_CurrLink->mp_NextLink;
++ml_CurrPos; return *this ;
}/*
const ZCLinkPointC& operator++() const*/
const ZCLinkPointC& operator--() const
{
mp_CurrLink = mp_CurrLink->mp_PrevLink;
--ml_CurrPos; return *this ;
}/*
const ZCLinkPointC& operator--() const*/
ZCLinkPointC operator++(int) const
{
ZCLinkPointC VO_NowPoint(*this);
mp_CurrLink = mp_CurrLink->mp_NextLink;
++ml_CurrPos ; return VO_NowPoint ;
}/*
ZCLinkPointC operator++(int) const*/
ZCLinkPointC operator--(int) const
{
ZCLinkPointC VO_NowPoint(*this);
mp_CurrLink = mp_CurrLink->mp_PrevLink;
--ml_CurrPos; return VO_NowPoint ;
}/*
ZCLinkPointC operator--(int) const*/
const ZCLinkPointC& operator+=(TypeSize AL_Distance) const
{
if(IsEmpty()){return *this;}
mp_CurrLink = &((*mp_CurrLink)+AL_Distance) ;
ml_CurrPos += AL_Distance ;
return *this; /*:::::::::::::::::::::::::::*/
}/*
const ZCLinkPointC& operator+=(TypeSize AL_Distance) const*/
const ZCLinkPointC& operator-=(TypeSize AL_Distance) const
{
mp_CurrLink = &((*mp_CurrLink)-AL_Distance);
ml_CurrPos -= AL_Distance ;
return *this; /*::::::::::::::::::::::::::*/
}/*
const ZCLinkPointC& operator-=(TypeSize AL_Distance) const*/
public:
};/*
class ZCLinkPointC*/
class ZCLinkPointEx : public ZCLinkPoint class ZCLinkPointEx : public ZCLinkPoint
{ {
public: public:
@ -2986,10 +3156,10 @@ namespace ZNsMain
{ return GetDataInIter((ZCLinkC*)ARR_Iterator , AI_FarNum); } { return GetDataInIter((ZCLinkC*)ARR_Iterator , AI_FarNum); }
iterator begin () { return ZCLinkPoint(*this); } iterator begin () { return ZCLinkPoint (*this); }
iteratorC begin () const{ return ZCLinkPoint(*this); } iteratorC begin () const{ return ZCLinkPointC(*this); }
iterator end () { return ZCLinkPoint::MakeTailPoint(*this); } iterator end () { return ZCLinkPoint ::MakeTailPoint(*this); }
iteratorC end () const{ return ZCLinkPoint::MakeTailPoint(*this); } iteratorC end () const{ return ZCLinkPointC::MakeTailPoint(*this); }
IterEasy ItHEasy() {return GetHeadIterEasy (); } IterEasy ItHEasy() {return GetHeadIterEasy (); }

View File

@ -369,18 +369,17 @@ namespace ZNsMain
typedef CStringList1::iterator iterator1 ; typedef CStringList1::iterator iterator1 ;
typedef CStringList1::ZCLinkPointEx iteratorEx1; typedef CStringList1::ZCLinkPointEx iteratorEx1;
typedef CStringList1::ZCLinkPointC iteratorC1 ;
iterator1 VO_Iter1 = VO_ListOfStr11.end(); iterator1 VO_Iter1 = VO_ListOfStr11.end();
iteratorEx1 VO_IterEx1 = VO_ListOfStr11.end(); iteratorEx1 VO_IterEx1 = VO_ListOfStr11.end();
iteratorC1 VO_IterC1(VO_Iter1);
int VI_LoopCnt = 0; int VI_LoopCnt = 0;
while(VO_Iter1>0) __for_iter(CStringList1, VO_ListOfStr11, VO_NowIter)
{ {
cout<<"(by iter)"<<++VI_LoopCnt<<" : "<<*VO_Iter1<<endl; cout<<"(by for_iter) "<<VO_NowIter.GetPos()<<" : "<<*VO_NowIter<<endl;
}
--VO_Iter1;
}/*
while(VO_Iter1>0)*/
return 0; return 0;