commit 2025-09-02 12:47 delete template<typename TSearchInfoList> ZCStringBase& ReplaceType in ZCppMain/ZtCStringEx.H
This commit is contained in:
@ -514,6 +514,7 @@ namespace ZNsMain
|
||||
}/*
|
||||
~ZtCStringBase()*/
|
||||
|
||||
|
||||
TypeLength GetAllLength () const{return ml_AllLen ;}
|
||||
TypeLength GetUseLength () const{return ml_UseLen ;}
|
||||
TypeLength GetNotUseLength() const{return ml_AllLen-ml_UseLen;}
|
||||
@ -521,6 +522,7 @@ namespace ZNsMain
|
||||
TypeChar* GetChars() {return mpc_Data;}
|
||||
TypeCharC* GetChars() const{return mpc_Data;}
|
||||
|
||||
|
||||
bool IsAnsi() const
|
||||
{
|
||||
return ZCTypeChars::IsAnsiChars(mpc_Data, ml_UseLen);
|
||||
@ -1774,162 +1776,6 @@ namespace ZNsMain
|
||||
/*#############################################################################*/
|
||||
|
||||
|
||||
template<typename TSearchInfoList> ZCStringBase& ReplaceType
|
||||
(
|
||||
TypeCharC* APC_Search , TypeCharC* APC_Replace ,
|
||||
TypeLength AL_SearchLen , TypeLength AL_ReplaceLen,
|
||||
TypeLength AL_StartPos=0
|
||||
)
|
||||
/*########################################################*/
|
||||
{
|
||||
// 내부 연결리스트로 TSearchInfoList 를 사용한다.
|
||||
|
||||
if(ml_UseLen<1) return *this;
|
||||
|
||||
TSearchInfoList VO_CSearchInfoList; MakeInfoList
|
||||
(
|
||||
APC_Search , AL_SearchLen,
|
||||
AL_StartPos, RR(VO_CSearchInfoList)
|
||||
);
|
||||
////////////////////////////////////////////////
|
||||
|
||||
TypeLength VL_InfoEntrySize =
|
||||
VO_CSearchInfoList.GetSize() ;
|
||||
|
||||
if(VL_InfoEntrySize<1) return *this ;
|
||||
|
||||
TypeLength VL_PrevSize = ml_UseLen ;
|
||||
TypeLength VL_NewSize = 0 ;
|
||||
IterEasyID VI_IterEasyID =
|
||||
VO_CSearchInfoList.GetHeadIterEasyID();
|
||||
|
||||
VL_NewSize = ml_UseLen +
|
||||
VL_InfoEntrySize * (AL_ReplaceLen-AL_SearchLen);
|
||||
|
||||
if(VL_NewSize>VL_PrevSize) ReAllocKeep(VL_NewSize);
|
||||
|
||||
TypeChar* VP_Origin=mpc_Data;
|
||||
TypeLength VL_Index =0 ;
|
||||
|
||||
// AL_ReplaceLen==AL_SearchLen 나
|
||||
// AL_ReplaceLen> AL_SearchLen 나
|
||||
// AL_ReplaceLen< AL_SearchLen 각 경우에
|
||||
// Replace 방식이 조금 틀리다.
|
||||
|
||||
if(AL_ReplaceLen==AL_SearchLen)
|
||||
{
|
||||
for(TypeLength i=0; i<VL_InfoEntrySize; ++i)
|
||||
{
|
||||
VL_Index=VO_CSearchInfoList.ItD(VI_IterEasyID).ml_Pos ;
|
||||
|
||||
for(TypeLength j=0; j<AL_ReplaceLen; ++j)
|
||||
{ VP_Origin[VL_Index+j]=APC_Replace[j]; }
|
||||
|
||||
VO_CSearchInfoList.MoveNextIter(VI_IterEasyID);
|
||||
}/*
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
}
|
||||
else if(AL_ReplaceLen<AL_SearchLen)
|
||||
{
|
||||
VL_Index=VO_CSearchInfoList.GetHeadData().ml_Pos;
|
||||
|
||||
for(TypeLength i=1;i<=VL_InfoEntrySize;++i)
|
||||
{
|
||||
for(TypeLength j=0; j<AL_ReplaceLen; ++j)
|
||||
{
|
||||
VP_Origin[VL_Index++]=APC_Replace[j] ;
|
||||
}/*
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
|
||||
if(i!=VL_InfoEntrySize)
|
||||
{
|
||||
// 마지막 링크가 아닐 경우
|
||||
|
||||
TypeLength VL_IndexHead=VO_CSearchInfoList.ItD(VI_IterEasyID ).ml_Pos+AL_SearchLen;
|
||||
TypeLength VL_IndexTail=VO_CSearchInfoList.ItD(VI_IterEasyID, 1).ml_Pos-1;
|
||||
|
||||
for(TypeLength k=VL_IndexHead; k<=VL_IndexTail; ++k)
|
||||
{
|
||||
VP_Origin[VL_Index++] = VP_Origin[k] ;
|
||||
}/*
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
}
|
||||
else // i==VL_InfoEntrySize
|
||||
{
|
||||
TypeLength VL_IndexTail=VL_PrevSize-1 ;
|
||||
TypeLength VL_IndexHead=VO_CSearchInfoList.
|
||||
ItD(VI_IterEasyID).ml_Pos + AL_SearchLen ;
|
||||
|
||||
for(TypeLength k=VL_IndexHead; k<=VL_IndexTail; ++k)
|
||||
{
|
||||
VP_Origin[VL_Index++] = VP_Origin[k] ;
|
||||
}/*
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
}/*
|
||||
else // i==VL_InfoEntrySize*/
|
||||
|
||||
VO_CSearchInfoList.MoveNextIter(VI_IterEasyID);
|
||||
}/*
|
||||
for(TypeLength i=1; i<=VL_InfoEntrySize; ++i)*/
|
||||
}
|
||||
else // AL_ReplaceLen>AL_SearchLen
|
||||
{
|
||||
// 뒤부터 채워 나간다.
|
||||
|
||||
VP_Origin[VL_NewSize]=0;
|
||||
|
||||
VL_Index = VL_NewSize-1 ;
|
||||
VI_IterEasyID =
|
||||
VO_CSearchInfoList.GetTailIterEasyID();
|
||||
|
||||
TypeLength VL_IndexTail=VL_PrevSize-1;
|
||||
TypeLength VL_IndexHead=VO_CSearchInfoList.
|
||||
ItD(VI_IterEasyID).ml_Pos + AL_SearchLen ;
|
||||
|
||||
for(TypeLength i=VL_IndexTail; i>=VL_IndexHead; --i)
|
||||
{
|
||||
VP_Origin[VL_Index--]=VP_Origin[i];
|
||||
}/*
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
|
||||
for(TypeLength j=VL_InfoEntrySize; j>=2; --j)
|
||||
{
|
||||
TypeLength k;
|
||||
|
||||
for(k=AL_ReplaceLen-1; k>=0; --k)
|
||||
{
|
||||
VP_Origin[VL_Index--] = APC_Replace[k];
|
||||
}/*
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
|
||||
VL_IndexHead=VO_CSearchInfoList.ItD(VI_IterEasyID, -1).ml_Pos+AL_SearchLen;
|
||||
VL_IndexTail=VO_CSearchInfoList.ItD(VI_IterEasyID ).ml_Pos-1 ;
|
||||
|
||||
for(k=VL_IndexTail; k>=VL_IndexHead; --k)
|
||||
{ VP_Origin[VL_Index--]=VP_Origin[k]; }
|
||||
|
||||
VO_CSearchInfoList.MovePrevIter(VI_IterEasyID);
|
||||
}/*
|
||||
for(TypeLength j=VL_InfoEntrySize; j>=2; --j)*/
|
||||
|
||||
for(TypeLength k=AL_ReplaceLen-1; k>=0 ;--k)
|
||||
{
|
||||
VP_Origin[VL_Index--]=APC_Replace[k];
|
||||
}/*
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
}/*
|
||||
else // AL_ReplaceLen>AL_SearchLen*/
|
||||
|
||||
VP_Origin[ml_UseLen=VL_NewSize]=0; return *this;
|
||||
}/*
|
||||
tempalte<typename TSearchInfoList> ZCStringBase& ReplaceType
|
||||
(
|
||||
TypeCharC* APC_Search , TypeCharC* APC_Replace ,
|
||||
TypeLength AL_SearchLen , TypeLength AL_ReplaceLen,
|
||||
TypeLength AL_StartPos=0
|
||||
)
|
||||
###########################################################*/
|
||||
|
||||
ZCStringBase& Replace
|
||||
(
|
||||
TypeCharC* APC_Search, TypeCharC* APC_Replace, TypeLength AL_StartPos=0
|
||||
@ -1952,27 +1798,6 @@ namespace ZNsMain
|
||||
)
|
||||
///////////////////*/
|
||||
|
||||
template<typename TSearchInfoList> ZCStringBase& ReplaceType
|
||||
(
|
||||
TypeCharC* APC_Search, TypeCharC* APC_Replace, TypeLength AL_StartPos=0
|
||||
)
|
||||
////////////////////////////////////////////////////////////
|
||||
{
|
||||
return ReplaceType<TSearchInfoList>
|
||||
(
|
||||
APC_Search ,
|
||||
APC_Replace ,
|
||||
GetLength(APC_Search) ,
|
||||
GetLength(APC_Replace),
|
||||
AL_StartPos
|
||||
);
|
||||
///////////////////////////////////
|
||||
}/*
|
||||
template<typename TSearchInfoList> ZCStringBase& ReplaceType
|
||||
(
|
||||
TypeCharC* APC_Search, TypeCharC* APC_Replace, TypeLength AL_StartPos=0
|
||||
)
|
||||
//////////////////////////////////////////////////////////*/
|
||||
|
||||
ZCStringBase& Replace /*#######################################################*/
|
||||
(
|
||||
@ -1998,31 +1823,6 @@ namespace ZNsMain
|
||||
/*#############################################################################*/
|
||||
|
||||
|
||||
template<typename TSearchInfoList> ZCStringBase& ReplaceType /*################*/
|
||||
(
|
||||
const ZCStringBase& AR_CStrSearch ,
|
||||
const ZCStringBase& AR_CStrReplace,
|
||||
TypeLength AL_StartPos=0
|
||||
)
|
||||
/*#############################################################################*/
|
||||
{
|
||||
return ReplaceType<TSearchInfoList>( ///////
|
||||
AR_CStrSearch. data(),
|
||||
AR_CStrReplace.data(),
|
||||
AR_CStrSearch. size(),
|
||||
AR_CStrReplace.size(),
|
||||
AL_StartPos
|
||||
/*/////////*/ ); ///////////////////////////
|
||||
}/*
|
||||
template<typename TSearchInfoList> ZCStringBase& ReplaceType ####################
|
||||
(
|
||||
const ZCStringBase& AR_CStrSearch ,
|
||||
const ZCStringBase& AR_CStrReplace,
|
||||
TypeLength AL_StartPos=0
|
||||
)
|
||||
/*#############################################################################*/
|
||||
|
||||
|
||||
static ZCStringBase& ReplaceSection /*#########################################*/
|
||||
(
|
||||
ZCStringBase& ARR_Saver ,
|
||||
|
Reference in New Issue
Block a user