commit 2025-10-20 13:03 ZtCTypeSelfLink => ZtCTypeDataRiing, add ZtCTypeDataRingS : ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-20 13:03:55 +09:00
parent 882e4f6278
commit f45137e8f3
2 changed files with 114 additions and 28 deletions

View File

@ -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
)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/

View File

@ -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;