commit 2025-09-13 23:44 complete ZtCFreeHeapSngl< ZNsConst::CI_ListKind_Single > in ZCppMain/ZtCSimList.H
This commit is contained in:
@ -3799,11 +3799,11 @@ namespace ZNsMain
|
||||
public:
|
||||
|
||||
|
||||
template<typename TDblList> class ZtCBody
|
||||
template<typename TLinkList> class ZtCBody
|
||||
{
|
||||
public:
|
||||
typedef typename TDblList::ZCLink ZCLink ;
|
||||
typedef typename TDblList::TypeSize TypeSize;
|
||||
typedef typename TLinkList::ZCLink ZCLink ;
|
||||
typedef typename TLinkList::TypeSize TypeSize;
|
||||
public:
|
||||
|
||||
void RecvFreeIn(ZCLink* AP_CutLink){}
|
||||
@ -3863,7 +3863,7 @@ namespace ZNsMain
|
||||
TypeSize GetHeapSize() const*/
|
||||
|
||||
};/*
|
||||
template<typename TDblList> class ZtCBody*/
|
||||
template<typename TLinkList> class ZtCBody*/
|
||||
|
||||
|
||||
public:
|
||||
@ -3875,6 +3875,322 @@ namespace ZNsMain
|
||||
namespace ZNsIFace*/
|
||||
|
||||
|
||||
namespace ZNsIFaceEx
|
||||
{
|
||||
|
||||
/*################################################################
|
||||
|
||||
■ 자료 구조에서 자유 기억 공간을 구현하는 interface
|
||||
|
||||
만약 다르게 구헌한 자유 기억 공간 class 가 필요하다면,
|
||||
|
||||
단방향 연결 리스트는 ZtCFreeHeapSngl<> 를 통해 중첩 정의하고,
|
||||
양방향 연결 리스트는 ZtCFreeHeapCDL <> 를 통해 중첩 정의하자.
|
||||
|
||||
이렇게 하면,
|
||||
|
||||
ZtCFreeHeapSngl<>::ZCLink 와 ZtCFreeHeapCDL<>::ZCLink
|
||||
|
||||
에서 friend 선언을 아래처럼 고정시켜 놓을 수 있다.
|
||||
|
||||
template<int>
|
||||
friend class ZNsIFaceEx::ZtCFreeHeapSngl ;
|
||||
|
||||
################################################################*/
|
||||
template<int TTypIListKind=0> class ZtCFreeHeapSngl // Single List
|
||||
{
|
||||
public:
|
||||
|
||||
template<typename TSnglList> class ZtCBody
|
||||
{
|
||||
public:
|
||||
typedef typename TSnglList::ZCLink ZCLink ;
|
||||
typedef typename TSnglList::TypeSize TypeSize;
|
||||
public:
|
||||
|
||||
void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}
|
||||
void RecvFreeIn ///////////////////////////////////////
|
||||
(
|
||||
TypeSize AL_CutCnt ,
|
||||
ZCLink* AP_CutHead,
|
||||
ZCLink* AP_CutTail
|
||||
)
|
||||
///////////////////////////////////////////////////////
|
||||
{
|
||||
ZCLink* VP_DelLink = AP_CutHead;
|
||||
|
||||
__for0(TypeSize, i, AL_CutCnt)
|
||||
{
|
||||
AP_CutHead = AP_CutHead->GetNextPtr();
|
||||
|
||||
delete VP_DelLink; VP_DelLink=AP_CutHead;
|
||||
}/*
|
||||
__for0(TypeSize, i, AL_CutCnt)*/
|
||||
}
|
||||
///////////////////////////////////////////////////////
|
||||
|
||||
|
||||
ZCLink* SendFreeOut(){return new ZCLink;}
|
||||
void SendFreeOut ///////////////////////////////////
|
||||
(
|
||||
TypeSize AL_NeedCnt ,
|
||||
ZCLink*& APR_HeadLink ,
|
||||
ZCLink*& APR_TailLink
|
||||
)
|
||||
///////////////////////////////////////////////////////
|
||||
{
|
||||
APR_HeadLink = new ZCLink;
|
||||
|
||||
ZCLink* VP_MakeLink = 0 ;
|
||||
ZCLink* VP_TailLink = APR_HeadLink;
|
||||
|
||||
while(--AL_NeedCnt>0) // AL_NeedCnt - 1 번 순환
|
||||
{
|
||||
// AL_NeedCnt - 1 번 순환
|
||||
|
||||
VP_MakeLink = new ZCLink;
|
||||
|
||||
ZCLink::JoinLink
|
||||
(VP_TailLink, VP_MakeLink);
|
||||
VP_TailLink = VP_MakeLink ;
|
||||
}/*
|
||||
while(--AL_NeedCnt>0)*/
|
||||
|
||||
APR_TailLink = VP_TailLink;
|
||||
}
|
||||
///////////////////////////////////////////////////////
|
||||
|
||||
|
||||
void SendFreeOutCopy /*////////////////////////////*/
|
||||
(
|
||||
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
|
||||
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
|
||||
)
|
||||
/////////////////////////////////////////////////////
|
||||
{
|
||||
// 총 AL_FarNum+1 개의 링크가 만들어짊.
|
||||
|
||||
ZCLink* VP_MakeLink = 0 ;
|
||||
ZCLink* VP_TailLink = 0 ;
|
||||
|
||||
VP_TailLink = VP_MakeLink =
|
||||
new ZCLink( **AP_LinkOrgin );
|
||||
|
||||
APR_HeadCopy = VP_MakeLink;
|
||||
|
||||
while(--AL_FarNum >= 0)
|
||||
{
|
||||
AP_LinkOrgin= AP_LinkOrgin->GetNextPtr();
|
||||
VP_MakeLink = new ZCLink(**AP_LinkOrgin);
|
||||
|
||||
ZCLink::JoinLink
|
||||
(VP_TailLink, VP_MakeLink);
|
||||
|
||||
VP_TailLink = VP_MakeLink ;
|
||||
}/*
|
||||
while(--AL_FarNum >= 0)*/
|
||||
|
||||
APR_TailCopy=VP_TailLink;
|
||||
}/*
|
||||
void SendFreeOutCopy //////////////////////////////
|
||||
(
|
||||
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
|
||||
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
|
||||
)
|
||||
///////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
void DeleteHeap(){}
|
||||
|
||||
|
||||
TypeSize GetUseHeapSize() const
|
||||
{
|
||||
return 0;
|
||||
}/*
|
||||
TypeSize GetUseHeapSize() const*/
|
||||
|
||||
TypeSize GetAllHeapSize() const
|
||||
{
|
||||
return 0;
|
||||
}/*
|
||||
TypeSize GetAllHeapSize() const*/
|
||||
|
||||
|
||||
TypeSize size() const
|
||||
{
|
||||
return GetUseHeapSize();
|
||||
}/*
|
||||
TypeSize GetHeapSize() const*/
|
||||
|
||||
TypeSize capacity() const
|
||||
{
|
||||
return GetAllHeapSize();
|
||||
}/*
|
||||
TypeSize GetHeapSize() const*/
|
||||
|
||||
};/*
|
||||
template<typename TSnglList> class ZtCBody*/
|
||||
|
||||
public:
|
||||
};/*
|
||||
template<int TTypIListKind=0> class ZtCFreeHeapSngl*/
|
||||
|
||||
|
||||
template<int TTypIListKind=0> class ZtCFreeHeapCDL // Circular Double List
|
||||
{
|
||||
public:
|
||||
|
||||
template<typename TLinkList> class ZtCBody
|
||||
{
|
||||
public:
|
||||
typedef typename TLinkList::ZCLink ZCLink ;
|
||||
typedef typename TLinkList::TypeSize TypeSize;
|
||||
public:
|
||||
|
||||
void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}
|
||||
void RecvFreeIn ///////////////////////////////////////
|
||||
(
|
||||
TypeSize AL_CutCnt ,
|
||||
ZCLink* AP_CutHead,
|
||||
ZCLink* AP_CutTail
|
||||
)
|
||||
///////////////////////////////////////////////////////
|
||||
{
|
||||
ZCLink* VP_DelLink = AP_CutHead;
|
||||
|
||||
__for0(TypeSize, i, AL_CutCnt)
|
||||
{
|
||||
AP_CutHead = AP_CutHead->GetNextPtr() ;
|
||||
|
||||
delete VP_DelLink; VP_DelLink=AP_CutHead;
|
||||
}/*
|
||||
__for0(TypeSize, i, AL_CutCnt)*/
|
||||
}
|
||||
///////////////////////////////////////////////////////
|
||||
|
||||
|
||||
ZCLink* SendFreeOut(){return new ZCLink;}
|
||||
void SendFreeOut ///////////////////////////////////
|
||||
(
|
||||
TypeSize AL_NeedCnt ,
|
||||
ZCLink*& APR_HeadLink ,
|
||||
ZCLink*& APR_TailLink
|
||||
)
|
||||
///////////////////////////////////////////////////////
|
||||
{
|
||||
APR_HeadLink = new ZCLink;
|
||||
|
||||
ZCLink* VP_MakeLink = 0 ;
|
||||
ZCLink* VP_TailLink = APR_HeadLink;
|
||||
|
||||
while(--AL_NeedCnt>0) // AL_NeedCnt - 1 번 순환
|
||||
{
|
||||
// AL_NeedCnt - 1 번 순환
|
||||
|
||||
VP_MakeLink = new ZCLink;
|
||||
|
||||
ZCLink::JoinLink
|
||||
(VP_TailLink, VP_MakeLink);
|
||||
|
||||
VP_TailLink = VP_MakeLink ;
|
||||
}/*
|
||||
while(--AL_NeedCnt>0)*/
|
||||
|
||||
APR_TailLink = VP_TailLink;
|
||||
}
|
||||
///////////////////////////////////////////////////////
|
||||
|
||||
|
||||
void SendFreeOutCopy /*////////////////////////////*/
|
||||
(
|
||||
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
|
||||
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
|
||||
)
|
||||
/////////////////////////////////////////////////////
|
||||
{
|
||||
// 총 AL_FarNum+1 개의 링크가 만들어짊
|
||||
|
||||
ZCLink* VP_MakeLink = 0 ;
|
||||
ZCLink* VP_TailLink = 0 ;
|
||||
|
||||
VP_TailLink = VP_MakeLink =
|
||||
new ZCLink(**AP_LinkOrgin) ;
|
||||
|
||||
APR_HeadCopy = VP_MakeLink;
|
||||
|
||||
while(--AL_FarNum >= 0)
|
||||
{
|
||||
AP_LinkOrgin= AP_LinkOrgin->GetNextPtr();
|
||||
VP_MakeLink = new ZCLink(**AP_LinkOrgin);
|
||||
|
||||
ZCLink::JoinLink
|
||||
(VP_TailLink, VP_MakeLink);
|
||||
|
||||
VP_TailLink = VP_MakeLink;
|
||||
}/*
|
||||
while(--AL_FarNum >= 0)*/
|
||||
|
||||
APR_TailCopy=VP_TailLink;
|
||||
}/*
|
||||
void SendFreeOutCopy //////////////////////////////
|
||||
(
|
||||
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
|
||||
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
|
||||
)
|
||||
///////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
void DeleteHeap(){}
|
||||
|
||||
|
||||
TypeSize GetUseHeapSize() const
|
||||
{
|
||||
return 0;
|
||||
}/*
|
||||
TypeSize GetUseHeapSize() const*/
|
||||
|
||||
TypeSize GetAllHeapSize() const
|
||||
{
|
||||
return 0;
|
||||
}/*
|
||||
TypeSize GetAllHeapSize() const*/
|
||||
|
||||
|
||||
TypeSize size() const
|
||||
{
|
||||
return GetUseHeapSize();
|
||||
}/*
|
||||
TypeSize GetHeapSize() const*/
|
||||
|
||||
TypeSize capacity() const
|
||||
{
|
||||
return GetAllHeapSize();
|
||||
}/*
|
||||
TypeSize GetHeapSize() const*/
|
||||
|
||||
};/*
|
||||
template<typename TLinkList> class ZtCBody*/
|
||||
|
||||
|
||||
public:
|
||||
};/*
|
||||
template<int TTypIListKind=0> class ZtCFreeHeapCDL*/
|
||||
|
||||
}/*
|
||||
namespace ZNsIFaceEx*/
|
||||
|
||||
|
||||
namespace ZNsConst
|
||||
{
|
||||
// cf) ZtCSimList, ZtObjList
|
||||
|
||||
const int CI_ListKind_Single = 10 ;
|
||||
const int CI_ListKind_Double = 20 ;
|
||||
}/*
|
||||
namespace ZNsConst*/
|
||||
|
||||
|
||||
|
||||
// 자유 기억 공간을 총괄하는 단방향 연결 리스트
|
||||
|
||||
class ZCHeapAllocList
|
||||
|
@ -35,7 +35,7 @@ namespace ZNsMain
|
||||
, typename TTypeInit = ZtCInit<TType>
|
||||
, typename TTypSize = ZTypLong
|
||||
, typename TMoveObj = ZtCMoveObj<TType, TTypArgu, true>
|
||||
, typename TFeeeHeap = ZNsIFace::ZIFreeHeap
|
||||
, typename TFeeeHeap = ZNsIFaceEx::ZtCFreeHeapCDL<>
|
||||
>
|
||||
class ZtCObjList //////////////////////////////////////////////////////////////
|
||||
{
|
||||
@ -615,22 +615,26 @@ namespace ZNsMain
|
||||
ZtCObjList& CopyThis(ZtCObjList& ARR_StoreList) const*/
|
||||
|
||||
|
||||
ZtCObjList& MakeDefault(TypeSize AL_DefaultSize, ZtCObjList& ARR_StoreList) const
|
||||
ZtCObjList& MakeDefault
|
||||
(TypeSize AL_DefaultSize, ZtCObjList& ARR_StoreList) const
|
||||
{
|
||||
// must AL_DefaultSize > 0
|
||||
|
||||
ZCLink* VP_HeadLink=0;
|
||||
ZCLink* VP_TailLink=0;
|
||||
|
||||
GetManyLink(AL_DefaultSize, VP_HeadLink, VP_TailLink);
|
||||
ZCLink::MakeCircle(VP_HeadLink, VP_TailLink);
|
||||
GetManyLink
|
||||
(AL_DefaultSize, VP_HeadLink, VP_TailLink);
|
||||
ZCLink::MakeCircle
|
||||
(VP_HeadLink , VP_TailLink );
|
||||
|
||||
ARR_StoreList.mp_HeadLink=VP_HeadLink ;
|
||||
ARR_StoreList.ml_Size =AL_DefaultSize;
|
||||
|
||||
return ARR_StoreList;
|
||||
}/*
|
||||
ZtCObjList& MakeDefault(TypeSize AL_DefaultSize, ZtCObjList& ARR_StoreList) const*/
|
||||
ZtCObjList& MakeDefault
|
||||
(TypeSize AL_DefaultSize, ZtCObjList& ARR_StoreList) const*/
|
||||
|
||||
|
||||
void GetManyLink(
|
||||
@ -671,12 +675,12 @@ namespace ZNsMain
|
||||
|
||||
if(AL_FarNum>0)
|
||||
{
|
||||
APR_HeadLink =
|
||||
new ZCLink(AP_CopyLink->GetData());
|
||||
APR_HeadLink = new
|
||||
ZCLink(AP_CopyLink->GetData());
|
||||
|
||||
ZCLink* VP_TempLink=APR_HeadLink;
|
||||
|
||||
for(TypeSize i=1; i<=AL_FarNum; ++i)
|
||||
for(TypeSize i=1; i<=AL_FarNum; ++i) /*<<<<<<<<<<<<<<<<<*/
|
||||
{
|
||||
AP_CopyLink=AP_CopyLink->mp_NextLink;
|
||||
|
||||
@ -684,8 +688,8 @@ namespace ZNsMain
|
||||
VP_TempLink, new ZCLink(AP_CopyLink->GetData()));
|
||||
|
||||
VP_TempLink=VP_TempLink->mp_NextLink;
|
||||
}/*
|
||||
for(TypeSize i=1; i<=AL_FarNum; ++i)*/
|
||||
}
|
||||
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
|
||||
APR_TailLink=VP_TempLink;
|
||||
}
|
||||
@ -696,7 +700,7 @@ namespace ZNsMain
|
||||
|
||||
ZCLink* VP_TempLink=APR_TailLink;
|
||||
|
||||
for(TypeSize i=AL_FarNum; i<0; ++i)
|
||||
for(TypeSize i=AL_FarNum; i<0; ++i) /*<<<<<<<<<<<<<<<<<<*/
|
||||
{
|
||||
AP_CopyLink=AP_CopyLink->mp_PrevLink;
|
||||
|
||||
@ -704,8 +708,8 @@ namespace ZNsMain
|
||||
VP_TempLink, new ZCLink(AP_CopyLink->GetData()));
|
||||
|
||||
VP_TempLink=VP_TempLink->mp_PrevLink;
|
||||
}/*
|
||||
for(TypeSize i=AL_FarNum; i<0; ++i)*/
|
||||
}
|
||||
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
|
||||
APR_HeadLink=VP_TempLink;
|
||||
}/*
|
||||
@ -1148,7 +1152,7 @@ namespace ZNsMain
|
||||
{
|
||||
__for1(TypeSize, i, AI_DeleteCnt)
|
||||
{
|
||||
if(ml_Size<1) return *this;
|
||||
if(this->size()<1) return *this;
|
||||
|
||||
delete this->CutLink(mp_HeadLink);
|
||||
}/*
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user