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:
|
public:
|
||||||
|
|
||||||
|
|
||||||
template<typename TDblList> class ZtCBody
|
template<typename TLinkList> class ZtCBody
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef typename TDblList::ZCLink ZCLink ;
|
typedef typename TLinkList::ZCLink ZCLink ;
|
||||||
typedef typename TDblList::TypeSize TypeSize;
|
typedef typename TLinkList::TypeSize TypeSize;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void RecvFreeIn(ZCLink* AP_CutLink){}
|
void RecvFreeIn(ZCLink* AP_CutLink){}
|
||||||
@ -3863,7 +3863,7 @@ namespace ZNsMain
|
|||||||
TypeSize GetHeapSize() const*/
|
TypeSize GetHeapSize() const*/
|
||||||
|
|
||||||
};/*
|
};/*
|
||||||
template<typename TDblList> class ZtCBody*/
|
template<typename TLinkList> class ZtCBody*/
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -3875,6 +3875,322 @@ namespace ZNsMain
|
|||||||
namespace ZNsIFace*/
|
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
|
class ZCHeapAllocList
|
||||||
|
@ -35,7 +35,7 @@ namespace ZNsMain
|
|||||||
, typename TTypeInit = ZtCInit<TType>
|
, typename TTypeInit = ZtCInit<TType>
|
||||||
, typename TTypSize = ZTypLong
|
, typename TTypSize = ZTypLong
|
||||||
, typename TMoveObj = ZtCMoveObj<TType, TTypArgu, true>
|
, typename TMoveObj = ZtCMoveObj<TType, TTypArgu, true>
|
||||||
, typename TFeeeHeap = ZNsIFace::ZIFreeHeap
|
, typename TFeeeHeap = ZNsIFaceEx::ZtCFreeHeapCDL<>
|
||||||
>
|
>
|
||||||
class ZtCObjList //////////////////////////////////////////////////////////////
|
class ZtCObjList //////////////////////////////////////////////////////////////
|
||||||
{
|
{
|
||||||
@ -615,22 +615,26 @@ namespace ZNsMain
|
|||||||
ZtCObjList& CopyThis(ZtCObjList& ARR_StoreList) const*/
|
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
|
// must AL_DefaultSize > 0
|
||||||
|
|
||||||
ZCLink* VP_HeadLink=0;
|
ZCLink* VP_HeadLink=0;
|
||||||
ZCLink* VP_TailLink=0;
|
ZCLink* VP_TailLink=0;
|
||||||
|
|
||||||
GetManyLink(AL_DefaultSize, VP_HeadLink, VP_TailLink);
|
GetManyLink
|
||||||
ZCLink::MakeCircle(VP_HeadLink, VP_TailLink);
|
(AL_DefaultSize, VP_HeadLink, VP_TailLink);
|
||||||
|
ZCLink::MakeCircle
|
||||||
|
(VP_HeadLink , VP_TailLink );
|
||||||
|
|
||||||
ARR_StoreList.mp_HeadLink=VP_HeadLink ;
|
ARR_StoreList.mp_HeadLink=VP_HeadLink ;
|
||||||
ARR_StoreList.ml_Size =AL_DefaultSize;
|
ARR_StoreList.ml_Size =AL_DefaultSize;
|
||||||
|
|
||||||
return ARR_StoreList;
|
return ARR_StoreList;
|
||||||
}/*
|
}/*
|
||||||
ZtCObjList& MakeDefault(TypeSize AL_DefaultSize, ZtCObjList& ARR_StoreList) const*/
|
ZtCObjList& MakeDefault
|
||||||
|
(TypeSize AL_DefaultSize, ZtCObjList& ARR_StoreList) const*/
|
||||||
|
|
||||||
|
|
||||||
void GetManyLink(
|
void GetManyLink(
|
||||||
@ -671,12 +675,12 @@ namespace ZNsMain
|
|||||||
|
|
||||||
if(AL_FarNum>0)
|
if(AL_FarNum>0)
|
||||||
{
|
{
|
||||||
APR_HeadLink =
|
APR_HeadLink = new
|
||||||
new ZCLink(AP_CopyLink->GetData());
|
ZCLink(AP_CopyLink->GetData());
|
||||||
|
|
||||||
ZCLink* VP_TempLink=APR_HeadLink;
|
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;
|
AP_CopyLink=AP_CopyLink->mp_NextLink;
|
||||||
|
|
||||||
@ -684,8 +688,8 @@ namespace ZNsMain
|
|||||||
VP_TempLink, new ZCLink(AP_CopyLink->GetData()));
|
VP_TempLink, new ZCLink(AP_CopyLink->GetData()));
|
||||||
|
|
||||||
VP_TempLink=VP_TempLink->mp_NextLink;
|
VP_TempLink=VP_TempLink->mp_NextLink;
|
||||||
}/*
|
}
|
||||||
for(TypeSize i=1; i<=AL_FarNum; ++i)*/
|
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||||
|
|
||||||
APR_TailLink=VP_TempLink;
|
APR_TailLink=VP_TempLink;
|
||||||
}
|
}
|
||||||
@ -696,7 +700,7 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ZCLink* VP_TempLink=APR_TailLink;
|
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;
|
AP_CopyLink=AP_CopyLink->mp_PrevLink;
|
||||||
|
|
||||||
@ -704,8 +708,8 @@ namespace ZNsMain
|
|||||||
VP_TempLink, new ZCLink(AP_CopyLink->GetData()));
|
VP_TempLink, new ZCLink(AP_CopyLink->GetData()));
|
||||||
|
|
||||||
VP_TempLink=VP_TempLink->mp_PrevLink;
|
VP_TempLink=VP_TempLink->mp_PrevLink;
|
||||||
}/*
|
}
|
||||||
for(TypeSize i=AL_FarNum; i<0; ++i)*/
|
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||||
|
|
||||||
APR_HeadLink=VP_TempLink;
|
APR_HeadLink=VP_TempLink;
|
||||||
}/*
|
}/*
|
||||||
@ -1148,7 +1152,7 @@ namespace ZNsMain
|
|||||||
{
|
{
|
||||||
__for1(TypeSize, i, AI_DeleteCnt)
|
__for1(TypeSize, i, AI_DeleteCnt)
|
||||||
{
|
{
|
||||||
if(ml_Size<1) return *this;
|
if(this->size()<1) return *this;
|
||||||
|
|
||||||
delete this->CutLink(mp_HeadLink);
|
delete this->CutLink(mp_HeadLink);
|
||||||
}/*
|
}/*
|
||||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user