commit 2025-10-12 18:51 add iterator class in ZCppMain/ZtCObjList.H
This commit is contained in:
@ -796,22 +796,28 @@ namespace ZNsMain
|
||||
public:
|
||||
template<typename TypeObjList> 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<ZtCObjList> 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);}
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user