commit 2025-08-19 21:03 edit a bit ZCppMain/ZtCStringEx.H
This commit is contained in:
@ -445,13 +445,13 @@ namespace ZNsMain
|
||||
typedef typename
|
||||
TSearchInfoList::TypeData ZCSearchInfo;
|
||||
|
||||
if(ml_UseLen<1 || AL_SearchLen<1) return ;
|
||||
if(AL_StartPos<0) AL_StartPos=0;
|
||||
if(ml_UseLen <1 || AL_SearchLen<1) return ;
|
||||
if(AL_StartPos<0) AL_StartPos =0 ;
|
||||
|
||||
TypeLength VL_Loop =ml_UseLen-AL_SearchLen ;
|
||||
ZCSearchInfo* VP_CSearchInfo=0 ;
|
||||
TypeChar* VP_Origin =mpc_Data ;
|
||||
TypeLength i =AL_StartPos;
|
||||
ZCSearchInfo* VP_CSearchInfo=0 ;
|
||||
TypeChar* VP_Origin =mpc_Data ;
|
||||
TypeLength i =AL_StartPos ;
|
||||
|
||||
while(i<=VL_Loop)
|
||||
{
|
||||
@ -461,7 +461,7 @@ namespace ZNsMain
|
||||
{
|
||||
if(VP_Origin[i+j]!=APC_Search[j]) break;
|
||||
}/*
|
||||
for(j=0; j<AL_SearchLen; ++j)*/
|
||||
///////////////////////////*/
|
||||
|
||||
if(j==AL_SearchLen)
|
||||
{
|
||||
@ -469,10 +469,10 @@ namespace ZNsMain
|
||||
|
||||
위 코드처럼 하면 ARR_InfoList 를 일반화 하기가 어렵다. */
|
||||
|
||||
VP_CSearchInfo=&(ZCSearchInfo&)ARR_InfoList;
|
||||
VP_CSearchInfo->mp_Char=VP_Origin+i ;
|
||||
VP_CSearchInfo->ml_Pos =i ;
|
||||
VP_CSearchInfo->ml_Len =AL_SearchLen ;
|
||||
VP_CSearchInfo= &(ZCSearchInfo&)ARR_InfoList;
|
||||
VP_CSearchInfo->mp_Char= VP_Origin+i ;
|
||||
VP_CSearchInfo->ml_Pos = i ;
|
||||
VP_CSearchInfo->ml_Len = AL_SearchLen ;
|
||||
|
||||
i += AL_SearchLen ;
|
||||
}
|
||||
@ -526,7 +526,7 @@ namespace ZNsMain
|
||||
{
|
||||
if(VP_Origin[i+j]!=APC_Search[j]) break;
|
||||
}/*
|
||||
for(j=0; j<AL_SearchLen; ++j)*/
|
||||
///////////////////////////*/
|
||||
|
||||
if(j==AL_SearchLen)
|
||||
{
|
||||
@ -573,7 +573,6 @@ namespace ZNsMain
|
||||
TypeLength ml_AllLen;
|
||||
TypeLength ml_UseLen;
|
||||
TypeChar* mpc_Data ;
|
||||
/*protected:*/
|
||||
public :
|
||||
|
||||
ZtCStringBase()
|
||||
@ -592,12 +591,12 @@ namespace ZNsMain
|
||||
|
||||
if(APC_Data==0 || APC_Data[0]==0) return;
|
||||
|
||||
MakeWord
|
||||
MakeWord ////////////////////////////////
|
||||
(
|
||||
APC_Data, ZNsMain::ZftGetLengthType
|
||||
< TypeLength, TypeChar >( APC_Data )
|
||||
);
|
||||
////////
|
||||
/////////////////////////////////////////
|
||||
}/*
|
||||
ZtCStringBase(TypeCharC* APC_Data)*/
|
||||
|
||||
@ -849,8 +848,11 @@ namespace ZNsMain
|
||||
|
||||
if(ml_UseLen<1 || AL_BuffSize<1) return 0;
|
||||
|
||||
TypeLength VL_LoopCnt =
|
||||
ml_UseLen<AL_BuffSize ? ml_UseLen : AL_BuffSize ;
|
||||
TypeLength VL_LoopCnt = ///////////
|
||||
( ml_UseLen<AL_BuffSize ?
|
||||
ml_UseLen : AL_BuffSize
|
||||
) ;
|
||||
///////////////////////////////////
|
||||
|
||||
for(TypeLength i=0;i<VL_LoopCnt;++i)
|
||||
{ APC_Buff[i]=mpc_Data[i]; }
|
||||
@ -1157,7 +1159,11 @@ namespace ZNsMain
|
||||
{
|
||||
/* 문자열의 순서를 뒤집는다. 문자열의 길이가 2 이상이어야 한다. */
|
||||
|
||||
if(ml_UseLen<2) return *this;
|
||||
const int CI_MinLength=2 ;
|
||||
|
||||
if(ml_UseLen<CI_MinLength)
|
||||
{ return *this; }
|
||||
//////////////////////////
|
||||
|
||||
TypeLength i =0 ;
|
||||
TypeLength j =ml_UseLen-1;
|
||||
@ -1225,7 +1231,7 @@ namespace ZNsMain
|
||||
ReAllocKeep(ml_UseLen+AL_Count);
|
||||
|
||||
__for0(TypeLength, i, AL_Count)
|
||||
mpc_Data[ml_UseLen+i]=AC_CharParam;
|
||||
mpc_Data[ml_UseLen+i] = AC_CharParam;
|
||||
|
||||
ml_UseLen += AL_Count ;
|
||||
mpc_Data[ml_UseLen]=0 ; return *this;
|
||||
@ -1344,9 +1350,13 @@ namespace ZNsMain
|
||||
|
||||
// ml_UseLen+AL_AddSize 의 크기가 가변인수 문자열을 담을 만큼 커야한다.
|
||||
|
||||
va_list VP_VarParam;
|
||||
va_list VP_VarParam;
|
||||
va_start( VP_VarParam, APC_Format);
|
||||
vsprintf(mpc_Data+ml_UseLen, APC_Format, VP_VarParam);
|
||||
vsprintf //////////////////////////
|
||||
(
|
||||
mpc_Data+ml_UseLen, APC_Format, VP_VarParam
|
||||
);
|
||||
///////////////////////////////////
|
||||
|
||||
CorrectLength(ml_UseLen); return *this;
|
||||
}/*
|
||||
@ -1388,8 +1398,12 @@ namespace ZNsMain
|
||||
|
||||
while(i>=1)
|
||||
{
|
||||
*VPC_Start++ =
|
||||
( ( AUL_LongType << ((CI_LongByte-i)*CI_BitOfByte) ) >> ((CI_LongByte-1)*CI_BitOfByte) ) ;
|
||||
*VPC_Start++ = ////////////////////////////
|
||||
(
|
||||
( AUL_LongType << ((CI_LongByte-i)*CI_BitOfByte) ) >>
|
||||
( (CI_LongByte-1)*CI_BitOfByte)
|
||||
) ;
|
||||
///////////////////////////////////////////
|
||||
|
||||
--i;
|
||||
}/*
|
||||
@ -1420,8 +1434,13 @@ namespace ZNsMain
|
||||
|
||||
while(i>=1)
|
||||
{
|
||||
*VPC_Start++ =
|
||||
( ( ALL_LLongType << ((CI_LLongByte-i)*CI_BitOfByte) ) >> ((CI_LLongByte-1)*CI_BitOfByte) ) ;
|
||||
*VPC_Start++ = //////////////////////////////
|
||||
(
|
||||
( ALL_LLongType << ((CI_LLongByte-i)*CI_BitOfByte) ) >>
|
||||
( (CI_LLongByte-1)*CI_BitOfByte )
|
||||
) ;
|
||||
/////////////////////////////////////////////
|
||||
|
||||
--i;
|
||||
}/*
|
||||
while(i>=1)*/
|
||||
@ -1520,7 +1539,8 @@ namespace ZNsMain
|
||||
}/*
|
||||
for(i=0;i<=AL_Index2-AL_Index1;++i)*/
|
||||
|
||||
VP_Char[i]=0; TypeLength VB_Return=ZNsMain::ATOL(VP_Char);
|
||||
/*######*/ VP_Char[i] =0 ;
|
||||
TypeLength VB_Return = ZNsMain::ATOL(VP_Char);
|
||||
|
||||
this->DeleteMem(VP_Char); return VB_Return;
|
||||
}/*
|
||||
@ -1532,9 +1552,12 @@ namespace ZNsMain
|
||||
|
||||
if(AL_Index2>=ml_UseLen) AL_Index2=ml_UseLen-1 ;
|
||||
|
||||
if(ml_UseLen<1 || AL_Index1<0 || AL_Index2<0 || AL_Index1>AL_Index2)
|
||||
return 0;
|
||||
//endif
|
||||
const bool CB_IsBad = ////////////////////
|
||||
(
|
||||
ml_UseLen<1 || AL_Index1<0
|
||||
|| AL_Index2<0 || AL_Index1>AL_Index2
|
||||
);
|
||||
if(CB_IsBad) return 0; ///////////////////
|
||||
|
||||
return ReadLongFromIndex(AL_Index1, AL_Index2);
|
||||
}/*
|
||||
@ -1610,18 +1633,17 @@ namespace ZNsMain
|
||||
|
||||
if(AL_Index>=ml_UseLen) return ARR_CString;
|
||||
|
||||
TypeLength VL_Pos =
|
||||
FindPos(APC_Search, AL_SearchLen, AL_Index);
|
||||
TypeLength VL_Pos = FindPos
|
||||
(APC_Search, AL_SearchLen, AL_Index);
|
||||
|
||||
if(VL_Pos==AL_Index) return ARR_CString;
|
||||
|
||||
if(VL_Pos<0)
|
||||
VL_Pos=ml_UseLen-1;
|
||||
else
|
||||
VL_Pos--;
|
||||
//else
|
||||
VL_Pos = ml_UseLen-1;
|
||||
else VL_Pos-- ;
|
||||
|
||||
return ReadString(ARR_CString, AL_Index, VL_Pos);
|
||||
return ReadString
|
||||
(ARR_CString, AL_Index, VL_Pos);
|
||||
}/*
|
||||
ZCStringBase& ReadString( ////////////////////////////////////////
|
||||
ZCStringBase& ARR_CString,
|
||||
@ -1713,22 +1735,28 @@ namespace ZNsMain
|
||||
ZCStringBase& ReplaceOnce
|
||||
(
|
||||
TypeCharC* APC_Search , TypeCharC* APC_Replace ,
|
||||
TypeLength AL_SearchLen, TypeLength AL_ReplaceLen, TypeLength AL_StartPos=0
|
||||
TypeLength AL_SearchLen, TypeLength AL_ReplaceLen,
|
||||
TypeLength AL_StartPos=0
|
||||
)
|
||||
/*#####################*/
|
||||
{
|
||||
TypeLength VL_PosFind =
|
||||
FindPos(APC_Search, AL_SearchLen, AL_StartPos);
|
||||
TypeLength VL_PosFind = FindPos
|
||||
(APC_Search, AL_SearchLen, AL_StartPos);
|
||||
|
||||
if(VL_PosFind<0) return *this;
|
||||
|
||||
return ReplaceSection(
|
||||
VL_PosFind, AL_SearchLen, APC_Replace, AL_ReplaceLen);
|
||||
return ReplaceSection //////////////
|
||||
(
|
||||
VL_PosFind , AL_SearchLen ,
|
||||
APC_Replace , AL_ReplaceLen
|
||||
);
|
||||
////////////////////////////////////
|
||||
}/*
|
||||
ZCStringBase& ReplaceOnce
|
||||
(
|
||||
TypeCharC* APC_Search , TypeCharC* APC_Replace ,
|
||||
TypeLength AL_SearchLen, TypeLength AL_ReplaceLen, TypeLength AL_StartPos=0
|
||||
TypeLength AL_SearchLen, TypeLength AL_ReplaceLen,
|
||||
TypeLength AL_StartPos=0
|
||||
)
|
||||
#######################*/
|
||||
|
||||
@ -2059,7 +2087,11 @@ namespace ZNsMain
|
||||
)
|
||||
###########################################################*/
|
||||
|
||||
ZCStringBase& Replace(TypeCharC* APC_Search, TypeCharC* APC_Replace, TypeLength AL_StartPos=0)
|
||||
ZCStringBase& Replace
|
||||
(
|
||||
TypeCharC* APC_Search, TypeCharC* APC_Replace, TypeLength AL_StartPos=0
|
||||
)
|
||||
/////////////////////
|
||||
{
|
||||
using ZNsMain::ZftGetLengthType ;
|
||||
|
||||
@ -2073,10 +2105,17 @@ namespace ZNsMain
|
||||
);
|
||||
////////////////////////////////////////////////////////////
|
||||
}/*
|
||||
ZCStringBase& Replace(TypeCharC* APC_Search, TypeCharC* APC_Replace, TypeLength AL_StartPos=0)*/
|
||||
ZCStringBase& Replace
|
||||
(
|
||||
TypeCharC* APC_Search, TypeCharC* APC_Replace, TypeLength AL_StartPos=0
|
||||
)
|
||||
///////////////////*/
|
||||
|
||||
template<typename TSearchInfoList> ZCStringBase&
|
||||
ReplaceType(TypeCharC* APC_Search, TypeCharC* APC_Replace, TypeLength AL_StartPos=0)
|
||||
template<typename TSearchInfoList> ZCStringBase& ReplaceType
|
||||
(
|
||||
TypeCharC* APC_Search, TypeCharC* APC_Replace, TypeLength AL_StartPos=0
|
||||
)
|
||||
////////////////////////////////////////////////////////////
|
||||
{
|
||||
using ZNsMain::ZftGetLengthType ;
|
||||
|
||||
@ -2090,11 +2129,19 @@ namespace ZNsMain
|
||||
);
|
||||
///////////////////////////////////
|
||||
}/*
|
||||
template<typename TSearchInfoList> ZCStringBase&
|
||||
ReplaceType(TypeCharC* APC_Search, TypeCharC* APC_Replace, TypeLength AL_StartPos=0) */
|
||||
template<typename TSearchInfoList> ZCStringBase& ReplaceType
|
||||
(
|
||||
TypeCharC* APC_Search, TypeCharC* APC_Replace, TypeLength AL_StartPos=0
|
||||
)
|
||||
//////////////////////////////////////////////////////////*/
|
||||
|
||||
ZCStringBase& Replace(
|
||||
const ZCStringBase& AR_CStrSearch, const ZCStringBase& AR_CStrReplace, TypeLength AL_StartPos=0)
|
||||
ZCStringBase& Replace
|
||||
(
|
||||
const ZCStringBase& AR_CStrSearch ,
|
||||
const ZCStringBase& AR_CStrReplace,
|
||||
TypeLength AL_StartPos=0
|
||||
)
|
||||
/*#################*/
|
||||
{
|
||||
return Replace( AR_CStrSearch. data(), //////
|
||||
AR_CStrReplace.data(),
|
||||
@ -2103,8 +2150,11 @@ namespace ZNsMain
|
||||
AL_StartPos
|
||||
/*/////////*/ ); ////////////////////////////
|
||||
}/*
|
||||
ZCStringBase& Replace(
|
||||
const ZCStringBase& AR_CStrSearch, const ZCStringBase& AR_CStrReplace, TypeLength AL_StartPos=0) */
|
||||
ZCStringBase& Replace
|
||||
(
|
||||
const ZCStringBase& AR_CStrSearch, const ZCStringBase& AR_CStrReplace, TypeLength AL_StartPos=0
|
||||
)
|
||||
###################*/
|
||||
|
||||
|
||||
template<typename TSearchInfoList> ZCStringBase& ReplaceType(
|
||||
@ -2167,13 +2217,13 @@ namespace ZNsMain
|
||||
{
|
||||
*VPC_Dest++ = APC_Replace[i] ;
|
||||
}/*
|
||||
for(int i=0;i<AL_ReplaceLen;++i)*/
|
||||
//////////////////////////////*/
|
||||
|
||||
for(int j=AL_SectPos+AL_SectLen; j<AL_OriginLen; ++j)
|
||||
{
|
||||
*VPC_Dest++ = VPC_Origin2[j] ;
|
||||
}/*
|
||||
for(int j=AL_SectPos+AL_SectLen; j<AL_OriginLen; ++j)*/
|
||||
///////////////////////////////////////////////////*/
|
||||
|
||||
ARR_Saver.data()[VL_AllMemSize]=0;
|
||||
ARR_Saver.CorrectLength(VL_AllMemSize-1);
|
||||
@ -2189,13 +2239,13 @@ namespace ZNsMain
|
||||
{
|
||||
*VPC_Dest-- = VPC_Origin2[VL_NowIndex--] ;
|
||||
}/*
|
||||
while(VL_NowIndex>=AL_SectPos+AL_SectLen)*/
|
||||
///////////////////////////////////////*/
|
||||
|
||||
for(int i=AL_ReplaceLen-1; i>=0; --i)
|
||||
{
|
||||
*VPC_Dest-- = APC_Replace[i] ;
|
||||
}/*
|
||||
for(int i=AL_ReplaceLen-1; i>=0; --i)*/
|
||||
///////////////////////////////////*/
|
||||
|
||||
ARR_Saver.data()[VL_AllMemSize]=0;
|
||||
ARR_Saver.CorrectLength(VL_AllMemSize-1);
|
||||
@ -2221,19 +2271,19 @@ namespace ZNsMain
|
||||
{
|
||||
*VPC_Dest-- = APC_Origin[VL_NowIndex--] ;
|
||||
}/*
|
||||
while(VL_NowIndex>=AL_SectPos+AL_SectLen)*/
|
||||
///////////////////////////////////////*/
|
||||
|
||||
for(int i=AL_ReplaceLen-1; i>=0; --i)
|
||||
{
|
||||
*VPC_Dest-- = APC_Replace[i] ;
|
||||
}/*
|
||||
for(int i=AL_ReplaceLen-1; i>=0; --i)*/
|
||||
///////////////////////////////////*/
|
||||
|
||||
for(int j=AL_SectPos-1; j>=0; --j)
|
||||
{
|
||||
*VPC_Dest-- = APC_Origin[j] ;
|
||||
}/*
|
||||
for(int j=AL_SectPos-1; j>=0; --j)*/
|
||||
////////////////////////////////*/
|
||||
|
||||
ARR_Saver.data()[VL_AllMemSize]=0;
|
||||
ARR_Saver.CorrectLength(VL_AllMemSize-1);
|
||||
@ -2317,12 +2367,8 @@ namespace ZNsMain
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
if(APC_Origin==mpc_Data)
|
||||
{
|
||||
ReAllocKeep(VL_AllMemCnt); APC_Origin=mpc_Data; // APC_Origin 다시 초기화
|
||||
}
|
||||
else
|
||||
ReAllocKeep(VL_AllMemCnt);
|
||||
//else
|
||||
{ ReAllocKeep(VL_AllMemCnt); APC_Origin=mpc_Data;} // APC_Origin 다시 초기화
|
||||
else{ ReAllocKeep(VL_AllMemCnt); }
|
||||
|
||||
TypeChar* VPC_CharDest = mpc_Data + (VL_AllMemCnt-1);
|
||||
|
||||
@ -2341,13 +2387,13 @@ namespace ZNsMain
|
||||
{
|
||||
*VPC_CharDest-- = APC_Origin[VL_NowIndex--];
|
||||
}/*
|
||||
while(VL_NowIndex>=VL_InnerPos)*/
|
||||
/////////////////////////////*/
|
||||
|
||||
for(int p=AL_ReplaceLen-1; p>=0; --p)
|
||||
{
|
||||
*VPC_CharDest--=APC_Replace[p];
|
||||
}/*
|
||||
for(int p=AL_ReplaceLen-1; p>=0; --p)*/
|
||||
///////////////////////////////////*/
|
||||
|
||||
VL_NowIndex=AR_InfoList.ItD(VI_InfoIter).ml_Pos-1;
|
||||
|
||||
@ -2433,9 +2479,12 @@ namespace ZNsMain
|
||||
|
||||
TypeLength VL_SearchPos1; TypeLength VL_SearchPos2;
|
||||
|
||||
const bool CB_IsSearched = (
|
||||
const bool CB_IsSearched =
|
||||
(
|
||||
(VL_SearchPos1 = FindPos(mpc_Data, APC_Search1, ml_UseLen, AL_SearchLen1, AL_StartPos ))>=0 &&
|
||||
(VL_SearchPos2 = FindPos(mpc_Data, APC_Search2, ml_UseLen, AL_SearchLen2, VL_SearchPos1+AL_SearchLen1))>=0 );
|
||||
(VL_SearchPos2 = FindPos(mpc_Data, APC_Search2, ml_UseLen, AL_SearchLen2, VL_SearchPos1+AL_SearchLen1))>=0
|
||||
);
|
||||
//////////////////////////
|
||||
|
||||
if(CB_IsSearched)
|
||||
{
|
||||
@ -2445,7 +2494,7 @@ namespace ZNsMain
|
||||
{
|
||||
return *this; // 찾은 두 문자열 사이에 문자가 없을 때
|
||||
}/*
|
||||
if(VL_SearchPos2-VL_SearchPos1-AL_SearchLen1<1)*/
|
||||
/////////////////////////////////////////////*/
|
||||
|
||||
return ReplaceSection
|
||||
(
|
||||
@ -2575,9 +2624,12 @@ namespace ZNsMain
|
||||
|
||||
while(VL_SearchPos1<ml_UseLen)
|
||||
{
|
||||
const bool CB_IsSearched = (
|
||||
const bool CB_IsSearched =
|
||||
(
|
||||
(VL_SearchPos1=FindPos(mpc_Data, APC_Search1, ml_UseLen, AL_SearchLen1, VL_SearchPos1 ))>=0 &&
|
||||
(VL_SearchPos2=FindPos(mpc_Data, APC_Search2, ml_UseLen, AL_SearchLen2, VL_SearchPos1+AL_SearchLen1))>=0 );
|
||||
(VL_SearchPos2=FindPos(mpc_Data, APC_Search2, ml_UseLen, AL_SearchLen2, VL_SearchPos1+AL_SearchLen1))>=0
|
||||
);
|
||||
//////////////////////////
|
||||
|
||||
if(CB_IsSearched)
|
||||
{
|
||||
@ -2589,13 +2641,16 @@ namespace ZNsMain
|
||||
{
|
||||
VL_SearchPos1 = VL_SearchPos2 + AL_SearchLen2 ; continue;
|
||||
}/*
|
||||
if(VL_SearchPos2-VL_SearchPos1-AL_SearchLen1<1)*/
|
||||
/////////////////////////////////////////////*/
|
||||
|
||||
ReplaceSection( VL_SearchPos1+AL_SearchLen1,
|
||||
VL_SearchPos2-VL_SearchPos1-AL_SearchLen1,
|
||||
APC_Replace,
|
||||
AL_ReplaceLen
|
||||
/*/////////*/ ); /////////////////////////////////////////
|
||||
ReplaceSection //////////////////////////////////
|
||||
(
|
||||
VL_SearchPos1+AL_SearchLen1
|
||||
, VL_SearchPos2-VL_SearchPos1-AL_SearchLen1
|
||||
, APC_Replace
|
||||
, AL_ReplaceLen
|
||||
);
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
VL_SearchPos1 += AL_SearchLen1 + AL_ReplaceLen + AL_SearchLen2 ;
|
||||
}
|
||||
@ -2603,10 +2658,10 @@ namespace ZNsMain
|
||||
{
|
||||
ReplaceSection /////////////////////
|
||||
(
|
||||
VL_SearchPos1 ,
|
||||
VL_SearchPos2-VL_SearchPos1+AL_SearchLen2,
|
||||
APC_Replace ,
|
||||
AL_ReplaceLen
|
||||
VL_SearchPos1
|
||||
, VL_SearchPos2-VL_SearchPos1+AL_SearchLen2
|
||||
, APC_Replace
|
||||
, AL_ReplaceLen
|
||||
);
|
||||
/////////////////////////////////////
|
||||
|
||||
@ -2717,8 +2772,8 @@ namespace ZNsMain
|
||||
|
||||
__for1(TypeLength, i, CL_MaxLoop)
|
||||
{
|
||||
VL_NeedMemory +=
|
||||
AL_ReplaceLen-AR_InfoList.ItD(VI_SearchIter).size() ;
|
||||
VL_NeedMemory += AL_ReplaceLen -
|
||||
AR_InfoList.ItD(VI_SearchIter).size() ;
|
||||
|
||||
AR_InfoList.MoveNextIter(VI_SearchIter);
|
||||
}/*
|
||||
@ -2751,8 +2806,9 @@ namespace ZNsMain
|
||||
|
||||
ReAllocAdd(AL_InsertLen, true);
|
||||
|
||||
int VL_NowIndex= ml_UseLen-1 ;
|
||||
TypeChar* VPC_Dest = mpc_Data+ml_UseLen+AL_InsertLen-1 ;
|
||||
int VL_NowIndex = ml_UseLen-1 ;
|
||||
TypeChar* VPC_Dest =
|
||||
mpc_Data+ml_UseLen+AL_InsertLen-1 ;
|
||||
|
||||
while(VL_NowIndex>=AL_InsertPos)
|
||||
{ *VPC_Dest-- = mpc_Data[VL_NowIndex--] ; }
|
||||
@ -2870,7 +2926,7 @@ namespace ZNsMain
|
||||
{
|
||||
ARRL_StartPos=-1; return ARR_CStringSave;
|
||||
}/*
|
||||
if(AL_OriginLen<1 || ARRL_StartPos>=AL_OriginLen)*/
|
||||
///////////////////////////////////////////////*/
|
||||
|
||||
TypeLength VL_Pos1 = FindPos
|
||||
(
|
||||
@ -3317,7 +3373,7 @@ namespace ZNsMain
|
||||
|
||||
template<typename TFunctor> static void Split /*#################*/
|
||||
(
|
||||
TFunctor AR_TFunctor ,
|
||||
TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_OriginChar,
|
||||
TypeCharC* APC_SearchChar,
|
||||
TypeLength AL_OriginLen ,
|
||||
@ -3340,9 +3396,11 @@ namespace ZNsMain
|
||||
|
||||
if(AL_SearchLen<1)
|
||||
{
|
||||
AR_TFunctor(APC_OriginChar, AL_OriginLen); return;
|
||||
ZtCTypeData<TFunctor>::GetObjRef(AO_TFunctor)
|
||||
(APC_OriginChar, AL_OriginLen);
|
||||
return; /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
}/*
|
||||
if(AL_SearchLen<1)*/
|
||||
////////////////*/
|
||||
|
||||
TypeLength VL_Loop =AL_OriginLen-AL_SearchLen;
|
||||
TypeLength VL_CopyStartPos=0 ;
|
||||
@ -3356,7 +3414,7 @@ namespace ZNsMain
|
||||
{
|
||||
if(APC_OriginChar[VL_Index+j]!=APC_SearchChar[j]) break;
|
||||
}/*
|
||||
for(j=0; j<AL_SearchLen; ++j)*/
|
||||
///////////////////////////*/
|
||||
|
||||
if(j!=AL_SearchLen) // 못찾은 경우
|
||||
{
|
||||
@ -3374,22 +3432,25 @@ namespace ZNsMain
|
||||
) ;
|
||||
//////////////////////////////////////
|
||||
}/*
|
||||
if(VL_Index>VL_CopyStartPos)*/
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
|
||||
VL_CopyStartPos=VL_Index+=AL_SearchLen;
|
||||
VL_CopyStartPos = VL_Index += AL_SearchLen;
|
||||
}/*
|
||||
while(VL_Index<=VL_Loop)*/
|
||||
|
||||
|
||||
if(VL_CopyStartPos>=AL_OriginLen)
|
||||
{
|
||||
AR_TFunctor(RR(VO_CStringList)); return;
|
||||
ZtCTypeData<TFunctor>::
|
||||
GetObjRef(AO_TFunctor)(RR(VO_CStringList));
|
||||
return; //////////////
|
||||
}/*
|
||||
if(VL_CopyStartPos>=AL_OriginLen)*/
|
||||
|
||||
if(VO_CStringList.IsEmpty() && VL_CopyStartPos==0)
|
||||
{
|
||||
AR_TFunctor(APC_OriginChar, AL_OriginLen) ;
|
||||
ZtCTypeData<TFunctor>::GetObjRef
|
||||
(AO_TFunctor)(APC_OriginChar, AL_OriginLen) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3399,13 +3460,14 @@ namespace ZNsMain
|
||||
) ;
|
||||
//////////////////////////////////////
|
||||
|
||||
AR_TFunctor(RR(VO_CStringList)) ;
|
||||
ZtCTypeData<TFunctor>::
|
||||
GetObjRef(AO_TFunctor)(RR(VO_CStringList)) ;
|
||||
}/*
|
||||
else*/
|
||||
}/*
|
||||
template<typename TFunctor> static void Split ####################
|
||||
(
|
||||
TFunctor AR_TFunctor ,
|
||||
TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_OriginChar,
|
||||
TypeCharC* APC_SearchChar,
|
||||
TypeLength AL_OriginLen ,
|
||||
@ -3415,16 +3477,16 @@ namespace ZNsMain
|
||||
|
||||
|
||||
template<typename TFunctor> void Split( //////////////////////////
|
||||
TFunctor AR_TFunctor ,
|
||||
TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_Search ,
|
||||
TypeLength AL_SearchLen ,
|
||||
TypeLength AL_StartPos=0
|
||||
/*//////////*/ ) /////////////////////////////////////////////////
|
||||
{
|
||||
Split(AR_TFunctor, mpc_Data+AL_StartPos, APC_Search, ml_UseLen, AL_SearchLen);
|
||||
Split(AO_TFunctor, mpc_Data+AL_StartPos, APC_Search, ml_UseLen, AL_SearchLen);
|
||||
}/*
|
||||
template<typename TFunctor> void Split( //////////////////////////
|
||||
TFunctor AR_TFunctor ,
|
||||
TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_Search ,
|
||||
TypeLength AL_SearchLen,
|
||||
TypeLength AL_StartPos=0
|
||||
@ -3433,7 +3495,7 @@ namespace ZNsMain
|
||||
|
||||
template<typename TFunctor, typename TSplitList> static void SplitEx
|
||||
(
|
||||
TFunctor AR_TFunctor ,
|
||||
TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_OriginChar ,
|
||||
TypeCharC* APC_SearchChar ,
|
||||
TypeLength AL_OriginLen ,
|
||||
@ -3456,7 +3518,9 @@ namespace ZNsMain
|
||||
|
||||
if(AL_SearchLen<1)
|
||||
{
|
||||
AR_TFunctor(APC_OriginChar, AL_OriginLen); return;
|
||||
ZtCTypeData<TFunctor>::GetObjRef
|
||||
(AO_TFunctor)(APC_OriginChar, AL_OriginLen);
|
||||
return; ////////////////////////
|
||||
}/*
|
||||
if(AL_SearchLen<1)*/
|
||||
|
||||
@ -3498,13 +3562,15 @@ namespace ZNsMain
|
||||
|
||||
if(VL_CopyStartPos>=AL_OriginLen)
|
||||
{
|
||||
AR_TFunctor(RR(VO_CStringList)); return;
|
||||
ZtCTypeData<TFunctor>::GetObjRef
|
||||
(AO_TFunctor)(RR(VO_CStringList)); return;
|
||||
}/*
|
||||
if(VL_CopyStartPos>=AL_OriginLen)*/
|
||||
|
||||
if(VO_CStringList.IsEmpty() && VL_CopyStartPos==0)
|
||||
{
|
||||
AR_TFunctor(APC_OriginChar,AL_OriginLen) ;
|
||||
ZtCTypeData<TFunctor>::GetObjRef
|
||||
(AO_TFunctor)(APC_OriginChar, AL_OriginLen) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3515,13 +3581,14 @@ namespace ZNsMain
|
||||
) ;
|
||||
///////////////////////////////////////
|
||||
|
||||
AR_TFunctor(RR(VO_CStringList)) ;
|
||||
ZtCTypeData<TFunctor>::GetObjRef
|
||||
(AO_TFunctor)(RR(VO_CStringList)) ;
|
||||
}/*
|
||||
else*/
|
||||
}/*
|
||||
template<typename TFunctor, typename TSplitList> static void SplitEx
|
||||
(
|
||||
TFunctor AR_TFunctor ,
|
||||
TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_OriginChar,
|
||||
TypeCharC* APC_SearchChar,
|
||||
TypeLength AL_OriginLen ,
|
||||
@ -3531,14 +3598,14 @@ namespace ZNsMain
|
||||
|
||||
|
||||
template<typename TFunctor, typename TSplitList> /////////////////
|
||||
void SplitEx( TFunctor AR_TFunctor ,
|
||||
void SplitEx( TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_SearchChar,
|
||||
TypeLength AL_SearchLen ,
|
||||
TypeLength AL_StartPos=0
|
||||
/*///////*/ ) ////////////////////////////////////////////////////
|
||||
{
|
||||
SplitEx<TFunctor, TSplitList>( ///////////////
|
||||
AR_TFunctor ,
|
||||
AO_TFunctor ,
|
||||
mpc_Data+AL_StartPos,
|
||||
APC_SearchChar ,
|
||||
ml_UseLen ,
|
||||
@ -3546,7 +3613,7 @@ namespace ZNsMain
|
||||
/*//////////*/ ); ////////////////////////////
|
||||
}/*
|
||||
template<typename TFunctor, typename TSplitList> /////////////////
|
||||
void SplitEx( TFunctor AR_TFunctor ,
|
||||
void SplitEx( TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_SearchChar,
|
||||
TypeLength AL_SearchLen ,
|
||||
TypeLength AL_StartPos=0
|
||||
@ -3555,7 +3622,7 @@ namespace ZNsMain
|
||||
|
||||
template<typename TFunctor> static void SplitEach /*############*/
|
||||
(
|
||||
TFunctor AR_TFunctor ,
|
||||
TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_OriginChar ,
|
||||
TypeCharC* APC_SearchChar ,
|
||||
TypeLength AL_OriginLen ,
|
||||
@ -3565,13 +3632,15 @@ namespace ZNsMain
|
||||
/*##############################################################*/
|
||||
{
|
||||
/* bool AB_DoExecNull 이 true 이면 구분 문자로 잘린 문자열 길이
|
||||
가 0 인 경우에도 AR_TFunctor 를 수행한다. */
|
||||
가 0 인 경우에도 AO_TFunctor 를 수행한다. */
|
||||
|
||||
if(AL_OriginLen<1) return; int VL_SearchCount=0; /*####################*/
|
||||
|
||||
if(AL_SearchLen<1)
|
||||
{
|
||||
AR_TFunctor( APC_OriginChar, AL_OriginLen , ++VL_SearchCount); return;
|
||||
ZtCTypeData<TFunctor>::GetObjRef(AO_TFunctor)
|
||||
(APC_OriginChar, AL_OriginLen , ++VL_SearchCount);
|
||||
return; /////////////////////////////////////
|
||||
}/*
|
||||
if(AL_SearchLen<1)*/
|
||||
|
||||
@ -3599,17 +3668,18 @@ namespace ZNsMain
|
||||
|
||||
if(VL_Index>VL_CopyStartPos)
|
||||
{
|
||||
AR_TFunctor
|
||||
ZtCTypeData<TFunctor>::GetObjRef(AO_TFunctor)
|
||||
(
|
||||
APC_OriginChar+VL_CopyStartPos,
|
||||
VL_Index -VL_CopyStartPos,
|
||||
++VL_SearchCount
|
||||
) ;
|
||||
///////////
|
||||
/////////////////////////////////////////////
|
||||
}
|
||||
else if(AB_DoExecNull==true)
|
||||
{
|
||||
AR_TFunctor(0, 0, ++VL_SearchCount) ;
|
||||
ZtCTypeData<TFunctor>::GetObjRef
|
||||
(AO_TFunctor)(0, 0, ++VL_SearchCount) ;
|
||||
}/*
|
||||
else if(AB_DoExecNull==true)*/
|
||||
|
||||
@ -3622,26 +3692,26 @@ namespace ZNsMain
|
||||
|
||||
if(VL_SearchCount==0 && VL_CopyStartPos==0)
|
||||
{
|
||||
AR_TFunctor ////////
|
||||
ZtCTypeData<TFunctor>::GetObjRef(AO_TFunctor)
|
||||
(
|
||||
APC_OriginChar, AL_OriginLen, ++VL_SearchCount
|
||||
) ;
|
||||
////////////////////
|
||||
/////////////////////////////////////////////
|
||||
}
|
||||
else
|
||||
{
|
||||
AR_TFunctor ////////
|
||||
ZtCTypeData<TFunctor>::GetObjRef(AO_TFunctor)
|
||||
(
|
||||
APC_OriginChar+VL_CopyStartPos,
|
||||
AL_OriginLen -VL_CopyStartPos,
|
||||
++VL_SearchCount
|
||||
) ;
|
||||
////////////////////
|
||||
/////////////////////////////////////////////
|
||||
}
|
||||
}/*
|
||||
template<typename TFunctor> static void SplitEach ################
|
||||
(
|
||||
TFunctor AR_TFunctor ,
|
||||
TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_OriginChar ,
|
||||
TypeCharC* APC_SearchChar ,
|
||||
TypeLength AL_OriginLen ,
|
||||
@ -3652,7 +3722,7 @@ namespace ZNsMain
|
||||
|
||||
|
||||
template<typename TFunctor> void SplitEach( /*##################*/
|
||||
TFunctor AR_TFunctor ,
|
||||
TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_SearchChar,
|
||||
TypeLength AL_SearchLen ,
|
||||
TypeLength AL_StartPos=0 ,
|
||||
@ -3660,7 +3730,7 @@ namespace ZNsMain
|
||||
/*#########*/ ) /*##############################################*/
|
||||
{
|
||||
SplitEach<TFunctor>( /*####################*/
|
||||
AR_TFunctor ,
|
||||
AO_TFunctor ,
|
||||
mpc_Data+AL_StartPos,
|
||||
APC_SearchChar ,
|
||||
ml_UseLen ,
|
||||
@ -3669,7 +3739,7 @@ namespace ZNsMain
|
||||
/*########*/ ); /*########################*/
|
||||
}/*
|
||||
template<typename TFunctor> void SplitEach( #####################
|
||||
TFunctor AR_TFunctor ,
|
||||
TFunctor AO_TFunctor ,
|
||||
TypeCharC* APC_SearchChar,
|
||||
TypeLength AL_SearchLen ,
|
||||
TypeLength AL_StartPos=0 ,
|
||||
|
Reference in New Issue
Block a user