commit 2025-08-31 01:34 refine class ZtCMoveObj in ZCppMain/ZtCStringEx.H

This commit is contained in:
2025-08-31 13:35:05 +09:00
parent a57179f7bb
commit b5a6a5c944
4 changed files with 501 additions and 271 deletions

View File

@ -29,23 +29,26 @@ namespace ZNsMain
template<typename TypeObjList> class ZtCSortObjList;
template< typename TType ,
typename TTypCArg =const TType&,
typename TTypCAlloc=ZCAllocator ,
typename TTypCInit =ZCInit ,
typename TTypSize =ZTypLong
template< typename TType ,
typename TTypCArg = const TType&,
typename TTypCAlloc = ZCAllocator ,
typename TTypCInit = ZCInit ,
typename TTypSize = ZTypLong ,
typename TMoveObj = ZNsMain::
ZtCMoveObj<TType, TTypCArg, true>
>
class ZtCObjList ////////////////////////////
class ZtCObjList //////////////////////////////
{
public:
template<typename TypeObjList> friend class ZtCSortObjList;
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 TTypCArg TypeArg ;
typedef TTypCAlloc TypeAlloc ;
//typedef TTypCInit TypeInit ;
typedef TTypSize TypeSize ;
typedef TMoveObj TypeMoveObj;
public:
class ZCIterator;
class ZCLink ;
@ -61,7 +64,7 @@ namespace ZNsMain
template<typename TypeObjList> friend class ZtCSortObjList;
/*##########################*/ friend class ZtCObjList ;
private:
TypeData mo_Type ;
TypeData mo_Data ;
ZCLink* mp_NextLink;
ZCLink* mp_PrevLink;
private:
@ -85,34 +88,42 @@ namespace ZNsMain
ZCLink()
{
mp_NextLink=0;
mp_PrevLink=0;
mp_NextLink =0 ;
mp_PrevLink =0 ;
}/*
ZCLink()*/
ZCLink(TypeArg AR_Type):mo_Type(AR_Type)
ZCLink(TypeArg AR_Type)
{
mp_NextLink=0;
mp_PrevLink=0;
mp_NextLink = 0 ;
mp_PrevLink = 0 ;
mo_Data = AR_Type ;
}/*
ZCLink(TypeArg AR_Type)*/
ZCLink(const ZCLink& rhs):mo_Type(rhs.mo_Type)
ZCLink(const ZCLink& rhs)
{
mp_NextLink=0;
mp_PrevLink=0;
mp_NextLink =0 ;
mp_PrevLink =0 ;
mo_Data = rhs.mo_Data ;
}/*
ZCLink(const ZCLink& rhs)*/
ZCLink& operator=(const ZCLink& rhs)
{
mo_Data = rhs.mo_Data; return *this;
}/*
ZCLink& operator=(const ZCLink& rhs)*/
operator Type& (){return mo_Type;}
operator Type (){return mo_Type;}
Type& GetData (){return mo_Type;}
Type& operator*(){return mo_Type;}
operator const Type& () const{return mo_Type;}
const Type& GetData () const{return mo_Type;}
const Type& operator*() const{return mo_Type;}
operator Type& (){return mo_Data;}
operator Type (){return mo_Data;}
Type& GetData (){return mo_Data;}
Type& operator*(){return mo_Data;}
operator const Type& () const{return mo_Data;}
const Type& GetData () const{return mo_Data;}
const Type& operator*() const{return mo_Data;}
ZCLink* GetNextPrevPtr(TypeSize AL_FarNum) // AL_FarNum 은 0 이거나 음수일 수 있다.
@ -617,7 +628,7 @@ namespace ZNsMain
if(AL_FarNum>0)
{
APR_HeadLink=
APR_HeadLink =
new ZCLink(AP_CopyLink->GetData());
ZCLink* VP_TempLink=APR_HeadLink;
@ -1136,6 +1147,18 @@ namespace ZNsMain
ZtCObjList& AddHead(TypeArg AR_Type)
{
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
ZCLink* VP_NewNode = new ZCLink;
TypeMoveObj::Exec(VP_NewNode->mo_Data, AR_Type);
JoinAfter(VP_NewNode, 0, 0); return *this;
}
////////////////////////////////////////////////////
#endif
JoinAfter(new ZCLink(AR_Type), 0, 0); return *this;
}/*
ZtCObjList& AddHead(TypeArg AR_Type)*/
@ -1153,6 +1176,18 @@ namespace ZNsMain
ZtCObjList& AddTail(TypeArg AR_Type)
{
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
ZCLink* VP_NewNode = new ZCLink;
TypeMoveObj::Exec(VP_NewNode->mo_Data, AR_Type);
JoinAfter(VP_NewNode, GetTailLinkPtr(), 0); return *this;
}
////////////////////////////////////////////////////
#endif
JoinAfter(new ZCLink(AR_Type), GetTailLinkPtr(), ml_Size); return *this;
}/*
ZtCObjList& AddTail(TypeArg AR_Type)*/
@ -1517,7 +1552,7 @@ namespace ZNsMain
__for0(TypeSize, i, ml_Size)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)(VP_LoopLink->mo_Type);
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)(VP_LoopLink->mo_Data);
/* 위 코드로 인해서, AO_Functor 이 함수일 때 뿐이 아니라, operator()
연산자를 가진 object 포인터일 때도 사용할 수 있게 되었다. */
@ -1561,7 +1596,7 @@ namespace ZNsMain
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_Type, ZCCheckRef::PassData(AO_TypeHelp)
VP_LoopLink->mo_Data, ZCCheckRef::PassData(AO_TypeHelp)
);
////////////////////////////////////////////
@ -1618,7 +1653,7 @@ namespace ZNsMain
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_Type
VP_LoopLink->mo_Data
, ZCCheckRef1::PassData(AO_TypeHelp1)
, ZCCheckRef2::PassData(AO_TypeHelp2)
);
@ -1650,7 +1685,7 @@ namespace ZNsMain
__for0(TypeSize, i, ml_Size)
{
ZtCTypeData<TFunctor>::GetObjRef
(AO_Functor)(VP_LoopLink->mo_Type, AR_TypeHelp);
(AO_Functor)(VP_LoopLink->mo_Data, AR_TypeHelp);
VP_LoopLink = VP_LoopLink->mp_NextLink ;
}/*
@ -1675,7 +1710,7 @@ namespace ZNsMain
__for0(TypeSize, i, ml_Size)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
( VP_LoopLink->mo_Type, AR_TypeHelp1, AR_TypeHelp2 );
( VP_LoopLink->mo_Data, AR_TypeHelp1, AR_TypeHelp2 );
VP_LoopLink = VP_LoopLink->mp_NextLink ;
}/*
@ -2124,13 +2159,15 @@ namespace ZNsMain
public:
};/*
template< typename TType ,
typename TTypCArg =const TType&,
typename TTypCAlloc=ZCAllocator ,
typename TTypCInit =ZCInit ,
typename TTypSize =ZTypLong
template< typename TType ,
typename TTypCArg = const TType&,
typename TTypCAlloc = ZCAllocator ,
typename TTypCInit = ZCInit ,
typename TTypSize = ZTypLong ,
typename TMoveObj = ZNsMain::
ZtCMoveObj<TType, TTypArg, true>
>
class ZtCObjList //////////////////////////*/
class ZtCObjList ////////////////////////////*/
/*/////////////////////////////////////////////////////////////////////////////