From 50d2fac73686449efe2434643daba1b80f79bf96 Mon Sep 17 00:00:00 2001 From: sauron Date: Mon, 1 Sep 2025 21:22:06 +0900 Subject: [PATCH] commit 2025-09-01 21:22 add ReplaceToOutByPosList() in ZCppMain/ZCStringStd.H --- ZCppMain/ZCStringStd.H | 160 ++++++++++++++++++++++++++++++++++++++++++++++++- ZCppMain/ZMainHead.H | 4 +- 2 files changed, 162 insertions(+), 2 deletions(-) diff --git a/ZCppMain/ZCStringStd.H b/ZCppMain/ZCStringStd.H index 5631268..60699b2 100644 --- a/ZCppMain/ZCStringStd.H +++ b/ZCppMain/ZCStringStd.H @@ -1,4 +1,4 @@ - + #ifndef __ZCPPMAIIN_ZCSTRINGSTD_H__ #define __ZCPPMAIIN_ZCSTRINGSTD_H__ @@ -67,6 +67,164 @@ namespace ZNsMain (const char* APC_SearchData, TypeLength AL_SearchLen, TFindList& ARR_CPosList) */ + template ZCStringStd& ReplaceToOutByPosList + ( + TPosList& AR_CPosList , + const char* APC_Replace , + TypeLength AL_Replace , + TypeLength AL_Searched , + ZCStringStd& ARR_SaveOut + ) + /*##########################################################*/ + { + // TPosList : ZNsMain::ZtCList etc + // AL_Replace : APC_Replace 의 길이 + // AL_Searched : 이전에 찾은 길이 + // ARR_SaveOut : AL_Replace>AL_Searched 인 경우에 여기에 저장한다. + + if(AR_CPosList.size()<1) return *this; + + TypeLength VL_PosListSize= AR_CPosList.size() ; + TypeLength VL_ThisSize = this->size() ; + TypeLength VL_NeedSize = VL_ThisSize + + (AL_Replace-AL_Searched) * VL_PosListSize ; + + char* VPC_ThisStart = this->data() ; + IterEasyID VH_IterEasyID = AR_CPosList.ItHID(); + TypeLength VL_SearchedPos= 0 ; + TypeLength VL_SearchedPre= 0 ; // VL_SearchedPos 의 이전 값 + + if(AL_Replace<=AL_Searched) // 메모리 증가 불필요 + { + char* VPC_MoveStart = 0 ; + char* VPC_DestStart = 0 ; + TypeLength VL_MoveStart = 0 ; + TypeLength VL_DestStart = 0 ; + + TypeLength VL_MemMoveSize= 0 ; + char* VPC_RepalcePos= 0 ; + + __for1(TypeLength, i, VL_PosListSize) + { + VL_SearchedPos = AR_CPosList.ItD(VH_IterEasyID) ; + VPC_RepalcePos = VPC_ThisStart + VL_SearchedPos - + ( AL_Searched-AL_Replace ) * (i-1) ; + + if(VL_MoveStart>VL_DestStart) + { + VL_MemMoveSize = + VL_SearchedPos - VL_SearchedPre - AL_Searched ; + VPC_MoveStart = VPC_ThisStart + VL_MoveStart ; + VPC_DestStart = VPC_ThisStart + VL_DestStart ; + + ::memmove /*::::::::::::::::::::::::::::::::::::::*/ + ( + VPC_DestStart, VPC_MoveStart, VL_MemMoveSize + ); + /*::::::::::::::::::::::::::::::::::::::::::::::::*/ + }/* + if(VL_MoveStart>VL_DestStart)*/ + + VL_SearchedPre = VL_SearchedPos ; + VL_MoveStart = VL_SearchedPos+ AL_Searched ; + VL_DestStart = VL_SearchedPos+ AL_Searched - + ( AL_Searched-AL_Replace ) * i ; + + ::memcpy(VPC_RepalcePos, APC_Replace, AL_Replace); + + AR_CPosList.ItNext(VH_IterEasyID); + }/* + __for1(TypeLength, i, VL_PosListSize)*/ + + if(VL_DestStartresize(VL_NeedSize); return *this; + }/* + if(AL_Replace<=AL_Searched) // 메모리 증가 불필요*/ + + + ARR_SaveOut.resize(VL_NeedSize); + + char* VPC_OutStart = ARR_SaveOut.data() ; + char* VPC_CopyStart = 0 ; + char* VPC_DestStart = 0 ; + TypeLength VL_CopyStart = 0 ; + TypeLength VL_DestStart = 0 ; + + TypeLength VL_MemCopySize= 0 ; + char* VPC_RepalcePos= 0 ; + + __for1(TypeLength, i, VL_PosListSize) + { + VL_SearchedPos = AR_CPosList.ItD(VH_IterEasyID) ; + VPC_CopyStart = VPC_ThisStart + VL_SearchedPre ; + VL_DestStart = VL_SearchedPre + + ( AL_Replace-AL_Searched ) * (i-1) ; + VPC_DestStart = VPC_OutStart + VL_DestStart ; + + if(VL_SearchedPos>VL_SearchedPre) + { + VL_MemCopySize = + VL_SearchedPos - VL_SearchedPre ; + + ::memcpy /*:::::::::::::::::::::::::::::::::::::::*/ + ( + VPC_DestStart, VPC_CopyStart, VL_MemCopySize + ); + /*::::::::::::::::::::::::::::::::::::::::::::::::*/ + }/* + if(VL_SearchedPos>VL_SearchedPre)*/ + + VL_SearchedPre = VL_SearchedPos + AL_Searched ; + VL_DestStart = VL_SearchedPos + + ( AL_Replace-AL_Searched ) * (i-1) ; + VPC_RepalcePos = VPC_OutStart + VL_DestStart ; + + ::memcpy(VPC_RepalcePos, APC_Replace, AL_Replace); + + AR_CPosList.ItNext(VH_IterEasyID); + }/* + __for1(TypeLength, i, VL_PosListSize)*/ + + + if(VL_SearchedPre ZCStringStd& ReplaceToOutByPosList + ( + TPosList& AR_CPosList , + const char* APC_Replace , + TypeLength AL_Replace , + TypeLength AL_Searched , + ZCStringStd& ARR_SaveOut + ) + ############################################################*/ + public: };/* class ZCStringStd : public std::string*/ diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index e97734f..93a2005 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -3876,7 +3876,9 @@ namespace ZNsMain TypeData& AddTail(TypeArg AO_ArgData)*/ - operator TypeData&(){ return AddTail(); } + operator TypeData&() { return AddTail() ; } + + TypeSize size() const{ return ml_LinkCnt; } void push_back (TypeArg AO_ArgData){AddTail(AO_ArgData);}