commit 2025-10-13 12:28 add ZCLinkPointC ZCppMain/ZtCObjList.H
This commit is contained in:
@ -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 ();}
|
||||||
|
@ -22,53 +22,59 @@ 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
|
||||||
TSize ml_ElePos; // *mp_Data 가 배열에서 차지하는 위치
|
TSize ml_ElePos; // *mp_Data 가 배열에서 차지하는 위치
|
||||||
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)
|
||||||
|
@ -796,38 +796,42 @@ namespace ZNsMain
|
|||||||
public:
|
public:
|
||||||
template<typename TypeObjList> friend class ZtCSortObjList;
|
template<typename TypeObjList> friend class ZtCSortObjList;
|
||||||
public:
|
public:
|
||||||
typedef TType Type ;
|
typedef TType Type ;
|
||||||
typedef TType TypeData ;
|
typedef TType TypeData ;
|
||||||
typedef TTypArgu TypeArg ;
|
typedef TTypArgu TypeArg ;
|
||||||
typedef TTypCAlloc TypeAlloc ;
|
typedef TTypCAlloc TypeAlloc ;
|
||||||
typedef TTypeInit TypeInit ;
|
typedef TTypeInit TypeInit ;
|
||||||
typedef TTypSize TypeSize ;
|
typedef TTypSize TypeSize ;
|
||||||
typedef TMoveObj TypeMoveObj ;
|
typedef TMoveObj TypeMoveObj ;
|
||||||
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 ;
|
||||||
public:
|
public:
|
||||||
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;
|
||||||
public:
|
public:
|
||||||
typedef const TypeList TypeListC ;
|
typedef const TypeList TypeListC ;
|
||||||
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 ZCLinkPointC iteratorC ;
|
||||||
typedef const iterator 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 (); }
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user