commit 2025-10-15 12:54 add iterator and func : ZCppMain/ZtCLinkList.H
This commit is contained in:
@ -499,7 +499,7 @@ using namespace std;
|
|||||||
|
|
||||||
#define _FOR_ITER_EASY_START0(MainType, MainObj, IterVar, SizeVar) \
|
#define _FOR_ITER_EASY_START0(MainType, MainObj, IterVar, SizeVar) \
|
||||||
{ \
|
{ \
|
||||||
typedef MainType::TypeSize IterTypeSize ; \
|
typedef typename MainType::TypeSize IterTypeSize ; \
|
||||||
ZNsMain::IterEasyID IterVar = MainObj.ItHID(); \
|
ZNsMain::IterEasyID IterVar = MainObj.ItHID(); \
|
||||||
\
|
\
|
||||||
for(IterTypeSize SizeVar=0; SizeVar<MainObj.size(); ++SizeVar){
|
for(IterTypeSize SizeVar=0; SizeVar<MainObj.size(); ++SizeVar){
|
||||||
@ -510,7 +510,7 @@ using namespace std;
|
|||||||
|
|
||||||
#define _FOR_ITER_EASY_START0_C(MainType, MainObj, IterVar, SizeVar) \
|
#define _FOR_ITER_EASY_START0_C(MainType, MainObj, IterVar, SizeVar) \
|
||||||
{ \
|
{ \
|
||||||
typedef MainType::TypeSize IterTypeSize ; \
|
typedef typename MainType::TypeSize IterTypeSize ; \
|
||||||
ZNsMain::IterEasyIDc IterVar = MainObj.ItHIDc(); \
|
ZNsMain::IterEasyIDc IterVar = MainObj.ItHIDc(); \
|
||||||
\
|
\
|
||||||
for(IterTypeSize SizeVar=0; SizeVar<MainObj.size(); ++SizeVar){
|
for(IterTypeSize SizeVar=0; SizeVar<MainObj.size(); ++SizeVar){
|
||||||
@ -522,7 +522,7 @@ using namespace std;
|
|||||||
|
|
||||||
#define _FOR_ITER_EASY_START0_R(MainType, MainObj, IterVar, SizeVar) \
|
#define _FOR_ITER_EASY_START0_R(MainType, MainObj, IterVar, SizeVar) \
|
||||||
{ \
|
{ \
|
||||||
typedef MainType::TypeSize IterTypeSize ; \
|
typedef typename MainType::TypeSize IterTypeSize ; \
|
||||||
ZNsMain::IterEasyID IterVar = MainObj.ItTID(); \
|
ZNsMain::IterEasyID IterVar = MainObj.ItTID(); \
|
||||||
\
|
\
|
||||||
for(IterTypeSize SizeVar=0; SizeVar<MainObj.size(); ++SizeVar){
|
for(IterTypeSize SizeVar=0; SizeVar<MainObj.size(); ++SizeVar){
|
||||||
@ -533,7 +533,7 @@ using namespace std;
|
|||||||
|
|
||||||
#define _FOR_ITER_EASY_START0_RC(MainType, MainObj, IterVar, SizeVar) \
|
#define _FOR_ITER_EASY_START0_RC(MainType, MainObj, IterVar, SizeVar) \
|
||||||
{ \
|
{ \
|
||||||
typedef MainType::TypeSize IterTypeSize ; \
|
typedef typename MainType::TypeSize IterTypeSize ; \
|
||||||
ZNsMain::IterEasyIDc IterVar = MainObj.ItTIDc(); \
|
ZNsMain::IterEasyIDc IterVar = MainObj.ItTIDc(); \
|
||||||
\
|
\
|
||||||
for(IterTypeSize SizeVar=0; SizeVar<MainObj.size(); ++SizeVar){
|
for(IterTypeSize SizeVar=0; SizeVar<MainObj.size(); ++SizeVar){
|
||||||
@ -6198,6 +6198,7 @@ namespace ZNsMain
|
|||||||
TypeDataC& operator*() const{return **mp_CurrLink;}
|
TypeDataC& operator*() const{return **mp_CurrLink;}
|
||||||
operator TypeNodeC* () const{return mp_CurrLink;}
|
operator TypeNodeC* () const{return mp_CurrLink;}
|
||||||
operator TypeNodeC& () const{return *mp_CurrLink;}
|
operator TypeNodeC& () const{return *mp_CurrLink;}
|
||||||
|
operator TypeNode * () const{return 0 ;}
|
||||||
|
|
||||||
|
|
||||||
bool operator == (const ZCNodePointN& rhs) const
|
bool operator == (const ZCNodePointN& rhs) const
|
||||||
|
@ -993,7 +993,10 @@ namespace ZNsMain
|
|||||||
class ZtCLinkList /*#####################################################*/
|
class ZtCLinkList /*#####################################################*/
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
typedef ZtCLinkList TypeThis;
|
class ZCNodePoint; class ZCNodePointN;
|
||||||
|
public :
|
||||||
|
typedef ZtCLinkList TypeThis ;
|
||||||
|
typedef ZtCLinkList TypeList ;
|
||||||
public :
|
public :
|
||||||
typedef ZNsType::ZtCTypeNowCRTP ///////////////////////////////////////
|
typedef ZNsType::ZtCTypeNowCRTP ///////////////////////////////////////
|
||||||
<
|
<
|
||||||
@ -1002,14 +1005,38 @@ namespace ZNsMain
|
|||||||
ZCTypeNowCRTP ; ///////////////////////////////////////////////////////
|
ZCTypeNowCRTP ; ///////////////////////////////////////////////////////
|
||||||
|
|
||||||
typedef typename ZCTypeNowCRTP::TypeData TypeChild;
|
typedef typename ZCTypeNowCRTP::TypeData TypeChild;
|
||||||
|
/*************************************************************************/
|
||||||
|
typedef typename TCLink::TypeData TypeDataMain ;
|
||||||
|
typedef const TypeDataMain TypeDataMainC;
|
||||||
|
/*************************************************************************/
|
||||||
public :
|
public :
|
||||||
typedef ZtCObjOpt<TCLink> ZCDataOpt;
|
typedef ZtCObjOpt<TCLink> ZCDataOpt;
|
||||||
typedef ZtCObjOpt<TCLink> ZCLinkOpt;
|
typedef ZtCObjOpt<TCLink> ZCLinkOpt;
|
||||||
public :
|
|
||||||
typedef TCLink ZCLink ;
|
typedef TCLink ZCLink ;
|
||||||
typedef TCLink TypeData;
|
typedef TCLink TypeData ;
|
||||||
typedef TCLink TypeLink;
|
typedef TCLink TypeLink ;
|
||||||
typedef TTypSize TypeSize;
|
typedef TCLink TypeNode ;
|
||||||
|
typedef TTypSize TypeSize ;
|
||||||
|
|
||||||
|
typedef ZCNodePoint TypeIter ;
|
||||||
|
typedef ZCNodePointN TypeIterN ;
|
||||||
|
|
||||||
|
typedef const TCLink ZCLinkC ;
|
||||||
|
typedef const TCLink TypeDataC ;
|
||||||
|
typedef const TCLink TypeLinkC ;
|
||||||
|
typedef const TypeThis TypeThisC ;
|
||||||
|
typedef const TypeThis TypeListC ;
|
||||||
|
typedef const TypeNode TypeNodeC ;
|
||||||
|
typedef const TypeIter TypeIterC ;
|
||||||
|
typedef const ZCLinkOpt ZCLinkOptC;
|
||||||
|
/*************************************************************************/
|
||||||
|
typedef TypeIter iterator ;
|
||||||
|
typedef TypeIterN const_iterator;
|
||||||
|
|
||||||
|
typedef TypeIterN iteratorN ;
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
public :
|
public :
|
||||||
typedef typename TCLink::TypeMain TypeMain;
|
typedef typename TCLink::TypeMain TypeMain;
|
||||||
private:
|
private:
|
||||||
@ -1030,6 +1057,336 @@ namespace ZNsMain
|
|||||||
}/*
|
}/*
|
||||||
const TypeChild& GetChildObj() const*/
|
const TypeChild& GetChildObj() const*/
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
class ZCNodePoint
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
/*****/ TypeList& mr_CurrList;
|
||||||
|
mutable TypeLink* mp_CurrLink; // 사실상 mp_CurrLink!=0
|
||||||
|
mutable TypeSize ml_CurrPos ;
|
||||||
|
public :
|
||||||
|
ZCNodePoint(TypeList& AR_TypeList) :
|
||||||
|
mr_CurrList(AR_TypeList)
|
||||||
|
{
|
||||||
|
mp_CurrLink = AR_TypeList.HeadPtr();
|
||||||
|
ml_CurrPos = 1 ;
|
||||||
|
}
|
||||||
|
ZCNodePoint(const ZCNodePoint& rhs) :
|
||||||
|
mr_CurrList(rhs.mr_CurrList),
|
||||||
|
mp_CurrLink(rhs.mp_CurrLink),
|
||||||
|
ml_CurrPos (rhs.ml_CurrPos )
|
||||||
|
{}
|
||||||
|
public :
|
||||||
|
|
||||||
|
static ZCNodePoint MakeTailPoint(TypeList& AR_TypeList)
|
||||||
|
{
|
||||||
|
ZCNodePoint VO_ZCLinkPoint(AR_TypeList);
|
||||||
|
|
||||||
|
VO_ZCLinkPoint.mp_CurrLink = AR_TypeList.mp_TailLink;
|
||||||
|
VO_ZCLinkPoint.ml_CurrPos = AR_TypeList.ml_LinkSize;
|
||||||
|
|
||||||
|
return VO_ZCLinkPoint; /****************************/
|
||||||
|
}/*
|
||||||
|
static ZCNodePoint MakeTailPoint(TypeList& AR_TypeList)*/
|
||||||
|
static ZCNodePoint MakeTailPoint(const TypeIter& AR_TypeIter)
|
||||||
|
{
|
||||||
|
ZCNodePoint 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 ZCNodePoint MakeTailPoint(const TypeIter& AR_TypeIter)*/
|
||||||
|
|
||||||
|
public :
|
||||||
|
|
||||||
|
TypeThis & GetMain() {return mr_CurrList;}
|
||||||
|
TypeNode & GetNode() {return *mp_CurrLink;}
|
||||||
|
|
||||||
|
TypeThisC& GetMain() const{return mr_CurrList;}
|
||||||
|
TypeNodeC& GetNode() 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;}
|
||||||
|
|
||||||
|
|
||||||
|
ZCNodePoint& operator= (const ZCNodePoint& rhs){ return *this; }
|
||||||
|
|
||||||
|
|
||||||
|
TypeData & operator*() {return **mp_CurrLink;}
|
||||||
|
TypeDataC& operator*() const{return **mp_CurrLink;}
|
||||||
|
|
||||||
|
operator TypeLink * () {return mp_CurrLink;}
|
||||||
|
operator TypeLinkC* () const{return mp_CurrLink;}
|
||||||
|
|
||||||
|
operator TypeLink & () {return *mp_CurrLink;}
|
||||||
|
operator TypeLinkC& () const{return *mp_CurrLink;}
|
||||||
|
|
||||||
|
|
||||||
|
bool operator == (const ZCNodePoint& rhs) const
|
||||||
|
{ return ml_CurrPos == rhs.ml_CurrPos; }
|
||||||
|
bool operator != (const ZCNodePoint& rhs) const
|
||||||
|
{ return ml_CurrPos != rhs.ml_CurrPos; }
|
||||||
|
bool operator > (const ZCNodePoint& rhs) const
|
||||||
|
{ return ml_CurrPos > rhs.ml_CurrPos; }
|
||||||
|
bool operator >= (const ZCNodePoint& rhs) const
|
||||||
|
{ return ml_CurrPos >= rhs.ml_CurrPos; }
|
||||||
|
bool operator < (const ZCNodePoint& rhs) const
|
||||||
|
{ return ml_CurrPos < rhs.ml_CurrPos; }
|
||||||
|
bool operator <= (const ZCNodePoint& 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 ZCNodePoint& operator++() const
|
||||||
|
{
|
||||||
|
mp_CurrLink = mp_CurrLink->mp_NextLink;
|
||||||
|
|
||||||
|
++ml_CurrPos; return *this ;
|
||||||
|
}/*
|
||||||
|
const ZCNodePoint& operator++() const*/
|
||||||
|
|
||||||
|
const ZCNodePoint& operator--() const
|
||||||
|
{
|
||||||
|
mp_CurrLink = mp_CurrLink->mp_PrevLink;
|
||||||
|
|
||||||
|
--ml_CurrPos; return *this ;
|
||||||
|
}/*
|
||||||
|
const ZCNodePoint& operator--() const*/
|
||||||
|
|
||||||
|
ZCNodePoint operator++(int) const
|
||||||
|
{
|
||||||
|
ZCNodePoint VO_NowPoint(*this);
|
||||||
|
|
||||||
|
mp_CurrLink = mp_CurrLink->mp_NextLink;
|
||||||
|
|
||||||
|
++ml_CurrPos ; return VO_NowPoint ;
|
||||||
|
}/*
|
||||||
|
ZCNodePoint operator++(int) const*/
|
||||||
|
|
||||||
|
ZCNodePoint operator--(int) const
|
||||||
|
{
|
||||||
|
ZCNodePoint VO_NowPoint(*this);
|
||||||
|
|
||||||
|
mp_CurrLink = mp_CurrLink->mp_PrevLink;
|
||||||
|
|
||||||
|
--ml_CurrPos; return VO_NowPoint ;
|
||||||
|
}/*
|
||||||
|
ZCNodePoint operator--(int) const*/
|
||||||
|
|
||||||
|
|
||||||
|
const ZCNodePoint& operator+=(TypeSize AL_Distance) const
|
||||||
|
{
|
||||||
|
if(IsEmpty()){return *this;}
|
||||||
|
|
||||||
|
mp_CurrLink = &((*mp_CurrLink)+AL_Distance) ;
|
||||||
|
ml_CurrPos += AL_Distance ;
|
||||||
|
|
||||||
|
return *this; /*:::::::::::::::::::::::::::*/
|
||||||
|
}/*
|
||||||
|
const ZCNodePoint& operator+=(TypeSize AL_Distance) const*/
|
||||||
|
|
||||||
|
const ZCNodePoint& operator-=(TypeSize AL_Distance) const
|
||||||
|
{
|
||||||
|
mp_CurrLink = &((*mp_CurrLink)-AL_Distance);
|
||||||
|
ml_CurrPos -= AL_Distance ;
|
||||||
|
|
||||||
|
return *this; /*::::::::::::::::::::::::::*/
|
||||||
|
}/*
|
||||||
|
const ZCNodePoint& operator-=(TypeSize AL_Distance) const*/
|
||||||
|
|
||||||
|
public:
|
||||||
|
};/*
|
||||||
|
class ZCNodePoint*/
|
||||||
|
|
||||||
|
|
||||||
|
class ZCNodePointN
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
const TypeList& mr_CurrList;
|
||||||
|
mutable TypeLinkC* mp_CurrLink; // 사실상 mp_CurrLink!=0
|
||||||
|
mutable TypeSize ml_CurrPos ;
|
||||||
|
public :
|
||||||
|
ZCNodePointN(const TypeList& AR_TypeList) :
|
||||||
|
mr_CurrList(AR_TypeList)
|
||||||
|
{
|
||||||
|
mp_CurrLink = AR_TypeList.HeadPtr();
|
||||||
|
ml_CurrPos = 1 ;
|
||||||
|
}
|
||||||
|
ZCNodePointN(const ZCNodePoint & rhs) :
|
||||||
|
mr_CurrList( rhs.GetMain()),
|
||||||
|
mp_CurrLink(&rhs.GetNode()),
|
||||||
|
ml_CurrPos ( rhs.GetPos ())
|
||||||
|
{}
|
||||||
|
ZCNodePointN(const ZCNodePointN& rhs) :
|
||||||
|
mr_CurrList(rhs.mr_CurrList),
|
||||||
|
mp_CurrLink(rhs.mp_CurrLink),
|
||||||
|
ml_CurrPos (rhs.ml_CurrPos )
|
||||||
|
{}
|
||||||
|
public :
|
||||||
|
|
||||||
|
static ZCNodePointN MakeTailPoint(const TypeList& AR_TypeList)
|
||||||
|
{
|
||||||
|
ZCNodePointN VO_ZCLinkPoint(AR_TypeList);
|
||||||
|
|
||||||
|
VO_ZCLinkPoint.mp_CurrLink = AR_TypeList.mp_TailLink;
|
||||||
|
VO_ZCLinkPoint.ml_CurrPos = AR_TypeList.ml_LinkSize;
|
||||||
|
|
||||||
|
return VO_ZCLinkPoint; /****************/
|
||||||
|
}/*
|
||||||
|
static ZCNodePointN MakeTailPoint(const TypeList& AR_TypeList)*/
|
||||||
|
static ZCNodePointN MakeTailPoint(const ZCNodePoint& AR_TypeIter)
|
||||||
|
{
|
||||||
|
ZCNodePointN 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 ZCNodePointN MakeTailPoint(const ZCNodePoint& AR_TypeIter)*/
|
||||||
|
static ZCNodePointN MakeTailPoint(const ZCNodePointN& AR_TypeIter)
|
||||||
|
{
|
||||||
|
ZCNodePointN 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 ZCNodePointN MakeTailPoint(const ZCNodePointN& AR_TypeIter)*/
|
||||||
|
|
||||||
|
public :
|
||||||
|
|
||||||
|
TypeThisC& GetMain() const{return mr_CurrList;}
|
||||||
|
TypeNodeC& GetNode() 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;}
|
||||||
|
|
||||||
|
|
||||||
|
ZCNodePointN& operator= (const ZCNodePointN& rhs){ return *this; }
|
||||||
|
|
||||||
|
TypeDataC& operator*() const{return **mp_CurrLink;}
|
||||||
|
operator TypeNodeC* () const{return mp_CurrLink;}
|
||||||
|
operator TypeNodeC& () const{return *mp_CurrLink;}
|
||||||
|
operator TypeNode * () const{return 0 ;}
|
||||||
|
|
||||||
|
|
||||||
|
bool operator == (const ZCNodePointN& rhs) const
|
||||||
|
{ return ml_CurrPos == rhs.ml_CurrPos; }
|
||||||
|
bool operator != (const ZCNodePointN& rhs) const
|
||||||
|
{ return ml_CurrPos != rhs.ml_CurrPos; }
|
||||||
|
bool operator > (const ZCNodePointN& rhs) const
|
||||||
|
{ return ml_CurrPos > rhs.ml_CurrPos; }
|
||||||
|
bool operator >= (const ZCNodePointN& rhs) const
|
||||||
|
{ return ml_CurrPos >= rhs.ml_CurrPos; }
|
||||||
|
bool operator < (const ZCNodePointN& rhs) const
|
||||||
|
{ return ml_CurrPos < rhs.ml_CurrPos; }
|
||||||
|
bool operator <= (const ZCNodePointN& 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 ZCNodePointN& operator++() const
|
||||||
|
{
|
||||||
|
mp_CurrLink = mp_CurrLink->mp_NextLink;
|
||||||
|
|
||||||
|
++ml_CurrPos; return *this ;
|
||||||
|
}/*
|
||||||
|
const ZCNodePointN& operator++() const*/
|
||||||
|
|
||||||
|
const ZCNodePointN& operator--() const
|
||||||
|
{
|
||||||
|
mp_CurrLink = mp_CurrLink->mp_PrevLink;
|
||||||
|
|
||||||
|
--ml_CurrPos; return *this ;
|
||||||
|
}/*
|
||||||
|
const ZCNodePointN& operator--() const*/
|
||||||
|
|
||||||
|
ZCNodePointN operator++(int) const
|
||||||
|
{
|
||||||
|
ZCNodePointN VO_NowPoint(*this);
|
||||||
|
|
||||||
|
mp_CurrLink = mp_CurrLink->mp_NextLink;
|
||||||
|
|
||||||
|
++ml_CurrPos ; return VO_NowPoint ;
|
||||||
|
}/*
|
||||||
|
ZCNodePointN operator++(int) const*/
|
||||||
|
|
||||||
|
ZCNodePointN operator--(int) const
|
||||||
|
{
|
||||||
|
ZCNodePointN VO_NowPoint(*this);
|
||||||
|
|
||||||
|
mp_CurrLink = mp_CurrLink->mp_PrevLink;
|
||||||
|
|
||||||
|
--ml_CurrPos; return VO_NowPoint ;
|
||||||
|
}/*
|
||||||
|
ZCNodePointN operator--(int) const*/
|
||||||
|
|
||||||
|
|
||||||
|
const ZCNodePointN& operator+=(TypeSize AL_Distance) const
|
||||||
|
{
|
||||||
|
if(IsEmpty()){return *this;}
|
||||||
|
|
||||||
|
mp_CurrLink = &((*mp_CurrLink)+AL_Distance) ;
|
||||||
|
ml_CurrPos += AL_Distance ;
|
||||||
|
|
||||||
|
return *this; /*:::::::::::::::::::::::::::*/
|
||||||
|
}/*
|
||||||
|
const ZCNodePointN& operator+=(TypeSize AL_Distance) const*/
|
||||||
|
|
||||||
|
const ZCNodePointN& operator-=(TypeSize AL_Distance) const
|
||||||
|
{
|
||||||
|
mp_CurrLink = &((*mp_CurrLink)-AL_Distance);
|
||||||
|
ml_CurrPos -= AL_Distance ;
|
||||||
|
|
||||||
|
return *this; /*::::::::::::::::::::::::::*/
|
||||||
|
}/*
|
||||||
|
const ZCNodePointN& operator-=(TypeSize AL_Distance) const*/
|
||||||
|
|
||||||
|
public:
|
||||||
|
};/*
|
||||||
|
class ZCNodePointN*/
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
/*############################################################*/
|
||||||
private:
|
private:
|
||||||
|
|
||||||
ZCLink* NewLink() const
|
ZCLink* NewLink() const
|
||||||
@ -1744,6 +2101,27 @@ namespace ZNsMain
|
|||||||
void clear(){DeleteAll();}
|
void clear(){DeleteAll();}
|
||||||
|
|
||||||
|
|
||||||
|
ZCLink * GetHeadLinkPtr() {return mp_HeadLink;}
|
||||||
|
ZCLink * GetTailLinkPtr() {return mp_TailLink;}
|
||||||
|
|
||||||
|
ZCLinkC* GetHeadLinkPtr() const{return mp_HeadLink;}
|
||||||
|
ZCLinkC* GetTailLinkPtr() const{return mp_TailLink;}
|
||||||
|
|
||||||
|
ZCLink * GetLinkPtr(TypeSize AI_Index) {return mp_HeadLink->GetNextPrevPtr(AI_Index-1);}
|
||||||
|
ZCLinkC* GetLinkPtr(TypeSize AI_Index) const{return mp_HeadLink->GetNextPrevPtr(AI_Index-1);}
|
||||||
|
|
||||||
|
|
||||||
|
ZCLink & GetHeadLink(TypeSize AI_Distance) {return (*mp_HeadLink)+AI_Distance;}
|
||||||
|
ZCLink & GetTailLink(TypeSize AI_Distance) {return (*mp_TailLink)-AI_Distance;}
|
||||||
|
|
||||||
|
ZCLinkC& GetHeadLink(TypeSize AI_Distance) const{return (*mp_HeadLink)+AI_Distance;}
|
||||||
|
ZCLinkC& GetTailLink(TypeSize AI_Distance) const{return (*mp_TailLink)-AI_Distance;}
|
||||||
|
|
||||||
|
|
||||||
|
ZCLink & GetNode(TypeSize AI_Index) {return (*mp_HeadLink)+(AI_Index-1);}
|
||||||
|
ZCLinkC& GetNode(TypeSize AI_Index) const{return (*mp_HeadLink)+(AI_Index-1);}
|
||||||
|
|
||||||
|
|
||||||
ZCDataOpt GetHeadOpt(){ return ZCDataOpt(mp_HeadLink); }
|
ZCDataOpt GetHeadOpt(){ return ZCDataOpt(mp_HeadLink); }
|
||||||
ZCDataOpt GetTailOpt(){ return ZCDataOpt(mp_TailLink); }
|
ZCDataOpt GetTailOpt(){ return ZCDataOpt(mp_TailLink); }
|
||||||
|
|
||||||
@ -1756,34 +2134,31 @@ namespace ZNsMain
|
|||||||
ZCDataOpt GetObjOpt(TypeSize AI_Index)*/
|
ZCDataOpt GetObjOpt(TypeSize AI_Index)*/
|
||||||
|
|
||||||
|
|
||||||
ZCLink& HeadRef(){return *mp_HeadLink;}
|
ZCLink & HeadRef() {return *mp_HeadLink;}
|
||||||
ZCLink& TailRef(){return *mp_TailLink;}
|
ZCLink & TailRef() {return *mp_TailLink;}
|
||||||
|
ZCLinkC& HeadRef() const{return *mp_HeadLink;}
|
||||||
|
ZCLinkC& TailRef() const{return *mp_TailLink;}
|
||||||
|
|
||||||
ZCLink& HeadRef(TypeSize AI_Distance){return (*mp_HeadLink)+AI_Distance;}
|
ZCLink & HeadRef(TypeSize AI_Distance) {return (*mp_HeadLink)+AI_Distance;}
|
||||||
ZCLink& TailRef(TypeSize AI_Distance){return (*mp_TailLink)-AI_Distance;}
|
ZCLink & TailRef(TypeSize AI_Distance) {return (*mp_TailLink)-AI_Distance;}
|
||||||
|
ZCLinkC& HeadRef(TypeSize AI_Distance) const{return (*mp_HeadLink)+AI_Distance;}
|
||||||
const ZCLink& HeadRef() const{return *mp_HeadLink;}
|
ZCLinkC& TailRef(TypeSize AI_Distance) const{return (*mp_TailLink)-AI_Distance;}
|
||||||
const ZCLink& TailRef() const{return *mp_TailLink;}
|
|
||||||
|
|
||||||
const ZCLink& HeadRef(TypeSize AI_Distance) const{return (*mp_HeadLink)+AI_Distance;}
|
|
||||||
const ZCLink& TailRef(TypeSize AI_Distance) const{return (*mp_TailLink)-AI_Distance;}
|
|
||||||
|
|
||||||
|
|
||||||
|
ZCLinkOpt HeadOpt() {return ZCLinkOpt(mp_HeadLink);}
|
||||||
|
ZCLinkOpt TailOpt() {return ZCLinkOpt(mp_TailLink);}
|
||||||
|
|
||||||
ZCLinkOpt HeadOpt(){return ZCLinkOpt(mp_HeadLink);}
|
ZCLinkOptC HeadOpt() const{return ZCLinkOpt(mp_HeadLink);}
|
||||||
ZCLinkOpt TailOpt(){return ZCLinkOpt(mp_TailLink);}
|
ZCLinkOptC TailOpt() const{return ZCLinkOpt(mp_TailLink);}
|
||||||
|
|
||||||
ZCLinkOpt HeadOpt(TypeSize AI_Distance)
|
ZCLinkOpt HeadOpt(TypeSize AI_Distance)
|
||||||
{if(mp_HeadLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_HeadLink)+AI_Distance);}
|
{if(mp_HeadLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_HeadLink)+AI_Distance);}
|
||||||
ZCLinkOpt TailOpt(TypeSize AI_Distance)
|
ZCLinkOpt TailOpt(TypeSize AI_Distance)
|
||||||
{if(mp_TailLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_TailLink)-AI_Distance);}
|
{if(mp_TailLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_TailLink)-AI_Distance);}
|
||||||
|
|
||||||
const ZCLinkOpt HeadOpt() const{return ZCLinkOpt(mp_HeadLink);}
|
ZCLinkOptC HeadOpt(TypeSize AI_Distance) const
|
||||||
const ZCLinkOpt TailOpt() const{return ZCLinkOpt(mp_TailLink);}
|
|
||||||
|
|
||||||
const ZCLinkOpt HeadOpt(TypeSize AI_Distance) const
|
|
||||||
{if(mp_HeadLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_HeadLink)+AI_Distance);}
|
{if(mp_HeadLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_HeadLink)+AI_Distance);}
|
||||||
const ZCLinkOpt TailOpt(TypeSize AI_Distance) const
|
ZCLinkOptC TailOpt(TypeSize AI_Distance) const
|
||||||
{if(mp_TailLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_TailLink)-AI_Distance);}
|
{if(mp_TailLink==0){return ZCLinkOpt(0);} return ZCLinkOpt((*mp_TailLink)-AI_Distance);}
|
||||||
|
|
||||||
|
|
||||||
@ -2375,6 +2750,74 @@ namespace ZNsMain
|
|||||||
###############################################################################*/
|
###############################################################################*/
|
||||||
|
|
||||||
|
|
||||||
|
IterEasyID GetHeadIterEasyID () {return (IterEasyID) GetHeadLinkPtr();}
|
||||||
|
IterEasyID GetTailIterEasyID () {return (IterEasyID) GetTailLinkPtr();}
|
||||||
|
|
||||||
|
IterEasyIDc GetHeadIterEasyID () const{return (IterEasyIDc)GetHeadLinkPtr();}
|
||||||
|
IterEasyIDc GetTailIterEasyID () const{return (IterEasyIDc)GetTailLinkPtr();}
|
||||||
|
|
||||||
|
IterEasyIDc GetHeadIterEasyIDc() const{return (IterEasyIDc)GetHeadLinkPtr();}
|
||||||
|
IterEasyIDc GetTailIterEasyIDc() const{return (IterEasyIDc)GetTailLinkPtr();}
|
||||||
|
|
||||||
|
|
||||||
|
iterator begin () { return ZCNodePoint (*this); }
|
||||||
|
iteratorN begin () const{ return ZCNodePointN(*this); }
|
||||||
|
iterator end () { return ZCNodePoint ::MakeTailPoint(*this); }
|
||||||
|
iteratorN end () const{ return ZCNodePointN::MakeTailPoint(*this); }
|
||||||
|
|
||||||
|
iteratorN cbegin () const{ return ZCNodePointN(*this); }
|
||||||
|
iteratorN cend () const{ return ZCNodePointN::MakeTailPoint(*this); }
|
||||||
|
|
||||||
|
|
||||||
|
IterEasyID ItHID () {return GetHeadIterEasyID ();}
|
||||||
|
IterEasyID ItTID () {return GetTailIterEasyID ();}
|
||||||
|
|
||||||
|
IterEasyIDc ItHID () const{return GetHeadIterEasyIDc();}
|
||||||
|
IterEasyIDc ItTID () const{return GetTailIterEasyIDc();}
|
||||||
|
|
||||||
|
IterEasyIDc ItHIDc () const{return GetHeadIterEasyIDc();}
|
||||||
|
IterEasyIDc ItTIDc () const{return GetTailIterEasyIDc();}
|
||||||
|
|
||||||
|
|
||||||
|
void ItNext(TypeLink* & APR_CLink ) const
|
||||||
|
{ APR_CLink=APR_CLink->GetNextPtr(); }
|
||||||
|
void ItNext(IterEasyID & ARRI_IterEasyID ) const
|
||||||
|
{ ItNext((ZCLink*&)(ARRI_IterEasyID)); }
|
||||||
|
void ItNext(TypeLinkC* & APR_CLink ) const
|
||||||
|
{ APR_CLink=APR_CLink->GetNextPtr(); }
|
||||||
|
void ItNext(IterEasyIDc& ARRI_IterEasyID ) const
|
||||||
|
{ ItNext((TypeLinkC*&)(ARRI_IterEasyID)); }
|
||||||
|
void ItNext(iterator & ARR_Iterator ) const{++ARR_Iterator;}
|
||||||
|
void ItNext(iteratorN & ARR_Iterator ) const{++ARR_Iterator;}
|
||||||
|
|
||||||
|
void ItPrev(ZCLink* & APR_CLink ) const
|
||||||
|
{ APR_CLink=APR_CLink->GetPrevPtr(); }
|
||||||
|
void ItPrev(IterEasyID & ARRI_IterEasyID ) const
|
||||||
|
{ ItPrev((ZCLink*&)(ARRI_IterEasyID)); }
|
||||||
|
void ItPrev(TypeLinkC* & APR_CLink ) const
|
||||||
|
{ APR_CLink=APR_CLink->GetPrevPtr(); }
|
||||||
|
void ItPrev(IterEasyIDc& ARRI_IterEasyID ) const
|
||||||
|
{ ItPrev((TypeLinkC*&)(ARRI_IterEasyID)); }
|
||||||
|
void ItPrev(iterator & ARR_Iterator ) const{--ARR_Iterator;}
|
||||||
|
void ItPrev(iteratorN & ARR_Iterator ) const{--ARR_Iterator;}
|
||||||
|
|
||||||
|
|
||||||
|
TypeDataMain & ItD(TypeLink * AP_Link ) {return **AP_Link;}
|
||||||
|
TypeDataMain & ItD(IterEasyID AH_IterEasyID ) {return **(TypeLink *)(AH_IterEasyID);}
|
||||||
|
TypeDataMain & ItD(iterator & ARR_Iterator ) {return **ARR_Iterator;}
|
||||||
|
|
||||||
|
TypeDataMainC& ItD(TypeLinkC * AP_Link ) const{return **AP_Link;}
|
||||||
|
TypeDataMainC& ItD(IterEasyIDc AH_IterEasyID ) const{return **(TypeLinkC*)(AH_IterEasyID);}
|
||||||
|
TypeDataMainC& ItD(iteratorN & ARR_Iterator ) const{return **ARR_Iterator;}
|
||||||
|
|
||||||
|
TypeDataMain & ItD(TypeLink * AP_Link , TypeSize AI_FarNum) {return *((*AP_Link)+AI_FarNum);}
|
||||||
|
TypeDataMain & ItD(IterEasyID AH_IterEasyID, TypeSize AI_FarNum) {return *(((TypeLink *)(AH_IterEasyID))+AI_FarNum);}
|
||||||
|
TypeDataMain & ItD(iterator & ARR_Iterator , TypeSize AI_FarNum) {return *(ARR_Iterator.GetNode()+AI_FarNum);}
|
||||||
|
|
||||||
|
TypeDataMainC& ItD(TypeLinkC * AP_Link , TypeSize AI_FarNum) const{return *((*AP_Link)+AI_FarNum);}
|
||||||
|
TypeDataMainC& ItD(IterEasyIDc AH_IterEasyID, TypeSize AI_FarNum) const{return *(((TypeLinkC*)(AH_IterEasyID))+AI_FarNum);}
|
||||||
|
TypeDataMainC& ItD(iteratorN & ARR_Iterator , TypeSize AI_FarNum) const{return *(ARR_Iterator.GetNode()+AI_FarNum);}
|
||||||
|
|
||||||
public :
|
public :
|
||||||
};/*
|
};/*
|
||||||
template //////////////////////////////////////////////////////////////////
|
template //////////////////////////////////////////////////////////////////
|
||||||
|
@ -1282,6 +1282,7 @@ namespace ZNsMain
|
|||||||
TypeDataC& operator*() const{return **mp_CurrLink;}
|
TypeDataC& operator*() const{return **mp_CurrLink;}
|
||||||
operator TypeNodeC* () const{return mp_CurrLink;}
|
operator TypeNodeC* () const{return mp_CurrLink;}
|
||||||
operator TypeNodeC& () const{return *mp_CurrLink;}
|
operator TypeNodeC& () const{return *mp_CurrLink;}
|
||||||
|
operator TypeNode * () const{return 0 ;}
|
||||||
|
|
||||||
|
|
||||||
bool operator == (const ZCNodePointN& rhs) const
|
bool operator == (const ZCNodePointN& rhs) const
|
||||||
@ -2660,7 +2661,7 @@ namespace ZNsMain
|
|||||||
__for0(TypeSize, i, ml_LinkSize)
|
__for0(TypeSize, i, ml_LinkSize)
|
||||||
{
|
{
|
||||||
ZtCTypeData<TFunctor>::
|
ZtCTypeData<TFunctor>::
|
||||||
GetObjRef(AO_Functor)(VP_LoopLink->mo_DataObjt);
|
GetObjRef(AO_Functor)(**VP_LoopLink);
|
||||||
|
|
||||||
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
||||||
}/*
|
}/*
|
||||||
|
@ -251,6 +251,21 @@ namespace ZNsMain
|
|||||||
cout<<"***********************************************"<<endl;
|
cout<<"***********************************************"<<endl;
|
||||||
|
|
||||||
|
|
||||||
|
_FOR_ITER_EASY_START0_C(ZCLinkStrList, VO_ZCLinkStrLis1, VH_NowIter, i)
|
||||||
|
{
|
||||||
|
cout<<"# list1 const: "<<(i+1)<<" "<<VO_ZCLinkStrLis1.ItD(VH_NowIter).GetData()<<endl;
|
||||||
|
}
|
||||||
|
_FOR_ITER_EASY_CLOSE0_C(ZCLinkStrList, VO_ZCLinkStrLis1, VH_NowIter, i)
|
||||||
|
cout<<"***********************************************"<<endl;
|
||||||
|
|
||||||
|
_FOR_ITER_EASY_START0_RC(ZCLinkStrList, VO_ZCLinkStrLis1, VH_NowIter, i)
|
||||||
|
{
|
||||||
|
cout<<"# list1 rev const: "<<(i+1)<<" "<<VO_ZCLinkStrLis1.ItD(VH_NowIter).GetData()<<endl;
|
||||||
|
}
|
||||||
|
_FOR_ITER_EASY_CLOSE0_RC(ZCLinkStrList, VO_ZCLinkStrLis1, VH_NowIter, i)
|
||||||
|
cout<<"***********************************************"<<endl;
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}/*
|
}/*
|
||||||
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
||||||
|
Reference in New Issue
Block a user