commit 2025-09-01 11:26 add ZtCList in ZCppMain/ZMainHead.H
This commit is contained in:
@ -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
|
||||
{
|
||||
|
@ -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 /////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
@ -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)); }
|
||||
|
Reference in New Issue
Block a user