From 490eed99c10b369393e4bccd2b4d1cb3e660b4f0 Mon Sep 17 00:00:00 2001 From: sauron Date: Mon, 25 Aug 2025 03:26:15 +0900 Subject: [PATCH] commit 2025-08-25 03:26 edit a bit ZCppMain/ZtCMainChars.H --- ZCppMain/ZtCMainChars.H | 350 +++++++++++++++++++++++++++--------------------- 1 file changed, 200 insertions(+), 150 deletions(-) diff --git a/ZCppMain/ZtCMainChars.H b/ZCppMain/ZtCMainChars.H index 51d7c51..bfc3626 100644 --- a/ZCppMain/ZtCMainChars.H +++ b/ZCppMain/ZtCMainChars.H @@ -935,12 +935,20 @@ namespace ZNsMain template 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 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=0) { - TypeLength j; + TypeLength j=0; - for(j=0; j - static TypeLength FindPosFromEnd(const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch) + template 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 - static TypeLength FindPosFromEnd(const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch) */ + template static TypeLength FindPosFromEnd + (const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch) */ - template - static TypeLength GetMatchLenFromEnd(const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch) + template 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 - static TypeLength GetMatchLenFromEnd(const TTyChars& AR_CCharsOrigin, const TTyChars& AR_CCharsSearch) */ + template 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) 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=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 - 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 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()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()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 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()0) { - ARRE_ERun=AR_CReadyExec.template OnMeetNormal + ARRE_ERun = AR_CReadyExec.template OnMeetNormal ( VO_CCharsOrigin.data(), VL_FindPos , ZCCheckRef::PassData(AO_CHelpType) ); - ///////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////// if(ARRE_ERun==ZNsMain::ZNsEnum::ZERun_NO) return true; }/*