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,31 +2608,30 @@ namespace ZNsMain
}/*
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:*/
public :
ZCLinkUnit()
{
ml_UseSize =0;
mp_NextUnit=0;
mp_PrevUnit=0;
ml_UseSize =0 ;
mp_NextUnit=0 ;
mp_PrevUnit=0 ;
}/*
ZCLinkUnit()*/
ZCLinkUnit(const ZCLinkUnit& rhs)
{
ml_UseSize =rhs.ml_UseSize;
mp_NextUnit=0 ;
mp_PrevUnit=0 ;
ml_UseSize =0 ;
mp_NextUnit=0 ;
mp_PrevUnit=0 ;
::memcpy( mo_TypeArr,
rhs.mo_TypeArr, ml_UseSize*sizeof(TypeData));
*this = (rhs) ;
}/*
ZCLinkUnit(const ZCLinkUnit& rhs)*/
@ -2640,10 +2639,13 @@ namespace ZNsMain
{
if(this==&rhs) return *this;
ml_UseSize=rhs.ml_UseSize;
ml_UseSize = rhs.ml_UseSize;
::memcpy( mo_TypeArr,
rhs.mo_TypeArr, ml_UseSize*sizeof(TypeData));
__for0(TypeSize, i, rhs.ml_UseSize)
{
mo_TypeArr[i] = rhs.mo_TypeArr[i] ;
}/*
__for0(TypeSize, i, rhs.ml_UseSize)*/
return *this;
}/*
@ -2659,16 +2661,15 @@ namespace ZNsMain
const ZCLinkUnit* GetNextUnitPtr() const{return mp_NextUnit;}
const ZCLinkUnit* GetPrevUniPtr () const{return mp_PrevUnit;}
TypeData& GetData(TypeSize AI_Index) // AI_Index start from 1
{
return mo_TypeArr[AI_Index-1];
}/*
TypeData& GetData(TypeSize AI_Index) // AI_Index start from 1*/
TypeArg GetData(TypeSize AI_Index) const // AI_Index start from 1
{
return mo_TypeArr[AI_Index-1];
}/*
TypeArg GetData(TypeSize AI_Index) const // AI_Index start from 1*/
TypeData& GetData (TypeSize AI_Index)
{ return mo_TypeArr[AI_Index-1]; } // AI_Index start from 1
TypeData& operator[](TypeSize AI_Index)
{ return mo_TypeArr[AI_Index ]; }
const TypeData& GetData (TypeSize AI_Index) const // AI_Index start from 1
{ return mo_TypeArr[AI_Index-1]; }
const TypeData& operator[](TypeSize AI_Index) const
{ return mo_TypeArr[AI_Index ]; }
bool AddObj(TypeArg AR_Object)
@ -2718,7 +2719,7 @@ namespace ZNsMain
if(AI_Distance<0)*/
for(; AI_Distance!=0; --AI_Distance)
VP_NowUnit = VP_NowUnit->mp_NextUnit;
{ VP_NowUnit = VP_NowUnit->mp_NextUnit; }
return VP_NowUnit;
}/*
@ -2740,7 +2741,7 @@ namespace ZNsMain
if(AI_Distance<0)*/
for(; AI_Distance!=0; --AI_Distance)
VP_NowUnit=VP_NowUnit->mp_NextUnit;
{ VP_NowUnit=VP_NowUnit->mp_NextUnit; }
return VP_NowUnit;
}/*
@ -2788,8 +2789,8 @@ namespace ZNsMain
{
for(; AI_Distance!=0; ++AI_Distance)
{
VP_NowUnit =VP_NowUnit->mp_PrevUnit;
ARRI_ObjCnt+=VP_NowUnit->ml_UseSize ;
VP_NowUnit = VP_NowUnit->mp_PrevUnit;
ARRI_ObjCnt+= VP_NowUnit->ml_UseSize ;
}/*
for(; AI_Distance!=0; ++AI_Distance)*/
@ -2799,8 +2800,8 @@ namespace ZNsMain
for(; AI_Distance!=0; --AI_Distance)
{
VP_NowUnit =VP_NowUnit->mp_NextUnit;
ARRI_ObjCnt+=VP_NowUnit->ml_UseSize ;
VP_NowUnit = VP_NowUnit->mp_NextUnit;
ARRI_ObjCnt+= VP_NowUnit->ml_UseSize ;
}/*
for(; AI_Distance!=0; --AI_Distance)*/
@ -3070,13 +3071,14 @@ namespace ZNsMain
// ZEMaxUnitCnt 개 단위로 등록한다.
// CAllocWork_BASE2_T<> 를 참고하면, *this 는 '임시 작업 큐'다.
typedef typename TAllocWork::CSyncExec CSyncExec;
if(AI_ArrSize<1) return;
TypeSize VI_AddUnitCnt =AI_ArrSize/ZEArrSize;
TypeSize VI_AddExtraCnt=AI_ArrSize%ZEArrSize;
TypeSize VI_MaxUnitCnt =ZEMaxUnitCnt ;
typedef typename
TAllocWork::CSyncExec CSyncExec ;
TypeSize VI_AddUnitCnt = AI_ArrSize/ZEArrSize;
TypeSize VI_AddExtraCnt= AI_ArrSize%ZEArrSize;
TypeSize VI_MaxUnitCnt = ZEMaxUnitCnt ;
while(--VI_AddUnitCnt>=0)
{
@ -3125,8 +3127,8 @@ namespace ZNsMain
TAllocWork& AR_CAllocWork, TypeData* AP_ObjArr, TypeSize AI_ArrSize) */
template<typename TAllocWork, typename TypeData2> void AddTailInPool2(
TAllocWork& AR_CAllocWork, TypeData2* AP_ObjArr, TypeSize AI_ArrSize)
template<typename TAllocWork, typename TypeData2> void AddTailInPool2
( TAllocWork& AR_CAllocWork, TypeData2* AP_ObjArr, TypeSize AI_ArrSize )
{
// TypeData = TypeData2 연산자가 지원되어야 한다.
@ -3134,14 +3136,14 @@ namespace ZNsMain
if(AI_ArrSize<1) return;
TypeSize VI_AddUnitCnt =AI_ArrSize/ZEArrSize;
TypeSize VI_AddExtraCnt=AI_ArrSize%ZEArrSize;
TypeSize VI_MaxUnitCnt =ZEMaxUnitCnt ;
TypeSize VI_AddUnitCnt = AI_ArrSize/ZEArrSize;
TypeSize VI_AddExtraCnt= AI_ArrSize%ZEArrSize;
TypeSize VI_MaxUnitCnt = ZEMaxUnitCnt ;
while(--VI_AddUnitCnt>=0)
{
__for0(TypeSize, i, ZEArrSize)
push_back() = *(AP_ObjArr++);
push_back() = *(AP_ObjArr++) ;
if(--VI_MaxUnitCnt<=0)
{
@ -3156,7 +3158,7 @@ namespace ZNsMain
if(VI_AddExtraCnt>0)
{
__for0(TypeSize, i, VI_AddExtraCnt)
push_back() = *(AP_ObjArr++);
{ push_back() = *(AP_ObjArr++); }
AR_CAllocWork.AddList(RR(*this)); return;
}/*
@ -3172,12 +3174,12 @@ namespace ZNsMain
if(VI_AddExtraCnt<1)*/
__for0(TypeSize, i, VI_AddExtraCnt)
push_back() = *(AP_ObjArr++);
{ push_back() = *(AP_ObjArr++); }
AR_CAllocWork.AddList(RR(*this));
}/*
template<typename TAllocWork, typename TypeData2> void AddTailInPool2(
TAllocWork& AR_CAllocWork, TypeData2* AP_ObjArr, TypeSize AI_ArrSize) */
template<typename TAllocWork, typename TypeData2> void AddTailInPool2
( TAllocWork& AR_CAllocWork, TypeData2* AP_ObjArr, TypeSize AI_ArrSize ) */
void AddUnitInCutList(TypeSize AI_AddUnitCnt)
@ -3192,7 +3194,7 @@ namespace ZNsMain
while(--VI_AddUnitCnt>0) // AI_AddUnitCnt-1 번 순환.
{
ZCLinkUnit* VP_UnitTail2=CreateUnit();
ZCLinkUnit* VP_UnitTail2 = CreateUnit();
ZCLinkUnit::JoinLink(VP_UnitTail, VP_UnitTail2);
VP_UnitTail=VP_UnitTail2;
@ -3368,10 +3370,10 @@ namespace ZNsMain
// rhs.ml_NowUnitCnt>AI_FetchSize 이고 rhs.ml_NowUnitCnt>0
TypeSize VI_RhsObjCnt =0 ;
ZCLinkUnit* VP_RhsNowTail=rhs.mp_NowHeadUnit->mp_PrevUnit ;
ZCLinkUnit* VP_RhsNowHead=VP_RhsNowTail->
GetObjtPtr( -(AI_FetchSize-1), RR(VI_RhsObjCnt) ) ;
TypeSize VI_RhsObjCnt = 0 ;
ZCLinkUnit* VP_RhsNowTail = rhs.mp_NowHeadUnit->mp_PrevUnit ;
ZCLinkUnit* VP_RhsNowHead = VP_RhsNowTail->
GetObjtPtr( -(AI_FetchSize-1), RR(VI_RhsObjCnt) ) ;
ZCLinkUnit::MakeCircle(
rhs.mp_NowHeadUnit, VP_RhsNowHead->mp_PrevUnit);
@ -3407,12 +3409,12 @@ namespace ZNsMain
// rhs.ml_NowUnitCnt>AI_FetchSize 이고 rhs.ml_NowUnitCnt>0
TypeSize VI_RhsObjCnt =0 ;
ZCLinkUnit* VP_RhsNowHead=rhs.mp_NowHeadUnit ;
ZCLinkUnit* VP_RhsNowTail=VP_RhsNowHead->
TypeSize VI_RhsObjCnt = 0 ;
ZCLinkUnit* VP_RhsNowHead= rhs.mp_NowHeadUnit ;
ZCLinkUnit* VP_RhsNowTail= VP_RhsNowHead->
GetObjtPtr( AI_FetchSize-1, RR(VI_RhsObjCnt) );
rhs.mp_NowHeadUnit=VP_RhsNowTail->mp_NextUnit;
rhs.mp_NowHeadUnit = VP_RhsNowTail->mp_NextUnit ;
ZCLinkUnit::MakeCircle(
rhs.mp_NowHeadUnit, VP_RhsNowHead->mp_PrevUnit);
@ -3475,8 +3477,8 @@ namespace ZNsMain
if(rhs.ml_NowUnitCnt<1) return;
ZCLinkUnit* VP_RhsNowHead=rhs.mp_NowHeadUnit;
rhs.mp_NowHeadUnit =rhs.mp_NowHeadUnit->mp_NextUnit;
ZCLinkUnit* VP_RhsNowHead = rhs.mp_NowHeadUnit;
rhs. mp_NowHeadUnit= rhs.mp_NowHeadUnit->mp_NextUnit;
if(--rhs.ml_NowUnitCnt<1)
{
@ -3543,8 +3545,9 @@ namespace ZNsMain
// rhs.ml_CutUnitCnt>AI_FetchSize 이고 rhs.ml_CutUnitCnt>0
ZCLinkUnit* VP_RhsCutTail=rhs.mp_CutHeadUnit->mp_PrevUnit;
ZCLinkUnit* VP_RhsCutHead=VP_RhsCutTail->GetObjtPtr(-(AI_FetchSize-1));
ZCLinkUnit* VP_RhsCutTail = rhs.mp_CutHeadUnit->mp_PrevUnit;
ZCLinkUnit* VP_RhsCutHead =
VP_RhsCutTail->GetObjtPtr( -(AI_FetchSize-1) );
ZCLinkUnit::MakeCircle(
rhs.mp_CutHeadUnit, VP_RhsCutHead->mp_PrevUnit);