commit 2025-08-19 21:03 edit a bit ZCppMain/ZtCStringEx.H

This commit is contained in:
2025-08-19 21:03:39 +09:00
parent 7a36c47bae
commit e8cf6460cb

View File

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