commit 2025-09-11 12:36 edit codes for ZtCInit<> in ZCppMain/ZtSimList.H etc

This commit is contained in:
2025-09-11 12:37:05 +09:00
parent 5ced8624e6
commit 0c07b0e497
5 changed files with 222 additions and 145 deletions

View File

@ -15,11 +15,11 @@ namespace ZNsMain
template /*#######################################*/
<
typename TType ,
typename TTypArgu =const TType&,
typename TTypCAlloc=ZCAllocator ,
typename TTypCInit =ZCInit ,
typename TTypSize =ZTypLong ,
typename TType ,
typename TTypArgu = const TType& ,
typename TTypCAlloc= ZCAllocator ,
typename TTypCInit = ZtCInit<TType> ,
typename TTypSize = ZTypLong ,
typename TMoveObj = ZNsMain::
ZtCMoveObj<TType, TTypArgu, true>
>
@ -54,7 +54,7 @@ namespace ZNsMain
private:
ZCLink* mp_NextLink;
TType mo_Type ;
TType mo_Data ;
private:
@ -89,62 +89,62 @@ namespace ZNsMain
{
// TType 의 대입연산자는 반드시 public 영역에 있어야 한다.
mo_Type=rhs.mo_Type;
mo_Data=rhs.mo_Data;
}/*
ZCLink(const ZCLink& rhs)*/
ZCLink(TypeArg AR_Type):mp_NextLink(0)
{
mo_Type=AR_Type;
mo_Data=AR_Type;
}/*
ZCLink(TypeArg AR_Type)*/
operator TType&()
{
return mo_Type;
return mo_Data;
}/*
operator TType&()*/
operator TType()
{
return mo_Type;
return mo_Data;
}/*
operator TType()*/
TType& GetData()
{
return mo_Type;
return mo_Data;
}/*
TType& GetData()*/
const TType& GetData() const
{
return mo_Type;
return mo_Data;
}/*
const TType& GetData() const*/
TType& GetData(TTypSize AL_FarNum) // must AL_FarNum >= 0
{
return GetNextPtr(AL_FarNum)->mo_Type;
return GetNextPtr(AL_FarNum)->mo_Data;
}/*
TType& GetData(TTypSize AL_FarNum)*/
const TType& GetData(TTypSize AL_FarNum) const
{
return GetNextPtr(AL_FarNum)->mo_Type;
return GetNextPtr(AL_FarNum)->mo_Data;
}/*
const TType& GetData(TTypSize AL_FarNum) const*/
TType& operator*()
{
return mo_Type;
return mo_Data;
}/*
TType& operator*()*/
const TType& operator*() const
{
return mo_Type;
return mo_Data;
}/*
const TType& operator*() const*/
@ -199,7 +199,7 @@ namespace ZNsMain
ZCLink& operator=(TypeArg AR_Type)
{
mo_Type=AR_Type; return *this;
mo_Data=AR_Type; return *this;
}/*
ZCLink& operator=(TypeArg AR_Type)*/
@ -222,11 +222,11 @@ namespace ZNsMain
class ZCLink*/
/////////////////////////////////////////////////
//////////////////////////////////////////////////
/*************** end class ZCLink ***************/
/////////////////////////////////////////////////
//////////////////////////////////////////////////
class ZCLinkHeap : public ZCFreeAllocBase
@ -242,8 +242,6 @@ namespace ZNsMain
private:
TypeInit mo_TypeInit;
TTypSize ml_AllSize ;
TTypSize ml_UseSize ;
@ -264,8 +262,16 @@ namespace ZNsMain
#endif //_DEBUG
if(ml_UseSize==0)
return (++ml_AllSize, new ZCLink) ;
/////////////////
{
ZCLink* VP_TempLink = new ZCLink ;
if(TypeInit::EUseInit>0)
TypeInit::OnInit(VP_TempLink->mo_Data, *this);
return (++ml_AllSize, VP_TempLink);
}/*
if(ml_UseSize==0)*/
ZCLink* VP_TempLink=mp_NoUseHeadLink;
@ -305,11 +311,12 @@ namespace ZNsMain
}
else if(AL_LinkSize==ml_UseSize)
{
ZCLink* VP_Temp=mp_NoUseHeadLink;
ZCLink* VP_Temp = mp_NoUseHeadLink;
while(true)
{
mo_TypeInit(VP_Temp->mo_Type);
if(TypeInit::EUseInit>0)
TypeInit::OnInit(VP_Temp->mo_Data, *this);
if(VP_Temp==mp_NoUseTailLink)
{ break; }
@ -328,17 +335,20 @@ namespace ZNsMain
}
else if(AL_LinkSize<ml_UseSize)
{
APR_HeadLink=mp_NoUseHeadLink;
APR_HeadLink = mp_NoUseHeadLink;
mo_TypeInit(mp_NoUseHeadLink->mo_Type);
if(TypeInit::EUseInit>0)
TypeInit::OnInit(mp_NoUseHeadLink->mo_Data, *this);
for(TTypSize VL_Count=2; VL_Count<=AL_LinkSize; ++VL_Count)
{
// VL_Count 가 2 부터 시작함으로 AL_LinkSize-1 번 순환한다.
// 그래야지 AL_LinkSize 개의 링크를 자를 수 있다.
mp_NoUseHeadLink=mp_NoUseHeadLink->mp_NextLink;
mo_TypeInit(mp_NoUseHeadLink->mo_Type);
mp_NoUseHeadLink = mp_NoUseHeadLink->mp_NextLink;
if(TypeInit::EUseInit>0)
TypeInit::OnInit(mp_NoUseHeadLink->mo_Data, *this);
}
//for(TTypSize VL_Count=2; VL_Count<=AL_LinkSize; ++VL_Count)
@ -353,8 +363,6 @@ namespace ZNsMain
while(true)
{
mo_TypeInit(VP_Temp->mo_Type);
if(VP_Temp==mp_NoUseTailLink)
{ break; }
@ -364,6 +372,7 @@ namespace ZNsMain
APR_HeadLink = mp_NoUseHeadLink;
// MakeLink() 에서 TypeInit::OnInit() 가 호출됨.
MakeLink( AL_LinkSize - ml_UseSize ,
mp_NoUseTailLink->mp_NextLink,
APR_TailLink
@ -415,7 +424,7 @@ namespace ZNsMain
{
ml_UseSize -= AL_FarNum+1 ;
mp_NoUseHeadLink->mo_Type = AP_LinkOrgin->mo_Type;
mp_NoUseHeadLink->mo_Data = AP_LinkOrgin->mo_Data;
APR_HeadCopy = mp_NoUseHeadLink ;
while(--AL_FarNum>=0)
@ -423,7 +432,7 @@ namespace ZNsMain
mp_NoUseHeadLink= mp_NoUseHeadLink->mp_NextLink ;
AP_LinkOrgin = AP_LinkOrgin->mp_NextLink ;
mp_NoUseHeadLink->mo_Type = AP_LinkOrgin->mo_Type;
mp_NoUseHeadLink->mo_Data = AP_LinkOrgin->mo_Data;
}
//while(--AL_FarNum>=0)
@ -446,7 +455,7 @@ namespace ZNsMain
}
else // AL_FarNum > ml_UseSize
{
mp_NoUseHeadLink->mo_Type = AP_LinkOrgin->mo_Type ;
mp_NoUseHeadLink->mo_Data = AP_LinkOrgin->mo_Data ;
APR_HeadCopy = mp_NoUseHeadLink ;
while(mp_NoUseHeadLink!=mp_NoUseTailLink)
@ -454,7 +463,7 @@ namespace ZNsMain
mp_NoUseHeadLink=mp_NoUseHeadLink->mp_NextLink;
AP_LinkOrgin =AP_LinkOrgin ->mp_NextLink;
mp_NoUseHeadLink->mo_Type = AP_LinkOrgin->mo_Type;
mp_NoUseHeadLink->mo_Data = AP_LinkOrgin->mo_Data;
}
//while(mp_NoUseHeadLink!=mp_NoUseTailLink)
@ -487,11 +496,11 @@ namespace ZNsMain
)
///////////////////////////////////////////////////*/
{
#ifdef _REENTRANT_MUTEX
#ifdef _REENTRANT_MUTEX
ZNsMain::ZCMutexSmallLock VO_ZCMutexSmallLock(mo_Mutex);
#endif //_REENTRANT_MUTEX
#ifdef _DEBUG
#ifdef _DEBUG
ZNsMain::ZCCheckAlloc::ZCAllowAlloc CAllowAllocObj;
#endif //_DEBUG
@ -505,6 +514,9 @@ namespace ZNsMain
}
//if(APR_HeadLink==0)
if(TypeInit::EUseInit>0)
TypeInit::OnInit(APR_HeadLink->mo_Data, *this);
ml_AllSize += AL_MakeSize;
ZCLink* VP_MakeLink = 0 ;
@ -535,8 +547,11 @@ namespace ZNsMain
}
//if(VP_MakeLink==0)
if(TypeInit::EUseInit>0)
TypeInit::OnInit(VP_MakeLink->mo_Data, *this);
VP_TempLink->mp_NextLink=VP_MakeLink;
VP_TempLink=VP_MakeLink;
VP_TempLink=VP_MakeLink ;
}
//while(--AL_MakeSize>0)
@ -608,7 +623,7 @@ namespace ZNsMain
bool VB_IsHeapOver= false;
VP_TempLink = \
VP_MakeLink = new ZCLink(AP_LinkOrgin->mo_Type);
VP_MakeLink = new ZCLink(AP_LinkOrgin->mo_Data);
ml_AllSize += AL_FarNum+1 ;
@ -628,7 +643,7 @@ namespace ZNsMain
while(--AL_FarNum >= 0)
{
AP_LinkOrgin= AP_LinkOrgin->mp_NextLink;
VP_MakeLink = new ZCLink(AP_LinkOrgin->mo_Type);
VP_MakeLink = new ZCLink(AP_LinkOrgin->mo_Data);
if(VP_MakeLink==0)
{
@ -697,15 +712,33 @@ namespace ZNsMain
mp_NoUseTailLink = AP_Link;
}
//else
if(TypeInit::EUseFini>0)
TypeInit::OnFini(AP_Link->mo_Data, *this);
}
//void ReceiveLink(ZCLink* AP_Link)
void ReceiveLink(ZCLink* AP_HeadLink,ZCLink* AP_TailLink, TTypSize AL_Count)
void ReceiveLink(ZCLink* AP_HeadLink, ZCLink* AP_TailLink, TTypSize AL_Count)
{
#ifdef _REENTRANT_MUTEX
ZNsMain::ZCMutexSmallLock VO_ZCMutexSmallLock(mo_Mutex);
#endif //_REENTRANT_MUTEX
if(TypeInit::EUseFini>0)
{
ZCLink* VP_NowLink = AP_HeadLink;
__for1(TypeSize, i, AL_Count)
{
TypeInit::OnFini(VP_NowLink->mo_Data, *this) ;
VP_NowLink = VP_NowLink->mp_NextLink;
}/*
__for1(TypeSize, i, AL_Count)*/
}/*
if(TypeInit::EUseFini>0)*/
if(ml_UseSize==0)
{
mp_NoUseHeadLink = AP_HeadLink ;
@ -839,12 +872,6 @@ namespace ZNsMain
}
//long GetMemSize() const
TypeInit& GetTypeInit()
{
return mo_TypeInit;
}
//TypeInit& GetTypeInit()
//public:
};
//class ZCLinkHeap
@ -1183,7 +1210,7 @@ namespace ZNsMain
#endif //_DEBUG
return GetLinkPtr(AL_Index)->mo_Type;
return GetLinkPtr(AL_Index)->mo_Data;
}/*
TType& operator[](TTypSize AL_Index)*/
@ -1204,17 +1231,17 @@ namespace ZNsMain
#endif //_DEBUG
return GetLinkPtr(AL_Index)->mo_Type;
return GetLinkPtr(AL_Index)->mo_Data;
}
//const TType& operator[](TTypSize AL_Index) const
operator TType&(){return AddTailDefault()->mo_Type;}
operator TType&(){return AddTailDefault()->mo_Data;}
TType& operator()()
{
return AddTailDefault()->mo_Type;
return AddTailDefault()->mo_Data;
}/*
TType& operator()()*/
@ -1226,11 +1253,11 @@ namespace ZNsMain
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
TypeMoveObj::Exec(VP_AddLink->mo_Type, AR_Type);
TypeMoveObj::Exec(VP_AddLink->mo_Data, AR_Type);
}
else ///////////////////////////////////////////////
#endif
VP_AddLink->mo_Type= AR_Type ;
VP_AddLink->mo_Data= AR_Type ;
if(++ml_Size==1) // ml_Size==0
{
@ -1274,11 +1301,11 @@ namespace ZNsMain
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
TypeMoveObj::Exec(VP_AddLink->mo_Type, AR_Type);
TypeMoveObj::Exec(VP_AddLink->mo_Data, AR_Type);
}
else ///////////////////////////////////////////////
#endif
VP_AddLink->mo_Type= AR_Type ;
VP_AddLink->mo_Data= AR_Type ;
if(++ml_Size==1) // ml_Size==0
{
@ -1348,8 +1375,8 @@ namespace ZNsMain
ZCLink* GetTailIterEasy (){return mp_TailLink;}
IterEasyID GetTailIterEasyID(){return (IterEasyID)mp_TailLink;}
TType& front(){return mp_HeadLink->mo_Type;}
TType& back (){return mp_TailLink->mo_Type;}
TType& front(){return mp_HeadLink->mo_Data;}
TType& back (){return mp_TailLink->mo_Data;}
const ZCLink* GetHeadLinkPtr () const{return mp_HeadLink;}
@ -1360,8 +1387,8 @@ namespace ZNsMain
const ZCLink* GetTailIterEasy () const{return mp_TailLink;}
const IterEasyID GetTailIterEasyID() const{return (IterEasyID)mp_TailLink;}
const TType& front() const{return mp_HeadLink->mo_Type;}
const TType& back () const{return mp_TailLink->mo_Type;}
const TType& front() const{return mp_HeadLink->mo_Data;}
const TType& back () const{return mp_TailLink->mo_Data;}
void pop_back(TypeArg AR_Type)
@ -1394,7 +1421,7 @@ namespace ZNsMain
#endif //_DEBUG
return mp_HeadLink->mo_Type;
return mp_HeadLink->mo_Data;
}/*
TType& GetHeadData()*/
@ -1415,7 +1442,7 @@ namespace ZNsMain
#endif //_DEBUG
return mp_HeadLink->mo_Type;
return mp_HeadLink->mo_Data;
}/*
const TType& GetHeadData() const*/
@ -1437,7 +1464,7 @@ namespace ZNsMain
#endif //_DEBUG
return mp_TailLink->mo_Type ;
return mp_TailLink->mo_Data ;
}/*
TType& GetTailData()*/
@ -1458,7 +1485,7 @@ namespace ZNsMain
#endif //_DEBUG
return mp_TailLink->mo_Type ;
return mp_TailLink->mo_Data ;
}/*
const TType& GetTailData() const*/
@ -1480,7 +1507,7 @@ namespace ZNsMain
#endif //_DEBUG
return GetLinkPtr(AL_Index)->mo_Type;
return GetLinkPtr(AL_Index)->mo_Data;
}/*
TType& GetData(TTypSize AL_Index)*/
@ -1501,7 +1528,7 @@ namespace ZNsMain
#endif //_DEBUG
return GetLinkPtr(AL_Index)->mo_Type;
return GetLinkPtr(AL_Index)->mo_Data;
}/*
TType GetData(TTypSize AL_Index) const*/
@ -1685,8 +1712,15 @@ namespace ZNsMain
if(AL_DelSize>ml_Size) AL_DelSize=ml_Size;
ZtCSimList VO_StoreList; CutLink(
0, mp_HeadLink, 1, mp_HeadLink->GetNextPtr(AL_DelSize-1), AL_DelSize , VO_StoreList).DeleteAll();
ZtCSimList VO_StoreList; CutLink /////////////
(
0, mp_HeadLink
, 1, mp_HeadLink->GetNextPtr(AL_DelSize-1)
, AL_DelSize
, VO_StoreList
)
.DeleteAll();
////////////////////////////////////////////////
}/*
void DeleteHead(TTypSize AL_DelSize)*/
@ -1884,13 +1918,13 @@ namespace ZNsMain
do //////
{
if(VP_TempLink==AP_pSearchLink)
{return VL_FindIndex;}
{ return VL_FindIndex; }
/*+++++++++++++++++++++++++++*/
if(VL_FindIndex==ml_Size){return 0; }
VP_TempLink= VP_TempLink->mp_NextLink ;
++VL_FindIndex ;
VP_TempLink = VP_TempLink->mp_NextLink;
VL_FindIndex= VL_FindIndex + 1 ;
}
while(true);
}/*
@ -1917,8 +1951,8 @@ namespace ZNsMain
if(VL_FindIndex==ml_Size){return 0; }
VP_TempLink=VP_TempLink->mp_NextLink;
++VL_FindIndex ;
VP_TempLink = VP_TempLink->mp_NextLink;
VL_FindIndex= VL_FindIndex + 1 ;
}
while(true);
}/*
@ -2026,7 +2060,7 @@ namespace ZNsMain
__for1(TTypSize, VL_Index, ml_Size)
{
ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(VP_LoopLink->mo_Type);
GetObjRef(AO_Functor)(VP_LoopLink->mo_Data);
VP_LoopLink = VP_LoopLink->mp_NextLink;
}/*
@ -2047,7 +2081,7 @@ namespace ZNsMain
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_Type, ZCCheckRef::PassData(AO_TypeHelp)
VP_LoopLink->mo_Data, ZCCheckRef::PassData(AO_TypeHelp)
);
////////////////////////////////////////////
@ -2072,7 +2106,7 @@ namespace ZNsMain
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_Type ,
VP_LoopLink->mo_Data ,
ZCCheckRef1::PassData(AO_TypeHelp1),
ZCCheckRef2::PassData(AO_TypeHelp2)
);
@ -2109,7 +2143,7 @@ namespace ZNsMain
VP_TempLink=VP_TempLink->mp_NextLink;
const bool CB_IsTrue = ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)( VP_TempBefore->mo_Type );
GetObjRef(AO_Functor)( VP_TempBefore->mo_Data );
if(CB_IsTrue)
{
@ -2322,11 +2356,11 @@ namespace ZNsMain
};/*
template ###########################################
<
typename TType ,
typename TTypArgu =const TType&,
typename TTypCAlloc=ZCAllocator ,
typename TTypCInit =ZCInit ,
typename TTypSize =ZTypLong ,
typename TType ,
typename TTypArgu = const TType& ,
typename TTypCAlloc= ZCAllocator ,
typename TTypCInit = ZtCInit<TType> ,
typename TTypSize = ZTypLong ,
typename TMoveObj = ZNsMain::
ZtCMoveObj<TType, TTypArgu, true>
>