From 989273ee1823ae5258ddbe5a12be4c255a0765da Mon Sep 17 00:00:00 2001 From: sauron Date: Sat, 4 Oct 2025 12:08:13 +0900 Subject: [PATCH] commit 2025-10-04 12:08 add IterElemLink(TFunctor, TTypeHelp1, TTypeHelp2) : ZCppMain/ZMainHead.H --- ZCppMain/ZMainHead.H | 31 +++++++++++++++++++ ZCppMain/ZtCObjList.H | 36 ++++++++++++++++++++-- ZCppMain/ZtCSimList.H | 64 +++++++++++++++++++++++++--------------- ZCppMainTest/ZtCBaseList_000.cpp | 22 ++++++++++++-- 4 files changed, 125 insertions(+), 28 deletions(-) diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index b89f5c2..0c35ca5 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -6296,6 +6296,37 @@ namespace ZNsMain void IterElemLink(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */ + template + < typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 > + void IterElemLink + ( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 ) + /*#############################################################################*/ + { + typedef ZNsMain::ZtCCheckRef ZCCheckRef1; + typedef ZNsMain::ZtCCheckRef ZCCheckRef2; + + ZCLink* VP_LoopLink=mp_HeadLink; + + __for0(TypeSize, i, ml_LinkSize) + { + ZtCTypeData::GetObjRef(AO_Functor) + ( + *VP_LoopLink + , ZCCheckRef1::PassData(AO_TypeHelp1) + , ZCCheckRef2::PassData(AO_TypeHelp2) + ); + //////////////////////////////////////////// + + VP_LoopLink = VP_LoopLink->mp_NextLink ; + }/* + __for0(TypeSize, i, ml_LinkSize)*/ + }/* + template + < typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 > + void IterElemLink + ( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 ) + ###############################################################################*/ + ZCLink* GetHeadLinkPtr(){return mp_HeadLink;} ZCLink* GetTailLinkPtr(){return mp_TailLink;} diff --git a/ZCppMain/ZtCObjList.H b/ZCppMain/ZtCObjList.H index 4b2dc20..edc7695 100644 --- a/ZCppMain/ZtCObjList.H +++ b/ZCppMain/ZtCObjList.H @@ -2600,6 +2600,38 @@ namespace ZNsMain void IterElemLink(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */ + template + < typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 > + void IterElemLink + ( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 ) + /*#############################################################################*/ + { + typedef ZNsMain::ZtCCheckRef ZCCheckRef1; + typedef ZNsMain::ZtCCheckRef ZCCheckRef2; + + ZCLink* VP_LoopLink=mp_HeadLink; + + __for0(TypeSize, i, ml_LinkSize) + { + ZtCTypeData::GetObjRef(AO_Functor) + ( + *VP_LoopLink + , ZCCheckRef1::PassData(AO_TypeHelp1) + , ZCCheckRef2::PassData(AO_TypeHelp2) + ); + //////////////////////////////////////////// + + VP_LoopLink = VP_LoopLink->mp_NextLink ; + }/* + __for0(TypeSize, i, ml_LinkSize)*/ + }/* + template + < typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 > + void IterElemLink + ( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 ) + ###############################################################################*/ + + template void IterElemLink /////////////////////// ( ZCLink& AR_StdLink , @@ -2609,9 +2641,9 @@ namespace ZNsMain /*#################################################################*/ { /* AP_StdLink 부터 AL_WorkDistance 만큼 이동하면서 - * 각 ZCLink 에 대하여 AO_Functor() 함수를 수행한다.(총 수행 횟수는 (AL_WorkDistance)절대값+1) + * 각 ZCLink 에 대하여 AO_Functor() 함수를 수행한다. + (총 수행 횟수는 (AL_WorkDistance)절대값+1) */ - ZCLink* VP_StdLink = &AR_StdLink; if(AL_WorkDistance>=0) diff --git a/ZCppMain/ZtCSimList.H b/ZCppMain/ZtCSimList.H index 9867321..9394c5a 100644 --- a/ZCppMain/ZtCSimList.H +++ b/ZCppMain/ZtCSimList.H @@ -2238,48 +2238,64 @@ namespace ZNsMain void IterElemLink(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */ + template + < typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 > + void IterElemLink + ( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 ) + /*#############################################################################*/ + { + typedef ZNsMain::ZtCCheckRef ZCCheckRef1; + typedef ZNsMain::ZtCCheckRef ZCCheckRef2; + + ZCLink* VP_LoopLink=mp_HeadLink; + + __for0(TypeSize, i, ml_LinkSize) + { + ZtCTypeData::GetObjRef(AO_Functor) + ( + *VP_LoopLink + , ZCCheckRef1::PassData(AO_TypeHelp1) + , ZCCheckRef2::PassData(AO_TypeHelp2) + ); + //////////////////////////////////////////// + + VP_LoopLink = VP_LoopLink->mp_NextLink ; + }/* + __for0(TypeSize, i, ml_LinkSize)*/ + }/* + template + < typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 > + void IterElemLink + ( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 ) + ###############################################################################*/ + + template void IterElemLink /////////////////////// ( - ZCLink* AP_StdLink , + ZCLink& AR_StdLink , TTypSize AL_WorkDistance, TFunctor AO_Functor ) /*#################################################################*/ { - /* AP_StdLink 부터 AL_WorkDistance 만큼 이동하면서 - * 각 ZCLink 에 대하여 AO_Functor() 함수를 수행한다.(총 수행 횟수는 (AL_WorkDistance)절대값+1) + /* AR_StdLink 부터 AL_WorkDistance 만큼 이동하면서 + * 각 ZCLink 에 대하여 AO_Functor() 함수를 수행한다. + (총 수행 횟수는 (AL_WorkDistance)절대값+1) */ - - #ifdef _DEBUG - - if(ml_LinkSize==0 || Find(AP_StdLink)==0 || AL_WorkDistance>=ml_LinkSize || AL_WorkDistance<0) - { - std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); - fileout<=ml_LinkSize || AL_WorkDistance<0)*/ - - #endif //_DEBUG + ZCLink* VP_StdLink = &AR_StdLink; for(TTypSize VL_Loop=0; VL_Loop<=AL_WorkDistance; ++VL_Loop) { ZtCTypeData:: - GetObjRef(AO_Functor)(AP_StdLink); + GetObjRef(AO_Functor)(*VP_StdLink); - AP_StdLink = AP_StdLink->mp_NextLink ; + VP_StdLink = VP_StdLink->mp_NextLink ; }/* for(TTypSize VL_Loop=0; VL_Loop<=AL_WorkDistance; ++VL_Loop)*/ }/* void IterElemLink /////////////////////////////////////////////////// ( - ZCLink* AP_StdLink , + ZCLink& AR_StdLink , TTypSize AL_WorkDistance, TFunctor AO_Functor ) diff --git a/ZCppMainTest/ZtCBaseList_000.cpp b/ZCppMainTest/ZtCBaseList_000.cpp index 2b8a059..b88f305 100644 --- a/ZCppMainTest/ZtCBaseList_000.cpp +++ b/ZCppMainTest/ZtCBaseList_000.cpp @@ -310,19 +310,35 @@ namespace ZNsMain static void ShowNode10(ZCLink10& AR_CLink) { cout<<"* Node10 Prev : "<<*(AR_CLink-1)<