commit 2025-10-20 13:03 ZtCTypeSelfLink => ZtCTypeDataRiing, add ZtCTypeDataRingS : ZCppMain/ZMainHead.H
This commit is contained in:
@ -4204,7 +4204,7 @@ namespace ZNsMain
|
||||
|
||||
public:
|
||||
};/*
|
||||
template /*##########################################################
|
||||
template ############################################################
|
||||
<
|
||||
typename TTypData, typename TCMiniValChain
|
||||
>
|
||||
@ -4217,7 +4217,7 @@ namespace ZNsMain
|
||||
|
||||
template
|
||||
< typename TTypData, typename TTypSize=ZTypLength >
|
||||
class ZtCTypeSelfLink
|
||||
class ZtCTypeDataRing
|
||||
{
|
||||
public:
|
||||
enum{ZEUseIteHead=1};
|
||||
@ -4303,7 +4303,92 @@ namespace ZNsMain
|
||||
};/*
|
||||
template
|
||||
< typename TTypData, typename TTypSize=ZTypLength >
|
||||
class ZtCTypeSelfLink */
|
||||
class ZtCTypeDataRing */
|
||||
|
||||
|
||||
template
|
||||
< typename TTypData, typename TTypSize=ZTypLength >
|
||||
class ZtCTypeDataRingS // single, 단방향.
|
||||
{
|
||||
public:
|
||||
enum{ZEUseIteHead=1};
|
||||
enum{ZEUseIteTail=0};
|
||||
public:
|
||||
class ZCDataLink ;
|
||||
public:
|
||||
typedef TTypData TypeData ;
|
||||
typedef ZCDataLink TypeLink ;
|
||||
typedef TTypSize TypeSize ;
|
||||
|
||||
typedef const TypeData TypeDataC;
|
||||
typedef const TypeLink TypeLinkC;
|
||||
public:
|
||||
|
||||
class ZCDataLink : public TypeData
|
||||
{
|
||||
protected:
|
||||
TypeLink* mp_NextLink;
|
||||
protected:
|
||||
/* alwayse mp_NextLink!=0 && mp_PrevLink!=0 */
|
||||
protected:
|
||||
static void JoinLink(TypeLink* AP_PrevLink, TypeLink* AP_NextLink)
|
||||
{
|
||||
AP_PrevLink->mp_NextLink=AP_NextLink;
|
||||
}/*
|
||||
static void JoinLink(TypeLink* AP_PrevLink, TypeLink* AP_NextLink)*/
|
||||
static void MakeRing(TypeLink* AP_HeadLink, TypeLink* AP_TailLink)
|
||||
{
|
||||
AP_TailLink->mp_NextLink=AP_HeadLink;
|
||||
}/*
|
||||
static void MakeRing(TypeLink* AP_HeadLink, TypeLink* AP_TailLink)*/
|
||||
public :
|
||||
TypeData & operator * () {return static_cast<TypeData &>(*this);}
|
||||
TypeData & operator() () {return static_cast<TypeData &>(*this);}
|
||||
operator TypeData & () {return static_cast<TypeData &>(*this);}
|
||||
|
||||
TypeDataC& operator * () const{return static_cast<TypeDataC&>(*this);}
|
||||
TypeDataC& operator() () const{return static_cast<TypeDataC&>(*this);}
|
||||
operator TypeDataC& () const{return static_cast<TypeDataC&>(*this);}
|
||||
|
||||
TypeData & GetData () {return static_cast<TypeData &>(*this);}
|
||||
TypeDataC& GetData () const{return static_cast<TypeDataC&>(*this);}
|
||||
|
||||
TypeLink & GetNext () {return *mp_NextLink;}
|
||||
TypeLinkC& GetNext () const{return *mp_NextLink;}
|
||||
|
||||
public :
|
||||
ZCDataLink()
|
||||
{
|
||||
mp_NextLink = 0 ;
|
||||
}/*
|
||||
ZCDataLink()*/
|
||||
ZCDataLink(TypeLinkC& rhs)
|
||||
{
|
||||
mp_NextLink = 0 ; GetData() = rhs.GetData() ;
|
||||
}/*
|
||||
ZCDataLink(TypeLinkC& rhs)*/
|
||||
ZCDataLink(TypeDataC& AR_Data)
|
||||
{
|
||||
mp_NextLink = 0 ; GetData() = AR_Data ;
|
||||
}/*
|
||||
ZCDataLink(TypeDataC& AR_Data)*/
|
||||
|
||||
TypeLink& operator=(TypeLinkC& rhs)
|
||||
{ GetData() = rhs.GetData(); return *this; }
|
||||
TypeLink& operator=(TypeData & rhs)
|
||||
{ GetData() = rhs ; return *this; }
|
||||
TypeLink& operator=(TypeDataC& rhs)
|
||||
{ GetData() = rhs ; return *this; }
|
||||
|
||||
public :
|
||||
};/*
|
||||
class ZCDataLink : public TypeData*/
|
||||
|
||||
public:
|
||||
};/*
|
||||
template
|
||||
< typename TTypData, typename TTypSize=ZTypLength >
|
||||
class ZtCTypeDataRingS */
|
||||
|
||||
}/*
|
||||
namespace ZNsType*/
|
||||
@ -4313,14 +4398,15 @@ namespace ZNsMain
|
||||
template ////////////////////////////////////////////////////////////////
|
||||
<
|
||||
typename TDataNow, typename TTypeSelfLink =
|
||||
ZNsType::ZtCTypeSelfLink<TDataNow>
|
||||
ZNsType::ZtCTypeDataRing <TDataNow>
|
||||
//ZNsType::ZtCTypeDataRingS<TDataNow>
|
||||
>
|
||||
class ZCtDataRing : /*#################################################*/
|
||||
class ZtCDataRing : /*#################################################*/
|
||||
public TTypeSelfLink::TypeLink
|
||||
{
|
||||
public :
|
||||
typedef TTypeSelfLink TypeSelf ;
|
||||
typedef ZCtDataRing TypeThis ;
|
||||
typedef ZtCDataRing TypeThis ;
|
||||
typedef TDataNow TypeData ;
|
||||
public :
|
||||
typedef typename TTypeSelfLink::TypeLink TypeLink;
|
||||
@ -4343,7 +4429,7 @@ namespace ZNsMain
|
||||
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
|
||||
public :
|
||||
|
||||
ZCtDataRing()
|
||||
ZtCDataRing()
|
||||
{
|
||||
mp_HeadLink=this;
|
||||
mp_TailLink=this;
|
||||
@ -4352,20 +4438,20 @@ namespace ZNsMain
|
||||
|
||||
MakeRing(mp_HeadLink, mp_TailLink);
|
||||
}/*
|
||||
ZCtDataRing()*/
|
||||
ZtCDataRing()*/
|
||||
|
||||
/*#######################################################################
|
||||
|
||||
ZCtDataRing(const ZCtDataRing& rhs) : ZCtDataRing()
|
||||
ZtCDataRing(const ZtCDataRing& rhs) : ZtCDataRing()
|
||||
{ this->GetData() = rhs.GetData() ; }
|
||||
ZCtDataRing(const TypeLink & rhs) : ZCtDataRing()
|
||||
ZtCDataRing(const TypeLink & rhs) : ZtCDataRing()
|
||||
{ this->GetData() = rhs.GetData() ; }
|
||||
ZCtDataRing(const TypeData & rhs) : ZCtDataRing()
|
||||
ZtCDataRing(const TypeData & rhs) : ZtCDataRing()
|
||||
{ this->GetData() = rhs ; }
|
||||
|
||||
../ZCppMain/ZMainHead.H: In copy constructor ‘ZNsMain::ZCtDataRing<TDataNow, TTypeSelfLink>::ZCtDataRing(const ZNsMain::ZCtDataRing<TDataNow, TTypeSelfLink>&)’:
|
||||
../ZCppMain/ZMainHead.H: In copy constructor ‘ZNsMain::ZtCDataRing<TDataNow, TTypeSelfLink>::ZtCDataRing(const ZNsMain::ZtCDataRing<TDataNow, TTypeSelfLink>&)’:
|
||||
../ZCppMain/ZMainHead.H:4242:59: warning: delegating constructors only available with ‘-std=c++11’ or ‘-std=gnu++11’
|
||||
4242 | ZCtDataRing(const ZCtDataRing& rhs) : ZCtDataRing()
|
||||
4242 | ZtCDataRing(const ZtCDataRing& rhs) : ZtCDataRing()
|
||||
|
||||
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ g++ --version
|
||||
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
|
||||
@ -4377,7 +4463,7 @@ namespace ZNsMain
|
||||
|
||||
#######################################################################*/
|
||||
|
||||
ZCtDataRing(const ZCtDataRing& rhs)
|
||||
ZtCDataRing(const ZtCDataRing& rhs)
|
||||
{
|
||||
mp_HeadLink=this;
|
||||
mp_TailLink=this;
|
||||
@ -4387,8 +4473,8 @@ namespace ZNsMain
|
||||
|
||||
this->GetData() = rhs.GetData() ;
|
||||
}/*
|
||||
ZCtDataRing(const ZCtDataRing& rhs)*/
|
||||
ZCtDataRing(const TypeLink & rhs)
|
||||
ZtCDataRing(const ZtCDataRing& rhs)*/
|
||||
ZtCDataRing(const TypeLink & rhs)
|
||||
{
|
||||
mp_HeadLink=this;
|
||||
mp_TailLink=this;
|
||||
@ -4398,8 +4484,8 @@ namespace ZNsMain
|
||||
|
||||
this->GetData() = rhs.GetData() ;
|
||||
}/*
|
||||
ZCtDataRing(const TypeLink & rhs)*/
|
||||
ZCtDataRing(const TypeData & rhs)
|
||||
ZtCDataRing(const TypeLink & rhs)*/
|
||||
ZtCDataRing(const TypeData & rhs)
|
||||
{
|
||||
mp_HeadLink=this;
|
||||
mp_TailLink=this;
|
||||
@ -4409,10 +4495,10 @@ namespace ZNsMain
|
||||
|
||||
this->GetData() = rhs ; /*********/
|
||||
}/*
|
||||
ZCtDataRing(const TypeData & rhs)*/
|
||||
ZtCDataRing(const TypeData & rhs)*/
|
||||
|
||||
|
||||
~ZCtDataRing(){DeleteAll();}
|
||||
~ZtCDataRing(){DeleteAll();}
|
||||
|
||||
|
||||
TypeSize size () const{return ml_LinkSize ;}
|
||||
@ -4685,28 +4771,28 @@ namespace ZNsMain
|
||||
template ////////////////////////////////////////////////////////////////
|
||||
<
|
||||
typename TDataNow, typename TTypeSelfLink =
|
||||
ZNsType::ZtCTypeSelfLink<TDataNow>
|
||||
ZNsType::ZtCTypeDataRing<TDataNow>
|
||||
>
|
||||
class ZCtDataRing : ###################################################*/
|
||||
class ZtCDataRing : ###################################################*/
|
||||
|
||||
|
||||
|
||||
template<typename TDataNow, typename TTypeSelfLink> std::ostream& operator <<
|
||||
(
|
||||
std::ostream& AR_COStream, const ZCtDataRing<TDataNow, TTypeSelfLink>& AR_CDataRing
|
||||
std::ostream& AR_COStream, const ZtCDataRing<TDataNow, TTypeSelfLink>& AR_CDataRing
|
||||
)
|
||||
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||
{
|
||||
/*/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
■ ZCtDataRing~ 앞에 const 를 붙이지 않으면, 비 const ZCtDataRing object 에 대하여, 이
|
||||
■ ZtCDataRing~ 앞에 const 를 붙이지 않으면, 비 const ZtCDataRing object 에 대하여, 이
|
||||
중첩 함수는 호출되지 않는다. 따라서 const 는 아주 중요한 역할을 한다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
AR_COStream<<AR_CDataRing.GetData();
|
||||
|
||||
typedef ZCtDataRing
|
||||
typedef ZtCDataRing
|
||||
<TDataNow, TTypeSelfLink> TypeRing ;
|
||||
typedef typename TypeRing::TypeSize TypeSize ;
|
||||
typedef typename TypeRing::TypeLinkC TypeLinkC;
|
||||
@ -4722,7 +4808,7 @@ namespace ZNsMain
|
||||
}/*
|
||||
template<typename TDataNow, typename TTypeSelfLink> std::ostream& operator <<
|
||||
(
|
||||
std::ostream& AR_COStream, const ZCtDataRing<TDataNow, TTypeSelfLink>& AR_CDataRing
|
||||
std::ostream& AR_COStream, const ZtCDataRing<TDataNow, TTypeSelfLink>& AR_CDataRing
|
||||
)
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|
||||
|
||||
|
@ -186,7 +186,7 @@ namespace ZNsMain
|
||||
cout<<"************************************"<<endl;
|
||||
|
||||
|
||||
typedef ZCtDataRing<std::string> ZCDataRing;
|
||||
typedef ZtCDataRing<std::string> ZCDataRing;
|
||||
|
||||
ZCDataRing VO_CDataRing = string("123");
|
||||
|
||||
@ -216,7 +216,7 @@ namespace ZNsMain
|
||||
cout<<"************************************"<<endl;
|
||||
|
||||
|
||||
typedef ZCtDataRing<ZCTypeView> ZCViewRing;
|
||||
typedef ZtCDataRing<ZCTypeView> ZCViewRing;
|
||||
|
||||
ZCViewRing VO_ZCViewRing;
|
||||
|
||||
|
Reference in New Issue
Block a user