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 , TypeCharC* APC_Origin , TypeCharC* APC_Search ,
TypeLength AL_OriginLength, TypeLength AL_SearchLength, TypeLength AL_StartPos=0) 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 , TypeCharC* APC_Origin , TypeCharC* APC_Search ,
TypeLength AL_OriginLength, TypeLength AL_SearchLength, TypeLength AL_StartPos=0)*/ 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;
@ -1041,7 +1057,7 @@ namespace ZNsMain
{ {
VL_MatchLen=0; break; VL_MatchLen=0; break;
}/* }/*
if(APC_Origin[i+j]!=APC_Search[j])*/ //////////////////////////////////*/
++VL_MatchLen; ++VL_MatchLen;
}/* }/*
@ -1073,16 +1089,24 @@ 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 i = 0 ;
TypeLength VL_MaxLoop = TypeLength VL_MaxLoop =
AL_OriginLen-AL_SearchLen-AL_StartPos ; AL_OriginLen-AL_SearchLen-AL_StartPos ;
@ -1092,8 +1116,8 @@ 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)
{ {
@ -1104,12 +1128,13 @@ namespace ZNsMain
}/* }/*
if(VB_DoEscape==false)*/ if(VB_DoEscape==false)*/
#define __TEMP_DOSTART__ ZtCMainChars::DoStart( \ #define __TEMP_DOSTART__ ZtCMainChars::DoStart \
( \
VP_Origin , \ VP_Origin , \
APC_Search , \ APC_Search , \
AL_OriginLen-i-AL_StartPos, \ AL_OriginLen-i-AL_StartPos, \
AL_SearchLen \ AL_SearchLen \
/*//////////////*/ ) ) /*:::::::::::::::::::::::::::::::::::::::*/
if(__TEMP_DOSTART__ == false) if(__TEMP_DOSTART__ == false)
{ {
@ -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;
@ -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,38 +1463,51 @@ 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 = TypeCharC* VP_OriTemp =
(AL_SearchLength>AL_OriginLength ? APC_Origin : APC_Origin+(AL_OriginLength-AL_SearchLength) ); ( AL_SearchLength>AL_OriginLength ?
APC_Origin :
APC_Origin+ (AL_OriginLength-AL_SearchLength)
) ;
TypeCharC* VP_OriTempIn; TypeCharC* VP_SeaTemp=APC_Search; TypeCharC* VP_OriTempIn= 0 ;
TypeCharC* VP_SeaTemp = APC_Search;
TypeLength i=0; TypeLength j=0 ; TypeLength i=0; TypeLength j=0 ;
@ -1473,8 +1519,8 @@ namespace ZNsMain
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,25 +1641,23 @@ 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*/
@ -1623,8 +1671,8 @@ namespace ZNsMain
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
///////////// ) )
어떤 문자열에서 찾으려고 하는 데이타가 있는데, 문자열이 너무 길어서 한 번에 다 읽지 못하는 경우, 어떤 문자열에서 찾으려고 하는 데이타가 있는데, 문자열이 너무 길어서 한 번에 다 읽지 못하는 경우,
문자열을 조금씩 읽어서 찾는 문자열을 탐색할 필요가 있다. 구체적으로 아래 문자열로 예를 들어보자. 문자열을 조금씩 읽어서 찾는 문자열을 탐색할 필요가 있다. 구체적으로 아래 문자열로 예를 들어보자.
@ -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,15 +1837,16 @@ 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 ;
@ -1806,7 +1855,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() ,
@ -1823,9 +1872,9 @@ 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)
@ -1838,12 +1887,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;
@ -1866,7 +1915,7 @@ namespace ZNsMain
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,8 +2057,10 @@ namespace ZNsMain
////////////////////////////////////////////////////////////////////////////////*/ ////////////////////////////////////////////////////////////////////////////////*/
template< typename TReadyExec , typename TTyChars, template< typename TReadyExec , typename TTyChars,
typename TStringData, typename THelpType> //////////// typename TStringData, typename THelpType
static bool FindPosReady( >
static bool FindPosReady /*#####################################*/
(
TReadyExec AR_CReadyExec , TReadyExec AR_CReadyExec ,
THelpType AO_CHelpType , THelpType AO_CHelpType ,
const TTyChars& AR_CCharsOrigin , const TTyChars& AR_CCharsOrigin ,
@ -2017,9 +2068,10 @@ namespace ZNsMain
TStringData& ARR_CStrReadyBuff, TStringData& ARR_CStrReadyBuff,
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() 의 앞부분과 일치하는 문자열이 들어 있다.
다른 엉뚱한 데이타가 들어있지 않도록 만전을 기해야 한다. 다른 엉뚱한 데이타가 들어있지 않도록 만전을 기해야 한다.
@ -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() ,
@ -2089,7 +2141,7 @@ namespace ZNsMain
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;
@ -2116,12 +2168,10 @@ namespace ZNsMain
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)
{ {
@ -2210,7 +2260,7 @@ namespace ZNsMain
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;
}/* }/*