commit 2025-08-19 14:15 edit a bit ZCppMain/ZtCMainChars.H

This commit is contained in:
2025-08-19 14:15:42 +09:00
parent 1a4120ed22
commit 15ba79c33c

View File

@ -1626,20 +1626,22 @@ namespace ZNsMain
return -1; return -1;
//endif //endif
bool VB_IsOK=ZtCMainChars::DoStart( bool VB_IsOK = ZtCMainChars::DoStart
APC_Origin2 , (
APC_Search +VL_MatchLen, APC_Origin2 ,
AL_OriginLen2 , APC_Search +VL_MatchLen,
AL_SearchLength-VL_MatchLen AL_OriginLen2 ,
/*/////////*/ ); AL_SearchLength-VL_MatchLen
);
////////////////////////////////////
if(VB_IsOK==true) if(VB_IsOK==true)
{ {
ARRL_SearchedPos1=AL_OriginLen1-VL_MatchLen; ARRL_SearchedPos1=AL_OriginLen1-VL_MatchLen
ARRL_SearchedPos2=0 ; ; ARRL_SearchedPos2=0
ARRL_SearchedLen1=VL_MatchLen; ; ARRL_SearchedLen1=VL_MatchLen
ARRL_SearchedLen2=AL_SearchLength-VL_MatchLen; ; ARRL_SearchedLen2=AL_SearchLength-VL_MatchLen
;
return 0; return 0;
}/* }/*
if(VB_IsOK==true)*/ if(VB_IsOK==true)*/
@ -1766,14 +1768,16 @@ namespace ZNsMain
template< template<
typename TReadyExec, typename TTyChars, typename TString> typename TReadyExec, typename TTyChars, typename TString>
static bool FindPosReady( static bool FindPosReady
TReadyExec AR_CReadyExec , (
const TTyChars& AR_CCharsOrigin , TReadyExec AR_CReadyExec ,
const TTyChars& AR_CCharsSearch , const TTyChars& AR_CCharsOrigin ,
TString& ARR_CStrReadyBuff, const TTyChars& AR_CCharsSearch ,
TypeLength& ARRL_StartPos , // AR_CCharsOrigin.data() 의 offset 이다. TString& ARR_CStrReadyBuff,
ZNsEnum::ZERun& ARRE_ERun TypeLength& ARRL_StartPos , // AR_CCharsOrigin.data() 의 offset 이다.
/*//////////*/ ) ////////////////////////////////////////*/ ZNsEnum::ZERun& ARRE_ERun
)
/////////////////////////////////////////////////////////////
{ {
/*########################################################################################### /*###########################################################################################
@ -1826,9 +1830,9 @@ namespace ZNsMain
if(VL_ReadyBuffSize>0) if(VL_ReadyBuffSize>0)
{ {
ARRE_ERun=AR_CReadyExec. ARRE_ERun =AR_CReadyExec.
OnMeetNormal(ARR_CStrReadyBuff.data(), VL_ReadyBuffSize); OnMeetNormal(ARR_CStrReadyBuff.data(), VL_ReadyBuffSize);
ARR_CStrReadyBuff=""; ARR_CStrReadyBuff ="" ;
if(ARRE_ERun==ZNsMain::ZNsEnum::ZERun_NO) return false; if(ARRE_ERun==ZNsMain::ZNsEnum::ZERun_NO) return false;
}/* }/*
@ -1844,22 +1848,25 @@ namespace ZNsMain
TypeLength VL_ValidLen=VO_CCharsOrigin.size()-VL_MatchLen; TypeLength VL_ValidLen=VO_CCharsOrigin.size()-VL_MatchLen;
if(VL_MatchLen>0) if(VL_MatchLen>0)
ARR_CStrReadyBuff.append(VO_CCharsOrigin.data()+VL_ValidLen, VL_MatchLen); ARR_CStrReadyBuff.append
(VO_CCharsOrigin.data()+VL_ValidLen, VL_MatchLen);
if(VL_ValidLen>0) if(VL_ValidLen>0)
ARRE_ERun=AR_CReadyExec.OnMeetNormal(VO_CCharsOrigin.data(), VL_ValidLen); ARRE_ERun=AR_CReadyExec.OnMeetNormal
//endif (VO_CCharsOrigin.data() , VL_ValidLen);
return false; return false;
}/* }/*
if(VL_ReadyBuffSize+AR_CCharsOrigin.size()<AR_CCharsSearch.size())*/ if(VL_ReadyBuffSize+AR_CCharsOrigin.size()<AR_CCharsSearch.size())*/
bool VB_IsOK=ZtCMainChars::DoStart( bool VB_IsOK=ZtCMainChars::DoStart
VO_CCharsOrigin.data() , (
AR_CCharsSearch.data()+VL_ReadyBuffSize, VO_CCharsOrigin.data() ,
VO_CCharsOrigin.size() , AR_CCharsSearch.data()+VL_ReadyBuffSize,
AR_CCharsSearch.size()-VL_ReadyBuffSize VO_CCharsOrigin.size() ,
/*/////////*/ ); AR_CCharsSearch.size()-VL_ReadyBuffSize
);
//////////////////////////////////
if(VB_IsOK==true) if(VB_IsOK==true)
{ {
@ -1880,8 +1887,8 @@ namespace ZNsMain
ARRE_ERun=AR_CReadyExec.OnMeetReady( ARRE_ERun=AR_CReadyExec.OnMeetReady(
VO_CCharsOrigin.data(), VL_ReadyLen, ZNsMain::ZNsEnum::ZERun_NO); VO_CCharsOrigin.data(), VL_ReadyLen, ZNsMain::ZNsEnum::ZERun_NO);
ARRL_StartPos +=VL_ReadyLen; ARRL_StartPos += VL_ReadyLen;
ARR_CStrReadyBuff="" ; return true; ARR_CStrReadyBuff = "" ; return true;
}/* }/*
if(VB_IsOK==true)*/ if(VB_IsOK==true)*/
@ -1907,12 +1914,18 @@ namespace ZNsMain
if(VL_FindPos<0) if(VL_FindPos<0)
{ {
ARRL_StartPos = -1; ARRL_StartPos = -1;
ARRE_ERun=AR_CReadyExec.OnMeetNormal( ARRE_ERun=AR_CReadyExec.OnMeetNormal
VO_CCharsOrigin.data(), VO_CCharsOrigin.size()-VL_MatchLen ); (
ARR_CStrReadyBuff.append( VO_CCharsOrigin.data()
VO_CCharsOrigin.data()+VO_CCharsOrigin.size()-VL_MatchLen, VL_MatchLen ); , VO_CCharsOrigin.size()-VL_MatchLen
);
return false; ARR_CStrReadyBuff.append
(
VO_CCharsOrigin.data() +
VO_CCharsOrigin.size() - VL_MatchLen
, VL_MatchLen
);
return false; //////////////////////////////////
}/* }/*
if(VL_FindPos<0)*/ if(VL_FindPos<0)*/
@ -1925,22 +1938,28 @@ namespace ZNsMain
}/* }/*
if(VL_FindPos>0)*/ if(VL_FindPos>0)*/
ARRE_ERun =AR_CReadyExec.OnMeetReady( ARRE_ERun = AR_CReadyExec.OnMeetReady
VO_CCharsOrigin.data()+VL_FindPos, AR_CCharsSearch.size(), ZNsMain::ZNsEnum::ZERun_NO); (
ARRL_StartPos+=(VL_FindPos+AR_CCharsSearch.size()); VO_CCharsOrigin.data()+VL_FindPos
, AR_CCharsSearch.size()
, ZNsMain::ZNsEnum::ZERun_NO
);
ARRL_StartPos += (VL_FindPos+AR_CCharsSearch.size());
return true; return true; ////////////////////////////////////////
}/* }/*
template< template<
typename TReadyExec, typename TTyChars, typename TString> typename TReadyExec, typename TTyChars, typename TString>
static bool FindPosReady( static bool FindPosReady
TReadyExec AR_CReadyExec , (
const TTyChars& AR_CCharsOrigin , TReadyExec AR_CReadyExec ,
const TTyChars& AR_CCharsSearch , const TTyChars& AR_CCharsOrigin ,
TString& ARR_CStrReadyBuff, const TTyChars& AR_CCharsSearch ,
TypeLength& ARRL_StartPos , // AR_CCharsOrigin.data() 의 offset 이다. TString& ARR_CStrReadyBuff,
ZNsEnum::ZERun& ARRE_ERun TypeLength& ARRL_StartPos , // AR_CCharsOrigin.data() 의 offset 이다.
////////////// ) ////////////////////////////////////////*/ ZNsEnum::ZERun& ARRE_ERun
)
///////////////////////////////////////////////////////////*/
template< template<
typename TReadyExec, typename TStringData> ////////////// typename TReadyExec, typename TStringData> //////////////
@ -2014,8 +2033,8 @@ namespace ZNsMain
typedef ZNsMain::ZtCCheckRef<THelpType> ZCCheckRef ; typedef ZNsMain::ZtCCheckRef<THelpType> ZCCheckRef ;
typedef ZCCheckRef::TypeData TypeObject ; typedef ZCCheckRef::TypeData TypeObject ;
ZCChars VO_CCharsOrigin( ZCChars VO_CCharsOrigin
AR_CCharsOrigin.data(), AR_CCharsOrigin.size() ) ; (AR_CCharsOrigin.data(), AR_CCharsOrigin.size());
VO_CCharsOrigin += ARRL_StartPos ; VO_CCharsOrigin += ARRL_StartPos ;
@ -2095,12 +2114,14 @@ namespace ZNsMain
if(VL_ReadyBuffSize+AR_CCharsOrigin.size()<AR_CCharsSearch.size())*/ if(VL_ReadyBuffSize+AR_CCharsOrigin.size()<AR_CCharsSearch.size())*/
bool VB_IsOK=ZtCMainChars::DoStart( bool VB_IsOK=ZtCMainChars::DoStart
VO_CCharsOrigin.data() , (
AR_CCharsSearch.data()+VL_ReadyBuffSize, VO_CCharsOrigin.data() ,
VO_CCharsOrigin.size() , AR_CCharsSearch.data()+VL_ReadyBuffSize,
AR_CCharsSearch.size()-VL_ReadyBuffSize VO_CCharsOrigin.size() ,
/*////////*/ ); AR_CCharsSearch.size()-VL_ReadyBuffSize
);
//////////////////////////////////
if(VB_IsOK==true) if(VB_IsOK==true)
{ {
@ -2257,18 +2278,21 @@ namespace ZNsMain
TypeLength& ARRL_StartPos , // AP_OriginData 의 offset 이다. TypeLength& ARRL_StartPos , // AP_OriginData 의 offset 이다.
ZNsEnum::ZERun& ARRE_ERun ZNsEnum::ZERun& ARRE_ERun
) )
///////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////*/
template<typename TTyChars, typename TStringData> ////////////////// template
static bool FindPosReadyValid( <typename TTyChars, typename TStringData>
const TTyChars& AR_CCharsOrigin , static bool FindPosReadyValid
const TTyChars& AR_CCharsSearch , (
TStringData& ARR_CStrReadyBuff, const TTyChars& AR_CCharsOrigin ,
TypeLength& ARRL_StartPos , const TTyChars& AR_CCharsSearch ,
TypeLength& ARRL_ValidReady , // ARR_CStrReadyBuff 의 유효길이 TStringData& ARR_CStrReadyBuff,
TypeLength& ARRL_ValidLen TypeLength& ARRL_StartPos ,
/*//////////*/ ) /////////////////////////////////////////////////*/ TypeLength& ARRL_ValidReady , // ARR_CStrReadyBuff 의 유효길이
TypeLength& ARRL_ValidLen
)
///////////////////////////////////////////*/
{ {
// ARRL_ValidReady 은 0 이나 ARR_CStrReadyBuff.size() 중 한 값이다. // ARRL_ValidReady 은 0 이나 ARR_CStrReadyBuff.size() 중 한 값이다.
@ -2317,12 +2341,14 @@ namespace ZNsMain
{ {
// 찾는 데이타의 길이는 AR_CCharsOrigin.size() 이 된다. // 찾는 데이타의 길이는 AR_CCharsOrigin.size() 이 된다.
bool VB_IsOK=ZtCMainChars::DoStart( bool VB_IsOK=ZtCMainChars::DoStart
VO_CCharsOrigin.data() , (
AR_CCharsSearch.data()+VL_ReadyBuffSize, VO_CCharsOrigin.data() ,
VO_CCharsOrigin.size() , AR_CCharsSearch.data()+VL_ReadyBuffSize,
VO_CCharsOrigin.size() VO_CCharsOrigin.size() ,
/*////////*/ ); VO_CCharsOrigin.size()
);
//////////////////////////////////
if(VB_IsOK==true) if(VB_IsOK==true)
{ {
@ -2341,29 +2367,33 @@ namespace ZNsMain
ARRL_ValidReady = VL_ReadyBuffSize; ARRL_ValidReady = VL_ReadyBuffSize;
ARRL_StartPos =-1; ARRL_StartPos =-1;
VL_MatchLen=ZtCMainChars::GetMatchLenFromEnd( VL_MatchLen = ZtCMainChars::GetMatchLenFromEnd
VO_CCharsOrigin.data(), (
AR_CCharsSearch.data(), VO_CCharsOrigin.data(),
VO_CCharsOrigin.size(), AR_CCharsSearch.data(),
VO_CCharsOrigin.size() VO_CCharsOrigin.size(),
/*/////////*/ ); //////////////////////////// VO_CCharsOrigin.size()
);
//////////////////////////////////////////////
ARRL_ValidLen=AR_CCharsOrigin.size()-VL_MatchLen; ARRL_ValidLen=AR_CCharsOrigin.size()-VL_MatchLen;
if(VL_MatchLen>0) ARR_CStrReadyBuff. if(VL_MatchLen>0) ARR_CStrReadyBuff.append
append(VO_CCharsOrigin.data()+ARRL_ValidLen, VL_MatchLen); (VO_CCharsOrigin.data()+ARRL_ValidLen, VL_MatchLen);
return false; return false;
}/* }/*
if(VL_ReadyBuffSize+AR_CCharsOrigin.size()<AR_CCharsSearch.size())*/ if(VL_ReadyBuffSize+AR_CCharsOrigin.size()<AR_CCharsSearch.size())*/
bool VB_IsOK=ZtCMainChars::DoStart( bool VB_IsOK=ZtCMainChars::DoStart
VO_CCharsOrigin.data() , (
AR_CCharsSearch.data()+VL_ReadyBuffSize, VO_CCharsOrigin.data() ,
VO_CCharsOrigin.size() , AR_CCharsSearch.data()+VL_ReadyBuffSize,
AR_CCharsSearch.size()-VL_ReadyBuffSize VO_CCharsOrigin.size() ,
/*/////////*/ ); AR_CCharsSearch.size()-VL_ReadyBuffSize
);
//////////////////////////////////
ARR_CStrReadyBuff=""; ARR_CStrReadyBuff="";
@ -2380,13 +2410,13 @@ namespace ZNsMain
VL_MatchLen=0; VL_MatchLen=0;
TypeLength VL_FindPos =ZtCMainChars::FindPosLen( TypeLength VL_FindPos = ZtCMainChars::FindPosLen
VO_CCharsOrigin.data(), (
AR_CCharsSearch.data(), VO_CCharsOrigin.data(), AR_CCharsSearch.data(),
VO_CCharsOrigin.size(), VO_CCharsOrigin.size(), AR_CCharsSearch.size(),
AR_CCharsSearch.size(), RR(VL_MatchLen)
RR(VL_MatchLen) );
/*/////////*/ ); /////////////////////////////// ////////////////////////////////////////////////
ARRL_ValidReady = VL_ReadyBuffSize; ARRL_ValidReady = VL_ReadyBuffSize;
@ -2404,17 +2434,20 @@ namespace ZNsMain
ARRL_ValidLen =VL_FindPos; ARRL_ValidLen =VL_FindPos;
ARRL_StartPos+=(VL_FindPos+AR_CCharsSearch.size()); ARRL_StartPos+=(VL_FindPos+AR_CCharsSearch.size());
return true; return true; /////////////
}/* }/*
template<typename TTyChars, typename TStringData> ////////////////// template
static bool FindPosReadyValid( <typename TTyChars, typename TStringData>
const TTyChars& AR_CCharsOrigin , static bool FindPosReadyValid
const TTyChars& AR_CCharsSearch , (
TStringData& ARR_CStrReadyBuff, const TTyChars& AR_CCharsOrigin ,
TypeLength& ARRL_StartPos , const TTyChars& AR_CCharsSearch ,
TypeLength& ARRL_ValidReady , // ARR_CStrReadyBuff 의 유효길이 TStringData& ARR_CStrReadyBuff,
TypeLength& ARRL_ValidLen TypeLength& ARRL_StartPos ,
////////////// ) /////////////////////////////////////////////////*/ TypeLength& ARRL_ValidReady , // ARR_CStrReadyBuff 의 유효길이
TypeLength& ARRL_ValidLen
)
///////////////////////////////////////////*/
template<typename TString> template<typename TString>
@ -2472,11 +2505,9 @@ namespace ZNsMain
{ {
++VL_SearchCount; VL_SearchOffset=0; ++VL_SearchCount; VL_SearchOffset=0;
}/* }/*
if(++VL_SearchOffset==AL_SearchLen)*/ /////////////////////////////////*/
} }
else else VL_SearchOffset=0;
VL_SearchOffset=0;
/*else*/
}/* }/*
__for0(TypeLength, i, AL_OriginLen)*/ __for0(TypeLength, i, AL_OriginLen)*/
@ -2558,21 +2589,23 @@ namespace ZNsMain
template<typename TFunctor> static void SplitEach( /////////////// template<typename TFunctor> static void SplitEach( ///////////////
TFunctor AR_TFunctor , TFunctor AO_Functor ,
TypeCharC* APC_OriginChar , TypeCharC* APC_OriginChar ,
TypeCharC* APC_SearchChar , TypeCharC* APC_SearchChar ,
TypeLength AL_OriginLen , TypeLength AL_OriginLen ,
TypeLength AL_SearchLen , TypeLength AL_SearchLen ,
bool AB_DoExecNull=true // 구분 문자로 잘린 문자열 길이가 0 인 경우에도 펑크터를 수행한다. bool AB_DoExecNull=true // 구분 문자로 잘린 문자열 길이가 0 인 경우에도 펑크터를 수행한다.
/*//////////*/ ) ///////////////////////////////////////////////*/ /*//////////*/ ) ///////////////////////////////////////////////*/
{ {
if(AL_OriginLen<1 || AL_OriginLen<AL_SearchLen) return; if(AL_OriginLen<1 || AL_OriginLen<AL_SearchLen) return;
int VI_SearchCount=0; // AR_TFunctor() 에게 찾은 번호를 전달하기 위한 변수 int VI_SearchCount=0; // AO_Functor() 에게 찾은 번호를 전달하기 위한 변수
if(AL_SearchLen<1) if(AL_SearchLen<1)
{ {
AR_TFunctor(APC_OriginChar, AL_OriginLen, ++VI_SearchCount); return; ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(APC_OriginChar, AL_OriginLen, ++VI_SearchCount);
return;
}/* }/*
if(AL_SearchLen<1)*/ if(AL_SearchLen<1)*/
@ -2600,12 +2633,18 @@ namespace ZNsMain
if(VL_Index>VL_CopyStartPos) if(VL_Index>VL_CopyStartPos)
{ {
AR_TFunctor( ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
APC_OriginChar+VL_CopyStartPos, VL_Index-VL_CopyStartPos, ++VI_SearchCount) ; (
APC_OriginChar+VL_CopyStartPos ,
VL_Index -VL_CopyStartPos ,
++VI_SearchCount
) ;
////////////////////////////////////////////
} }
else if(AB_DoExecNull==true) else if(AB_DoExecNull==true)
{ {
AR_TFunctor(0, 0, ++VI_SearchCount) ; ZtCTypeData<TFunctor>::GetObjRef
(AO_Functor)(0, 0, ++VI_SearchCount) ;
}/* }/*
else if(AB_DoExecNull==true)*/ else if(AB_DoExecNull==true)*/
@ -2618,17 +2657,23 @@ namespace ZNsMain
if(VI_SearchCount==0 && VL_CopyStartPos==0) if(VI_SearchCount==0 && VL_CopyStartPos==0)
{ {
AR_TFunctor(APC_OriginChar, AL_OriginLen, ++VI_SearchCount) ; ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(APC_OriginChar, AL_OriginLen, ++VI_SearchCount) ;
} }
else else
{ {
AR_TFunctor( ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
APC_OriginChar+VL_CopyStartPos, AL_OriginLen-VL_CopyStartPos, ++VI_SearchCount) ; (
APC_OriginChar+VL_CopyStartPos ,
AL_OriginLen -VL_CopyStartPos ,
++VI_SearchCount
) ;
////////////////////////////////////////////
}/* }/*
else*/ else*/
}/* }/*
template<typename TFunctor> static void SplitEach( /////////////// template<typename TFunctor> static void SplitEach( ///////////////
TFunctor AR_TFunctor , TFunctor AO_Functor ,
TypeCharC* APC_OriginChar , TypeCharC* APC_OriginChar ,
TypeCharC* APC_SearchChar , TypeCharC* APC_SearchChar ,
TypeLength AL_OriginLen , TypeLength AL_OriginLen ,
@ -2637,17 +2682,17 @@ namespace ZNsMain
////////////// ) ///////////////////////////////////////////////*/ ////////////// ) ///////////////////////////////////////////////*/
template<typename TFunctor, typename TTyChars> static void SplitEach( template<typename TFunctor, typename TTyChars> static void SplitEach(
TFunctor AR_TFunctor, const TTyChars& AR_CCharsOrigin , const TTyChars& AR_CCharsSearch, bool AB_DoExecNull=true) TFunctor AO_Functor, const TTyChars& AR_CCharsOrigin , const TTyChars& AR_CCharsSearch, bool AB_DoExecNull=true)
{ {
ZtCMainChars::template SplitEach<TFunctor,TTyChars>( ZtCMainChars::template SplitEach<TFunctor,TTyChars>(
AR_TFunctor, AO_Functor,
AR_CCharsOrigin.data(), AR_CCharsSearch.data(), AR_CCharsOrigin.data(), AR_CCharsSearch.data(),
AR_CCharsOrigin.size(), AR_CCharsSearch.size(), AR_CCharsOrigin.size(), AR_CCharsSearch.size(),
AB_DoExecNull AB_DoExecNull
/*/////////*/ ); ////////////////////////////////////////////// /*/////////*/ ); //////////////////////////////////////////////
}/* }/*
template<typename TFunctor, typename TTyChars> static void SplitEach( template<typename TFunctor, typename TTyChars> static void SplitEach(
TFunctor AR_TFunctor, const TTyChars& AR_CCharsOrigin , const TTyChars& AR_CCharsSearch, bool AB_DoExecNull=true) */ TFunctor AO_Functor, const TTyChars& AR_CCharsOrigin , const TTyChars& AR_CCharsSearch, bool AB_DoExecNull=true) */
template<typename TString> static bool SplitTwo( ///////////////// template<typename TString> static bool SplitTwo( /////////////////