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