commit 2025-09-09 14:15 add template parameter 'TMoveObj' in ZtCList & ZtCSimList

This commit is contained in:
2025-09-09 14:15:21 +09:00
parent 004c9a9135
commit bf89d8c83e
2 changed files with 99 additions and 135 deletions

View File

@ -660,7 +660,7 @@ namespace ZNsMain
typedef class ZCIterEasy{} IterEasy, *IterEasyID ;
typedef const IterEasyID* IterEasyIDc;
typedef const IterEasyID IterEasyIDc;
/*///////////////////////////////////////////////////////////////////////////////
@ -3959,12 +3959,12 @@ namespace ZNsMain
//////////////////////////////////////////////////////////////////*/
template
<typename TType, typename TTypeArg=const TType&>
<typename TType, typename TTypArgu=const TType&>
class ZtCObjPtr
{
public :
typedef TType TypeData ;
typedef TTypeArg TypeArg ;
typedef TTypArgu TypeArg ;
protected:
TypeData& mr_TypeData;
public :
@ -3983,11 +3983,11 @@ namespace ZNsMain
}/*
ZtCObjPtr& operator=(const ZtCObjPtr& rhs)*/
ZtCObjPtr& operator=(TTypeArg AO_ArguData)
ZtCObjPtr& operator=(TTypArgu AO_ArguData)
{
mr_TypeData = AO_ArguData; return *this;
}/*
ZtCObjPtr& operator=(TTypeArg AO_ArguData)*/
ZtCObjPtr& operator=(TTypArgu AO_ArguData)*/
public :
};/*
@ -4732,21 +4732,24 @@ namespace ZNsMain
template ///////////////////////////////////////////////
<
typename TType ,
typename TTypeArg = const TType&,
typename TTypArgu = const TType&,
typename TTypCAlloc = ZCAllocator ,
typename TTypSize = ZTypLong
typename TTypSize = ZTypLong ,
typename TMoveObj = ZNsMain::
ZtCMoveObj<TType, TTypArgu, true>
>
class ZtCList /*######################################*/
{
public:
class ZCLink;
public:
typedef TType TypeData;
typedef TTypeArg TypeArg ;
typedef TTypCAlloc TypeAlloc;
typedef TTypSize TypeSize;
typedef ZCLink* IterEasy; // 가장 대표적으로 쓰일 수 있는 반복자.
typedef ZCLink* iterator;
typedef TType TypeData ;
typedef TTypArgu TypeArg ;
typedef TTypCAlloc TypeAlloc ;
typedef TTypSize TypeSize ;
typedef TMoveObj TypeMoveObj ;
typedef ZCLink* IterEasy ; // 가장 대표적으로 쓰일 수 있는 반복자.
typedef ZCLink* iterator ;
public:
@ -4932,15 +4935,45 @@ namespace ZNsMain
void DeleteAll()*/
TypeData& AddHead( /*++++++++++++*/ )
{ return AddHeadLink(new ZCLink )->mo_Data; }
TypeData& AddHead(TypeArg AO_ArgData)
{ return AddHeadLink(new ZCLink(AO_ArgData))->mo_Data; }
TypeData& AddHead()
{ return AddHeadLink(new ZCLink)->mo_Data; }
TypeData& AddTail()
{ return AddTailLink(new ZCLink)->mo_Data; }
TypeData& AddTail( /*++++++++++++*/ )
{ return AddTailLink(new ZCLink )->mo_Data; }
TypeData& AddTail(TypeArg AO_ArgData)
{ return AddTailLink(new ZCLink(AO_ArgData))->mo_Data; }
TypeData& AddHead(TypeArg AO_ArgData) /*########################*/
{
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
ZCLink* VP_NewNode = new ZCLink(AO_ArgData);
TypeMoveObj::Exec(VP_NewNode->mo_Data, AO_ArgData);
return AddHeadLink(VP_NewNode)->mo_Data;
}
////////////////////////////////////////////////////
#endif
return AddHeadLink(new ZCLink(AO_ArgData))->mo_Data;
}/*
TypeData& AddHead(TypeArg AO_ArgData) ##########################*/
TypeData& AddTail(TypeArg AO_ArgData) /*########################*/
{
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
ZCLink* VP_NewNode = new ZCLink(AO_ArgData);
TypeMoveObj::Exec(VP_NewNode->mo_Data, AO_ArgData);
return AddTailLink(VP_NewNode)->mo_Data;
}
////////////////////////////////////////////////////
#endif
return AddTailLink(new ZCLink(AO_ArgData))->mo_Data;
}/*
TypeData& AddTail(TypeArg AO_ArgData) ##########################*/
void DeleteHead()
@ -5212,9 +5245,11 @@ namespace ZNsMain
template ///////////////////////////////////////////////
<
typename TType ,
typename TTypeArg = const TType&,
typename TTypArgu = const TType&,
typename TTypCAlloc = ZCAllocator ,
typename TTypSize = ZTypLong
typename TTypSize = ZTypLong ,
typename TMoveObj = ZNsMain::
ZtCMoveObj<TType, TTypArgu, true>
>
class ZtCList /*######################################*/

View File

@ -16,20 +16,23 @@ namespace ZNsMain
template /*#######################################*/
<
typename TType ,
typename TTypCArg =const TType&,
typename TTypArgu =const TType&,
typename TTypCAlloc=ZCAllocator ,
typename TTypCInit =ZCInit ,
typename TTypSize =ZTypLong
typename TTypSize =ZTypLong ,
typename TMoveObj = ZNsMain::
ZtCMoveObj<TType, TTypArgu, true>
>
class ZtCSimList /*###############################*/
{
public:
typedef TType Type ;
typedef TType TypeData ;
typedef TTypCArg TypeArg ;
typedef TTypCAlloc TypeAlloc;
typedef TTypCInit TypeInit ;
typedef TTypSize TypeSize ;
typedef TType Type ;
typedef TType TypeData ;
typedef TTypArgu TypeArg ;
typedef TTypCAlloc TypeAlloc ;
typedef TTypCInit TypeInit ;
typedef TTypSize TypeSize ;
typedef TMoveObj TypeMoveObj;
public:
@ -1219,7 +1222,15 @@ namespace ZNsMain
void AddHead(TypeArg AR_Type)
{
ZCLink* VP_AddLink = GetCLinkHeap().GetOneLink() ;
VP_AddLink->mo_Type= AR_Type ;
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
TypeMoveObj::Exec(VP_AddLink->mo_Type, AR_Type);
}
else ///////////////////////////////////////////////
#endif
VP_AddLink->mo_Type= AR_Type ;
if(++ml_Size==1) // ml_Size==0
{
@ -1259,7 +1270,15 @@ namespace ZNsMain
void AddTail(TypeArg AR_Type)
{
ZCLink* VP_AddLink = GetCLinkHeap().GetOneLink();
VP_AddLink->mo_Type= AR_Type ;
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
TypeMoveObj::Exec(VP_AddLink->mo_Type, AR_Type);
}
else ///////////////////////////////////////////////
#endif
VP_AddLink->mo_Type= AR_Type ;
if(++ml_Size==1) // ml_Size==0
{
@ -2299,109 +2318,19 @@ namespace ZNsMain
}/*
const TType& ItD(const IterEasyID APPI_IterEasyID) const*/
/*
public:*/
public:
};/*
class ZtCSimList*/
////////////////////////////////////////////////////////////
/****************** end class ZtCSimList ******************/
////////////////////////////////////////////////////////////
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamSimList
{
public:
class CHelpObj
{
public:
CHelpObj()
{
}
CHelpObj(const CHelpObj& rhs)
{
cout<<"* CHelpObj(const CHelpObj& rhs)"<<endl;
}
public:
};
struct StFunctor
{
static void ShowElement(int ArgiValue){cout<<"#1 Value="<<ArgiValue<<endl;}
};
struct StFunctor2
{
static void ShowElement(int ArgiValue, CHelpObj)
{cout<<"#2 Value="<<ArgiValue<<", CHelpObj Addr=None"<<" With CHelpObj"<<endl;}
};
struct StFunctor3
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#3 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref"<<endl;}
};
struct StFunctor4
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#4 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj in Ptr"<<endl;}
};
struct StFunctor5
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj& AR_CHelpObj2)
{cout<<"#5 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref 2"<<endl;}
};
struct StFunctor6
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj AO_CHelpObj2)
{cout<<"#6 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Half Ref"<<endl;}
};
static int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)
{
using namespace std ;
using namespace ZNsMain;
typedef ZtCSimList<int> CObjList;
CHelpObj VO_CHelpObj;
CObjList VO_CObjList;
VO_CObjList.AddTail(10);
VO_CObjList.AddTail(20);
VO_CObjList.AddTail(30);
VO_CObjList.AddTail(40);
cout<<endl<<"#### Show CSimList Element ####"<<endl<<endl;
VO_CObjList.IterElement(StFunctor ::ShowElement);
VO_CObjList.IterElement(StFunctor2::ShowElement, VO_CHelpObj );
VO_CObjList.IterElement(StFunctor3::ShowElement, ZftMCR(VO_CHelpObj) );
VO_CObjList.IterElement(StFunctor4::ShowElement, ZftMCP(VO_CHelpObj) );
VO_CObjList.IterElement(StFunctor5::ShowElement, ZftMCP(VO_CHelpObj), ZftMCP(VO_CHelpObj) );
VO_CObjList.IterElement(StFunctor6::ShowElement, ZftMCP(VO_CHelpObj), VO_CHelpObj );
return 0;
}/*
static int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamSimList*/
}/*
namespace ZNsExam*/
template ###########################################
<
typename TType ,
typename TTypArgu =const TType&,
typename TTypCAlloc=ZCAllocator ,
typename TTypCInit =ZCInit ,
typename TTypSize =ZTypLong ,
typename TMoveObj = ZNsMain::
ZtCMoveObj<TType, TTypArgu, true>
>
class ZtCSimList #################################*/
}/*
namespace ZNsMain*/