commit 2025-10-25 13:35 add ZtCObjtInitChain in ZCppMain/ZMainHead.H
This commit is contained in:
@ -817,21 +817,40 @@ namespace ZNsMain
|
|||||||
|
|
||||||
template<typename TDataNow> int ZftPrint(const TDataNow& AR_Data)
|
template<typename TDataNow> int ZftPrint(const TDataNow& AR_Data)
|
||||||
{
|
{
|
||||||
#if defined(_DEBUG_LEVEL) && _DEBUG_LEVEL>=100
|
|
||||||
cout<<"# typename TDataNow : "<<typeid(TDataNow).name()<<endl;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
std::cout<<AR_Data; return 0;
|
std::cout<<AR_Data; return 0;
|
||||||
}/*
|
}/*
|
||||||
template<typename TDataNow> int ZftPrint(const TDataNow& AR_Data)*/
|
template<typename TDataNow> int ZftPrint(const TDataNow& AR_Data)*/
|
||||||
|
|
||||||
template<typename TDataNow1, typename TDataNow2> int ZftPrint
|
template<typename TDataNow1, typename TDataNow2> int ZftPrint2
|
||||||
(const TDataNow1& AR_Data1, const TDataNow2& AR_Data2)
|
(const TDataNow1& AR_Data1, const TDataNow2& AR_Data2)
|
||||||
{
|
{
|
||||||
std::cout<<AR_Data1<<AR_Data2; return 0;
|
std::cout<<AR_Data1<<AR_Data2; return 0;
|
||||||
}/*
|
}/*
|
||||||
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||||
|
|
||||||
|
/*///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
■ template<typename, typename> int ZftPrint2(~)
|
||||||
|
|
||||||
|
만약 위 선언을 template<typename, typename> int ZftPrint(~) 로 하면 어떻게 될까.
|
||||||
|
별로 좋지 않다. 아래 표현에서
|
||||||
|
|
||||||
|
void* myP = &ZftPrint<string, char> ;
|
||||||
|
|
||||||
|
아래 함수와 overload 가 이상해져서,
|
||||||
|
|
||||||
|
template<typename TDataNow, typename TTypeNextChain>
|
||||||
|
int ZftPrint
|
||||||
|
( const ZtCObjtChain<TDataNow, TTypeNextChain>&);
|
||||||
|
template<typename TDataNow, typename TInitVal, typename TTypeNextChain>
|
||||||
|
int ZftPrint
|
||||||
|
( const ZtCObjtInitChain<TDataNow, TInitVal, TTypeNextChain>& AR_CChain )
|
||||||
|
|
||||||
|
적절한 함수를 찾지를 못한다. -- 2025-10-25 13:32
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*///////////////////////////////////////////////////////////////////////////////
|
/*///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -842,8 +861,6 @@ namespace ZNsMain
|
|||||||
ZtCObjtChain 의 원소를 순회할 때마다 변한다. 그래서 ZCPrint 처럼, 템플릿 함수
|
ZtCObjtChain 의 원소를 순회할 때마다 변한다. 그래서 ZCPrint 처럼, 템플릿 함수
|
||||||
연산자 () 을 갖는 ZCPrint 가 필요하다.
|
연산자 () 을 갖는 ZCPrint 가 필요하다.
|
||||||
|
|
||||||
ZtCObjtInitChain 에서 사용될 수 있다. -- 2025-10-25 08:27
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////*/
|
///////////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
class ZCPrint /*///////////////////////////////////////////////////////////////*/
|
class ZCPrint /*///////////////////////////////////////////////////////////////*/
|
||||||
@ -851,7 +868,7 @@ namespace ZNsMain
|
|||||||
public:
|
public:
|
||||||
template<typename TDataNow> int operator ()
|
template<typename TDataNow> int operator ()
|
||||||
(const TDataNow& AR_Data){ ZftPrint(AR_Data); return 0; }
|
(const TDataNow& AR_Data){ ZftPrint(AR_Data); return 0; }
|
||||||
template<typename TDataNow> int OnPrevIter
|
template<typename TDataNow> int OnNextIter
|
||||||
(const TDataNow& AR_Data){ ZftPrint(", ") ; return 0; }
|
(const TDataNow& AR_Data){ ZftPrint(", ") ; return 0; }
|
||||||
public:
|
public:
|
||||||
};
|
};
|
||||||
@ -859,17 +876,22 @@ namespace ZNsMain
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int ZfInitZero(){ return 0; }
|
|
||||||
/*///////////////////////////////////////////////////////////////////////////////
|
/*///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
■ int ZfInitZero()
|
■ class ZCInitZero
|
||||||
|
|
||||||
템플릿 인자 중에서, 0 으로 초기화하는 functor 가 필요할 때 사용하는 함수.
|
템플릿 인자 중에서, 0 으로 초기화하는 자료형이 필요할 때 사용하는 함수.
|
||||||
|
|
||||||
ZtCObjtInitChain 에서 사용될 수 있다. -- 2025-10-25 08:27
|
ZtCObjtInitChain 에서 사용될 수 있다. -- 2025-10-25 08:27
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////*/
|
///////////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
class ZCInitZero
|
||||||
|
{
|
||||||
|
public: static int Exec(){ return 0; }
|
||||||
|
};/*
|
||||||
|
class ZCInitZero*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ZCEndian
|
class ZCEndian
|
||||||
@ -3735,9 +3757,26 @@ namespace ZNsMain
|
|||||||
|
|
||||||
각 객체에 어떻게 쉽게 접근하는지가 관건이다. -- 2025-10-18 01:41
|
각 객체에 어떻게 쉽게 접근하는지가 관건이다. -- 2025-10-18 01:41
|
||||||
|
|
||||||
|
현재 각 객체에 아래처럼 갈끔하게 접근하고 있다.
|
||||||
|
|
||||||
|
*VO_ZCObjtChain.GetChainByNo<0>()=('E');
|
||||||
|
*VO_ZCObjtChain.GetChainByNo<1>()=(string("New4 Str"));
|
||||||
|
*VO_ZCObjtChain.GetChainByNo<2>()=(1.8);
|
||||||
|
*VO_ZCObjtChain.GetChainByNo<3>()=(9999);
|
||||||
|
|
||||||
|
여기에 오기까지 참 한 많은 세월이 아니던가... -- 2025-10-25 10:46
|
||||||
|
|
||||||
|
*********************************************************************
|
||||||
|
|
||||||
() 을 재정의해서, () 을 필요한 만큼 겹겹이 호출해서 접근하도록 했다.
|
() 을 재정의해서, () 을 필요한 만큼 겹겹이 호출해서 접근하도록 했다.
|
||||||
아래 예제:202510200053 참고.
|
아래 예제:202510200053 참고.
|
||||||
|
|
||||||
|
■ class ZtCObjtInitChain<TDataNow, TInitVal, TTypeNextChain>
|
||||||
|
|
||||||
|
각 원소 TDataNow 객체를 TInitVal::Exec() 로 초기화한다.
|
||||||
|
|
||||||
|
-- 2025-10-25 11:02
|
||||||
|
|
||||||
■ 아래 멈버 함수를 추가하고
|
■ 아래 멈버 함수를 추가하고
|
||||||
|
|
||||||
template<typename TDataHere>
|
template<typename TDataHere>
|
||||||
@ -3797,7 +3836,7 @@ namespace ZNsMain
|
|||||||
-- 2025-10-24 09:09
|
-- 2025-10-24 09:09
|
||||||
|
|
||||||
|
|
||||||
ZtCPrint 를 추가해서, 멤버함수 IterElement(), IterElemRev() 이
|
ZCPrint 를 추가해서, 멤버함수 IterElement(), IterElemRev() 이
|
||||||
functor 를 받을 수 있도록 했다. 이러니까 C++ 이다!
|
functor 를 받을 수 있도록 했다. 이러니까 C++ 이다!
|
||||||
|
|
||||||
-- 2025-10-25 08:40
|
-- 2025-10-25 08:40
|
||||||
@ -4064,7 +4103,7 @@ namespace ZNsMain
|
|||||||
if(TypeChainNow::ZEBoolNext>0)
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
{
|
{
|
||||||
ZtCTypeData<TViewChain>::
|
ZtCTypeData<TViewChain>::
|
||||||
GetObjRef(AO_CView).OnPrevIter(*this);
|
GetObjRef(AO_CView).OnNextIter(*this);
|
||||||
|
|
||||||
this->TypeChainNext::IterElement(AO_CView);
|
this->TypeChainNext::IterElement(AO_CView);
|
||||||
}/*
|
}/*
|
||||||
@ -4078,7 +4117,7 @@ namespace ZNsMain
|
|||||||
this->TypeChainNext::IterElemRev(AO_CView);
|
this->TypeChainNext::IterElemRev(AO_CView);
|
||||||
|
|
||||||
ZtCTypeData<TViewChain>::
|
ZtCTypeData<TViewChain>::
|
||||||
GetObjRef(AO_CView).OnPrevIter(*this);
|
GetObjRef(AO_CView).OnNextIter(*this);
|
||||||
}/*
|
}/*
|
||||||
if(TypeChainNow::ZEBoolNext>0)*/
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
|
||||||
@ -4232,8 +4271,707 @@ namespace ZNsMain
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
■ class ZtCObjtInitChain<TDataNow, TInitVal, TTypeNextChain>
|
||||||
|
|
||||||
|
각 원소 TDataNow 객체를 TInitVal::Exec() 로 초기화한다.
|
||||||
|
|
||||||
|
-- 2025-10-25 11:02
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
template /*########################################################*/
|
||||||
|
<
|
||||||
|
typename TDataNow, typename TInitVal, typename TTypeNextChain
|
||||||
|
>
|
||||||
|
class ZtCObjtInitChain : public TTypeNextChain //////////////////////
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
typedef TDataNow TypeData ;
|
||||||
|
typedef ZtCObjtInitChain TypeChainNow ;
|
||||||
|
typedef TTypeNextChain TypeChainNext ;
|
||||||
|
typedef TInitVal TypeInitVal ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef const TypeChainNow TypeChainNowC ;
|
||||||
|
typedef const TypeChainNext TypeChainNextC;
|
||||||
|
/************************************************************/
|
||||||
|
typedef const TypeData TypeDataC ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef typename TypeChainNext::TypeData TypeNext ;
|
||||||
|
/************************************************************/
|
||||||
|
enum{ZETypeNo = TypeChainNext::ZETypeNo+1};
|
||||||
|
enum{ZEBoolNext = 1 };
|
||||||
|
public :
|
||||||
|
static ZTypIntE Size (){return ZETypeNo;}
|
||||||
|
static ZTypIntE size (){return ZETypeNo;}
|
||||||
|
static ZTypIntE GetNo(){return ZETypeNo;}
|
||||||
|
private:
|
||||||
|
TypeData mo_TypeVar;
|
||||||
|
public :
|
||||||
|
ZtCObjtInitChain() : mo_TypeVar( TypeInitVal::Exec() ){}
|
||||||
|
public :
|
||||||
|
TypeData & GetData () {return mo_TypeVar;}
|
||||||
|
TypeDataC& GetData () const{return mo_TypeVar;}
|
||||||
|
|
||||||
|
TypeData & operator* () {return mo_TypeVar;}
|
||||||
|
TypeDataC& operator* () const{return mo_TypeVar;}
|
||||||
|
/************************************************************/
|
||||||
|
TypeChainNext & GetChainNext()
|
||||||
|
{ return static_cast<TypeChainNext &>(*this); }
|
||||||
|
TypeChainNextC& GetChainNext() const
|
||||||
|
{ return static_cast<TypeChainNextC&>(*this); }
|
||||||
|
|
||||||
|
TypeChainNext & operator() ()
|
||||||
|
{ return static_cast<TypeChainNext &>(*this); }
|
||||||
|
TypeChainNextC& operator() () const
|
||||||
|
{ return static_cast<TypeChainNextC&>(*this); }
|
||||||
|
|
||||||
|
template<typename TDataHere>
|
||||||
|
TypeChainNow & operator= (const TDataHere& AR_Data)
|
||||||
|
{ /*:::::::::::::::*/ return *this;}
|
||||||
|
TypeChainNow & operator= (const TypeData & AR_Data)
|
||||||
|
{ mo_TypeVar=AR_Data; return *this;}
|
||||||
|
|
||||||
|
/**************************************************************/
|
||||||
|
|
||||||
|
template<int TInTypeNo> typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChain & GetChainByNo()
|
||||||
|
{
|
||||||
|
typedef typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChain TypeChain ;
|
||||||
|
|
||||||
|
return *static_cast<TypeChain *>(this);
|
||||||
|
}
|
||||||
|
template<int TInTypeNo> typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChainC& GetChainByNo() const
|
||||||
|
{
|
||||||
|
typedef typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChainC TypeChainC;
|
||||||
|
|
||||||
|
return *static_cast<TypeChainC*>(this);
|
||||||
|
}
|
||||||
|
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||||
|
|
||||||
|
template<int TTypNo, typename TDataHere>
|
||||||
|
bool SetDataRecur(const TDataHere& AR_Data)
|
||||||
|
{
|
||||||
|
if(TTypNo==TypeChainNow::ZETypeNo)
|
||||||
|
{*this=AR_Data; return true;}
|
||||||
|
if(TTypNo>TypeChainNow::ZETypeNo)
|
||||||
|
{/*::::::::::*/ return false;}
|
||||||
|
|
||||||
|
return this->TypeChainNext::template
|
||||||
|
SetDataRecur<TTypNo, TDataHere>(AR_Data);
|
||||||
|
}/*
|
||||||
|
template<int TTypNo, typename TDataHere>
|
||||||
|
bool SetDataRecur(const TDataHere& AR_Data) */
|
||||||
|
|
||||||
|
/************************************************************/
|
||||||
|
|
||||||
|
template<typename TTypeChainNext> typename
|
||||||
|
TTypeChainNext::TypeData & GetData()
|
||||||
|
{ return this->TTypeChainNext::GetData(); }
|
||||||
|
template<typename TTypeChainNext> typename
|
||||||
|
TTypeChainNext::TypeDataC& GetData() const
|
||||||
|
{ return this->TTypeChainNext::GetData(); }
|
||||||
|
|
||||||
|
/* AO_CView.OnMeetData() 은 다음 TypeChainNext 을 호출할
|
||||||
|
때마다 인수 자료형이 변한다. 따라서 고정적인 함수로는
|
||||||
|
적당치 않않다. -- 2025-10-20 00:32
|
||||||
|
*/
|
||||||
|
template<typename TViewChain> void IterHead(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnMeetData(*this);
|
||||||
|
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
this->TypeChainNext::IterHead(AO_CView);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterHead(TViewChain AO_CView)*/
|
||||||
|
template<typename TViewChain> void IterTail(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
this->TypeChainNext::IterTail(AO_CView);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnMeetData(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterTail(TViewChain AO_CView)*/
|
||||||
|
|
||||||
|
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
{
|
||||||
|
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
|
||||||
|
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
|
||||||
|
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
this->TypeChainNext::
|
||||||
|
IterHead(AO_CView, AO_TypeHelp);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
{
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
this->TypeChainNext::
|
||||||
|
IterTail(AO_CView, AO_TypeHelp);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
|
||||||
|
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
|
||||||
|
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
*/
|
||||||
|
|
||||||
|
template<typename TViewChain> void IterElement(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).operator()(*this);
|
||||||
|
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnNextIter(*this);
|
||||||
|
|
||||||
|
this->TypeChainNext::IterElement(AO_CView);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterElement(TViewChain AO_CView)*/
|
||||||
|
template<typename TViewChain> void IterElemRev(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
this->TypeChainNext::IterElemRev(AO_CView);
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnNextIter(*this);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).operator()(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterElemRev(TViewChain AO_CView)*/
|
||||||
|
|
||||||
|
public:
|
||||||
|
};/*
|
||||||
|
template ############################################################
|
||||||
|
<
|
||||||
|
typename TDataNow, typename TInitVal, typename TTypeNextChain
|
||||||
|
>
|
||||||
|
class ZtCObjtInitChain : public TTypeNextChain ////////////////////*/
|
||||||
|
|
||||||
|
|
||||||
|
template /*########################################################*/
|
||||||
|
<
|
||||||
|
typename TDataNow, typename TTypeNextChain
|
||||||
|
>
|
||||||
|
class ZtCObjtInitChain
|
||||||
|
<TDataNow, ZCEmpty, TTypeNextChain> : public TTypeNextChain /////
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
typedef ZtCObjtInitChain
|
||||||
|
<TDataNow, ZCEmpty, TTypeNextChain> ZCObjtInitChain;
|
||||||
|
public :
|
||||||
|
typedef TDataNow TypeData ;
|
||||||
|
typedef ZCObjtInitChain TypeChainNow ;
|
||||||
|
typedef TTypeNextChain TypeChainNext ;
|
||||||
|
typedef ZCEmpty TypeInitVal ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef const TypeChainNow TypeChainNowC ;
|
||||||
|
typedef const TypeChainNext TypeChainNextC;
|
||||||
|
/************************************************************/
|
||||||
|
typedef const TypeData TypeDataC ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef typename TypeChainNext::TypeData TypeNext ;
|
||||||
|
/************************************************************/
|
||||||
|
enum{ZETypeNo = TypeChainNext::ZETypeNo+1};
|
||||||
|
enum{ZEBoolNext = 1 };
|
||||||
|
public :
|
||||||
|
static ZTypIntE Size (){return ZETypeNo;}
|
||||||
|
static ZTypIntE size (){return ZETypeNo;}
|
||||||
|
static ZTypIntE GetNo(){return ZETypeNo;}
|
||||||
|
private:
|
||||||
|
TypeData mo_TypeVar;
|
||||||
|
public :
|
||||||
|
ZtCObjtInitChain(){}
|
||||||
|
public :
|
||||||
|
TypeData & GetData () {return mo_TypeVar;}
|
||||||
|
TypeDataC& GetData () const{return mo_TypeVar;}
|
||||||
|
|
||||||
|
TypeData & operator* () {return mo_TypeVar;}
|
||||||
|
TypeDataC& operator* () const{return mo_TypeVar;}
|
||||||
|
/************************************************************/
|
||||||
|
TypeChainNext & GetChainNext()
|
||||||
|
{ return static_cast<TypeChainNext &>(*this); }
|
||||||
|
TypeChainNextC& GetChainNext() const
|
||||||
|
{ return static_cast<TypeChainNextC&>(*this); }
|
||||||
|
|
||||||
|
TypeChainNext & operator() ()
|
||||||
|
{ return static_cast<TypeChainNext &>(*this); }
|
||||||
|
TypeChainNextC& operator() () const
|
||||||
|
{ return static_cast<TypeChainNextC&>(*this); }
|
||||||
|
|
||||||
|
template<typename TDataHere>
|
||||||
|
TypeChainNow & operator= (const TDataHere& AR_Data)
|
||||||
|
{ /*:::::::::::::::*/ return *this;}
|
||||||
|
TypeChainNow & operator= (const TypeData & AR_Data)
|
||||||
|
{ mo_TypeVar=AR_Data; return *this;}
|
||||||
|
|
||||||
|
/**************************************************************/
|
||||||
|
|
||||||
|
template<int TInTypeNo> typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChain & GetChainByNo()
|
||||||
|
{
|
||||||
|
typedef typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChain TypeChain ;
|
||||||
|
|
||||||
|
return *static_cast<TypeChain *>(this);
|
||||||
|
}
|
||||||
|
template<int TInTypeNo> typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChainC& GetChainByNo() const
|
||||||
|
{
|
||||||
|
typedef typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChainC TypeChainC;
|
||||||
|
|
||||||
|
return *static_cast<TypeChainC*>(this);
|
||||||
|
}
|
||||||
|
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||||
|
|
||||||
|
template<int TTypNo, typename TDataHere>
|
||||||
|
bool SetDataRecur(const TDataHere& AR_Data)
|
||||||
|
{
|
||||||
|
if(TTypNo==TypeChainNow::ZETypeNo)
|
||||||
|
{*this=AR_Data; return true;}
|
||||||
|
if(TTypNo>TypeChainNow::ZETypeNo)
|
||||||
|
{/*::::::::::*/ return false;}
|
||||||
|
|
||||||
|
return this->TypeChainNext::template
|
||||||
|
SetDataRecur<TTypNo, TDataHere>(AR_Data);
|
||||||
|
}/*
|
||||||
|
template<int TTypNo, typename TDataHere>
|
||||||
|
bool SetDataRecur(const TDataHere& AR_Data) */
|
||||||
|
|
||||||
|
/************************************************************/
|
||||||
|
|
||||||
|
template<typename TTypeChainNext> typename
|
||||||
|
TTypeChainNext::TypeData & GetData()
|
||||||
|
{ return this->TTypeChainNext::GetData(); }
|
||||||
|
template<typename TTypeChainNext> typename
|
||||||
|
TTypeChainNext::TypeDataC& GetData() const
|
||||||
|
{ return this->TTypeChainNext::GetData(); }
|
||||||
|
|
||||||
|
/* AO_CView.OnMeetData() 은 다음 TypeChainNext 을 호출할
|
||||||
|
때마다 인수 자료형이 변한다. 따라서 고정적인 함수로는
|
||||||
|
적당치 않않다. -- 2025-10-20 00:32
|
||||||
|
*/
|
||||||
|
template<typename TViewChain> void IterHead(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnMeetData(*this);
|
||||||
|
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
this->TypeChainNext::IterHead(AO_CView);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterHead(TViewChain AO_CView)*/
|
||||||
|
template<typename TViewChain> void IterTail(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
this->TypeChainNext::IterTail(AO_CView);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnMeetData(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterTail(TViewChain AO_CView)*/
|
||||||
|
|
||||||
|
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
{
|
||||||
|
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
|
||||||
|
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
|
||||||
|
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
this->TypeChainNext::
|
||||||
|
IterHead(AO_CView, AO_TypeHelp);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
{
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
this->TypeChainNext::
|
||||||
|
IterTail(AO_CView, AO_TypeHelp);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
|
||||||
|
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
|
||||||
|
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
*/
|
||||||
|
|
||||||
|
template<typename TViewChain> void IterElement(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).operator()(*this);
|
||||||
|
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnNextIter(*this);
|
||||||
|
|
||||||
|
this->TypeChainNext::IterElement(AO_CView);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterElement(TViewChain AO_CView)*/
|
||||||
|
template<typename TViewChain> void IterElemRev(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
this->TypeChainNext::IterElemRev(AO_CView);
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnNextIter(*this);
|
||||||
|
}/*
|
||||||
|
if(TypeChainNow::ZEBoolNext>0)*/
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).operator()(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterElemRev(TViewChain AO_CView)*/
|
||||||
|
|
||||||
|
public:
|
||||||
|
};/*
|
||||||
|
template ############################################################
|
||||||
|
<
|
||||||
|
typename TDataNow, typename TTypeNextChain
|
||||||
|
>
|
||||||
|
class ZtCObjtInitChain<TDataNow, ZCEmpty, TTypeNextChain> ////////*/
|
||||||
|
|
||||||
|
|
||||||
|
template /*########################################################*/
|
||||||
|
< typename TDataNow, typename TInitVal>
|
||||||
|
class ZtCObjtInitChain<TDataNow, TInitVal, ZCEmpty> /////////////////
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
typedef ZtCObjtInitChain
|
||||||
|
<TDataNow, TInitVal, ZCEmpty> ZCObjtInitChain;
|
||||||
|
public :
|
||||||
|
typedef TDataNow TypeData ;
|
||||||
|
typedef ZCObjtInitChain TypeChainNow ;
|
||||||
|
typedef ZCObjtInitChain TypeChainNext ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef ZCObjtInitChain TypeChainLast ; // only here
|
||||||
|
typedef ZCObjtInitChain TypeChainTail ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef ZCEmpty TypeNext ;
|
||||||
|
typedef ZCEmpty TypeInitVal ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef const TypeData TypeDataC ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef const TypeChainNow TypeChainNowC ;
|
||||||
|
typedef const TypeChainNow TypeChainNextC;
|
||||||
|
/************************************************************/
|
||||||
|
enum{ZETypeNo = 1 };
|
||||||
|
enum{ZEBoolNext = 0 };
|
||||||
|
public :
|
||||||
|
static ZTypIntE Size (){return ZETypeNo;}
|
||||||
|
static ZTypIntE size (){return ZETypeNo;}
|
||||||
|
static ZTypIntE GetNo(){return ZETypeNo;}
|
||||||
|
private:
|
||||||
|
TypeData mo_TypeVar;
|
||||||
|
public :
|
||||||
|
ZtCObjtInitChain():mo_TypeVar(TInitVal::Exec()){}
|
||||||
|
public :
|
||||||
|
TypeData & GetData () {return mo_TypeVar;}
|
||||||
|
TypeDataC& GetData () const{return mo_TypeVar;}
|
||||||
|
|
||||||
|
TypeData & operator* () {return mo_TypeVar;}
|
||||||
|
TypeDataC& operator* () const{return mo_TypeVar;}
|
||||||
|
/************************************************************/
|
||||||
|
TypeChainNext & GetChainNext() { return (*this); }
|
||||||
|
TypeChainNextC& GetChainNext() const{ return (*this); }
|
||||||
|
|
||||||
|
TypeChainNext & operator() () { return (*this); }
|
||||||
|
TypeChainNextC& operator() () const{ return (*this); }
|
||||||
|
|
||||||
|
template<typename TDataHere>
|
||||||
|
TypeChainNow & operator= (const TDataHere& AR_Data)
|
||||||
|
{ /*:::::::::::::::*/ return *this;}
|
||||||
|
TypeChainNow & operator= (const TypeData & AR_Data)
|
||||||
|
{ mo_TypeVar=AR_Data; return *this;}
|
||||||
|
/************************************************************/
|
||||||
|
|
||||||
|
template<int TInTypeNo> typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChain & GetChainByNo()
|
||||||
|
{
|
||||||
|
return *(this);
|
||||||
|
}
|
||||||
|
template<int TInTypeNo> typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChainC& GetChainByNo() const
|
||||||
|
{
|
||||||
|
return *(this);
|
||||||
|
}/*
|
||||||
|
template<int TInTypeNo> typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChainC& GetChainByNo() const
|
||||||
|
*/
|
||||||
|
|
||||||
|
template<int TTypNo, typename TDataHere>
|
||||||
|
bool SetDataRecur(const TDataHere& AR_Data)
|
||||||
|
{
|
||||||
|
if(TTypNo==TypeChainNow::ZETypeNo)
|
||||||
|
{*this=AR_Data; return true ;}
|
||||||
|
{/*::::::::::*/ return false;}
|
||||||
|
}/*
|
||||||
|
template<int TTypNo, typename TDataHere>
|
||||||
|
bool SetDataRecur(const TDataHere& AR_Data) */
|
||||||
|
|
||||||
|
/************************************************************/
|
||||||
|
|
||||||
|
template<typename TTypeChainNext> TypeData & GetData()
|
||||||
|
{ return this->GetData(); }
|
||||||
|
template<typename TTypeChainNext> TypeDataC& GetData() const
|
||||||
|
{ return this->GetData(); }
|
||||||
|
|
||||||
|
template<typename TViewChain> void IterHead(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnMeetData(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterHead(TViewChain AO_CView)*/
|
||||||
|
template<typename TViewChain> void IterTail(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnMeetData(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterTail(TViewChain AO_CView)*/
|
||||||
|
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
{
|
||||||
|
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
|
||||||
|
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
|
||||||
|
}
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
{
|
||||||
|
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
|
||||||
|
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
*/
|
||||||
|
|
||||||
|
template<typename TViewChain> void IterElement(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).operator()(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterElement(TViewChain AO_CView)*/
|
||||||
|
template<typename TViewChain> void IterElemRev(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).operator()(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterElemRev(TViewChain AO_CView)*/
|
||||||
|
|
||||||
|
public:
|
||||||
|
};/*
|
||||||
|
template ############################################################
|
||||||
|
< typename TDataNow, typename TInitVal>
|
||||||
|
class ZtCObjtInitChain<TDataNow, TInitVal, ZCEmpty> ///////////////*/
|
||||||
|
|
||||||
|
|
||||||
|
template /*########################################################*/
|
||||||
|
< typename TDataNow>
|
||||||
|
class ZtCObjtInitChain<TDataNow, ZCEmpty, ZCEmpty> //////////////////
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
typedef ZtCObjtInitChain
|
||||||
|
<TDataNow, ZCEmpty, ZCEmpty> ZCObjtInitChain;
|
||||||
|
public :
|
||||||
|
typedef TDataNow TypeData ;
|
||||||
|
typedef ZCObjtInitChain TypeChainNow ;
|
||||||
|
typedef ZCObjtInitChain TypeChainNext ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef ZCObjtInitChain TypeChainLast ; // only here
|
||||||
|
typedef ZCObjtInitChain TypeChainTail ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef ZCEmpty TypeNext ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef const TypeData TypeDataC ;
|
||||||
|
/************************************************************/
|
||||||
|
typedef const TypeChainNow TypeChainNowC ;
|
||||||
|
typedef const TypeChainNow TypeChainNextC;
|
||||||
|
/************************************************************/
|
||||||
|
enum{ZETypeNo = 1 };
|
||||||
|
enum{ZEBoolNext = 0 };
|
||||||
|
public :
|
||||||
|
static ZTypIntE Size (){return ZETypeNo;}
|
||||||
|
static ZTypIntE size (){return ZETypeNo;}
|
||||||
|
static ZTypIntE GetNo(){return ZETypeNo;}
|
||||||
|
private:
|
||||||
|
TypeData mo_TypeVar;
|
||||||
|
public :
|
||||||
|
ZtCObjtInitChain(){}
|
||||||
|
public :
|
||||||
|
TypeData & GetData () {return mo_TypeVar;}
|
||||||
|
TypeDataC& GetData () const{return mo_TypeVar;}
|
||||||
|
|
||||||
|
TypeData & operator* () {return mo_TypeVar;}
|
||||||
|
TypeDataC& operator* () const{return mo_TypeVar;}
|
||||||
|
/************************************************************/
|
||||||
|
TypeChainNext & GetChainNext() { return (*this); }
|
||||||
|
TypeChainNextC& GetChainNext() const{ return (*this); }
|
||||||
|
|
||||||
|
TypeChainNext & operator() () { return (*this); }
|
||||||
|
TypeChainNextC& operator() () const{ return (*this); }
|
||||||
|
|
||||||
|
template<typename TDataHere>
|
||||||
|
TypeChainNow & operator= (const TDataHere& AR_Data)
|
||||||
|
{ /*:::::::::::::::*/ return *this;}
|
||||||
|
TypeChainNow & operator= (const TypeData & AR_Data)
|
||||||
|
{ mo_TypeVar=AR_Data; return *this;}
|
||||||
|
/************************************************************/
|
||||||
|
|
||||||
|
template<int TInTypeNo> typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChain & GetChainByNo()
|
||||||
|
{
|
||||||
|
return *(this);
|
||||||
|
}
|
||||||
|
template<int TInTypeNo> typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChainC& GetChainByNo() const
|
||||||
|
{
|
||||||
|
return *(this);
|
||||||
|
}/*
|
||||||
|
template<int TInTypeNo> typename ZtCTypeByNo
|
||||||
|
<TypeChainNow, TInTypeNo>::TypeChainC& GetChainByNo() const
|
||||||
|
*/
|
||||||
|
|
||||||
|
template<int TTypNo, typename TDataHere>
|
||||||
|
bool SetDataRecur(const TDataHere& AR_Data)
|
||||||
|
{
|
||||||
|
if(TTypNo==TypeChainNow::ZETypeNo)
|
||||||
|
{*this=AR_Data; return true ;}
|
||||||
|
{/*::::::::::*/ return false;}
|
||||||
|
}/*
|
||||||
|
template<int TTypNo, typename TDataHere>
|
||||||
|
bool SetDataRecur(const TDataHere& AR_Data) */
|
||||||
|
|
||||||
|
/************************************************************/
|
||||||
|
|
||||||
|
template<typename TTypeChainNext> TypeData & GetData()
|
||||||
|
{ return this->GetData(); }
|
||||||
|
template<typename TTypeChainNext> TypeDataC& GetData() const
|
||||||
|
{ return this->GetData(); }
|
||||||
|
|
||||||
|
template<typename TViewChain> void IterHead(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnMeetData(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterHead(TViewChain AO_CView)*/
|
||||||
|
template<typename TViewChain> void IterTail(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).OnMeetData(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterTail(TViewChain AO_CView)*/
|
||||||
|
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
{
|
||||||
|
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
|
||||||
|
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
|
||||||
|
}
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
{
|
||||||
|
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
||||||
|
|
||||||
|
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
|
||||||
|
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain, typename TTypeHelp>
|
||||||
|
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||||
|
*/
|
||||||
|
|
||||||
|
template<typename TViewChain> void IterElement(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).operator()(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterElement(TViewChain AO_CView)*/
|
||||||
|
template<typename TViewChain> void IterElemRev(TViewChain AO_CView)
|
||||||
|
{
|
||||||
|
ZtCTypeData<TViewChain>::
|
||||||
|
GetObjRef(AO_CView).operator()(*this);
|
||||||
|
}/*
|
||||||
|
template<typename TViewChain> void IterElemRev(TViewChain AO_CView)*/
|
||||||
|
|
||||||
|
public:
|
||||||
|
};/*
|
||||||
|
template ############################################################
|
||||||
|
< typename TDataNow>
|
||||||
|
class ZtCObjtInitChain<TDataNow, ZCEmpty, ZCEmpty> ////////////////*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename TDataNow, typename TTypeNextChain> int ZftPrint /*:::::::*/
|
template<typename TDataNow, typename TTypeNextChain> int ZftPrint /*:::::::*/
|
||||||
( const ZtCObjtChain<TDataNow, TTypeNextChain>& AR_CChain )
|
( const ZtCObjtChain <TDataNow, TTypeNextChain>& AR_CChain )
|
||||||
|
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||||
|
{
|
||||||
|
return ZftPrint(*AR_CChain);
|
||||||
|
}
|
||||||
|
template<typename TDataNow, typename TInitVal, typename TTypeNextChain>
|
||||||
|
int ZftPrint
|
||||||
|
( const ZtCObjtInitChain
|
||||||
|
<TDataNow, TInitVal, TTypeNextChain>& AR_CChain
|
||||||
|
)
|
||||||
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||||
{
|
{
|
||||||
return ZftPrint(*AR_CChain);
|
return ZftPrint(*AR_CChain);
|
||||||
@ -4263,6 +5001,28 @@ namespace ZNsMain
|
|||||||
return AR_COStream;
|
return AR_COStream;
|
||||||
}
|
}
|
||||||
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||||
|
template<typename TDataNow, typename TInitVal, typename TTypeNextChain>
|
||||||
|
std::ostream& operator <<
|
||||||
|
(
|
||||||
|
std::ostream& AR_COStream, const ZtCObjtInitChain
|
||||||
|
<TDataNow, TInitVal, TTypeNextChain>& AR_CChain
|
||||||
|
)
|
||||||
|
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||||
|
{
|
||||||
|
AR_COStream<<AR_CChain.GetData();
|
||||||
|
|
||||||
|
typedef ZtCObjtInitChain
|
||||||
|
<TDataNow, TInitVal, TTypeNextChain> TypeObjtChain;
|
||||||
|
|
||||||
|
if(TypeObjtChain::ZEBoolNext>0)
|
||||||
|
{
|
||||||
|
cout<<", "; return AR_COStream<<AR_CChain.GetChainNext() ;
|
||||||
|
}/*
|
||||||
|
if(TypeObjtChain::ZEBoolNext>0)*/
|
||||||
|
|
||||||
|
return AR_COStream;
|
||||||
|
}
|
||||||
|
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -257,6 +257,29 @@ namespace ZNsMain
|
|||||||
cout<<"************************************"<<endl;
|
cout<<"************************************"<<endl;
|
||||||
|
|
||||||
|
|
||||||
|
typedef ZtCObjtInitChain
|
||||||
|
<
|
||||||
|
char , ZCInitZero, ZtCObjtInitChain<
|
||||||
|
string, ZCEmpty , ZtCObjtInitChain<
|
||||||
|
double, ZCInitZero, ZtCObjtInitChain<
|
||||||
|
int , ZCInitZero,
|
||||||
|
ZCEmpty> > >
|
||||||
|
> ZCObjtInitChain; ZCObjtInitChain VO_ZCObjtInitChain;
|
||||||
|
|
||||||
|
cout<<"# VO_ZCObjtInitChain : use cout"<<endl;
|
||||||
|
cout<<VO_ZCObjtInitChain<<endl;
|
||||||
|
cout<<"************************************"<<endl;
|
||||||
|
|
||||||
|
*VO_ZCObjtInitChain.GetChainByNo<0>()='A';
|
||||||
|
*VO_ZCObjtInitChain.GetChainByNo<1>()=string("ABC");
|
||||||
|
*VO_ZCObjtInitChain.GetChainByNo<2>()=1.2;
|
||||||
|
*VO_ZCObjtInitChain.GetChainByNo<3>()=999;
|
||||||
|
|
||||||
|
cout<<"# VO_ZCObjtInitChain : use IterElement & ZCPrint()"<<endl;
|
||||||
|
VO_ZCObjtInitChain.IterElement(ZCPrint()); cout<<endl;
|
||||||
|
cout<<"************************************"<<endl;
|
||||||
|
|
||||||
|
|
||||||
typedef ZtCDataRing<std::string> ZCDataRing;
|
typedef ZtCDataRing<std::string> ZCDataRing;
|
||||||
|
|
||||||
ZCDataRing VO_CDataRing = string("123");
|
ZCDataRing VO_CDataRing = string("123");
|
||||||
@ -280,10 +303,10 @@ namespace ZNsMain
|
|||||||
VO_CDataRing.IterThisRev(&ZftPrint<string>); cout<<endl;
|
VO_CDataRing.IterThisRev(&ZftPrint<string>); cout<<endl;
|
||||||
cout<<"************************************"<<endl;
|
cout<<"************************************"<<endl;
|
||||||
cout<<"# VO_CDataRing IterThisRev(HelpType char(',')) = "<<endl;
|
cout<<"# VO_CDataRing IterThisRev(HelpType char(',')) = "<<endl;
|
||||||
VO_CDataRing.IterThisRev(&ZftPrint<string, char>, char(',')); cout<<endl;
|
VO_CDataRing.IterThisRev(&ZftPrint2<string, char>, char(',')); cout<<endl;
|
||||||
cout<<"************************************"<<endl;
|
cout<<"************************************"<<endl;
|
||||||
cout<<"# VO_CDataRing IterTail(HelpType char(',')) = "<<endl;
|
cout<<"# VO_CDataRing IterTail(HelpType char(',')) = "<<endl;
|
||||||
VO_CDataRing.IterTail (&ZftPrint<string, char>, char(',')); cout<<endl;
|
VO_CDataRing.IterTail (&ZftPrint2<string, char>, char(',')); cout<<endl;
|
||||||
cout<<"************************************"<<endl;
|
cout<<"************************************"<<endl;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user