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

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

View File

@ -2761,18 +2761,19 @@ namespace ZNsMain
friend class ZCHeapAllocList;
public:
ZCLink(ZCFreeAllocBase& ArCFreeAllocBase):mr_AllocBase(ArCFreeAllocBase), mp_NextLink(0)
ZCLink(ZCFreeAllocBase& ArCFreeAllocBase) :
mr_AllocBase(ArCFreeAllocBase), mp_NextLink(0)
{
}/*
ZCLink(ZCFreeAllocBase& ArCFreeAllocBase)*/
ZCLink* GetNextLink()
ZCLink* GetNextPtr()
{
return mp_NextLink;
}/*
ZCLink* GetNextLink()*/
ZCLink* GetNextPtr()*/
ZCLink* GetNextLink(long AL_Distance)
ZCLink* GetNextPtr(long AL_Distance)
{
ZCLink* VP_NowLink=this;
@ -2781,7 +2782,7 @@ namespace ZNsMain
return VP_NowLink;
}/*
ZCLink* GetNextLink(long AL_Distance)*/
ZCLink* GetNextPtr(long AL_Distance)*/
ZCFreeAllocBase& GetData()
{
@ -2855,7 +2856,7 @@ namespace ZNsMain
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)*/
@ -2867,7 +2868,7 @@ namespace ZNsMain
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) */
@ -3713,6 +3714,341 @@ namespace ZNsMain
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
{

View File

@ -30,14 +30,14 @@ namespace ZNsMain
/////////////////////////////////////////////////////////////////////////////////////////*/
template< typename TType ,
typename TTypArg =const TType& ,
typename TTypBase =ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg> ,
typename TNodeBase =ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg> ,
typename TAlloc =ZNsMain::ZCAllocator ,
typename TSize =ZNsMain::ZTypLong ,
typename TCompare =ZNsMain::ZtCCompare<TTypArg, TTypArg, false> ,
typename TMoveObj =ZNsMain::ZtCMoveObj<TType , TTypArg, true >
template< typename TType ,
typename TTypArg = const TType& ,
typename TTypBase = ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg> ,
typename TNodeBase = ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg> ,
typename TAlloc = ZNsMain::ZCAllocator ,
typename TSize = ZNsMain::ZTypLong ,
typename TCompare = ZNsMain::ZtCCompare<TTypArg, TTypArg, false>,
typename TMoveObj = ZNsMain::ZtCMoveObj<TType , TTypArg, true >
>
class ZtCObjAVL : public TTypBase ///////////////////////////////////////////////////////
{
@ -2362,18 +2362,18 @@ namespace ZNsMain
}/*
else // AP_Node->mi_Balance==-1*/
}/*
ZCNode* Balance(ZCNode* AP_Node,int AI_AddState)*/
ZCNode* Balance(ZCNode* AP_Node, int AI_AddState)*/
private:
};/*
template< typename TType ,
typename TTypArg =const TType& ,
typename TTypBase =ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg> ,
typename TNodeBase =ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg> ,
typename TAlloc =ZNsMain::ZCAllocator ,
typename TSize =ZNsMain::ZTypLong ,
typename TCompare =ZNsMain::ZtCCompare<TTypArg, TTypArg, false>,
typename TMoveObj =ZNsMain::ZtCMoveObj<TType , TTypArg, true >
template< typename TType ,
typename TTypArg = const TType& ,
typename TTypBase = ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg> ,
typename TNodeBase = ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg> ,
typename TAlloc = ZNsMain::ZCAllocator ,
typename TSize = ZNsMain::ZTypLong ,
typename TCompare = ZNsMain::ZtCCompare<TTypArg, TTypArg, false>,
typename TMoveObj = ZNsMain::ZtCMoveObj<TType , TTypArg, true >
>
class ZtCObjAVL /////////////////////////////////////////////////////////////////////*/

View File

@ -983,8 +983,8 @@ namespace ZNsMain
#endif // _DEBUG
TypeSize VI_LeftDistance = AL_Index-1 ;
TypeSize VI_RightDistance= ml_Size-AL_Index+1;
TypeSize VI_LeftDistance = AL_Index-1 ;
TypeSize VI_RightDistance= ml_Size -AL_Index+1;
TypeSize VI_ShortDistance=
(VI_LeftDistance<=VI_RightDistance ? VI_LeftDistance : -VI_RightDistance);
@ -2130,7 +2130,7 @@ namespace ZNsMain
void ItNext(ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;}
void ItNext(iterator& ARR_CIterator ) {++ARR_CIterator;}
void ItNext(IterEasyID& ARRI_IterEasyID) const{ItNext((ZCLink*&)(ARRI_IterEasyID));}
void ItNext(const ZCLink*& APR_CLink ) const {APR_CLink=APR_CLink->GetNextPtr() ;}
void ItNext(const ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;}
void ItNext(const iterator& ARR_CIterator ) const{++ARR_CIterator;}
void ItNext(IterEasyIDc& ARRI_IterEasyID) const
{ ItNext((const ZCLink*&)(ARRI_IterEasyID)); }