commit 2025-09-01 11:26 add ZtCList ZCppMain/ZMainHead.H

This commit is contained in:
2025-09-01 11:26:41 +09:00
parent 94edff9996
commit 0148f31d9c
3 changed files with 363 additions and 27 deletions

View File

@ -2761,18 +2761,19 @@ namespace ZNsMain
friend class ZCHeapAllocList; friend class ZCHeapAllocList;
public: public:
ZCLink(ZCFreeAllocBase& ArCFreeAllocBase):mr_AllocBase(ArCFreeAllocBase), mp_NextLink(0) ZCLink(ZCFreeAllocBase& ArCFreeAllocBase) :
mr_AllocBase(ArCFreeAllocBase), mp_NextLink(0)
{ {
}/* }/*
ZCLink(ZCFreeAllocBase& ArCFreeAllocBase)*/ ZCLink(ZCFreeAllocBase& ArCFreeAllocBase)*/
ZCLink* GetNextLink() ZCLink* GetNextPtr()
{ {
return mp_NextLink; return mp_NextLink;
}/* }/*
ZCLink* GetNextLink()*/ ZCLink* GetNextPtr()*/
ZCLink* GetNextLink(long AL_Distance) ZCLink* GetNextPtr(long AL_Distance)
{ {
ZCLink* VP_NowLink=this; ZCLink* VP_NowLink=this;
@ -2781,7 +2782,7 @@ namespace ZNsMain
return VP_NowLink; return VP_NowLink;
}/* }/*
ZCLink* GetNextLink(long AL_Distance)*/ ZCLink* GetNextPtr(long AL_Distance)*/
ZCFreeAllocBase& GetData() ZCFreeAllocBase& GetData()
{ {
@ -2855,7 +2856,7 @@ namespace ZNsMain
ZCFreeAllocBase& GetData(long AL_Index) ZCFreeAllocBase& GetData(long AL_Index)
{ {
return mp_HeadLink->GetNextLink(AL_Index-1)->mr_AllocBase; return mp_HeadLink->GetNextPtr(AL_Index-1)->mr_AllocBase;
}/* }/*
ZCFreeAllocBase& GetData(long AL_Index)*/ ZCFreeAllocBase& GetData(long AL_Index)*/
@ -2867,7 +2868,7 @@ namespace ZNsMain
template<typename DeriveType> DeriveType& GetDataType(long AL_Index) template<typename DeriveType> DeriveType& GetDataType(long AL_Index)
{ {
return static_cast<DeriveType&>( mp_HeadLink->GetNextLink(AL_Index-1)->mr_AllocBase ); return static_cast<DeriveType&>( mp_HeadLink->GetNextPtr(AL_Index-1)->mr_AllocBase );
}/* }/*
template<typename DeriveType> DeriveType& GetDataType(long AL_Index) */ template<typename DeriveType> DeriveType& GetDataType(long AL_Index) */
@ -3713,6 +3714,341 @@ namespace ZNsMain
template<> string& ZftMakeStr(string& ARR_SaveCStr, bool AB_Bool)*/ template<> string& ZftMakeStr(string& ARR_SaveCStr, bool AB_Bool)*/
template ///////////////////////////////////////////////
<
typename TType,
typename TTypeArg = const TType&,
typename TTypSize = ZTypLong
>
class ZtCList /*######################################*/
{
public:
class ZCLink;
public:
typedef TType TypeData;
typedef TTypeArg TypeArg ;
typedef TTypSize TypeSize;
typedef ZCLink* IterEasy; // 가장 대표적으로 쓰일 수 있는 반복자.
typedef ZCLink* iterator;
public:
class ZCLink
{
public:
friend class ZtCList;
private:
TypeData mo_Data ;
ZCLink* mp_NextLink ;
private:
ZCLink* GetNextPtr() {return mp_NextLink;}
const ZCLink* GetNextPtr()const{return mp_NextLink;}
public:
ZCLink()
{
mp_NextLink = 0;
}/*
ZCLink()*/
ZCLink(const ZCLink& rhs)
{
mo_Data = rhs.mo_Data ;
mp_NextLink = 0 ;
}/*
ZCLink(const ZCLink& rhs)*/
ZCLink(TypeArg AR_Data)
{
mo_Data = AR_Data ;
mp_NextLink = 0 ;
}/*
ZCLink(const ZCLink& rhs)*/
ZCLink& operator=(const ZCLink& rhs)
{
mo_Data = rhs.mo_Data; return *this;
}/*
ZCLink& operator=(const ZCLink& rhs)*/
operator TypeData& (){return mo_Data;}
operator TypeData (){return mo_Data;}
TypeData& GetData (){return mo_Data;}
TypeData& operator*(){return mo_Data;}
operator const TypeData& () const{return mo_Data;}
const TypeData& GetData () const{return mo_Data;}
const TypeData& operator*() const{return mo_Data;}
};/*
class ZCLink*/
public :
private :
ZCLink* mp_HeadLink;
ZCLink* mp_TailLink;
TypeSize ml_LinkCnt ;
public :
ZtCList()
{
mp_HeadLink =0 ;
mp_TailLink =0 ;
ml_LinkCnt =0 ;
}/*
ZtCList()*/
~ZtCList()
{
DeleteAll();
}/*
~ZtCList()*/
void DeleteAll()
{
ZCLink* VP_NowLink = mp_HeadLink;
while(VP_NowLink!=0)
{
ZCLink* VP_NextLink =
VP_NowLink->mp_NextLink ;
delete VP_NowLink;
VP_NowLink = VP_NextLink;
}/*
while(VP_NowLink!=0)*/
mp_HeadLink =0 ;
mp_TailLink =0 ;
ml_LinkCnt =0 ;
}/*
void DeleteAll()*/
TypeData& AddTail()
{
ZCLink* VP_NewLink = new ZCLink;
if(ml_LinkCnt<1)
{
mp_HeadLink = VP_NewLink;
mp_TailLink = VP_NewLink;
ml_LinkCnt = 1 ;
return VP_NewLink->mo_Data;
}/*
if(ml_LinkCnt<1)*/
mp_TailLink->
mp_NextLink = VP_NewLink;
mp_TailLink = VP_NewLink;
ml_LinkCnt ++ ;
return VP_NewLink->mo_Data;
}/*
TypeData& AddTail()*/
TypeData& AddTail(TypeArg AO_ArgData)
{
ZCLink* VP_NewLink = new ZCLink(AO_ArgData);
if(ml_LinkCnt<1)
{
mp_HeadLink = VP_NewLink;
mp_TailLink = VP_NewLink;
ml_LinkCnt = 1 ;
return VP_NewLink->mo_Data;
}/*
if(ml_LinkCnt<1)*/
mp_TailLink->
mp_NextLink = VP_NewLink;
mp_TailLink = VP_NewLink;
ml_LinkCnt ++ ;
return VP_NewLink->mo_Data;
}/*
TypeData& AddTail(TypeArg AO_ArgData)*/
operator TypeData&(){ return AddTail(); }
template<typename TFunctor> void IterElement(TFunctor AO_Functor)
{
ZCLink* VP_LoopLink=mp_HeadLink;
__for0(TypeSize, i, ml_LinkCnt)
{
ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(VP_LoopLink->mo_Data);
VP_LoopLink = VP_LoopLink->mp_NextLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template<typename TFunctor> void IterElement(TFunctor AO_Functor) */
template<typename TFunctor, typename TTypeHelp>
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::
ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZCLink* VP_LoopLink=mp_HeadLink;
__for0(TypeSize, i, ml_LinkCnt)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_Data, ZCCheckRef::PassData(AO_TypeHelp)
);
////////////////////////////////////////////
VP_LoopLink = VP_LoopLink->mp_NextLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template<typename TFunctor, typename TTypeHelp>
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */
template
<typename TFunctor, typename TTypeHelp1, typename TTypeHelp2> /*###########*/
void IterElement
(
TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2
)
/*#############################################################################*/
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp1> ZCCheckRef1;
typedef ZNsMain::ZtCCheckRef<TTypeHelp2> ZCCheckRef2;
ZCLink* VP_LoopLink=mp_HeadLink;
__for0(TypeSize, i, ml_LinkCnt)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_Data
, ZCCheckRef1::PassData(AO_TypeHelp1)
, ZCCheckRef2::PassData(AO_TypeHelp2)
);
////////////////////////////////////////////
VP_LoopLink = VP_LoopLink->mp_NextLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template
<typename TFunctor, typename TTypeHelp1, typename TTypeHelp2> ###############
void IterElement
(
TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2
)
###############################################################################*/
ZCLink* GetHeadLinkPtr(){return mp_HeadLink;}
ZCLink* GetTailLinkPtr(){return mp_TailLink;}
const ZCLink* GetHeadLinkPtr() const{return mp_HeadLink;}
const ZCLink* GetTailLinkPtr() const{return mp_TailLink;}
IterEasy GetHeadIterEasy (){return GetHeadLinkPtr();}
IterEasy GetTailIterEasy (){return GetTailLinkPtr();}
IterEasyID GetHeadIterEasyID (){return (IterEasyID)GetHeadLinkPtr();}
IterEasyID GetTailIterEasyID (){return (IterEasyID)GetTailLinkPtr();}
IterEasy GetHeadIterEasy () const{return GetHeadLinkPtr();}
IterEasy GetTailIterEasy () const{return GetTailLinkPtr();}
IterEasyID GetHeadIterEasyID () const{return (IterEasyID)GetHeadLinkPtr();}
IterEasyID GetTailIterEasyID () const{return (IterEasyID)GetTailLinkPtr();}
IterEasyIDc GetHeadIterEasyIDc() const{return (IterEasyIDc)GetHeadLinkPtr();}
IterEasyIDc GetTailIterEasyIDc() const{return (IterEasyIDc)GetTailLinkPtr();}
void MoveNextIter(ZCLink*& APR_CLink ) const
{
APR_CLink=APR_CLink->GetNextPtr();
}
void MoveNextIter(IterEasyID& ARRI_IterEasyID) const
{
MoveNextIter((ZCLink*&)(ARRI_IterEasyID));
}
void MoveNextIter(const ZCLink*& APR_CLink ) const
{
APR_CLink=APR_CLink->GetNextPtr();
}
void MoveNextIter(IterEasyIDc& ARRI_IterEasyID) const
{
MoveNextIter((const ZCLink*&)(ARRI_IterEasyID));
}/*
void MoveNextIter(IterEasyIDc& ARRI_IterEasyID) const*/
TypeData& GetDataInIter(ZCLink* AP_CLink ){return **AP_CLink ;}
TypeData& GetDataInIter(IterEasyID ARRI_IterEasyID)
{ return GetDataInIter((ZCLink*)ARRI_IterEasyID); }
const TypeData& GetDataInIter(const ZCLink* AP_CLink) const
{
return **AP_CLink;
}/*
const TypeData& GetDataInIter(const ZCLink* AP_CLink) const*/
const TypeData& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const
{
return GetDataInIter((const ZCLink*)ARRI_IterEasyID);
}/*
const TypeData& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const*/
IterEasy ItHEasy(){return GetHeadIterEasy ();}
IterEasy ItTEasy(){return GetTailIterEasy ();}
IterEasyID ItHID (){return GetHeadIterEasyID();}
IterEasyID ItTID (){return GetTailIterEasyID();}
IterEasyIDc ItHIDc () const{return GetHeadIterEasyIDc();}
IterEasyIDc ItTIDc () const{return GetTailIterEasyIDc();}
const IterEasy ItHEasy() const{return GetHeadIterEasy ();}
const IterEasy ItTEasy() const{return GetTailIterEasy ();}
const IterEasyID ItHID () const{return GetHeadIterEasyID ();}
const IterEasyID ItTID () const{return GetTailIterEasyID ();}
void ItNext(ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;}
void ItNext(IterEasyID& ARRI_IterEasyID) const{ItNext((ZCLink*&)(ARRI_IterEasyID));}
void ItNext(const ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;}
void ItNext(IterEasyIDc& ARRI_IterEasyID) const
{ ItNext((const ZCLink*&)(ARRI_IterEasyID)); }
TypeData& ItD(IterEasy AP_CLink ){return GetDataInIter(AP_CLink );}
TypeData& ItD(IterEasyID ARRI_IterEasyID ){return GetDataInIter(ARRI_IterEasyID );}
TypeData& ItD(ZCLink* AP_CLink , TypeSize AI_FarNum){return GetDataInIter(AP_CLink , AI_FarNum);}
TypeData& ItD(IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum){return GetDataInIter(ARRI_IterEasyID, AI_FarNum);}
const TypeData& ItD(const IterEasy AP_CLink ) const{return GetDataInIter(AP_CLink );}
const TypeData& ItD(IterEasyIDc ARRI_IterEasyID ) const{return GetDataInIter(ARRI_IterEasyID );}
const TypeData& ItD(const ZCLink* AP_CLink , TypeSize AI_FarNum) const{return GetDataInIter(AP_CLink );}
const TypeData& ItD(IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const{return GetDataInIter(ARRI_IterEasyID, AI_FarNum);}
public :
};/*
template ///////////////////////////////////////////////
<
typename TType,
typename TTypeArg = const TType&,
typename TTypSize = ZTypLong
>
class ZtCList /*######################################*/
namespace ZNsView namespace ZNsView
{ {