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:
|
public:
|
||||||
};/*
|
};/*
|
||||||
template /*##########################################################
|
template ############################################################
|
||||||
<
|
<
|
||||||
typename TTypData, typename TCMiniValChain
|
typename TTypData, typename TCMiniValChain
|
||||||
>
|
>
|
||||||
@ -4217,7 +4217,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
template
|
template
|
||||||
< typename TTypData, typename TTypSize=ZTypLength >
|
< typename TTypData, typename TTypSize=ZTypLength >
|
||||||
class ZtCTypeSelfLink
|
class ZtCTypeDataRing
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum{ZEUseIteHead=1};
|
enum{ZEUseIteHead=1};
|
||||||
@ -4303,7 +4303,92 @@ namespace ZNsMain
|
|||||||
};/*
|
};/*
|
||||||
template
|
template
|
||||||
< typename TTypData, typename TTypSize=ZTypLength >
|
< 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*/
|
namespace ZNsType*/
|
||||||
@ -4313,14 +4398,15 @@ namespace ZNsMain
|
|||||||
template ////////////////////////////////////////////////////////////////
|
template ////////////////////////////////////////////////////////////////
|
||||||
<
|
<
|
||||||
typename TDataNow, typename TTypeSelfLink =
|
typename TDataNow, typename TTypeSelfLink =
|
||||||
ZNsType::ZtCTypeSelfLink<TDataNow>
|
ZNsType::ZtCTypeDataRing <TDataNow>
|
||||||
|
//ZNsType::ZtCTypeDataRingS<TDataNow>
|
||||||
>
|
>
|
||||||
class ZCtDataRing : /*#################################################*/
|
class ZtCDataRing : /*#################################################*/
|
||||||
public TTypeSelfLink::TypeLink
|
public TTypeSelfLink::TypeLink
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
typedef TTypeSelfLink TypeSelf ;
|
typedef TTypeSelfLink TypeSelf ;
|
||||||
typedef ZCtDataRing TypeThis ;
|
typedef ZtCDataRing TypeThis ;
|
||||||
typedef TDataNow TypeData ;
|
typedef TDataNow TypeData ;
|
||||||
public :
|
public :
|
||||||
typedef typename TTypeSelfLink::TypeLink TypeLink;
|
typedef typename TTypeSelfLink::TypeLink TypeLink;
|
||||||
@ -4343,7 +4429,7 @@ namespace ZNsMain
|
|||||||
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
|
||||||
public :
|
public :
|
||||||
|
|
||||||
ZCtDataRing()
|
ZtCDataRing()
|
||||||
{
|
{
|
||||||
mp_HeadLink=this;
|
mp_HeadLink=this;
|
||||||
mp_TailLink=this;
|
mp_TailLink=this;
|
||||||
@ -4352,20 +4438,20 @@ namespace ZNsMain
|
|||||||
|
|
||||||
MakeRing(mp_HeadLink, mp_TailLink);
|
MakeRing(mp_HeadLink, mp_TailLink);
|
||||||
}/*
|
}/*
|
||||||
ZCtDataRing()*/
|
ZtCDataRing()*/
|
||||||
|
|
||||||
/*#######################################################################
|
/*#######################################################################
|
||||||
|
|
||||||
ZCtDataRing(const ZCtDataRing& rhs) : ZCtDataRing()
|
ZtCDataRing(const ZtCDataRing& rhs) : ZtCDataRing()
|
||||||
{ this->GetData() = rhs.GetData() ; }
|
{ this->GetData() = rhs.GetData() ; }
|
||||||
ZCtDataRing(const TypeLink & rhs) : ZCtDataRing()
|
ZtCDataRing(const TypeLink & rhs) : ZtCDataRing()
|
||||||
{ this->GetData() = rhs.GetData() ; }
|
{ this->GetData() = rhs.GetData() ; }
|
||||||
ZCtDataRing(const TypeData & rhs) : ZCtDataRing()
|
ZtCDataRing(const TypeData & rhs) : ZtCDataRing()
|
||||||
{ this->GetData() = rhs ; }
|
{ 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’
|
../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
|
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ g++ --version
|
||||||
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
|
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_HeadLink=this;
|
||||||
mp_TailLink=this;
|
mp_TailLink=this;
|
||||||
@ -4387,8 +4473,8 @@ namespace ZNsMain
|
|||||||
|
|
||||||
this->GetData() = rhs.GetData() ;
|
this->GetData() = rhs.GetData() ;
|
||||||
}/*
|
}/*
|
||||||
ZCtDataRing(const ZCtDataRing& rhs)*/
|
ZtCDataRing(const ZtCDataRing& rhs)*/
|
||||||
ZCtDataRing(const TypeLink & rhs)
|
ZtCDataRing(const TypeLink & rhs)
|
||||||
{
|
{
|
||||||
mp_HeadLink=this;
|
mp_HeadLink=this;
|
||||||
mp_TailLink=this;
|
mp_TailLink=this;
|
||||||
@ -4398,8 +4484,8 @@ namespace ZNsMain
|
|||||||
|
|
||||||
this->GetData() = rhs.GetData() ;
|
this->GetData() = rhs.GetData() ;
|
||||||
}/*
|
}/*
|
||||||
ZCtDataRing(const TypeLink & rhs)*/
|
ZtCDataRing(const TypeLink & rhs)*/
|
||||||
ZCtDataRing(const TypeData & rhs)
|
ZtCDataRing(const TypeData & rhs)
|
||||||
{
|
{
|
||||||
mp_HeadLink=this;
|
mp_HeadLink=this;
|
||||||
mp_TailLink=this;
|
mp_TailLink=this;
|
||||||
@ -4409,10 +4495,10 @@ namespace ZNsMain
|
|||||||
|
|
||||||
this->GetData() = rhs ; /*********/
|
this->GetData() = rhs ; /*********/
|
||||||
}/*
|
}/*
|
||||||
ZCtDataRing(const TypeData & rhs)*/
|
ZtCDataRing(const TypeData & rhs)*/
|
||||||
|
|
||||||
|
|
||||||
~ZCtDataRing(){DeleteAll();}
|
~ZtCDataRing(){DeleteAll();}
|
||||||
|
|
||||||
|
|
||||||
TypeSize size () const{return ml_LinkSize ;}
|
TypeSize size () const{return ml_LinkSize ;}
|
||||||
@ -4685,28 +4771,28 @@ namespace ZNsMain
|
|||||||
template ////////////////////////////////////////////////////////////////
|
template ////////////////////////////////////////////////////////////////
|
||||||
<
|
<
|
||||||
typename TDataNow, typename TTypeSelfLink =
|
typename TDataNow, typename TTypeSelfLink =
|
||||||
ZNsType::ZtCTypeSelfLink<TDataNow>
|
ZNsType::ZtCTypeDataRing<TDataNow>
|
||||||
>
|
>
|
||||||
class ZCtDataRing : ###################################################*/
|
class ZtCDataRing : ###################################################*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename TDataNow, typename TTypeSelfLink> std::ostream& operator <<
|
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 는 아주 중요한 역할을 한다.
|
중첩 함수는 호출되지 않는다. 따라서 const 는 아주 중요한 역할을 한다.
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////*/
|
/////////////////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
AR_COStream<<AR_CDataRing.GetData();
|
AR_COStream<<AR_CDataRing.GetData();
|
||||||
|
|
||||||
typedef ZCtDataRing
|
typedef ZtCDataRing
|
||||||
<TDataNow, TTypeSelfLink> TypeRing ;
|
<TDataNow, TTypeSelfLink> TypeRing ;
|
||||||
typedef typename TypeRing::TypeSize TypeSize ;
|
typedef typename TypeRing::TypeSize TypeSize ;
|
||||||
typedef typename TypeRing::TypeLinkC TypeLinkC;
|
typedef typename TypeRing::TypeLinkC TypeLinkC;
|
||||||
@ -4722,7 +4808,7 @@ namespace ZNsMain
|
|||||||
}/*
|
}/*
|
||||||
template<typename TDataNow, typename TTypeSelfLink> std::ostream& operator <<
|
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;
|
cout<<"************************************"<<endl;
|
||||||
|
|
||||||
|
|
||||||
typedef ZCtDataRing<std::string> ZCDataRing;
|
typedef ZtCDataRing<std::string> ZCDataRing;
|
||||||
|
|
||||||
ZCDataRing VO_CDataRing = string("123");
|
ZCDataRing VO_CDataRing = string("123");
|
||||||
|
|
||||||
@ -216,7 +216,7 @@ namespace ZNsMain
|
|||||||
cout<<"************************************"<<endl;
|
cout<<"************************************"<<endl;
|
||||||
|
|
||||||
|
|
||||||
typedef ZCtDataRing<ZCTypeView> ZCViewRing;
|
typedef ZtCDataRing<ZCTypeView> ZCViewRing;
|
||||||
|
|
||||||
ZCViewRing VO_ZCViewRing;
|
ZCViewRing VO_ZCViewRing;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user