commit 2025-09-11 14:17 edit a bit ZCppMain/ZtCObjList.H

This commit is contained in:
2025-09-11 14:17:42 +09:00
parent 4c40e76abd
commit 562381e4c2

View File

@ -2608,11 +2608,11 @@ namespace ZNsMain
}/* }/*
static void MakeCircle(ZCLinkUnit* AP_HeadUnit, ZCLinkUnit* AP_TailUnit)*/ static void MakeCircle(ZCLinkUnit* AP_HeadUnit, ZCLinkUnit* AP_TailUnit)*/
TypeData& AddEmptyObj_E() // E 는 Error 가 발생할 수 있다는 뜻. TypeData& AddEmptyObj()
{ {
return mo_TypeArr[ml_UseSize++]; // error 체크 즉, ml_UseSize>=ZEArrSize 인지를 체크하지 않는다. return mo_TypeArr[ml_UseSize++]; // must ml_UseSize>=ZEArrSize
}/* }/*
TypeData& AddEmptyObj_E()*/ TypeData& AddEmptyObj()*/
/*private:*/ /*private:*/
public : public :
@ -2627,12 +2627,11 @@ namespace ZNsMain
ZCLinkUnit(const ZCLinkUnit& rhs) ZCLinkUnit(const ZCLinkUnit& rhs)
{ {
ml_UseSize =rhs.ml_UseSize; ml_UseSize =0 ;
mp_NextUnit=0 ; mp_NextUnit=0 ;
mp_PrevUnit=0 ; mp_PrevUnit=0 ;
::memcpy( mo_TypeArr, *this = (rhs) ;
rhs.mo_TypeArr, ml_UseSize*sizeof(TypeData));
}/* }/*
ZCLinkUnit(const ZCLinkUnit& rhs)*/ ZCLinkUnit(const ZCLinkUnit& rhs)*/
@ -2642,8 +2641,11 @@ namespace ZNsMain
ml_UseSize = rhs.ml_UseSize; ml_UseSize = rhs.ml_UseSize;
::memcpy( mo_TypeArr, __for0(TypeSize, i, rhs.ml_UseSize)
rhs.mo_TypeArr, ml_UseSize*sizeof(TypeData)); {
mo_TypeArr[i] = rhs.mo_TypeArr[i] ;
}/*
__for0(TypeSize, i, rhs.ml_UseSize)*/
return *this; return *this;
}/* }/*
@ -2659,16 +2661,15 @@ namespace ZNsMain
const ZCLinkUnit* GetNextUnitPtr() const{return mp_NextUnit;} const ZCLinkUnit* GetNextUnitPtr() const{return mp_NextUnit;}
const ZCLinkUnit* GetPrevUniPtr () const{return mp_PrevUnit;} const ZCLinkUnit* GetPrevUniPtr () const{return mp_PrevUnit;}
TypeData& GetData(TypeSize AI_Index) // AI_Index start from 1 TypeData& GetData (TypeSize AI_Index)
{ { return mo_TypeArr[AI_Index-1]; } // AI_Index start from 1
return mo_TypeArr[AI_Index-1]; TypeData& operator[](TypeSize AI_Index)
}/* { return mo_TypeArr[AI_Index ]; }
TypeData& GetData(TypeSize AI_Index) // AI_Index start from 1*/
TypeArg GetData(TypeSize AI_Index) const // AI_Index start from 1 const TypeData& GetData (TypeSize AI_Index) const // AI_Index start from 1
{ { return mo_TypeArr[AI_Index-1]; }
return mo_TypeArr[AI_Index-1]; const TypeData& operator[](TypeSize AI_Index) const
}/* { return mo_TypeArr[AI_Index ]; }
TypeArg GetData(TypeSize AI_Index) const // AI_Index start from 1*/
bool AddObj(TypeArg AR_Object) bool AddObj(TypeArg AR_Object)
@ -2718,7 +2719,7 @@ namespace ZNsMain
if(AI_Distance<0)*/ if(AI_Distance<0)*/
for(; AI_Distance!=0; --AI_Distance) for(; AI_Distance!=0; --AI_Distance)
VP_NowUnit = VP_NowUnit->mp_NextUnit; { VP_NowUnit = VP_NowUnit->mp_NextUnit; }
return VP_NowUnit; return VP_NowUnit;
}/* }/*
@ -2740,7 +2741,7 @@ namespace ZNsMain
if(AI_Distance<0)*/ if(AI_Distance<0)*/
for(; AI_Distance!=0; --AI_Distance) for(; AI_Distance!=0; --AI_Distance)
VP_NowUnit=VP_NowUnit->mp_NextUnit; { VP_NowUnit=VP_NowUnit->mp_NextUnit; }
return VP_NowUnit; return VP_NowUnit;
}/* }/*
@ -3070,10 +3071,11 @@ namespace ZNsMain
// ZEMaxUnitCnt 개 단위로 등록한다. // ZEMaxUnitCnt 개 단위로 등록한다.
// CAllocWork_BASE2_T<> 를 참고하면, *this 는 '임시 작업 큐'다. // CAllocWork_BASE2_T<> 를 참고하면, *this 는 '임시 작업 큐'다.
typedef typename TAllocWork::CSyncExec CSyncExec;
if(AI_ArrSize<1) return; if(AI_ArrSize<1) return;
typedef typename
TAllocWork::CSyncExec CSyncExec ;
TypeSize VI_AddUnitCnt = AI_ArrSize/ZEArrSize; TypeSize VI_AddUnitCnt = AI_ArrSize/ZEArrSize;
TypeSize VI_AddExtraCnt= AI_ArrSize%ZEArrSize; TypeSize VI_AddExtraCnt= AI_ArrSize%ZEArrSize;
TypeSize VI_MaxUnitCnt = ZEMaxUnitCnt ; TypeSize VI_MaxUnitCnt = ZEMaxUnitCnt ;
@ -3125,8 +3127,8 @@ namespace ZNsMain
TAllocWork& AR_CAllocWork, TypeData* AP_ObjArr, TypeSize AI_ArrSize) */ TAllocWork& AR_CAllocWork, TypeData* AP_ObjArr, TypeSize AI_ArrSize) */
template<typename TAllocWork, typename TypeData2> void AddTailInPool2( template<typename TAllocWork, typename TypeData2> void AddTailInPool2
TAllocWork& AR_CAllocWork, TypeData2* AP_ObjArr, TypeSize AI_ArrSize) ( TAllocWork& AR_CAllocWork, TypeData2* AP_ObjArr, TypeSize AI_ArrSize )
{ {
// TypeData = TypeData2 연산자가 지원되어야 한다. // TypeData = TypeData2 연산자가 지원되어야 한다.
@ -3156,7 +3158,7 @@ namespace ZNsMain
if(VI_AddExtraCnt>0) if(VI_AddExtraCnt>0)
{ {
__for0(TypeSize, i, VI_AddExtraCnt) __for0(TypeSize, i, VI_AddExtraCnt)
push_back() = *(AP_ObjArr++); { push_back() = *(AP_ObjArr++); }
AR_CAllocWork.AddList(RR(*this)); return; AR_CAllocWork.AddList(RR(*this)); return;
}/* }/*
@ -3172,12 +3174,12 @@ namespace ZNsMain
if(VI_AddExtraCnt<1)*/ if(VI_AddExtraCnt<1)*/
__for0(TypeSize, i, VI_AddExtraCnt) __for0(TypeSize, i, VI_AddExtraCnt)
push_back() = *(AP_ObjArr++); { push_back() = *(AP_ObjArr++); }
AR_CAllocWork.AddList(RR(*this)); AR_CAllocWork.AddList(RR(*this));
}/* }/*
template<typename TAllocWork, typename TypeData2> void AddTailInPool2( template<typename TAllocWork, typename TypeData2> void AddTailInPool2
TAllocWork& AR_CAllocWork, TypeData2* AP_ObjArr, TypeSize AI_ArrSize) */ ( TAllocWork& AR_CAllocWork, TypeData2* AP_ObjArr, TypeSize AI_ArrSize ) */
void AddUnitInCutList(TypeSize AI_AddUnitCnt) void AddUnitInCutList(TypeSize AI_AddUnitCnt)
@ -3544,7 +3546,8 @@ namespace ZNsMain
// rhs.ml_CutUnitCnt>AI_FetchSize 이고 rhs.ml_CutUnitCnt>0 // rhs.ml_CutUnitCnt>AI_FetchSize 이고 rhs.ml_CutUnitCnt>0
ZCLinkUnit* VP_RhsCutTail = rhs.mp_CutHeadUnit->mp_PrevUnit; ZCLinkUnit* VP_RhsCutTail = rhs.mp_CutHeadUnit->mp_PrevUnit;
ZCLinkUnit* VP_RhsCutHead=VP_RhsCutTail->GetObjtPtr(-(AI_FetchSize-1)); ZCLinkUnit* VP_RhsCutHead =
VP_RhsCutTail->GetObjtPtr( -(AI_FetchSize-1) );
ZCLinkUnit::MakeCircle( ZCLinkUnit::MakeCircle(
rhs.mp_CutHeadUnit, VP_RhsCutHead->mp_PrevUnit); rhs.mp_CutHeadUnit, VP_RhsCutHead->mp_PrevUnit);