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

View File

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