commit 2025-10-13 13:31 add __for_iter & __for_iterc ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-13 13:31:34 +09:00
parent 3629380b37
commit 50019e94cd
2 changed files with 163 additions and 40 deletions

View File

@ -470,8 +470,18 @@ 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) \ #define __for_iter( IterClass, IterObj, IterVar) \
for(IterClass::iterator IterVar=IterObj.begin(); IterVar<=IterObj.size(); ++IterVar) for ( \
IterClass::iterator IterVar=IterObj.begin(); \
IterVar<=IterObj.size(); \
++IterVar \
)
#define __for_iterc(IterClass, IterObj, IterVar) \
for ( \
IterClass::const_iterator IterVar=IterObj.begin(); \
IterVar<=IterObj.size(); \
++IterVar \
)

View File

@ -22,65 +22,60 @@ namespace ZNsMain
typedef TTypArg TypeArg ; typedef TTypArg TypeArg ;
typedef TSize TypeSize; typedef TSize TypeSize;
public: public:
class ZCDataPoint; class ZCDataPoint; class ZCDataPointC;
public: public:
typedef Type* IterEasy; typedef Type* IterEasy;
typedef ZCDataPoint iterator;
typedef ZCDataPoint TypeIter; typedef ZCDataPoint TypeIter;
public: /**********************************************/
typedef const IterEasy IterEasyC; typedef const TypeData TypeDataC ;
typedef const ZCDataPoint iteratorC; typedef const IterEasy IterEasyC ;
typedef const TypeData TypeDataC; /**********************************************/
public: typedef ZCDataPointC iteratorC ;
typedef const ZCDataPoint const_iterator; /**********************************************/
typedef ZCDataPoint iterator ;
typedef ZCDataPointC const_iterator;
public: public:
class ZCDataPoint class ZCDataPoint
{ {
private: mutable private: mutable
Type* mp_Data ; mutable TypeData* mp_Data ; mutable
TSize ml_ElePos; // *mp_Data 가 배열에서 차지하는 위치 TypeSize ml_ElePos; // *mp_Data 가 배열에서 차지하는 위치
ZtCArray* mp_CArray; ZtCArray& mr_CArray;
public: public:
ZCDataPoint() ZCDataPoint(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos) :
{ mr_CArray(AR_CArray)
mp_Data =0; /*****************************************************************/
mp_CArray=0;
ml_ElePos=0;
}/*
ZCDataPoint()*/
ZCDataPoint(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)
{ {
mp_Data =&AR_CData ; mp_Data =&AR_CData ;
mp_CArray=&AR_CArray; mr_CArray=&AR_CArray;
ml_ElePos=AL_ElePos ; ml_ElePos=AL_ElePos ;
}/* }/*
ZCDataPoint(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)*/ ZCDataPoint(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)*/
ZCDataPoint(ZtCArray& AR_CArray) ZCDataPoint(ZtCArray& AR_CArray) : mr_CArray(AR_CArray)
{ {
mp_Data = AR_CArray.mp_TypeArr ; mp_Data = AR_CArray.mp_TypeArr ;
mp_CArray=&AR_CArray ;
ml_ElePos=(AR_CArray.size()>0 ? 1 : 0 ) ; ml_ElePos=(AR_CArray.size()>0 ? 1 : 0 ) ;
}/* }/*
ZCDataPoint(ZtCArray& AR_CArray)*/ ZCDataPoint(ZtCArray& AR_CArray)*/
ZCDataPoint(const ZtCArray& AR_CArray) ZCDataPoint(const ZCDataPoint& rhs) : mr_CArray(rhs.mr_CArray)
{ {
mp_Data = AR_CArray.mp_TypeArr ; mp_Data = rhs.mp_TypeArr ;
mp_CArray= const_cast<ZtCArray*>(&AR_CArray); ml_ElePos= (mr_CArray.size()>0 ? 1 : 0 );
ml_ElePos= (AR_CArray.size()>0 ? 1 : 0 ) ;
}/* }/*
ZCDataPoint(const ZtCArray& AR_CArray)*/ ZCDataPoint(const ZCDataPoint& rhs)*/
Type& operator*( ){return *mp_Data;} TypeSize size () const{return mr_CArray.size();}
Type* operator->(){return mp_Data;} TypeSize GetPos() const{return ml_ElePos ;}
const Type& operator* () const{return *mp_Data;} TypeData & operator* () {return *mp_Data;}
const Type* operator->() const{return mp_Data;} TypeData * operator->() {return mp_Data;}
TypeDataC& operator* () const{return *mp_Data;}
TypeDataC* operator->() const{return mp_Data;}
ZCDataPoint& operator++( ){++mp_Data; ++ml_ElePos; return *this;} ZCDataPoint& operator++( ){++mp_Data; ++ml_ElePos; return *this;}
ZCDataPoint operator++(int){++mp_Data; ++ml_ElePos; return *this;} ZCDataPoint operator++(int){++mp_Data; ++ml_ElePos; return *this;}
@ -94,12 +89,130 @@ namespace ZNsMain
}/* }/*
ZCDataPoint operator+(TSize AL_AddPos) const*/ ZCDataPoint operator+(TSize AL_AddPos) const*/
bool operator == (const ZCDataPoint& rhs) const
{ return ml_ElePos == rhs.ml_ElePos; }
bool operator != (const ZCDataPoint& rhs) const
{ return ml_ElePos != rhs.ml_ElePos; }
bool operator > (const ZCDataPoint& rhs) const
{ return ml_ElePos > rhs.ml_ElePos; }
bool operator >= (const ZCDataPoint& rhs) const
{ return ml_ElePos >= rhs.ml_ElePos; }
bool operator < (const ZCDataPoint& rhs) const
{ return ml_ElePos < rhs.ml_ElePos; }
bool operator <= (const ZCDataPoint& rhs) const
{ return ml_ElePos <= rhs.ml_ElePos; }
bool operator == (TypeSize AL_Size) const
{ return ml_ElePos == AL_Size; }
bool operator != (TypeSize AL_Size) const
{ return ml_ElePos != AL_Size; }
bool operator > (TypeSize AL_Size) const
{ return ml_ElePos > AL_Size; }
bool operator >= (TypeSize AL_Size) const
{ return ml_ElePos >= AL_Size; }
bool operator < (TypeSize AL_Size) const
{ return ml_ElePos < AL_Size; }
bool operator <= (TypeSize AL_Size) const
{ return ml_ElePos <= AL_Size; }
public: public:
};/* };/*
class ZCDataPoint class ZCDataPoint*/
public :*/ class ZCDataPointC
{
private:
mutable TypeData* mp_Data ;
mutable TypeSize ml_ElePos; // *mp_Data 가 배열에서 차지하는 위치
const ZtCArray& mr_CArray;
public:
ZCDataPointC(const ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos) :
mr_CArray(AR_CArray)
/*****************************************************************/
{
mp_Data =&AR_CData ;
mr_CArray=&AR_CArray;
ml_ElePos=AL_ElePos ;
}/*
ZCDataPointC(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)*/
ZCDataPointC(ZtCArray& AR_CArray) : mr_CArray(AR_CArray)
{
mp_Data = AR_CArray.mp_TypeArr ;
ml_ElePos=(AR_CArray.size()>0 ? 1 : 0 ) ;
}/*
ZCDataPointC(ZtCArray& AR_CArray)*/
ZCDataPointC(const ZCDataPointC& rhs) : mr_CArray(rhs.mr_CArray)
{
mp_Data = rhs.mp_TypeArr ;
ml_ElePos=(mr_CArray.size()>0 ? 1 : 0 ) ;
}/*
ZCDataPointC(const ZCDataPointC& rhs)*/
ZCDataPointC(const ZCDataPoint & rhs) : mr_CArray(rhs.mr_CArray)
{
mp_Data = rhs.mp_TypeArr ;
ml_ElePos=(mr_CArray.size()>0 ? 1 : 0 ) ;
}/*
ZCDataPointC(const ZCDataPoint & rhs)*/
TypeSize size () const{return mr_CArray.size();}
TypeSize GetPos() const{return ml_ElePos ;}
TypeDataC& operator* () const{return *mp_Data;}
TypeDataC* operator->() const{return mp_Data;}
ZCDataPointC& operator++( ){++mp_Data; ++ml_ElePos; return *this;}
ZCDataPointC operator++(int){++mp_Data; ++ml_ElePos; return *this;}
const ZCDataPointC& operator++( ) const{++mp_Data; ++ml_ElePos; return *this;}
const ZCDataPointC operator++(int) const{++mp_Data; ++ml_ElePos; return *this;}
ZCDataPointC operator+(TSize AL_AddPos) const
{
return ZCDataPointC(*this, mp_Data+AL_AddPos, ml_ElePos+AL_AddPos);
}/*
ZCDataPointC operator+(TSize AL_AddPos) const*/
bool operator == (const ZCDataPointC& rhs) const
{ return ml_ElePos == rhs.ml_ElePos; }
bool operator != (const ZCDataPointC& rhs) const
{ return ml_ElePos != rhs.ml_ElePos; }
bool operator > (const ZCDataPointC& rhs) const
{ return ml_ElePos > rhs.ml_ElePos; }
bool operator >= (const ZCDataPointC& rhs) const
{ return ml_ElePos >= rhs.ml_ElePos; }
bool operator < (const ZCDataPointC& rhs) const
{ return ml_ElePos < rhs.ml_ElePos; }
bool operator <= (const ZCDataPointC& rhs) const
{ return ml_ElePos <= rhs.ml_ElePos; }
bool operator == (TypeSize AL_Size) const
{ return ml_ElePos == AL_Size; }
bool operator != (TypeSize AL_Size) const
{ return ml_ElePos != AL_Size; }
bool operator > (TypeSize AL_Size) const
{ return ml_ElePos > AL_Size; }
bool operator >= (TypeSize AL_Size) const
{ return ml_ElePos >= AL_Size; }
bool operator < (TypeSize AL_Size) const
{ return ml_ElePos < AL_Size; }
bool operator <= (TypeSize AL_Size) const
{ return ml_ElePos <= AL_Size; }
public:
};/*
class ZCDataPointC*/
public :
/**************************************************************************/
protected: protected:
enum{ZEAddSize=20}; enum{ZEAddSize=20};
protected: protected: