commit 2025-09-01 11:37 add Replace() in ZCppMain/ZCStringStd.H
This commit is contained in:
@ -2872,6 +2872,7 @@ namespace ZNsMain
|
||||
}/*
|
||||
template<typename DeriveType> DeriveType& GetDataType(long AL_Index) */
|
||||
|
||||
|
||||
void FreeAll()
|
||||
{
|
||||
ZCLink* VP_Link=mp_HeadLink;
|
||||
@ -2885,6 +2886,7 @@ namespace ZNsMain
|
||||
}/*
|
||||
void FreeAll()*/
|
||||
|
||||
|
||||
void DeleteAll()
|
||||
{
|
||||
ZCLink* VP_CutLink=0;
|
||||
@ -2902,6 +2904,7 @@ namespace ZNsMain
|
||||
}/*
|
||||
void DeleteAll()*/
|
||||
|
||||
|
||||
void ClearAll()
|
||||
{
|
||||
ZCLink* VP_CutLink=0;
|
||||
@ -3714,42 +3717,50 @@ namespace ZNsMain
|
||||
template<> string& ZftMakeStr(string& ARR_SaveCStr, bool AB_Bool)*/
|
||||
|
||||
|
||||
|
||||
// class ZtCList : simple circular double linked list
|
||||
|
||||
template ///////////////////////////////////////////////
|
||||
<
|
||||
typename TType,
|
||||
typename TTypeArg = const TType&,
|
||||
typename TTypSize = ZTypLong
|
||||
typename TType ,
|
||||
typename TTypeArg = const TType&,
|
||||
typename TTypCAlloc = ZCAllocator ,
|
||||
typename TTypSize = ZTypLong
|
||||
>
|
||||
class ZtCList /*######################################*/
|
||||
{
|
||||
public:
|
||||
class ZCLink;
|
||||
public:
|
||||
typedef TType TypeData;
|
||||
typedef TTypeArg TypeArg ;
|
||||
typedef TTypSize TypeSize;
|
||||
typedef ZCLink* IterEasy; // 가장 대표적으로 쓰일 수 있는 반복자.
|
||||
typedef ZCLink* iterator;
|
||||
typedef TType TypeData;
|
||||
typedef TTypeArg TypeArg ;
|
||||
typedef TTypCAlloc TypeAlloc;
|
||||
typedef TTypSize TypeSize;
|
||||
typedef ZCLink* IterEasy; // 가장 대표적으로 쓰일 수 있는 반복자.
|
||||
typedef ZCLink* iterator;
|
||||
public:
|
||||
|
||||
|
||||
class ZCLink
|
||||
class ZCLink : public TypeAlloc
|
||||
{
|
||||
public:
|
||||
friend class ZtCList;
|
||||
private:
|
||||
TypeData mo_Data ;
|
||||
ZCLink* mp_NextLink ;
|
||||
ZCLink* mp_PrevLink ;
|
||||
private:
|
||||
|
||||
ZCLink* GetNextPtr() {return mp_NextLink;}
|
||||
ZCLink* GetPrevPtr() {return mp_PrevLink;}
|
||||
const ZCLink* GetNextPtr()const{return mp_NextLink;}
|
||||
const ZCLink* GetPrevPtr()const{return mp_PrevLink;}
|
||||
|
||||
public:
|
||||
|
||||
ZCLink()
|
||||
{
|
||||
mp_NextLink = 0;
|
||||
mp_NextLink = mp_PrevLink = 0;
|
||||
}/*
|
||||
ZCLink()*/
|
||||
|
||||
@ -3757,6 +3768,7 @@ namespace ZNsMain
|
||||
{
|
||||
mo_Data = rhs.mo_Data ;
|
||||
mp_NextLink = 0 ;
|
||||
mp_PrevLink = 0 ;
|
||||
}/*
|
||||
ZCLink(const ZCLink& rhs)*/
|
||||
|
||||
@ -3764,6 +3776,7 @@ namespace ZNsMain
|
||||
{
|
||||
mo_Data = AR_Data ;
|
||||
mp_NextLink = 0 ;
|
||||
mp_PrevLink = 0 ;
|
||||
}/*
|
||||
ZCLink(const ZCLink& rhs)*/
|
||||
|
||||
@ -3774,6 +3787,31 @@ namespace ZNsMain
|
||||
ZCLink& operator=(const ZCLink& rhs)*/
|
||||
|
||||
|
||||
ZCLink* GetNextPrevPtr(TypeSize AL_FarNum)
|
||||
{
|
||||
ZCLink* VP_TmpLink=this;
|
||||
|
||||
if(AL_FarNum>=0)
|
||||
{ while(--AL_FarNum>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
|
||||
else{ while(++AL_FarNum<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
|
||||
|
||||
return VP_TmpLink;
|
||||
}/*
|
||||
ZCLink* GetNextPrevPtr(TypeSize AL_FarNum)*/
|
||||
|
||||
const ZCLink* GetNextPrevPtr(TypeSize AL_FarNum) const
|
||||
{
|
||||
ZCLink* VP_TmpLink=const_cast<ZCLink*>(this);
|
||||
|
||||
if(AL_FarNum>=0)
|
||||
{ while(--AL_FarNum>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
|
||||
else{ while(++AL_FarNum<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
|
||||
|
||||
return VP_TmpLink;
|
||||
}/*
|
||||
const ZCLink* GetNextPrevPtr(TypeSize AL_FarNum) const*/
|
||||
|
||||
|
||||
operator TypeData& (){return mo_Data;}
|
||||
operator TypeData (){return mo_Data;}
|
||||
TypeData& GetData (){return mo_Data;}
|
||||
@ -3791,6 +3829,61 @@ namespace ZNsMain
|
||||
ZCLink* mp_HeadLink;
|
||||
ZCLink* mp_TailLink;
|
||||
TypeSize ml_LinkCnt ;
|
||||
private :
|
||||
|
||||
ZCLink* AddTailLink(ZCLink* AP_NewLink)
|
||||
{
|
||||
if(ml_LinkCnt<1)
|
||||
{
|
||||
mp_HeadLink = AP_NewLink;
|
||||
mp_TailLink = AP_NewLink;
|
||||
|
||||
mp_HeadLink->mp_NextLink = mp_HeadLink ;
|
||||
mp_HeadLink->mp_PrevLink = mp_HeadLink ;
|
||||
|
||||
ml_LinkCnt= 1; return AP_NewLink;
|
||||
}/*
|
||||
if(ml_LinkCnt<1)*/
|
||||
|
||||
mp_TailLink->mp_NextLink = AP_NewLink ;
|
||||
AP_NewLink ->mp_PrevLink = mp_TailLink ;
|
||||
|
||||
AP_NewLink ->mp_NextLink = mp_HeadLink ;
|
||||
mp_HeadLink->mp_PrevLink = AP_NewLink ;
|
||||
|
||||
mp_TailLink = AP_NewLink; ++ml_LinkCnt;
|
||||
|
||||
return AP_NewLink; /*:::::::::::::::::*/
|
||||
}/*
|
||||
ZCLink* AddTailLink(ZCLink* AP_CLink)*/
|
||||
|
||||
ZCLink* AddHeadLink(ZCLink* AP_NewLink)
|
||||
{
|
||||
if(ml_LinkCnt<1)
|
||||
{
|
||||
mp_HeadLink = AP_NewLink;
|
||||
mp_TailLink = AP_NewLink;
|
||||
|
||||
mp_HeadLink->mp_NextLink = mp_HeadLink ;
|
||||
mp_HeadLink->mp_PrevLink = mp_HeadLink ;
|
||||
|
||||
ml_LinkCnt= 1; return AP_NewLink;
|
||||
}/*
|
||||
if(ml_LinkCnt<1)*/
|
||||
|
||||
AP_NewLink ->mp_NextLink = mp_HeadLink ;
|
||||
mp_HeadLink->mp_PrevLink = AP_NewLink ;
|
||||
|
||||
AP_NewLink ->mp_PrevLink = mp_TailLink ;
|
||||
mp_TailLink->mp_NextLink = AP_NewLink ;
|
||||
|
||||
mp_HeadLink = AP_NewLink; ++ml_LinkCnt;
|
||||
|
||||
return AP_NewLink; /*:::::::::::::::::*/
|
||||
}/*
|
||||
ZCLink* AddHeadLink(ZCLink* AP_CLink)
|
||||
|
||||
private :*/
|
||||
public :
|
||||
|
||||
ZtCList()
|
||||
@ -3807,11 +3900,12 @@ namespace ZNsMain
|
||||
}/*
|
||||
~ZtCList()*/
|
||||
|
||||
|
||||
void DeleteAll()
|
||||
{
|
||||
ZCLink* VP_NowLink = mp_HeadLink;
|
||||
|
||||
while(VP_NowLink!=0)
|
||||
while(--ml_LinkCnt>=0)
|
||||
{
|
||||
ZCLink* VP_NextLink =
|
||||
VP_NowLink->mp_NextLink ;
|
||||
@ -3820,7 +3914,7 @@ namespace ZNsMain
|
||||
|
||||
VP_NowLink = VP_NextLink;
|
||||
}/*
|
||||
while(VP_NowLink!=0)*/
|
||||
while(--ml_LinkCnt>=0)*/
|
||||
|
||||
mp_HeadLink =0 ;
|
||||
mp_TailLink =0 ;
|
||||
@ -3829,60 +3923,80 @@ namespace ZNsMain
|
||||
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( /*++++++++++++*/ )
|
||||
{ return AddTailLink(new ZCLink )->mo_Data; }
|
||||
TypeData& AddTail(TypeArg AO_ArgData)
|
||||
{ return AddTailLink(new ZCLink(AO_ArgData))->mo_Data; }
|
||||
|
||||
|
||||
void DeleteHead()
|
||||
{
|
||||
ZCLink* VP_NewLink = new ZCLink(AO_ArgData);
|
||||
if(ml_LinkCnt<1) return;
|
||||
|
||||
if(ml_LinkCnt<1)
|
||||
ZCLink* VP_TempLink = mp_HeadLink ;
|
||||
mp_HeadLink = mp_HeadLink->mp_NextLink ;
|
||||
|
||||
delete VP_TempLink;
|
||||
|
||||
if(--ml_LinkCnt<1)
|
||||
{
|
||||
mp_HeadLink = VP_NewLink;
|
||||
mp_TailLink = VP_NewLink;
|
||||
ml_LinkCnt = 1 ;
|
||||
|
||||
return VP_NewLink->mo_Data;
|
||||
mp_HeadLink = mp_TailLink =0; return;
|
||||
}/*
|
||||
if(ml_LinkCnt<1)*/
|
||||
if(--ml_LinkCnt<1)*/
|
||||
|
||||
mp_TailLink->
|
||||
mp_NextLink = VP_NewLink;
|
||||
mp_TailLink = VP_NewLink;
|
||||
ml_LinkCnt ++ ;
|
||||
|
||||
return VP_NewLink->mo_Data;
|
||||
mp_HeadLink->mp_PrevLink = mp_TailLink ;
|
||||
mp_TailLink->mp_NextLink = mp_HeadLink ;
|
||||
}/*
|
||||
TypeData& AddTail(TypeArg AO_ArgData)*/
|
||||
void DeleteHead()*/
|
||||
|
||||
|
||||
void DeleteTail()
|
||||
{
|
||||
if(ml_LinkCnt<1) return;
|
||||
|
||||
ZCLink* VP_TempLink = mp_TailLink ;
|
||||
mp_TailLink = mp_TailLink->mp_PrevLink ;
|
||||
|
||||
delete VP_TempLink;
|
||||
|
||||
if(--ml_LinkCnt<1)
|
||||
{
|
||||
mp_HeadLink = mp_TailLink =0; return;
|
||||
}/*
|
||||
if(--ml_LinkCnt<1)*/
|
||||
|
||||
mp_HeadLink->mp_PrevLink = mp_TailLink ;
|
||||
mp_TailLink->mp_NextLink = mp_HeadLink ;
|
||||
}/*
|
||||
void DeleteTail()*/
|
||||
|
||||
|
||||
|
||||
TypeData& GetHeadData(){return mp_HeadLink->mo_Data;}
|
||||
TypeData& GetTailData(){return mp_TailLink->mo_Data;}
|
||||
|
||||
const TypeData& GetHeadData() const{return mp_HeadLink->mo_Data;}
|
||||
const TypeData& GetTailData() const{return mp_TailLink->mo_Data;}
|
||||
|
||||
operator TypeData&() { return AddTail() ; }
|
||||
|
||||
TypeSize size() const{ return ml_LinkCnt; }
|
||||
|
||||
TypeSize size() const{ return ml_LinkCnt; }
|
||||
TypeSize GetSize() const{ return ml_LinkCnt; }
|
||||
|
||||
|
||||
void push_back (TypeArg AO_ArgData){AddTail(AO_ArgData);}
|
||||
void push_front(TypeArg AO_ArgData){AddHead(AO_ArgData);}
|
||||
void push_back (TypeArg AO_ArgData){AddTail(AO_ArgData);}
|
||||
|
||||
void pop_front(){DeleteHead();}
|
||||
void pop_back (){DeleteTail();}
|
||||
|
||||
|
||||
TypeData& front(){return GetHeadData();}
|
||||
TypeData& back (){return GetTailData();}
|
||||
|
||||
const TypeData& front() const{return GetHeadData();}
|
||||
const TypeData& back () const{return GetTailData();}
|
||||
|
||||
|
||||
template<typename TFunctor> void IterElement(TFunctor AO_Functor)
|
||||
@ -3999,21 +4113,46 @@ namespace ZNsMain
|
||||
}/*
|
||||
void MoveNextIter(IterEasyIDc& ARRI_IterEasyID) const*/
|
||||
|
||||
|
||||
void MovePrevIter(ZCLink*& APR_CLink ) const
|
||||
{
|
||||
APR_CLink=APR_CLink->GetPrevPtr();
|
||||
}
|
||||
void MovePrevIter(IterEasyID& ARRI_IterEasyID) const
|
||||
{
|
||||
MovePrevIter((ZCLink*&)(ARRI_IterEasyID));
|
||||
}
|
||||
void MovePrevIter(const ZCLink*& APR_CLink ) const
|
||||
{
|
||||
APR_CLink=APR_CLink->GetPrevPtr();
|
||||
}
|
||||
void MovePrevIter(IterEasyIDc& ARRI_IterEasyID) const
|
||||
{
|
||||
MovePrevIter((const ZCLink*&)(ARRI_IterEasyID));
|
||||
}/*
|
||||
void MovePrevIter(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(const ZCLink* AP_CLink ) const
|
||||
{ return **AP_CLink ; }
|
||||
const TypeData& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const
|
||||
{ return GetDataInIter((const ZCLink*)ARRI_IterEasyID); }
|
||||
|
||||
|
||||
TypeData& GetDataInIter( ZCLink* AP_CLink , TypeSize AI_FarNum)
|
||||
{return **(AP_CLink->GetNextPrevPtr(AI_FarNum)) ; }
|
||||
TypeData& GetDataInIter( IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum)
|
||||
{ return GetDataInIter((ZCLink*)ARRI_IterEasyID, AI_FarNum); }
|
||||
|
||||
const TypeData& GetDataInIter( const ZCLink* AP_CLink , TypeSize AI_FarNum) const
|
||||
{return **(AP_CLink->GetNextPrePtr(AI_FarNum)) ; }
|
||||
const TypeData& GetDataInIter( IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const
|
||||
{ return GetDataInIter((ZCLink*)ARRI_IterEasyID, AI_FarNum); }
|
||||
|
||||
const TypeData& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const
|
||||
{
|
||||
return GetDataInIter((const ZCLink*)ARRI_IterEasyID);
|
||||
}/*
|
||||
const TypeData& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const*/
|
||||
|
||||
|
||||
IterEasy ItHEasy(){return GetHeadIterEasy ();}
|
||||
@ -4035,23 +4174,33 @@ namespace ZNsMain
|
||||
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);}
|
||||
void ItPrev(ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;}
|
||||
void ItPrev(IterEasyID& ARRI_IterEasyID) const{ItPrev((ZCLink*&)(ARRI_IterEasyID));}
|
||||
void ItPrev(const ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;}
|
||||
void ItPrev(IterEasyIDc& ARRI_IterEasyID) const
|
||||
{ ItPrev((const ZCLink*&)(ARRI_IterEasyID)); }
|
||||
|
||||
TypeData& ItD(IterEasy AP_CLink ){return GetDataInIter(AP_CLink );}
|
||||
TypeData& ItD(IterEasyID ARRI_IterEasyID){return GetDataInIter(ARRI_IterEasyID);}
|
||||
|
||||
const TypeData& ItD(const IterEasy AP_CLink ) const{return GetDataInIter(AP_CLink );}
|
||||
const TypeData& ItD(IterEasyIDc ARRI_IterEasyID ) const{return GetDataInIter(ARRI_IterEasyID);}
|
||||
|
||||
|
||||
TypeData& ItD(IterEasy 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);}
|
||||
const TypeData& ItD(const IterEasy AP_CLink , TypeSize AI_FarNum) const{return GetDataInIter(AP_CLink , AI_FarNum);}
|
||||
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
|
||||
typename TType ,
|
||||
typename TTypeArg = const TType&,
|
||||
typename TTypCAlloc = ZCAllocator ,
|
||||
typename TTypSize = ZTypLong
|
||||
>
|
||||
class ZtCList /*######################################*/
|
||||
|
||||
|
Reference in New Issue
Block a user