commit 2025-08-25 03:26 edit a bit ZCppMain/ZtCMainChars.H

This commit is contained in:
2025-08-25 03:26:15 +09:00
parent 4015ba2758
commit 490eed99c1

View File

@ -935,12 +935,20 @@ namespace ZNsMain
template<typename TTyChars> static TypeLength FindPos( template<typename TTyChars> static TypeLength FindPos(
const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch, TypeLength AL_StartPos=0) */ const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch, TypeLength AL_StartPos=0) */
static TypeLength FindPos( static TypeLength FindPos /*############################################*/
TypeCharC* APC_Origin , TypeCharC* APC_Search , (
TypeLength AL_OriginLength, TypeLength AL_SearchLength, TypeLength AL_StartPos=0) TypeCharC* APC_Origin , TypeCharC* APC_Search ,
TypeLength AL_OriginLength, TypeLength AL_SearchLength,
TypeLength AL_StartPos=0
)
/*######################################################################*/
{ {
const bool CB_IsBad = ( const bool CB_IsBad = ////////////////////////////////////
AL_OriginLength<1 || AL_SearchLength<1 || AL_StartPos<0 || AL_StartPos>=AL_OriginLength ); (
AL_OriginLength< 1 || AL_SearchLength< 1 ||
AL_StartPos < 0 || AL_StartPos >= AL_OriginLength
);
//////////////////////////////////////////////////////////
if(CB_IsBad) return -1; if(CB_IsBad) return -1;
@ -978,9 +986,13 @@ namespace ZNsMain
return -1; return -1;
}/* }/*
static TypeLength FindPos( static TypeLength FindPos ###############################################
TypeCharC* APC_Origin , TypeCharC* APC_Search , (
TypeLength AL_OriginLength, TypeLength AL_SearchLength, TypeLength AL_StartPos=0)*/ TypeCharC* APC_Origin , TypeCharC* APC_Search ,
TypeLength AL_OriginLength, TypeLength AL_SearchLength,
TypeLength AL_StartPos=0
)
/*######################################################################*/
template<typename TTyChars> static TypeLength FindPosLen( template<typename TTyChars> static TypeLength FindPosLen(
@ -1002,8 +1014,12 @@ namespace ZNsMain
TypeLength AL_StartPos=0 TypeLength AL_StartPos=0
/*////////*/ ) /*//////////////////////////////////////////////*/ /*////////*/ ) /*//////////////////////////////////////////////*/
{ {
const bool CB_IsBad = const bool CB_IsBad = /////////////////////////////////////////
(AL_OriginLength<1 || AL_SearchLength<1 || AL_StartPos<0 || AL_StartPos>=AL_OriginLength ); (
AL_OriginLength< 1 || AL_SearchLength< 1 ||
AL_StartPos < 0 || AL_StartPos >= AL_OriginLength
);
///////////////////////////////////////////////////////////////
if(CB_IsBad) return -1; if(CB_IsBad) return -1;
@ -1037,11 +1053,11 @@ namespace ZNsMain
{ {
for(j=0; j<AL_OriginLength-i; ++j) for(j=0; j<AL_OriginLength-i; ++j)
{ {
if(APC_Origin[i+j]!=APC_Search[j]) if(APC_Origin[i+j] != APC_Search[j])
{ {
VL_MatchLen=0; break; VL_MatchLen=0; break;
}/* }/*
if(APC_Origin[i+j]!=APC_Search[j])*/ //////////////////////////////////*/
++VL_MatchLen; ++VL_MatchLen;
}/* }/*
@ -1073,18 +1089,26 @@ namespace ZNsMain
TypeLength AL_StartPos=0 TypeLength AL_StartPos=0
/*//////////*/ ) ///////////////////////////////////////////////// /*//////////*/ ) /////////////////////////////////////////////////
{ {
if(AL_EscapeLen<1) return ZtCMainChars:: if(AL_EscapeLen<1) return ZtCMainChars::FindPos
FindPos(APC_Origin, APC_Search, AL_OriginLen, AL_SearchLen, AL_StartPos); (
APC_Origin, APC_Search, AL_OriginLen, AL_SearchLen, AL_StartPos
);
///////////////////////////////////////////////
const bool CB_IsBad = ( const bool CB_IsBad = /////////////////////////
AL_OriginLen<1 || AL_SearchLen<1 || AL_OriginLen<AL_SearchLen+AL_StartPos ); (
AL_OriginLen< 1 || AL_SearchLen<1 ||
AL_OriginLen< AL_SearchLen+AL_StartPos
);
///////////////////////////////////////////////
if(CB_IsBad) return -1; if(CB_IsBad) return -1;
const TypeChar* VP_Origin = APC_Origin+AL_StartPos ; const TypeChar* VP_Origin = APC_Origin+AL_StartPos ;
bool VB_DoEscape= false; TypeLength i=0 ; bool VB_DoEscape= false ;
TypeLength VL_MaxLoop = TypeLength i = 0 ;
AL_OriginLen-AL_SearchLen-AL_StartPos ; TypeLength VL_MaxLoop =
AL_OriginLen-AL_SearchLen-AL_StartPos ;
while(i<=VL_MaxLoop) while(i<=VL_MaxLoop)
{ {
@ -1092,30 +1116,31 @@ namespace ZNsMain
if(VB_DoEscape==false) if(VB_DoEscape==false)
{ {
VB_DoEscape=ZtCMainChars:: VB_DoEscape = ZtCMainChars::DoStart
DoStart(VP_Origin, APC_Escape, AL_OriginLen-i, AL_EscapeLen); (VP_Origin, APC_Escape, AL_OriginLen-i, AL_EscapeLen);
if(VB_DoEscape==true) if(VB_DoEscape==true)
{ {
VP_Origin+=AL_EscapeLen; VP_Origin += AL_EscapeLen ;
i +=AL_EscapeLen; i += AL_EscapeLen ;
}/* }/*
if(VB_DoEscape==true)*/ if(VB_DoEscape==true)*/
}/* }/*
if(VB_DoEscape==false)*/ if(VB_DoEscape==false)*/
#define __TEMP_DOSTART__ ZtCMainChars::DoStart( \ #define __TEMP_DOSTART__ ZtCMainChars::DoStart \
VP_Origin , \ ( \
APC_Search , \ VP_Origin , \
AL_OriginLen-i-AL_StartPos, \ APC_Search , \
AL_SearchLen \ AL_OriginLen-i-AL_StartPos, \
/*//////////////*/ ) AL_SearchLen \
) /*:::::::::::::::::::::::::::::::::::::::*/
if(__TEMP_DOSTART__==false) if(__TEMP_DOSTART__ == false)
{ {
VB_DoEscape=false; ++VP_Origin; ++i; continue; VB_DoEscape=false; ++VP_Origin; ++i; continue;
}/* }/*
if(__TEMP_DOSTART__==false)*/ if(__TEMP_DOSTART__ == false)*/
#undef __TEMP_DOSTART__ #undef __TEMP_DOSTART__
@ -1171,8 +1196,12 @@ namespace ZNsMain
TypeLength AL_StartPos=0 TypeLength AL_StartPos=0
/*//////////*/ ) ///////////////////////////////////////////////*/ /*//////////*/ ) ///////////////////////////////////////////////*/
{ {
const bool CB_IsBad = const bool CB_IsBad = ///////////////////////
(AL_OriginLen<1 || AL_SearchLen<1 || AL_OriginLen<AL_SearchLen+AL_StartPos) ; (
AL_OriginLen<1 || AL_SearchLen<1 ||
AL_OriginLen<AL_SearchLen+AL_StartPos
) ;
/////////////////////////////////////////////
if(CB_IsBad) return -1; if(CB_IsBad) return -1;
@ -1186,7 +1215,7 @@ namespace ZNsMain
if(CB_DoStart) if(CB_DoStart)
{ {
TypeLength VL_WrapClosePos=ZtCMainChars::FindPosEsc( TypeLength VL_WrapClosePos = ZtCMainChars::FindPosEsc(
APC_Origin , APC_Origin ,
APC_WrapClose , APC_WrapClose ,
APC_Escape , APC_Escape ,
@ -1194,7 +1223,7 @@ namespace ZNsMain
AL_WrapCloseLen , AL_WrapCloseLen ,
AL_EscapeLen , AL_EscapeLen ,
AL_StartPos+AL_WrapStartLen AL_StartPos+AL_WrapStartLen
/*/////////*/ ); /////////////////////////////////// /*/////////*/ ); /////////////////////////////////////
if(VL_WrapClosePos<0) return -1; if(VL_WrapClosePos<0) return -1;
@ -1404,8 +1433,12 @@ namespace ZNsMain
////////////////////////////////////////////////////////////////*/ ////////////////////////////////////////////////////////////////*/
static TypeLength FindPosFromEnd( static TypeLength FindPosFromEnd /*######################################################*/
TypeCharC* APC_Origin, TypeCharC* APC_Search, TypeLength AL_OriginLen, TypeLength AL_SearchLen) (
TypeCharC* APC_Origin , TypeCharC* APC_Search,
TypeLength AL_OriginLen, TypeLength AL_SearchLen
)
/*#######################################################################################*/
{ {
// APC_Origin 문자열에서 APC_Search을 AL_StartPos 번째 부터 역방향으로 접근해서 찾는다. // APC_Origin 문자열에서 APC_Search을 AL_StartPos 번째 부터 역방향으로 접근해서 찾는다.
@ -1416,13 +1449,13 @@ namespace ZNsMain
while(i>=0) while(i>=0)
{ {
TypeLength j; TypeLength j=0;
for(j=0; j<AL_SearchLen; ++j) for(; j<AL_SearchLen; ++j)
{ {
if(APC_Origin[i+j]!=APC_Search[j]) break; if(APC_Origin[i+j]!=APC_Search[j]) break;
}/* }
for(j=0; j<AL_SearchLen; ++j)*/ /*//////////////////////*/
if(j==AL_SearchLen) return i; --i; if(j==AL_SearchLen) return i; --i;
}/* }/*
@ -1430,51 +1463,64 @@ namespace ZNsMain
return -1; return -1;
}/* }/*
static TypeLength FindPosFromEnd( static TypeLength FindPosFromEnd ##########################################################
TypeCharC* APC_Origin, TypeCharC* APC_Search, TypeLength AL_OriginLen, TypeLength AL_SearchLen)*/ (
TypeCharC* APC_Origin , TypeCharC* APC_Search,
TypeLength AL_OriginLen, TypeLength AL_SearchLen
)
/*#######################################################################################*/
template<typename TTyChars> template<typename TTyChars> static TypeLength FindPosFromEnd
static TypeLength FindPosFromEnd(const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch) (const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch)
{ {
return ZCMainChars::FindPosFromEnd(AR_CCharsOrigin.data(), AR_CCharsSearch.data(), AR_CCharsOrigin.size(), AR_CCharsSearch.size()); return ZCMainChars::FindPosFromEnd(AR_CCharsOrigin.data(), AR_CCharsSearch.data(), AR_CCharsOrigin.size(), AR_CCharsSearch.size());
}/* }/*
template<typename TTyChars> template<typename TTyChars> static TypeLength FindPosFromEnd
static TypeLength FindPosFromEnd(const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch) */ (const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch) */
template<typename TTyChars> template<typename TTyChars> static TypeLength GetMatchLenFromEnd
static TypeLength GetMatchLenFromEnd(const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch) (const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch)
{ {
return ZtCMainChars::GetMatchLenFromEnd(AR_CCharsOrigin.data(), AR_CCharsSearch.data(), AR_CCharsOrigin.size(), AR_CCharsSearch.size()); return ZtCMainChars::GetMatchLenFromEnd(AR_CCharsOrigin.data(), AR_CCharsSearch.data(), AR_CCharsOrigin.size(), AR_CCharsSearch.size());
}/* }/*
template<typename TTyChars> template<typename TTyChars> static TypeLength GetMatchLenFromEnd
static TypeLength GetMatchLenFromEnd(const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch) */ (const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch) */
static TypeLength GetMatchLenFromEnd( static TypeLength GetMatchLenFromEnd /*#################################*/
TypeCharC* APC_Origin, TypeCharC* APC_Search, TypeLength AL_OriginLength, TypeLength AL_SearchLength) (
TypeCharC* APC_Origin , TypeCharC* APC_Search,
TypeLength AL_OriginLength, TypeLength AL_SearchLength
)
/*######################################################################*/
{ {
if(AL_OriginLength<1 || AL_SearchLength<1) return 0; if(AL_OriginLength<1 || AL_SearchLength<1) return 0;
TypeLength VL_LoopCnt = TypeLength VL_LoopCnt =
(AL_SearchLength>AL_OriginLength ? AL_OriginLength : AL_SearchLength); ( AL_SearchLength>AL_OriginLength ?
AL_OriginLength : AL_SearchLength
);
TypeCharC* VP_OriTemp =
( AL_SearchLength>AL_OriginLength ?
APC_Origin :
APC_Origin+ (AL_OriginLength-AL_SearchLength)
) ;
TypeCharC* VP_OriTemp= TypeCharC* VP_OriTempIn= 0 ;
(AL_SearchLength>AL_OriginLength ? APC_Origin : APC_Origin+(AL_OriginLength-AL_SearchLength) ); TypeCharC* VP_SeaTemp = APC_Search;
TypeCharC* VP_OriTempIn; TypeCharC* VP_SeaTemp=APC_Search; TypeLength i=0; TypeLength j=0 ;
TypeLength i=0; TypeLength j=0;
for(i=VL_LoopCnt; i>0; --i) for(i=VL_LoopCnt; i>0; --i)
{ {
VP_OriTempIn=VP_OriTemp++; VP_OriTempIn= VP_OriTemp++;
VP_SeaTemp =APC_Search ; VP_SeaTemp = APC_Search ;
for(j=0; j<i; ++j) for(j=0; j<i; ++j)
{ {
if(*VP_OriTempIn++ != *VP_SeaTemp++) break; if(*VP_OriTempIn++ != *VP_SeaTemp++) break;
}/* }
for(j=0; j<i; ++j)*/ /*::::::::::::::*/
if(j>=i) return i; if(j>=i) return i;
}/* }/*
@ -1482,8 +1528,12 @@ namespace ZNsMain
return 0; return 0;
}/* }/*
static TypeLength GetMatchLenFromEnd( static TypeLength GetMatchLenFromEnd #####################################
TypeCharC* APC_Origin, TypeCharC* APC_Search, TypeLength AL_OriginLength, TypeLength AL_SearchLength)*/ (
TypeCharC* APC_Origin , TypeCharC* APC_Search,
TypeLength AL_OriginLength, TypeLength AL_SearchLength
)
/*######################################################################*/
/* 앞에서부터 감싸는 문자열 APC_WrapStart 와 APC_WrapClose 사이에 있는 문자열이 n 회 /* 앞에서부터 감싸는 문자열 APC_WrapStart 와 APC_WrapClose 사이에 있는 문자열이 n 회
@ -1575,8 +1625,8 @@ namespace ZNsMain
APC_Origin1 에서 발견된 위치는 ARRL_SearchedPos1 에 APC_Origin1 에서 발견된 위치는 ARRL_SearchedPos1 에
APC_Origin2 에서 발견된 위치는 ARRL_SearchedPos2 에 셋팅한다. APC_Origin2 에서 발견된 위치는 ARRL_SearchedPos2 에 셋팅한다.
APC_Origin1 에서 발견된 길이는 ARRL_SearchedLen1 에 APC_Origin1 에서 발견된 길이는 ARRL_SearchedLen1 에
APC_Origin2 에서 발견된 길이는 ARRL_SearchedLen2 에 셋팅한다. */ APC_Origin2 에서 발견된 길이는 ARRL_SearchedLen2 에 셋팅한다.
*/
ARRL_SearchedPos1=-1; ARRL_SearchedPos1=-1;
ARRL_SearchedPos2=-1; ARRL_SearchedPos2=-1;
ARRL_SearchedLen1= 0; ARRL_SearchedLen1= 0;
@ -1591,40 +1641,38 @@ namespace ZNsMain
if(APC_Origin1<APC_Search) if(APC_Origin1<APC_Search)
{ {
VL_FindPos=ZtCMainChars::FindPosLen( VL_FindPos = ZtCMainChars::FindPosLen
APC_Origin1 , (
APC_Search , APC_Origin1 , APC_Search ,
AL_OriginLen1 , AL_OriginLen1 , AL_SearchLength ,
AL_SearchLength , RR(VL_MatchLen) , 0
RR(VL_MatchLen) , );
0 //////////////////////////////////////
/*/////////*/ ); ///////////////////
} }
else else
{ {
VL_FindPos=ZtCMainChars::FindPosLen( VL_FindPos = ZtCMainChars::FindPosLen
APC_Origin1 , (
APC_Search , APC_Origin1 , APC_Search ,
AL_OriginLen1 , AL_OriginLen1 , AL_SearchLength ,
AL_SearchLength , RR(VL_MatchLen) , AL_OriginLen1-AL_SearchLength
RR(VL_MatchLen) , );
AL_OriginLen1-AL_SearchLength //////////////////////////////////////
/*/////////*/ );
}/* }/*
else*/ else*/
if(VL_FindPos>=0) if(VL_FindPos>=0)
{ {
ARRL_SearchedLen1=AL_SearchLength; return ARRL_SearchedPos1=VL_FindPos ; ARRL_SearchedLen1=AL_SearchLength; return ARRL_SearchedPos1=VL_FindPos ;
}/* }/*
if(VL_FindPos>=0)*/ if(VL_FindPos>=0)*/
if(VL_MatchLen>0) if(VL_MatchLen>0)
{ {
if(AL_SearchLength-VL_MatchLen>AL_OriginLen2) if(AL_SearchLength-VL_MatchLen > AL_OriginLen2)
return -1; { return -1; }
//endif /*:::::::::::::::::::::::::::::::::::::::::::*/
bool VB_IsOK = ZtCMainChars::DoStart bool VB_IsOK = ZtCMainChars::DoStart
( (
@ -1706,15 +1754,15 @@ namespace ZNsMain
/*//////////////////////////////////////////////////////////////////////////////////////////// /*////////////////////////////////////////////////////////////////////////////////////////////
■ template<typename TReadyExec, typename TString> ■ template<typename TReadyExec, typename TString> bool FindPosReady
bool FindPosReady( (
TReadyExec AR_CReadyExec , TReadyExec AR_CReadyExec ,
const ZCChars& AR_CCharsOrigin , const ZCChars& AR_CCharsOrigin ,
const ZCChars& AR_CCharsSearch , const ZCChars& AR_CCharsSearch ,
TString& ARR_CStrReadyBuff, TString& ARR_CStrReadyBuff,
TypeLength& ARRL_StartPos , // AR_CCharsOrigin.data() 의 offset 이다. TypeLength& ARRL_StartPos , // AR_CCharsOrigin.data() 의 offset 이다.
ZNsEnum::ZERun& ARRE_ERun ZNsEnum::ZERun& ARRE_ERun
///////////// ) )
어떤 문자열에서 찾으려고 하는 데이타가 있는데, 문자열이 너무 길어서 한 번에 다 읽지 못하는 경우, 어떤 문자열에서 찾으려고 하는 데이타가 있는데, 문자열이 너무 길어서 한 번에 다 읽지 못하는 경우,
문자열을 조금씩 읽어서 찾는 문자열을 탐색할 필요가 있다. 구체적으로 아래 문자열로 예를 들어보자. 문자열을 조금씩 읽어서 찾는 문자열을 탐색할 필요가 있다. 구체적으로 아래 문자열로 예를 들어보자.
@ -1747,7 +1795,7 @@ namespace ZNsMain
이 알고리즘을 구현한 것이 FindPosReady(~) 이다. 이 알고리즘을 구현한 것이 FindPosReady(~) 이다.
FindPosReady() 은 읽어들인 문자열을 AR_CCharsSearch.data() 에 대입하여 AR_CCharsOrigin.data() 을 찾는다. FindPosReady() 은 읽어들인 문자열을 AR_CCharsSearch.data() 에 대입하여 AR_CCharsOrigin.data() 을 찾는다.
못찾았으면 다음에 읽어들인 문자열에 찾는 문자열이 존재할 수 있으므로, 일단 AR_CCharsOrigin.data() 의 찾았으면 다음에 읽어들인 문자열에 찾는 문자열이 존재할 수 있으므로, 일단 AR_CCharsOrigin.data() 의
뒤에서 AR_CCharsSearch.data() 의 앞부분과 일치하는 문자를 ARR_CStrReadyBuff 에 저장한다. (이 문자들은 뒤에서 AR_CCharsSearch.data() 의 앞부분과 일치하는 문자를 ARR_CStrReadyBuff 에 저장한다. (이 문자들은
찾는 문자열의 일부일 수 있다.) 찾는 문자열의 일부일 수 있다.)
@ -1767,7 +1815,7 @@ 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 , TReadyExec AR_CReadyExec ,
@ -1777,9 +1825,9 @@ namespace ZNsMain
TypeLength& ARRL_StartPos , // AR_CCharsOrigin.data() 의 offset 이다. TypeLength& ARRL_StartPos , // AR_CCharsOrigin.data() 의 offset 이다.
ZNsEnum::ZERun& ARRE_ERun ZNsEnum::ZERun& ARRE_ERun
) )
///////////////////////////////////////////////////////////// /*##########################################################################################*/
{ {
/*########################################################################################### /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
■ ARR_CStrReadyBuff 에는 AR_CCharsSearch.data() 의 앞부분과 일치하는 문자열이 들어 있다. ■ ARR_CStrReadyBuff 에는 AR_CCharsSearch.data() 의 앞부분과 일치하는 문자열이 들어 있다.
다른 엉뚱한 데이타가 들어있지 않도록 만전을 기해야 한다. 다른 엉뚱한 데이타가 들어있지 않도록 만전을 기해야 한다.
@ -1789,24 +1837,25 @@ namespace ZNsMain
하는 위치로 셋팅된다. 그래서 다음 번 조회시에는 AR_CCharsOrigin.data()+ARRL_StartPos 부터 하는 위치로 셋팅된다. 그래서 다음 번 조회시에는 AR_CCharsOrigin.data()+ARRL_StartPos 부터
조회하면 된다. 조회하면 된다.
###########################################################################################*/ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
ZCChars VO_CCharsOrigin(AR_CCharsOrigin.data(), AR_CCharsOrigin.size()); ZCChars VO_CCharsOrigin
(AR_CCharsOrigin.data(), AR_CCharsOrigin.size());
VO_CCharsOrigin += ARRL_StartPos; VO_CCharsOrigin += ARRL_StartPos;
if(VO_CCharsOrigin.size()<1 || AR_CCharsSearch.size()<1) if(VO_CCharsOrigin.size()<1 || AR_CCharsSearch.size()<1)
{ return false; } { return false; }
//////////////////////////////////////////////////////// /*::::::::::::::::::::::::::::::::::::::::::::::::::::*/
TypeLength VL_ReadyBuffSize=ARR_CStrReadyBuff.size(); TypeLength VL_ReadyBuffSize= ARR_CStrReadyBuff.size();
TypeLength VL_MatchLen =0; TypeLength VL_MatchLen = 0 ;
if(VL_ReadyBuffSize+VO_CCharsOrigin.size()<AR_CCharsSearch.size()) if(VL_ReadyBuffSize+VO_CCharsOrigin.size()<AR_CCharsSearch.size())
{ {
// 찾는 데이타의 길이는 AR_CCharsOrigin.size() 이 된다. // 찾는 데이타의 길이는 AR_CCharsOrigin.size() 이 된다.
bool VB_IsOK=ZtCMainChars::DoStart( //////////////////// bool VB_IsOK = ZtCMainChars::DoStart( //////////////////
VO_CCharsOrigin.data() , VO_CCharsOrigin.data() ,
AR_CCharsSearch.data()+VL_ReadyBuffSize, AR_CCharsSearch.data()+VL_ReadyBuffSize,
VO_CCharsOrigin.size() , VO_CCharsOrigin.size() ,
@ -1823,50 +1872,50 @@ namespace ZNsMain
if(VB_IsOK==true)*/ if(VB_IsOK==true)*/
/* 찾지 못한 경우 ARR_CStrReadyBuff 버퍼 앞 1 바이트가 아니라 /* 찾지 못한 경우 ARR_CStrReadyBuff 버퍼 앞 1 바이트가
그 버퍼 전체가 찾는 대상에 포함되지 않는다. */ 아니라, 그 버퍼 전체가 찾는 대상에 포함되지 않는다.
*/
ARRL_StartPos = -1; ARRL_StartPos = -1;
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;
}/* }/*
if(VL_ReadyBuffSize>0)*/ if(VL_ReadyBuffSize>0)*/
VL_MatchLen=ZtCMainChars::GetMatchLenFromEnd( VL_MatchLen = ZtCMainChars::GetMatchLenFromEnd( ///////////
VO_CCharsOrigin.data(), VO_CCharsOrigin.data(),
AR_CCharsSearch.data(), AR_CCharsSearch.data(),
VO_CCharsOrigin.size(), VO_CCharsOrigin.size(),
VO_CCharsOrigin.size() VO_CCharsOrigin.size()
/*/////////*/ ); //////////////////////////// /*/////////*/ ); //////////////////////////////////////////
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 ARR_CStrReadyBuff.append
(VO_CCharsOrigin.data()+VL_ValidLen, VL_MatchLen); ( VO_CCharsOrigin.data()+VL_ValidLen, VL_MatchLen );
if(VL_ValidLen>0) if(VL_ValidLen>0)
ARRE_ERun=AR_CReadyExec.OnMeetNormal ARRE_ERun=AR_CReadyExec.OnMeetNormal
(VO_CCharsOrigin.data() , VL_ValidLen); ( 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() , VO_CCharsOrigin.data() ,
AR_CCharsSearch.data()+VL_ReadyBuffSize, AR_CCharsSearch.data()+VL_ReadyBuffSize,
VO_CCharsOrigin.size() , VO_CCharsOrigin.size() ,
AR_CCharsSearch.size()-VL_ReadyBuffSize AR_CCharsSearch.size()-VL_ReadyBuffSize
); );
////////////////////////////////// ////////////////////////////////////
if(VB_IsOK==true) if(VB_IsOK==true)
{ {
@ -1903,13 +1952,13 @@ namespace ZNsMain
}/* }/*
if(VL_ReadyBuffSize>0)*/ if(VL_ReadyBuffSize>0)*/
VL_MatchLen=0; TypeLength VL_FindPos=ZtCMainChars::FindPosLen( VL_MatchLen=0; 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) );
/*/////////*/ ); ///////////////////////////////////////////// ////////////////////////////////////////////////////////////////
if(VL_FindPos<0) if(VL_FindPos<0)
{ {
@ -2008,18 +2057,21 @@ namespace ZNsMain
////////////////////////////////////////////////////////////////////////////////*/ ////////////////////////////////////////////////////////////////////////////////*/
template< typename TReadyExec , typename TTyChars, template< typename TReadyExec , typename TTyChars,
typename TStringData, typename THelpType> //////////// typename TStringData, typename THelpType
static bool FindPosReady( >
TReadyExec AR_CReadyExec , static bool FindPosReady /*#####################################*/
THelpType AO_CHelpType , (
const TTyChars& AR_CCharsOrigin , TReadyExec AR_CReadyExec ,
const TTyChars& AR_CCharsSearch , THelpType AO_CHelpType ,
TStringData& ARR_CStrReadyBuff, const TTyChars& AR_CCharsOrigin ,
TypeLength& ARRL_StartPos , // AR_CCharsOrigin.data() 의 offset 이다. const TTyChars& AR_CCharsSearch ,
ZNsEnum::ZERun& ARRE_ERun TStringData& ARR_CStrReadyBuff,
/*//////////*/ ) ///////////////////////////////////////////////*/ TypeLength& ARRL_StartPos , // AR_CCharsOrigin.data() 의 offset 이다.
ZNsEnum::ZERun& ARRE_ERun
)
/*##############################################################*/
{ {
/*######################################################################################## /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
■ ARR_CStrReadyBuff 에는 AR_CCharsSearch.data() 의 앞부분과 일치하는 문자열이 들어 있다. ■ ARR_CStrReadyBuff 에는 AR_CCharsSearch.data() 의 앞부분과 일치하는 문자열이 들어 있다.
다른 엉뚱한 데이타가 들어있지 않도록 만전을 기해야 한다. 다른 엉뚱한 데이타가 들어있지 않도록 만전을 기해야 한다.
@ -2028,7 +2080,7 @@ namespace ZNsMain
AR_CCharsOrigin.data() 에서 다시 조회를 시작해야 하는 위치로 셋팅된다. 그래서 다음 번 AR_CCharsOrigin.data() 에서 다시 조회를 시작해야 하는 위치로 셋팅된다. 그래서 다음 번
조회시에는 AR_CCharsOrigin.data()+ARRL_StartPos 부터 조회하면 된다. 조회시에는 AR_CCharsOrigin.data()+ARRL_StartPos 부터 조회하면 된다.
########################################################################################*/ ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
typedef ZNsMain::ZtCCheckRef<THelpType> ZCCheckRef ; typedef ZNsMain::ZtCCheckRef<THelpType> ZCCheckRef ;
typedef typename ZCCheckRef::TypeData TypeObject ; typedef typename ZCCheckRef::TypeData TypeObject ;
@ -2048,7 +2100,7 @@ namespace ZNsMain
{ {
// 찾는 데이타의 길이는 AR_CCharsOrigin.size() 이 된다. // 찾는 데이타의 길이는 AR_CCharsOrigin.size() 이 된다.
bool VB_IsOK=ZtCMainChars::DoStart( //////////////////// bool VB_IsOK = ZtCMainChars::DoStart( //////////////////
VO_CCharsOrigin.data() , VO_CCharsOrigin.data() ,
AR_CCharsSearch.data()+VL_ReadyBuffSize, AR_CCharsSearch.data()+VL_ReadyBuffSize,
VO_CCharsOrigin.size() , VO_CCharsOrigin.size() ,
@ -2084,12 +2136,12 @@ namespace ZNsMain
}/* }/*
if(VL_ReadyBuffSize>0)*/ if(VL_ReadyBuffSize>0)*/
VL_MatchLen=ZtCMainChars::GetMatchLenFromEnd( VL_MatchLen = ZtCMainChars::GetMatchLenFromEnd(
VO_CCharsOrigin.data(), VO_CCharsOrigin.data(),
AR_CCharsSearch.data(), AR_CCharsSearch.data(),
VO_CCharsOrigin.size(), VO_CCharsOrigin.size(),
VO_CCharsOrigin.size() VO_CCharsOrigin.size()
/*/////////*/ ); //////////////////////////// /*/////////*/ ); //////////////////////////////
TypeLength VL_ValidLen=VO_CCharsOrigin.size()-VL_MatchLen; TypeLength VL_ValidLen=VO_CCharsOrigin.size()-VL_MatchLen;
@ -2114,14 +2166,12 @@ 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() , VO_CCharsOrigin.data() , AR_CCharsSearch.data()+VL_ReadyBuffSize,
AR_CCharsSearch.data()+VL_ReadyBuffSize, VO_CCharsOrigin.size() , AR_CCharsSearch.size()-VL_ReadyBuffSize
VO_CCharsOrigin.size() ,
AR_CCharsSearch.size()-VL_ReadyBuffSize
); );
////////////////////////////////// ////////////////////////////////////
if(VB_IsOK==true) if(VB_IsOK==true)
{ {
@ -2204,13 +2254,13 @@ namespace ZNsMain
if(VL_FindPos>0) if(VL_FindPos>0)
{ {
ARRE_ERun=AR_CReadyExec.template OnMeetNormal<TypeObject> ARRE_ERun = AR_CReadyExec.template OnMeetNormal<TypeObject>
( (
VO_CCharsOrigin.data(), VO_CCharsOrigin.data(),
VL_FindPos , VL_FindPos ,
ZCCheckRef::PassData(AO_CHelpType) ZCCheckRef::PassData(AO_CHelpType)
); );
///////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
if(ARRE_ERun==ZNsMain::ZNsEnum::ZERun_NO) return true; if(ARRE_ERun==ZNsMain::ZNsEnum::ZERun_NO) return true;
}/* }/*