2336 lines
72 KiB
C++
2336 lines
72 KiB
C++
|
|
|||
|
|
|||
|
#ifndef __CSIMLIST_H__
|
|||
|
#define __CSIMLIST_H__
|
|||
|
|
|||
|
|
|||
|
#include "ZCppMain/ZMainHead.H"
|
|||
|
|
|||
|
|
|||
|
namespace ZNsMain
|
|||
|
{
|
|||
|
|
|||
|
template<typename TypeObjList> class ZtCSortObjList;
|
|||
|
|
|||
|
|
|||
|
template /*############################*/
|
|||
|
<
|
|||
|
typename TType ,
|
|||
|
typename TTypCArg =const TType&,
|
|||
|
typename TTypCAlloc=ZCAllocator ,
|
|||
|
typename TTypCInit =ZCInit ,
|
|||
|
typename TTypSize =ZTypLong
|
|||
|
>
|
|||
|
class ZtCSimList /*####################*/
|
|||
|
{
|
|||
|
public:
|
|||
|
typedef TType Type ;
|
|||
|
typedef TType TypeData ;
|
|||
|
typedef TTypCArg TypeArg ;
|
|||
|
typedef TTypCAlloc TypeAlloc;
|
|||
|
typedef TTypCInit TypeInit ;
|
|||
|
typedef TTypSize TypeSize ;
|
|||
|
public:
|
|||
|
|
|||
|
|
|||
|
class ZCLinkHeap;
|
|||
|
|
|||
|
|
|||
|
class ZCLink : public TypeAlloc
|
|||
|
{
|
|||
|
public:
|
|||
|
template<typename TypeObjList> friend class ZtCSortObjList ;
|
|||
|
friend class ZtCSimList ;
|
|||
|
/*##########################*/ friend class ZCLinkHeap ;
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
ZCCheckAlloc mo_CheckStack;
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
private:
|
|||
|
ZCLink* mp_NextLink;
|
|||
|
TType mo_Type ;
|
|||
|
private:
|
|||
|
|
|||
|
|
|||
|
inline static void JoinLink(ZCLink* AP_PrevLink, ZCLink* AP_NextLink)
|
|||
|
{
|
|||
|
// <20><> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
AP_PrevLink->mp_NextLink=AP_NextLink;
|
|||
|
}/*
|
|||
|
inline static void JoinLink(ZCLink* AP_PrevLink, ZCLink* AP_NextLink)*/
|
|||
|
|
|||
|
inline static void MakeCircle(ZCLink* AP_HeadLink, ZCLink* AP_TailLink)
|
|||
|
{
|
|||
|
// ó<><C3B3><EFBFBD><EFBFBD> <20><> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
// <20>̰<EFBFBD><CCB0><EFBFBD> ZtCSimList class template <20><> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD>߱<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
AP_TailLink->mp_NextLink=AP_HeadLink;
|
|||
|
}/*
|
|||
|
inline static void MakeCircle(ZCLink* AP_HeadLink, ZCLink* AP_TailLink)*/
|
|||
|
|
|||
|
//private:
|
|||
|
public :
|
|||
|
|
|||
|
|
|||
|
ZCLink():mp_NextLink(0)
|
|||
|
{
|
|||
|
}/*
|
|||
|
ZCLink()*/
|
|||
|
|
|||
|
ZCLink(const ZCLink& rhs):mp_NextLink(0)
|
|||
|
{
|
|||
|
// TType <20><> <20><><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD>ڴ<EFBFBD> <20>ݵ<EFBFBD><DDB5><EFBFBD> public <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
mo_Type=rhs.mo_Type;
|
|||
|
}/*
|
|||
|
ZCLink(const ZCLink& rhs)*/
|
|||
|
|
|||
|
ZCLink(TypeArg AR_Type):mp_NextLink(0)
|
|||
|
{
|
|||
|
mo_Type=AR_Type;
|
|||
|
}/*
|
|||
|
ZCLink(TypeArg AR_Type)*/
|
|||
|
|
|||
|
operator TType&()
|
|||
|
{
|
|||
|
return mo_Type;
|
|||
|
}/*
|
|||
|
operator TType&()*/
|
|||
|
|
|||
|
operator TType()
|
|||
|
{
|
|||
|
return mo_Type;
|
|||
|
}/*
|
|||
|
operator TType()*/
|
|||
|
|
|||
|
TType& GetData()
|
|||
|
{
|
|||
|
return mo_Type;
|
|||
|
}/*
|
|||
|
TType& GetData()*/
|
|||
|
|
|||
|
const TType& GetData() const
|
|||
|
{
|
|||
|
return mo_Type;
|
|||
|
}/*
|
|||
|
const TType& GetData() const*/
|
|||
|
|
|||
|
TType& GetData(TTypSize AL_FarNum) // must AL_FarNum >= 0
|
|||
|
{
|
|||
|
return GetNextPtr(AL_FarNum)->mo_Type;
|
|||
|
}/*
|
|||
|
TType& GetData(TTypSize AL_FarNum)*/
|
|||
|
|
|||
|
const TType& GetData(TTypSize AL_FarNum) const
|
|||
|
{
|
|||
|
return GetNextPtr(AL_FarNum)->mo_Type;
|
|||
|
}/*
|
|||
|
const TType& GetData(TTypSize AL_FarNum) const*/
|
|||
|
|
|||
|
|
|||
|
TType& operator*()
|
|||
|
{
|
|||
|
return mo_Type;
|
|||
|
}/*
|
|||
|
TType& operator*()*/
|
|||
|
|
|||
|
const TType& operator*() const
|
|||
|
{
|
|||
|
return mo_Type;
|
|||
|
}/*
|
|||
|
const TType& operator*() const*/
|
|||
|
|
|||
|
|
|||
|
ZCLink* GetNextPtr(TTypSize AL_FarNum) // must AL_FarNum > 0
|
|||
|
{
|
|||
|
// <20><> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> TTypSize <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ū object <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// <20><> <20>Լ<EFBFBD> <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
|||
|
|
|||
|
ZCLink* VP_TmpLink=this;
|
|||
|
|
|||
|
while(--AL_FarNum>=0)
|
|||
|
VP_TmpLink=VP_TmpLink->mp_NextLink;
|
|||
|
//end while
|
|||
|
|
|||
|
return VP_TmpLink;
|
|||
|
}/*
|
|||
|
ZCLink* GetNextPtr(TTypSize AL_FarNum)*/
|
|||
|
|
|||
|
|
|||
|
const ZCLink* const GetNextPtr(TTypSize AL_FarNum) const // or ZCLink const * const GetNextPtr(TTypSize AL_FarNum) const
|
|||
|
{
|
|||
|
// TTypSize <20><> object <20><> <20><><EFBFBD><EFBFBD> AL_FarNum <20><> <20><><EFBFBD><EFBFBD> <20><> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>
|
|||
|
// TTypSize <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȵȴ<C8B5>.
|
|||
|
|
|||
|
ZCLink* VP_TmpLink=const_cast<ZCLink*>(this);
|
|||
|
|
|||
|
// <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> <20>ڿ<EFBFBD> const keyword <20><> <20>پ<EFBFBD> <20>ִµ<D6B4> <20>̰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> this pointer <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> <20><><EFBFBD>ֵȴ<D6B5>.
|
|||
|
// <20><><EFBFBD>ٿ<EFBFBD><D9BF><EFBFBD> <20><> this <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȯ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD>.
|
|||
|
// ZCLink* VP_TmpLink=const_cast<ZCLink*>this; <20><> <20>ϸ<EFBFBD> g++ 2.96 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
while(--AL_FarNum>=0)
|
|||
|
VP_TmpLink=VP_TmpLink->mp_NextLink;
|
|||
|
//end while
|
|||
|
|
|||
|
return VP_TmpLink;
|
|||
|
}/*
|
|||
|
const ZCLink* const GetNextPtr(TTypSize AL_FarNum) const*/
|
|||
|
|
|||
|
|
|||
|
inline ZCLink* GetNextPtr()
|
|||
|
{
|
|||
|
return mp_NextLink;
|
|||
|
}/*
|
|||
|
inline ZCLink* GetNextPtr()*/
|
|||
|
|
|||
|
inline const ZCLink* const GetNextPtr() const
|
|||
|
{
|
|||
|
return mp_NextLink;
|
|||
|
}/*
|
|||
|
inline const ZCLink* const GetNextPtr() const*/
|
|||
|
|
|||
|
ZCLink& operator=(TypeArg AR_Type)
|
|||
|
{
|
|||
|
mo_Type=AR_Type; return *this;
|
|||
|
}/*
|
|||
|
ZCLink& operator=(TypeArg AR_Type)*/
|
|||
|
|
|||
|
ZCLink* operator+(TypeSize AL_Offset)
|
|||
|
{
|
|||
|
ZCLink* VP_CLinkLoop=this;
|
|||
|
|
|||
|
__for0(TTypSize, i, AL_Offset)
|
|||
|
{
|
|||
|
VP_CLinkLoop = VP_CLinkLoop->mp_NextLink;
|
|||
|
}/*
|
|||
|
__for0(TTypSize, i, AL_Offset)*/
|
|||
|
|
|||
|
return *this;
|
|||
|
}/*
|
|||
|
ZCLink* operator+(TypeSize AL_Offset)
|
|||
|
|
|||
|
public:*/
|
|||
|
};/*
|
|||
|
class ZCLink*/
|
|||
|
|
|||
|
|
|||
|
/////////////////////////////////////////////////
|
|||
|
|
|||
|
/*************** end class ZCLink ***************/
|
|||
|
|
|||
|
/////////////////////////////////////////////////
|
|||
|
|
|||
|
|
|||
|
class ZCLinkHeap : public ZCFreeAllocBase
|
|||
|
{
|
|||
|
public:
|
|||
|
friend class ZtCSimList ;
|
|||
|
friend class ZCLink ;
|
|||
|
public:
|
|||
|
|
|||
|
#ifdef _REENTRANT_MUTEX
|
|||
|
ZNsMain::CMutexSmallInit mo_Mutex ;
|
|||
|
#endif //_REENTRANT_MUTEX
|
|||
|
|
|||
|
private:
|
|||
|
|
|||
|
TypeInit mo_TypeInit;
|
|||
|
|
|||
|
TTypSize ml_AllSize ;
|
|||
|
TTypSize ml_UseSize ;
|
|||
|
|
|||
|
ZCLink* mp_NoUseHeadLink;
|
|||
|
ZCLink* mp_NoUseTailLink;
|
|||
|
|
|||
|
//private:
|
|||
|
private:
|
|||
|
|
|||
|
ZCLink* GetOneLink()
|
|||
|
{
|
|||
|
#ifdef _REENTRANT_MUTEX
|
|||
|
ZNsMain::CMutexSmallLock VO_CMutexSmallLock(mo_Mutex);
|
|||
|
#endif //_REENTRANT_MUTEX
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
ZNsMain::ZCCheckAlloc::ZCAllowAlloc CAllowAllocObj;
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
if(ml_UseSize==0)
|
|||
|
return (++ml_AllSize, new ZCLink) ;
|
|||
|
/////////////////
|
|||
|
|
|||
|
ZCLink* VP_TempLink=mp_NoUseHeadLink;
|
|||
|
|
|||
|
if(VP_TempLink==mp_NoUseTailLink)
|
|||
|
{
|
|||
|
mp_NoUseHeadLink=0;
|
|||
|
mp_NoUseTailLink=0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
mp_NoUseHeadLink=mp_NoUseHeadLink->mp_NextLink;
|
|||
|
}
|
|||
|
//else
|
|||
|
|
|||
|
--ml_UseSize; return VP_TempLink;
|
|||
|
}/*
|
|||
|
ZCLink* GetOneLink()*/
|
|||
|
|
|||
|
|
|||
|
void GetManyLink( TTypSize AL_LinkSize,
|
|||
|
ZCLink*& APR_HeadLink,
|
|||
|
ZCLink*& APR_TailLink
|
|||
|
/*************/ )
|
|||
|
{
|
|||
|
#ifdef _REENTRANT_MUTEX
|
|||
|
ZNsMain::CMutexSmallLock VO_CMutexSmallLock(mo_Mutex);
|
|||
|
#endif //_REENTRANT_MUTEX
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
ZNsMain::ZCCheckAlloc::ZCAllowAlloc CAllowAllocObj;
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
if(mp_NoUseHeadLink==0)
|
|||
|
{
|
|||
|
MakeLink(AL_LinkSize,APR_HeadLink,APR_TailLink);
|
|||
|
}
|
|||
|
else if(AL_LinkSize==ml_UseSize)
|
|||
|
{
|
|||
|
ZCLink* VP_Temp=mp_NoUseHeadLink;
|
|||
|
|
|||
|
while(true)
|
|||
|
{
|
|||
|
mo_TypeInit(VP_Temp->mo_Type);
|
|||
|
|
|||
|
if(VP_Temp==mp_NoUseTailLink)
|
|||
|
break;
|
|||
|
else
|
|||
|
VP_Temp=VP_Temp->mp_NextLink;
|
|||
|
//else
|
|||
|
}
|
|||
|
//while(true)
|
|||
|
|
|||
|
APR_HeadLink=mp_NoUseHeadLink;
|
|||
|
APR_TailLink=mp_NoUseTailLink ;
|
|||
|
|
|||
|
mp_NoUseHeadLink=0;
|
|||
|
mp_NoUseTailLink =0;
|
|||
|
|
|||
|
ml_UseSize=0;
|
|||
|
}
|
|||
|
else if(AL_LinkSize<ml_UseSize)
|
|||
|
{
|
|||
|
APR_HeadLink=mp_NoUseHeadLink;
|
|||
|
|
|||
|
mo_TypeInit(mp_NoUseHeadLink->mo_Type);
|
|||
|
|
|||
|
for(TTypSize VL_Count=2;VL_Count<=AL_LinkSize;++VL_Count)
|
|||
|
{
|
|||
|
// VL_Count <20><> 2 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AL_LinkSize-1 <20><> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
|||
|
// <20><EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> AL_LinkSize <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ڸ<EFBFBD> <20><> <20>ִ<EFBFBD>.
|
|||
|
|
|||
|
mp_NoUseHeadLink=mp_NoUseHeadLink->mp_NextLink;
|
|||
|
mo_TypeInit(mp_NoUseHeadLink->mo_Type);
|
|||
|
}
|
|||
|
//for(TTypSize VL_Count=2;VL_Count<=AL_LinkSize;++VL_Count)
|
|||
|
|
|||
|
APR_TailLink = mp_NoUseHeadLink;
|
|||
|
mp_NoUseHeadLink= mp_NoUseHeadLink->mp_NextLink;
|
|||
|
|
|||
|
ml_UseSize -= AL_LinkSize;
|
|||
|
}
|
|||
|
else // AL_LinkSize > ml_UseSize
|
|||
|
{
|
|||
|
ZCLink* VP_Temp=mp_NoUseHeadLink;
|
|||
|
|
|||
|
while(true)
|
|||
|
{
|
|||
|
mo_TypeInit(VP_Temp->mo_Type);
|
|||
|
|
|||
|
if(VP_Temp==mp_NoUseTailLink)
|
|||
|
break;
|
|||
|
else
|
|||
|
VP_Temp=VP_Temp->mp_NextLink;
|
|||
|
//endif
|
|||
|
}
|
|||
|
//while(true)
|
|||
|
|
|||
|
APR_HeadLink=mp_NoUseHeadLink;
|
|||
|
|
|||
|
MakeLink( AL_LinkSize-ml_UseSize,
|
|||
|
mp_NoUseTailLink->mp_NextLink,
|
|||
|
APR_TailLink
|
|||
|
/*****/ );
|
|||
|
|
|||
|
mp_NoUseHeadLink=0;
|
|||
|
mp_NoUseTailLink=0;
|
|||
|
ml_UseSize =0;
|
|||
|
}
|
|||
|
//else // AL_LinkSize > ml_UseSize
|
|||
|
}
|
|||
|
/*void GetManyLink(
|
|||
|
TTypSize AL_LinkSize,
|
|||
|
ZCLink*& APR_HeadLink,
|
|||
|
ZCLink*& APR_TailLink
|
|||
|
////////////// ) */
|
|||
|
|
|||
|
|
|||
|
void GetManyLinkCopy( ZCLink* AP_LinkOrgin,
|
|||
|
TTypSize AL_FarNum ,
|
|||
|
ZCLink*& APR_HeadCopy,
|
|||
|
ZCLink*& APR_TailCopy
|
|||
|
/*****************/ )
|
|||
|
{
|
|||
|
// AL_FarNum > 0
|
|||
|
// AP_LinkOrgin <20><>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD>,
|
|||
|
// AP_LinkOrgin <20><><EFBFBD><EFBFBD> AL_FarNum <20><>ŭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><>ũ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> APR_HeadCopy <20><>,
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> APR_TailCopy <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
// AP_LinkOrgin <20><>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ鼭 <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> AL_FarNum + 1 <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
// <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> MakeLinkCopy() <20>Լ<EFBFBD><D4BC>ʹ<EFBFBD> <20><EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> ml_UseSize <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
#ifdef _REENTRANT_MUTEX
|
|||
|
ZNsMain::CMutexSmallLock VO_CMutexSmallLock(mo_Mutex);
|
|||
|
#endif //_REENTRANT_MUTEX
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
ZNsMain::ZCCheckAlloc::ZCAllowAlloc CAllowAllocObj;
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
if(mp_NoUseHeadLink==0)
|
|||
|
{
|
|||
|
MakeLinkCopy(AP_LinkOrgin, AL_FarNum, APR_HeadCopy, APR_TailCopy);
|
|||
|
}
|
|||
|
else if( AL_FarNum < ml_UseSize) // ( (AL_FarNum<0 ? -AL_FarNum : AL_FarNum)+1 <= ml_UseSize)
|
|||
|
{
|
|||
|
ml_UseSize -= AL_FarNum+1 ;
|
|||
|
|
|||
|
mp_NoUseHeadLink->mo_Type = AP_LinkOrgin->mo_Type;
|
|||
|
APR_HeadCopy=mp_NoUseHeadLink;
|
|||
|
|
|||
|
while(--AL_FarNum>=0)
|
|||
|
{
|
|||
|
mp_NoUseHeadLink=mp_NoUseHeadLink->mp_NextLink;
|
|||
|
AP_LinkOrgin=AP_LinkOrgin->mp_NextLink;
|
|||
|
|
|||
|
mp_NoUseHeadLink->mo_Type = AP_LinkOrgin->mo_Type;
|
|||
|
}
|
|||
|
//while(--AL_FarNum>=0)
|
|||
|
|
|||
|
APR_TailCopy=mp_NoUseHeadLink;
|
|||
|
|
|||
|
// <20><> <20>κп<CEBA><D0BF><EFBFBD> mp_NoUseHeadLink <20><> <20>߷<EFBFBD><DFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ȴ<EFBFBD>.
|
|||
|
// <20><EFBFBD><D7B7>Ƿ<EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ʱ<EFBFBD>ȭ<EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
mp_NoUseHeadLink=mp_NoUseHeadLink->mp_NextLink;
|
|||
|
|
|||
|
if(mp_NoUseHeadLink==0)
|
|||
|
{
|
|||
|
mp_NoUseTailLink=0;
|
|||
|
|
|||
|
// mp_NoUseHeadLink == 0 <20>ε<EFBFBD> mp_NoUseTailLink !=0 <20>̶<EFBFBD><CCB6><EFBFBD>
|
|||
|
// <20><><EFBFBD>߿<EFBFBD> <20><>ĩ <20><><EFBFBD>ѷ<EFBFBD><D1B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ڵ带 <20>ξ<EFBFBD><CEBE><EFBFBD>.
|
|||
|
}
|
|||
|
//if(mp_NoUseHeadLink==0)
|
|||
|
}
|
|||
|
else // AL_FarNum > ml_UseSize
|
|||
|
{
|
|||
|
mp_NoUseHeadLink->mo_Type = AP_LinkOrgin->mo_Type;
|
|||
|
APR_HeadCopy = mp_NoUseHeadLink;
|
|||
|
|
|||
|
while(mp_NoUseHeadLink!=mp_NoUseTailLink)
|
|||
|
{
|
|||
|
mp_NoUseHeadLink=mp_NoUseHeadLink->mp_NextLink;
|
|||
|
AP_LinkOrgin =AP_LinkOrgin ->mp_NextLink;
|
|||
|
|
|||
|
mp_NoUseHeadLink->mo_Type = AP_LinkOrgin->mo_Type;
|
|||
|
}
|
|||
|
//while(mp_NoUseHeadLink!=mp_NoUseTailLink)
|
|||
|
|
|||
|
MakeLinkCopy( AP_LinkOrgin->mp_NextLink ,
|
|||
|
AL_FarNum-ml_UseSize ,
|
|||
|
mp_NoUseTailLink->mp_NextLink,
|
|||
|
APR_TailCopy
|
|||
|
/*********/ );
|
|||
|
|
|||
|
mp_NoUseHeadLink =
|
|||
|
mp_NoUseTailLink = 0;
|
|||
|
ml_UseSize = 0;
|
|||
|
}
|
|||
|
//else // AL_FarNum > ml_UseSize
|
|||
|
}
|
|||
|
/*void GetManyLinkCopy(
|
|||
|
ZCLink* AP_LinkOrgin, TTypSize AL_FarNum,
|
|||
|
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy,
|
|||
|
///////////// ) */
|
|||
|
|
|||
|
|
|||
|
void MakeLink( TTypSize AL_MakeSize,
|
|||
|
ZCLink*& APR_HeadLink,
|
|||
|
ZCLink*& APR_TailLink
|
|||
|
/**********/ )
|
|||
|
{
|
|||
|
#ifdef _REENTRANT_MUTEX
|
|||
|
ZNsMain::CMutexSmallLock VO_CMutexSmallLock(mo_Mutex);
|
|||
|
#endif //_REENTRANT_MUTEX
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
ZNsMain::ZCCheckAlloc::ZCAllowAlloc CAllowAllocObj;
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
APR_HeadLink = new ZCLink;
|
|||
|
|
|||
|
if(APR_HeadLink==0)
|
|||
|
{
|
|||
|
//add codes for memory over
|
|||
|
|
|||
|
DeleteAllInHeap(); return;
|
|||
|
}
|
|||
|
//if(APR_HeadLink==0)
|
|||
|
|
|||
|
ml_AllSize += AL_MakeSize;
|
|||
|
|
|||
|
ZCLink* VP_MakeLink =0;
|
|||
|
ZCLink* VP_TempLink =APR_HeadLink;
|
|||
|
bool VB_IsHeapOver=false;
|
|||
|
|
|||
|
// bool VB_IsHeapOver <20><> new <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> NULL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF><EFBFBD><EFBFBD> <20><>
|
|||
|
// true <20><> <20><><EFBFBD>Թ´<DEB4>. <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD> heap overflow <20><> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
// bool VB_IsHeapOver <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
|
|||
|
// <20>Ʒ<EFBFBD> for <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEB8><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20>ڵ带 <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// for <20><> <20>ȿ<EFBFBD> if <20><> <20>ӿ<EFBFBD><D3BF><EFBFBD> <20><> for <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
|
|||
|
// <20><EFBFBD><D7B7><EFBFBD> heap over <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> <20>ڵ带
|
|||
|
// for <20><> <20>ٱ<EFBFBD><D9B1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
|
|||
|
|
|||
|
while(--AL_MakeSize>0) // AL_MakeSize - 1 <20><> <20><>ȯ
|
|||
|
{
|
|||
|
// AL_MakeSize - 1 <20><> <20><>ȯ
|
|||
|
|
|||
|
VP_MakeLink = new ZCLink;
|
|||
|
|
|||
|
if(VP_MakeLink==0)
|
|||
|
{
|
|||
|
ml_AllSize -= AL_MakeSize+1 ;
|
|||
|
VB_IsHeapOver=true;
|
|||
|
break;
|
|||
|
}
|
|||
|
//if(VP_MakeLink==0)
|
|||
|
|
|||
|
VP_TempLink->mp_NextLink=VP_MakeLink;
|
|||
|
VP_TempLink=VP_MakeLink;
|
|||
|
}
|
|||
|
//while(--AL_MakeSize>0)
|
|||
|
|
|||
|
APR_TailLink = VP_TempLink;
|
|||
|
|
|||
|
// <20><DEB8> <20><> <20>̻<EFBFBD> <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>
|
|||
|
// <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> VL_Count <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
if(VB_IsHeapOver==true)
|
|||
|
{
|
|||
|
VP_TempLink=APR_HeadLink;
|
|||
|
|
|||
|
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּ<EFBFBD><D6BC><EFBFBD> APR_HeadLink <20>ϳ<EFBFBD><CFB3><EFBFBD>
|
|||
|
// heap <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20>ִ<EFBFBD>.
|
|||
|
|
|||
|
do //////
|
|||
|
{
|
|||
|
delete VP_TempLink;
|
|||
|
|
|||
|
if(VP_TempLink==APR_TailLink)
|
|||
|
{
|
|||
|
DeleteAllInHeap();
|
|||
|
|
|||
|
// Add extra codes for memory over
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
//if(VP_TempLink==APR_TailLink)
|
|||
|
|
|||
|
APR_HeadLink=APR_HeadLink->mp_NextLink;
|
|||
|
}
|
|||
|
while(true);
|
|||
|
}
|
|||
|
//if(VB_IsHeapOver==true)
|
|||
|
}
|
|||
|
//void MakeLink(TTypSize AL_MakeSize,ZCLink*& APR_HeadLink,ZCLink*& APR_TailLink)
|
|||
|
|
|||
|
|
|||
|
void MakeLinkCopy( ZCLink* AP_LinkOrgin, TTypSize AL_FarNum,
|
|||
|
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
|
|||
|
/**************/ )
|
|||
|
{
|
|||
|
// AP_LinkOrgin <20><>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD>,
|
|||
|
// AP_LinkOrgin <20><><EFBFBD><EFBFBD> AL_FarNum <20><>ŭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><>ũ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> APR_HeadCopy <20><>,
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> APR_TailCopy <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
// AL_FarNum > 0 , <20><> AL_FarNum + 1 <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
|
|||
|
#ifdef _REENTRANT_MUTEX
|
|||
|
ZNsMain::CMutexSmallLock VO_CMutexSmallLock(mo_Mutex);
|
|||
|
#endif //_REENTRANT_MUTEX
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
ZNsMain::ZCCheckAlloc::ZCAllowAlloc CAllowAllocObj;
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
ZCLink* VP_MakeLink =0;
|
|||
|
ZCLink* VP_TempLink =0;
|
|||
|
bool VB_IsHeapOver=false;
|
|||
|
|
|||
|
VP_TempLink = \
|
|||
|
VP_MakeLink = new ZCLink(AP_LinkOrgin->mo_Type);
|
|||
|
|
|||
|
ml_AllSize += AL_FarNum+1 ;
|
|||
|
|
|||
|
if(VP_MakeLink==0)
|
|||
|
{
|
|||
|
//add codes for memory over
|
|||
|
|
|||
|
ml_AllSize -= AL_FarNum+1 ;
|
|||
|
DeleteAllInHeap();
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
//if(VP_MakeLink==0)
|
|||
|
|
|||
|
APR_HeadCopy=VP_MakeLink;
|
|||
|
|
|||
|
while(--AL_FarNum >= 0)
|
|||
|
{
|
|||
|
AP_LinkOrgin= AP_LinkOrgin->mp_NextLink;
|
|||
|
VP_MakeLink = new ZCLink(AP_LinkOrgin->mo_Type);
|
|||
|
|
|||
|
if(VP_MakeLink==0)
|
|||
|
{
|
|||
|
ml_AllSize -= AL_FarNum+1 ;
|
|||
|
|
|||
|
APR_TailCopy =VP_TempLink;
|
|||
|
VB_IsHeapOver=true;
|
|||
|
break;
|
|||
|
}
|
|||
|
//if(VP_MakeLink==0)
|
|||
|
|
|||
|
VP_TempLink->mp_NextLink=VP_MakeLink;
|
|||
|
VP_TempLink = VP_MakeLink;
|
|||
|
}
|
|||
|
//while(--AL_FarNum >= 0)
|
|||
|
|
|||
|
APR_TailCopy=VP_TempLink;
|
|||
|
|
|||
|
// <20><DEB8> <20><> <20>̻<EFBFBD> <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>
|
|||
|
// <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
if(VB_IsHeapOver==true)
|
|||
|
{
|
|||
|
do //////
|
|||
|
{
|
|||
|
delete APR_HeadCopy;
|
|||
|
|
|||
|
if(APR_HeadCopy==APR_TailCopy)
|
|||
|
{
|
|||
|
DeleteAllInHeap(); return;
|
|||
|
}
|
|||
|
//if(APR_HeadCopy==APR_TailCopy)
|
|||
|
|
|||
|
APR_HeadCopy=APR_HeadCopy->mp_NextLink;
|
|||
|
}
|
|||
|
while(true);
|
|||
|
}
|
|||
|
//if(VB_IsHeapOver==true)
|
|||
|
}
|
|||
|
/*void MakeLinkCopy(
|
|||
|
ZCLink* AP_LinkOrgin, TTypSize AL_FarNum,
|
|||
|
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
|
|||
|
////////////// ) */
|
|||
|
|
|||
|
|
|||
|
void ReceiveLink(ZCLink* AP_Link)
|
|||
|
{
|
|||
|
#ifdef _REENTRANT_MUTEX
|
|||
|
ZNsMain::CMutexSmallLock VO_CMutexSmallLock(mo_Mutex);
|
|||
|
#endif //_REENTRANT_MUTEX
|
|||
|
|
|||
|
AP_Link->mp_NextLink=0;
|
|||
|
|
|||
|
if(++ml_UseSize==1) // ml_UseSize <20><> 0 <20>϶<EFBFBD>
|
|||
|
{
|
|||
|
mp_NoUseHeadLink =
|
|||
|
mp_NoUseTailLink = AP_Link ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// <20><><EFBFBD>ο<EFBFBD> <20><>ũ<EFBFBD><C5A9> mp_NoUseTailLink <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>δ<EFBFBD>.
|
|||
|
|
|||
|
mp_NoUseTailLink->mp_NextLink=AP_Link;
|
|||
|
mp_NoUseTailLink=AP_Link;
|
|||
|
}
|
|||
|
//else
|
|||
|
}
|
|||
|
//void ReceiveLink(ZCLink* AP_Link)
|
|||
|
|
|||
|
void ReceiveLink(ZCLink* AP_HeadLink,ZCLink* AP_TailLink,TTypSize AL_Count)
|
|||
|
{
|
|||
|
#ifdef _REENTRANT_MUTEX
|
|||
|
ZNsMain::CMutexSmallLock VO_CMutexSmallLock(mo_Mutex);
|
|||
|
#endif //_REENTRANT_MUTEX
|
|||
|
|
|||
|
if(ml_UseSize==0)
|
|||
|
{
|
|||
|
mp_NoUseHeadLink = AP_HeadLink ;
|
|||
|
mp_NoUseTailLink = AP_TailLink ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// <20><><EFBFBD>ο<EFBFBD> <20><>ũ<EFBFBD><C5A9> mp_NoUseTailLink <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>δ<EFBFBD>.
|
|||
|
|
|||
|
mp_NoUseTailLink->mp_NextLink=AP_HeadLink;
|
|||
|
mp_NoUseTailLink=AP_TailLink;
|
|||
|
}
|
|||
|
//else
|
|||
|
|
|||
|
mp_NoUseTailLink->mp_NextLink=0;
|
|||
|
|
|||
|
ml_UseSize+=AL_Count;
|
|||
|
}
|
|||
|
//void ReceiveLink(ZCLink* AP_HeadLink,ZCLink* AP_TailLink,TTypSize AL_Count)
|
|||
|
|
|||
|
|
|||
|
//private:
|
|||
|
public :
|
|||
|
|
|||
|
|
|||
|
ZCLinkHeap()
|
|||
|
{
|
|||
|
ml_AllSize =
|
|||
|
ml_UseSize = 0 ;
|
|||
|
|
|||
|
mp_NoUseHeadLink =
|
|||
|
mp_NoUseTailLink = 0 ;
|
|||
|
|
|||
|
ZNsMain::GetCHeapAllocList().AddFreeAllocBase(*this);
|
|||
|
}
|
|||
|
//ZCLinkHeap()
|
|||
|
|
|||
|
~ZCLinkHeap()
|
|||
|
{
|
|||
|
#ifndef _SIMLIST_FREE_STORE_CHECK_
|
|||
|
|
|||
|
#ifdef _SIMLIST_FREE_STORE_LOG_
|
|||
|
|
|||
|
if( ml_UseSize>0 )
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error In '~ZCLinkHeap()' : All Static Link Not Returned !! "<<std::endl;
|
|||
|
fileout.close();
|
|||
|
}
|
|||
|
//if( ml_UseSize>0 )
|
|||
|
|
|||
|
#endif //_SIMLIST_FREE_STORE_LOG_
|
|||
|
|
|||
|
return ;
|
|||
|
|
|||
|
#endif //!_SIMLIST_FREE_STORE_CHECK_
|
|||
|
|
|||
|
if(ml_UseSize==0)
|
|||
|
return ;
|
|||
|
//endif
|
|||
|
|
|||
|
ZCLink* VP_DelLink=mp_NoUseHeadLink;
|
|||
|
|
|||
|
do //////
|
|||
|
{
|
|||
|
mp_NoUseHeadLink =
|
|||
|
mp_NoUseHeadLink->mp_NextLink;
|
|||
|
|
|||
|
delete VP_DelLink;
|
|||
|
|
|||
|
VP_DelLink = mp_NoUseHeadLink ;
|
|||
|
}
|
|||
|
while(VP_DelLink!=0);
|
|||
|
|
|||
|
ml_AllSize -= ml_UseSize;
|
|||
|
ml_UseSize = 0 ;
|
|||
|
mp_NoUseHeadLink =
|
|||
|
mp_NoUseTailLink = 0 ;
|
|||
|
}
|
|||
|
//~ZCLinkHeap()
|
|||
|
|
|||
|
|
|||
|
void DeleteAllInHeap()
|
|||
|
{
|
|||
|
#ifdef _REENTRANT_MUTEX
|
|||
|
ZNsMain::CMutexSmallLock VO_CMutexSmallLock(mo_Mutex);
|
|||
|
#endif //_REENTRANT_MUTEX
|
|||
|
|
|||
|
if(ml_UseSize==0)
|
|||
|
return ;
|
|||
|
//endif
|
|||
|
|
|||
|
ZCLink* VP_DelLink=mp_NoUseHeadLink;
|
|||
|
|
|||
|
do //////
|
|||
|
{
|
|||
|
mp_NoUseHeadLink =
|
|||
|
mp_NoUseHeadLink->mp_NextLink;
|
|||
|
|
|||
|
delete VP_DelLink;
|
|||
|
|
|||
|
VP_DelLink = mp_NoUseHeadLink ;
|
|||
|
}
|
|||
|
while(VP_DelLink!=0);
|
|||
|
|
|||
|
ml_AllSize -= ml_UseSize;
|
|||
|
ml_UseSize = 0 ;
|
|||
|
mp_NoUseHeadLink =
|
|||
|
mp_NoUseTailLink = 0 ;
|
|||
|
}
|
|||
|
//void DeleteAllInHeap()
|
|||
|
|
|||
|
|
|||
|
TTypSize GetUseLinkSize() const
|
|||
|
{
|
|||
|
return ml_UseSize;
|
|||
|
}
|
|||
|
//TTypSize GetUseLinkSize() const
|
|||
|
|
|||
|
TTypSize GetAllLinkSize() const
|
|||
|
{
|
|||
|
return ml_AllSize;
|
|||
|
}
|
|||
|
//TTypSize GetAllLinkSize() const
|
|||
|
|
|||
|
long GetHeapSize() const
|
|||
|
{
|
|||
|
return ml_UseSize;
|
|||
|
}
|
|||
|
//long GetHeapSize() const
|
|||
|
|
|||
|
long GetMemSize() const
|
|||
|
{
|
|||
|
return ml_UseSize*sizeof(ZCLink);
|
|||
|
}
|
|||
|
//long GetMemSize() const
|
|||
|
|
|||
|
TypeInit& GetTypeInit()
|
|||
|
{
|
|||
|
return mo_TypeInit;
|
|||
|
}
|
|||
|
//TypeInit& GetTypeInit()
|
|||
|
|
|||
|
//public:
|
|||
|
};
|
|||
|
//class ZCLinkHeap
|
|||
|
|
|||
|
|
|||
|
////////////////////////////////////////////////
|
|||
|
|
|||
|
/************ end class ZCLinkHeap ************/
|
|||
|
|
|||
|
////////////////////////////////////////////////
|
|||
|
|
|||
|
|
|||
|
//public :
|
|||
|
protected:
|
|||
|
|
|||
|
TTypSize ml_Size ;
|
|||
|
ZCLink* mp_HeadLink;
|
|||
|
ZCLink* mp_TailLink;
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
|
|||
|
ZtCSimList& CopyLink /*######################################*/
|
|||
|
(
|
|||
|
const ZCLink* const AP_CopyLink ,
|
|||
|
TTypSize AL_FarNum ,
|
|||
|
ZtCSimList& ARR_StoreList
|
|||
|
) const
|
|||
|
/*###########################################################*/
|
|||
|
{
|
|||
|
// AP_CopyLink <20><><EFBFBD><EFBFBD> AP_CopyLink->GetNextPrePtr(AL_FarNum)
|
|||
|
// <20><>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. <20><> AL_FarNum + 1 <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
ZCLink* VP_HeadLink=0;
|
|||
|
ZCLink* VP_TailLink=0;
|
|||
|
|
|||
|
GetCLinkHeap().GetManyLinkCopy
|
|||
|
(
|
|||
|
const_cast<ZCLink*>(AP_CopyLink), // g++ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݵ<EFBFBD><DDB5><EFBFBD> AP_CopyLink <20>κ<EFBFBD><CEBA><EFBFBD> () <20><> <20><><EFBFBD><EFBFBD> <20><> <20><>.
|
|||
|
AL_FarNum ,
|
|||
|
VP_HeadLink ,
|
|||
|
VP_TailLink
|
|||
|
);
|
|||
|
//////////////////////////////
|
|||
|
|
|||
|
VP_TailLink->mp_NextLink=0;
|
|||
|
|
|||
|
ARR_StoreList.mp_HeadLink=VP_HeadLink;
|
|||
|
ARR_StoreList.mp_TailLink=VP_TailLink;
|
|||
|
ARR_StoreList.ml_Size =AL_FarNum+1 ;
|
|||
|
|
|||
|
return ARR_StoreList;
|
|||
|
}/*
|
|||
|
ZtCSimList& CopyLink ##########################################
|
|||
|
(
|
|||
|
const ZCLink* const AP_CopyLink ,
|
|||
|
TTypSize AL_FarNum ,
|
|||
|
ZtCSimList& ARR_StoreList
|
|||
|
) const
|
|||
|
#############################################################*/
|
|||
|
|
|||
|
|
|||
|
ZCLink* CutLink(ZCLink* AP_PrevLink, ZCLink* AP_CutLink)
|
|||
|
{
|
|||
|
// ZCLink* AP_PrevLink : <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD> <20><>ũ
|
|||
|
// ZCLink* AP_CutLink : <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> <20><>ũ
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵٴ<D1B4> <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
OnDelete(mp_HeadLink, 1, mp_HeadLink->mp_PrevLink, ml_Size);
|
|||
|
|
|||
|
if(AP_CutLink==mp_HeadLink)
|
|||
|
{
|
|||
|
if(mp_HeadLink==mp_TailLink)
|
|||
|
{
|
|||
|
mp_HeadLink=0;
|
|||
|
mp_TailLink=0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
mp_HeadLink=mp_HeadLink->mp_NextLink;
|
|||
|
}
|
|||
|
//else
|
|||
|
}
|
|||
|
else if(AP_CutLink==mp_TailLink)
|
|||
|
{
|
|||
|
AP_PrevLink->mp_NextLink=0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
AP_PrevLink->mp_NextLink=AP_CutLink->mp_NextLink;
|
|||
|
}
|
|||
|
//else
|
|||
|
|
|||
|
return (--ml_Size, AP_CutLink);
|
|||
|
}/*
|
|||
|
ZCLink* CutLink(ZCLink* AP_PrevLink, ZCLink* AP_CutLink)*/
|
|||
|
|
|||
|
|
|||
|
ZCLink* CutLink(ZCLink* AP_PrevLink, ZCLink* AP_CutLink, TTypSize AL_CutPos)
|
|||
|
{
|
|||
|
OnDelete(AP_CutLink, AL_CutPos, AP_CutLink, AL_CutPos);
|
|||
|
|
|||
|
if(AP_CutLink==mp_HeadLink)
|
|||
|
{
|
|||
|
if(mp_HeadLink==mp_TailLink)
|
|||
|
{
|
|||
|
mp_HeadLink=0;
|
|||
|
mp_TailLink=0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
mp_HeadLink=mp_HeadLink->mp_NextLink;
|
|||
|
}
|
|||
|
//else
|
|||
|
}
|
|||
|
else if(AP_CutLink==mp_TailLink)
|
|||
|
{
|
|||
|
AP_PrevLink->mp_NextLink=0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
AP_PrevLink->mp_NextLink=AP_CutLink->mp_NextLink;
|
|||
|
}
|
|||
|
//else
|
|||
|
|
|||
|
return (--ml_Size, AP_CutLink);
|
|||
|
}
|
|||
|
//ZCLink* CutLink(ZCLink* AP_PrevLink, ZCLink* AP_CutLink, TTypSize AL_CutPos)
|
|||
|
|
|||
|
|
|||
|
ZtCSimList& CutLink /*###############################*/
|
|||
|
(
|
|||
|
ZCLink* AP_CutHeadPrev,
|
|||
|
ZCLink* AP_CutHead , TTypSize AL_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail , TTypSize AL_CutTailPos,
|
|||
|
ZtCSimList& ARR_StoreList
|
|||
|
)
|
|||
|
/*###################################################*/
|
|||
|
{
|
|||
|
// AP_CutHead <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ, AL_CutHeadPos <20><> <20><> <20><>ġ ,AP_CutHeadPrev <20><> <20><> <20><><EFBFBD><EFBFBD> <20><>ũ
|
|||
|
// AP_CutTail <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ, AL_CutTailPos <20><> <20><> <20><>ġ
|
|||
|
// AP_CutTail <20><> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD>Թƾ<DEBE> ¦<><C2A6> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȱ<C8B1><D7B7><EFBFBD> <20>ȴ<EFBFBD>.
|
|||
|
|
|||
|
OnDelete(AP_CutHead, AL_CutHeadPos, AP_CutTail, AL_CutTailPos);
|
|||
|
|
|||
|
if(AP_CutHead==mp_HeadLink)
|
|||
|
{
|
|||
|
if(AP_CutTail==mp_TailLink)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
|||
|
|
|||
|
mp_HeadLink=0;
|
|||
|
mp_TailLink=0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
mp_HeadLink=AP_CutTail->mp_NextLink;
|
|||
|
}
|
|||
|
//endif
|
|||
|
}
|
|||
|
else if(AP_CutTail==mp_TailLink) // <20>߶<DFB6><F3B3BBB7><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
|||
|
{
|
|||
|
mp_TailLink=AP_CutHeadPrev;
|
|||
|
mp_TailLink->mp_NextLink=0;
|
|||
|
}
|
|||
|
else // <20>߶<DFB6><F3B3BBB7><EFBFBD> <20><>ũ<EFBFBD><C5A9> ó<><C3B3><EFBFBD><EFBFBD> <20><> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>.
|
|||
|
{
|
|||
|
AP_CutHeadPrev->mp_NextLink=AP_CutTail->mp_NextLink;
|
|||
|
}
|
|||
|
//else
|
|||
|
|
|||
|
ml_Size -= AL_CutTailPos-AL_CutHeadPos+1 ;
|
|||
|
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(ARR_StoreList.IsEmpty()!=true)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error In 'ZtCSimList& CutLink( ZCLink* AP_CutHead, TTypSize AL_CutHeadPos,"<<std::endl;
|
|||
|
fileout<<" ZCLink* AP_CutTail, TTypSize AL_CutTailPos" <<std::endl;
|
|||
|
fileout<<" /**************************/ )" <<std::endl;
|
|||
|
fileout<<"Static Object ARR_StoreList is not empty"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
//if(ARR_StoreList.IsEmpty()!=true)
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
ARR_StoreList.mp_HeadLink=AP_CutHead;
|
|||
|
ARR_StoreList.mp_TailLink=AP_CutTail;
|
|||
|
ARR_StoreList.ml_Size =AL_CutTailPos-AL_CutHeadPos+1;
|
|||
|
|
|||
|
return ARR_StoreList;
|
|||
|
}/*
|
|||
|
ZtCSimList& CutLink ///////////////////////////////
|
|||
|
(
|
|||
|
ZCLink* AP_CutHeadPrev,
|
|||
|
ZCLink* AP_CutHead, TTypSize AL_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail, TTypSize AL_CutTailPos,
|
|||
|
ZtCSimList& ARR_StoreList
|
|||
|
)
|
|||
|
/////////////////////////////////////////////////*/
|
|||
|
|
|||
|
|
|||
|
ZtCSimList& MakeDefault(TTypSize AL_DefaultSize ,ZtCSimList& ARR_StoreList) const
|
|||
|
{
|
|||
|
// must AL_DefaultSize > 0
|
|||
|
|
|||
|
ZCLink* VP_HeadLink=0;
|
|||
|
ZCLink* VP_TailLink=0;
|
|||
|
|
|||
|
GetCLinkHeap().GetManyLink(AL_DefaultSize, VP_HeadLink, VP_TailLink);
|
|||
|
ZCLink::MakeCircle(VP_HeadLink, VP_TailLink);
|
|||
|
|
|||
|
ARR_StoreList.mp_HeadLink=VP_HeadLink;
|
|||
|
ARR_StoreList.mp_TailLink=VP_TailLink;
|
|||
|
ARR_StoreList.ml_Size =AL_DefaultSize;
|
|||
|
|
|||
|
return ARR_StoreList;
|
|||
|
}
|
|||
|
//ZtCSimList& MakeDefault(TTypSize AL_DefaultSize ,ZtCSimList& ARR_StoreList) const
|
|||
|
|
|||
|
|
|||
|
virtual void OnDelete( ZCLink* AP_CutHead, TTypSize AL_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail, TTypSize AL_CutTailPos
|
|||
|
/*////////////////*/ )
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD>Ŭ<EFBFBD><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؾ<EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>
|
|||
|
// <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
}
|
|||
|
/*
|
|||
|
virtual void OnDelete( ZCLink* AP_CutHead,TTypSize AL_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail,TTypSize AL_CutTailPos
|
|||
|
//////////////////// ) */
|
|||
|
|
|||
|
|
|||
|
virtual void OnInsert( TTypSize AL_InsertPos , // <20><><EFBFBD>ԵǴ<D4B5> <20><>ġ
|
|||
|
TTypSize AL_InsertSize, // <20><><EFBFBD>ԵǴ<D4B5> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD>
|
|||
|
ZCLink* AP_HeadInsert // <20><><EFBFBD>ԵǴ<D4B5> ù<><C3B9>° <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/*////////////////*/ )
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD>Ŭ<EFBFBD><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD>Խ<EFBFBD> <20><><EFBFBD>ؾ<EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>
|
|||
|
// <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
}
|
|||
|
/*
|
|||
|
virtual void OnInsert( TTypSize AL_InsertPos ,
|
|||
|
TTypSize AL_InsertSize,
|
|||
|
ZCLink* AP_HeadInsert
|
|||
|
//////////////////// ) */
|
|||
|
|
|||
|
|
|||
|
//protected:
|
|||
|
public :
|
|||
|
|
|||
|
|
|||
|
ZtCSimList()
|
|||
|
{
|
|||
|
ml_Size =0;
|
|||
|
mp_HeadLink=0;
|
|||
|
mp_TailLink=0;
|
|||
|
}/*
|
|||
|
ZtCSimList()*/
|
|||
|
|
|||
|
ZtCSimList(TypeArg AR_Type)
|
|||
|
{
|
|||
|
ml_Size =0;
|
|||
|
mp_HeadLink=0;
|
|||
|
mp_TailLink=0;
|
|||
|
|
|||
|
AddTail(AR_Type);
|
|||
|
}/*
|
|||
|
ZtCSimList(TypeArg AR_Type)*/
|
|||
|
|
|||
|
ZtCSimList(const ZtCSimList& rhs)
|
|||
|
{
|
|||
|
ml_Size =0;
|
|||
|
mp_HeadLink=0;
|
|||
|
mp_TailLink=0;
|
|||
|
|
|||
|
ZtCSimList VO_StoreList;
|
|||
|
|
|||
|
JoinHead( CopyLink(rhs.mp_HeadLink, rhs.ml_Size-1 ,VO_StoreList) );
|
|||
|
}/*
|
|||
|
ZtCSimList(const ZtCSimList& rhs)*/
|
|||
|
|
|||
|
ZtCSimList& operator=(const ZtCSimList& rhs)
|
|||
|
{
|
|||
|
if(&rhs ==this){return *this;}
|
|||
|
{ DeleteAll(); }
|
|||
|
if(rhs.ml_Size==0 ){return *this;}
|
|||
|
|
|||
|
ZtCSimList VO_StoreList;
|
|||
|
|
|||
|
JoinHead ///////////////////////////
|
|||
|
(
|
|||
|
CopyLink(rhs.mp_HeadLink, rhs.ml_Size-1 ,VO_StoreList)
|
|||
|
);
|
|||
|
return *this; //////////////////////
|
|||
|
}/*
|
|||
|
ZtCSimList& operator=(const ZtCSimList& rhs)*/
|
|||
|
|
|||
|
virtual ~ZtCSimList()
|
|||
|
{
|
|||
|
DeleteAll();
|
|||
|
}/*
|
|||
|
virtual ~ZtCSimList()*/
|
|||
|
|
|||
|
ZtCSimList& operator()(TypeArg AR_Type)
|
|||
|
{
|
|||
|
AddTail(AR_Type); return *this;
|
|||
|
}/*
|
|||
|
ZtCSimList& operator()(TypeArg AR_Type)*/
|
|||
|
|
|||
|
|
|||
|
TType& operator[](TTypSize AL_Index)
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error IN TType& ZtCSimList::TType& operator[](TTypSize AL_Index)"<<std::endl;
|
|||
|
fileout<<" Parameter is Bad AL_Index"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return GetLinkPtr(AL_Index)->mo_Type;
|
|||
|
}/*
|
|||
|
TType& operator[](TTypSize AL_Index)*/
|
|||
|
|
|||
|
const TType& operator[](TTypSize AL_Index) const
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error IN const TType& ZtCSimList::TType& operator[](TTypSize AL_Index) const"<<std::endl;
|
|||
|
fileout<<" Parameter is Bad AL_Index"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return GetLinkPtr(AL_Index)->mo_Type;
|
|||
|
}
|
|||
|
//const TType& operator[](TTypSize AL_Index) const
|
|||
|
|
|||
|
|
|||
|
operator TType& ()
|
|||
|
{
|
|||
|
return AddTailDefault()->mo_Type;
|
|||
|
}/*
|
|||
|
operator TType& ()*/
|
|||
|
|
|||
|
TType& operator()()
|
|||
|
{
|
|||
|
return AddTailDefault()->mo_Type;
|
|||
|
}/*
|
|||
|
TType& operator()()*/
|
|||
|
|
|||
|
|
|||
|
void AddHead(TypeArg AR_Type)
|
|||
|
{
|
|||
|
ZCLink* VP_AddLink=GetCLinkHeap().GetOneLink(); VP_AddLink->mo_Type=AR_Type;
|
|||
|
|
|||
|
if(++ml_Size==1) // ml_Size==0
|
|||
|
{
|
|||
|
mp_HeadLink =
|
|||
|
mp_TailLink = VP_AddLink ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
VP_AddLink->mp_NextLink =mp_HeadLink;
|
|||
|
mp_HeadLink=VP_AddLink;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
}/*
|
|||
|
void AddHead(TypeArg AR_Type)*/
|
|||
|
|
|||
|
ZCLink* AddHeadDefault()
|
|||
|
{
|
|||
|
ZCLink* VP_AddLink=GetCLinkHeap().GetOneLink();
|
|||
|
|
|||
|
if(++ml_Size==1) // ml_Size==0
|
|||
|
{
|
|||
|
mp_HeadLink =
|
|||
|
mp_TailLink = VP_AddLink ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
VP_AddLink->mp_NextLink =mp_HeadLink;
|
|||
|
mp_HeadLink=VP_AddLink;
|
|||
|
}
|
|||
|
//else
|
|||
|
|
|||
|
return mp_HeadLink;
|
|||
|
}/*
|
|||
|
ZCLink* AddHeadDefault()*/
|
|||
|
|
|||
|
|
|||
|
void AddTail(TypeArg AR_Type)
|
|||
|
{
|
|||
|
ZCLink* VP_AddLink =
|
|||
|
GetCLinkHeap().GetOneLink();
|
|||
|
|
|||
|
VP_AddLink->mo_Type= AR_Type;
|
|||
|
|
|||
|
if(++ml_Size==1) // ml_Size==0
|
|||
|
{
|
|||
|
mp_HeadLink =
|
|||
|
mp_TailLink = VP_AddLink ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
mp_TailLink->mp_NextLink=VP_AddLink;
|
|||
|
mp_TailLink=mp_TailLink->mp_NextLink;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
}/*
|
|||
|
void AddTail(TypeArg AR_Type)*/
|
|||
|
|
|||
|
ZCLink* AddTailDefault()
|
|||
|
{
|
|||
|
ZCLink* VP_AddLink = GetCLinkHeap().GetOneLink();
|
|||
|
|
|||
|
if(++ml_Size==1) // ml_Size==0
|
|||
|
{
|
|||
|
mp_HeadLink =
|
|||
|
mp_TailLink = VP_AddLink ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
mp_TailLink->mp_NextLink = VP_AddLink ;
|
|||
|
mp_TailLink=mp_TailLink->mp_NextLink;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
return mp_TailLink;
|
|||
|
}/*
|
|||
|
ZCLink* AddTailDefault()*/
|
|||
|
|
|||
|
|
|||
|
void AddHeadDefault(TTypSize AL_DefaultSize)
|
|||
|
{
|
|||
|
if(AL_DefaultSize<1) return;
|
|||
|
|
|||
|
ZtCSimList VO_StoreList; JoinHead
|
|||
|
(
|
|||
|
MakeDefault(AL_DefaultSize ,VO_StoreList)
|
|||
|
);
|
|||
|
//////////////////////////////////
|
|||
|
}/*
|
|||
|
void AddHeadDefault(TTypSize AL_DefaultSize)*/
|
|||
|
|
|||
|
void AddTailDefault(TTypSize AL_DefaultSize)
|
|||
|
{
|
|||
|
if(AL_DefaultSize<1) return;
|
|||
|
|
|||
|
ZtCSimList VO_StoreList; JoinTail
|
|||
|
(
|
|||
|
MakeDefault(AL_DefaultSize ,VO_StoreList)
|
|||
|
);
|
|||
|
//////////////////////////////////
|
|||
|
}/*
|
|||
|
void AddTailDefault(TTypSize AL_DefaultSize)*/
|
|||
|
|
|||
|
|
|||
|
ZCLink* GetHeadLinkPtr (){return mp_HeadLink;}
|
|||
|
ZCLink* GetHeadIterEasy (){return mp_HeadLink;}
|
|||
|
IterEasyID GetHeadIterEasyID(){return (IterEasyID)mp_HeadLink;}
|
|||
|
|
|||
|
ZCLink* GetTailLinkPtr (){return mp_TailLink;}
|
|||
|
ZCLink* GetTailIterEasy (){return mp_TailLink;}
|
|||
|
IterEasyID GetTailIterEasyID(){return (IterEasyID)mp_TailLink;}
|
|||
|
|
|||
|
ZCLink* front(){return mp_HeadLink;}
|
|||
|
ZCLink* back (){return mp_TailLink;}
|
|||
|
|
|||
|
|
|||
|
const ZCLink* GetHeadLinkPtr () const{return mp_HeadLink;}
|
|||
|
const ZCLink* GetHeadIterEasy () const{return mp_HeadLink;}
|
|||
|
const IterEasyID GetHeadIterEasyID() const{return (IterEasyID)mp_HeadLink;}
|
|||
|
|
|||
|
const ZCLink* GetTailLinkPtr () const{return mp_TailLink;}
|
|||
|
const ZCLink* GetTailIterEasy () const{return mp_TailLink;}
|
|||
|
const IterEasyID GetTailIterEasyID() const{return (IterEasyID)mp_TailLink;}
|
|||
|
|
|||
|
const ZCLink* front() const{return mp_HeadLink;}
|
|||
|
const ZCLink* back () const{return mp_TailLink;}
|
|||
|
|
|||
|
|
|||
|
void pop_back(TypeArg AR_Type)
|
|||
|
{
|
|||
|
return AddHead(AR_Type);
|
|||
|
}/*
|
|||
|
void pop_back(TypeArg AR_Type)*/
|
|||
|
|
|||
|
void push_back(TypeArg AR_Type)
|
|||
|
{
|
|||
|
return AddTail(AR_Type);
|
|||
|
}/*
|
|||
|
void push_back(TypeArg AR_Type)*/
|
|||
|
|
|||
|
|
|||
|
TType& GetHeadData()
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(mp_HeadLink==0)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error IN TType& ZtCSimList::GetHeadData()"<<std::endl;
|
|||
|
fileout<<" mp_HeadLink Pointer is NULL"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
if(mp_HeadLink==0)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return mp_HeadLink->mo_Type;
|
|||
|
}/*
|
|||
|
TType& GetHeadData()*/
|
|||
|
|
|||
|
const TType& GetHeadData() const
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(mp_HeadLink==0)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error IN const TType& ZtCSimList::GetHeadData() const"<<std::endl;
|
|||
|
fileout<<" mp_HeadLink Pointer is NULL"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
if(mp_HeadLink==0)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return mp_HeadLink->mo_Type;
|
|||
|
}/*
|
|||
|
const TType& GetHeadData() const*/
|
|||
|
|
|||
|
|
|||
|
TType& GetTailData()
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(mp_TailLink==0)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error IN const TType& ZtCSimList::GetTailData() const"<<std::endl;
|
|||
|
fileout<<" mp_TailLink Pointer is NULL"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
if(mp_TailLink==0)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return mp_TailLink->mo_Type ;
|
|||
|
}/*
|
|||
|
TType& GetTailData()*/
|
|||
|
|
|||
|
const TType& GetTailData() const
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(mp_TailLink==0)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error IN const TType& ZtCSimList::GetTailData() const"<<std::endl;
|
|||
|
fileout<<" mp_TailLink Pointer is NULL"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
if(mp_TailLink==0)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return mp_TailLink->mo_Type ;
|
|||
|
}/*
|
|||
|
const TType& GetTailData() const*/
|
|||
|
|
|||
|
|
|||
|
TType& GetData(TTypSize AL_Index)
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error IN TType& ZtCSimList::GetData(TTypSize AL_Index)"<<std::endl;
|
|||
|
fileout<<" Parameter is Bad AL_Index"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return GetLinkPtr(AL_Index)->mo_Type;
|
|||
|
}/*
|
|||
|
TType& GetData(TTypSize AL_Index)*/
|
|||
|
|
|||
|
TType GetData(TTypSize AL_Index) const
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error IN TType& ZtCSimList::GetData(TTypSize AL_Index)"<<std::endl;
|
|||
|
fileout<<" Parameter is Bad AL_Index"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return GetLinkPtr(AL_Index)->mo_Type;
|
|||
|
}/*
|
|||
|
TType GetData(TTypSize AL_Index) const*/
|
|||
|
|
|||
|
|
|||
|
void JoinHead(ZCLink* AP_Link)
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AP_Link==0)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error In 'void JoinHead(ZCLink* AP_Link)' : Parameter is null pointer"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
else if(Find(AP_Link)!=0) // AP_Link <20><> this <20><> <20><><EFBFBD><EFBFBD>Ű<EFBFBD><C5B0> <20><><EFBFBD>Ḯ<EFBFBD><E1B8AE>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>ũ<EFBFBD>ΰ<EFBFBD>.
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<"Error In 'void JoinHead(ZCLink* AP_Link)' : The list that parameter link belongs to is now list"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
else if(Find(AP_Link)!=0)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
OnInsert(1, 1, AP_Link);
|
|||
|
|
|||
|
if(mp_HeadLink==0)
|
|||
|
{
|
|||
|
mp_HeadLink =
|
|||
|
mp_TailLink = AP_Link ;
|
|||
|
ml_Size = 1 ;
|
|||
|
|
|||
|
AP_Link->mp_NextLink=0;
|
|||
|
|
|||
|
return;
|
|||
|
}/*
|
|||
|
if(mp_HeadLink==0)*/
|
|||
|
|
|||
|
AP_Link->mp_NextLink=mp_HeadLink;
|
|||
|
mp_HeadLink=AP_Link;
|
|||
|
|
|||
|
++ml_Size;
|
|||
|
}/*
|
|||
|
void JoinHead(ZCLink* AP_Link)*/
|
|||
|
|
|||
|
void JoinTail(ZCLink* AP_Link)
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AP_Link==0)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error In 'void JoinTail(ZCLink* AP_Link)' : Parameter is null pointer"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
else if(Find(AP_Link)!=0)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error In 'void JoinTail(ZCLink* AP_Link)' : The list that parameter link belongs to is now list"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
else if(Find(AP_Link)!=0)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
OnInsert(ml_Size+1, 1, AP_Link);
|
|||
|
|
|||
|
AP_Link->mp_NextLink=0;
|
|||
|
|
|||
|
if(mp_HeadLink==0)
|
|||
|
{
|
|||
|
mp_HeadLink =
|
|||
|
mp_TailLink = AP_Link ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
mp_TailLink->mp_NextLink=AP_Link;
|
|||
|
mp_TailLink=AP_Link;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
++ml_Size;
|
|||
|
}/*
|
|||
|
void JoinTail(ZCLink* AP_Link)*/
|
|||
|
|
|||
|
void JoinHead(ZtCSimList& rhs)
|
|||
|
{
|
|||
|
if(this==&rhs || rhs.mp_HeadLink==0)
|
|||
|
{return;}
|
|||
|
////////////////////////////////////
|
|||
|
|
|||
|
rhs.OnDelete( rhs.mp_HeadLink, 1,
|
|||
|
rhs.mp_TailLink, rhs.ml_Size
|
|||
|
/*********/ );
|
|||
|
|
|||
|
OnInsert(1, rhs.ml_Size, rhs.mp_HeadLink);
|
|||
|
|
|||
|
if(mp_HeadLink==0)
|
|||
|
{
|
|||
|
mp_HeadLink=rhs.mp_HeadLink;
|
|||
|
mp_TailLink=rhs.mp_TailLink;
|
|||
|
ml_Size =rhs.ml_Size ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
rhs.mp_TailLink->mp_NextLink=mp_HeadLink;
|
|||
|
|
|||
|
mp_HeadLink=rhs.mp_HeadLink;
|
|||
|
ml_Size += rhs.ml_Size;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
rhs.mp_HeadLink=0;
|
|||
|
rhs.mp_TailLink=0;
|
|||
|
rhs.ml_Size =0;
|
|||
|
}/*
|
|||
|
void JoinHead(ZtCSimList& rhs)*/
|
|||
|
|
|||
|
void JoinTail(ZtCSimList& rhs)
|
|||
|
{
|
|||
|
if(this==&rhs || rhs.mp_HeadLink==0)
|
|||
|
{ return; }
|
|||
|
////////////////////////////////////
|
|||
|
|
|||
|
rhs.OnDelete( rhs.mp_HeadLink, 1,
|
|||
|
rhs.mp_TailLink, rhs.ml_Size
|
|||
|
/*********/ );
|
|||
|
|
|||
|
OnInsert(ml_Size+1, rhs.ml_Size, rhs.mp_HeadLink);
|
|||
|
|
|||
|
if(mp_HeadLink==0)
|
|||
|
{
|
|||
|
mp_HeadLink=rhs.mp_HeadLink;
|
|||
|
mp_TailLink=rhs.mp_TailLink;
|
|||
|
ml_Size =rhs.ml_Size ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
mp_TailLink->mp_NextLink=rhs.mp_HeadLink;
|
|||
|
mp_TailLink=rhs.mp_TailLink;
|
|||
|
|
|||
|
ml_Size += rhs.ml_Size;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
rhs.mp_HeadLink=0;
|
|||
|
rhs.mp_TailLink=0;
|
|||
|
rhs.ml_Size =0;
|
|||
|
}/*
|
|||
|
void JoinTail(ZtCSimList& rhs)*/
|
|||
|
|
|||
|
|
|||
|
void DeleteHead()
|
|||
|
{
|
|||
|
if(ml_Size==0) return;
|
|||
|
|
|||
|
ZCLink* VP_DelLink=mp_HeadLink;
|
|||
|
mp_HeadLink=mp_HeadLink->mp_NextLink;
|
|||
|
|
|||
|
GetCLinkHeap().ReceiveLink(VP_DelLink);
|
|||
|
|
|||
|
if(--ml_Size==0)
|
|||
|
{
|
|||
|
mp_HeadLink =
|
|||
|
mp_TailLink = 0 ;
|
|||
|
}/*
|
|||
|
if(--ml_Size==0)*/
|
|||
|
}/*
|
|||
|
void DeleteHead()*/
|
|||
|
|
|||
|
void DeleteHead(TTypSize AL_DelSize)
|
|||
|
{
|
|||
|
// AL_DelSize <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><> <20>κп<CEBA><D0BF><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
if(AL_DelSize>ml_Size) AL_DelSize=ml_Size;
|
|||
|
|
|||
|
ZtCSimList VO_StoreList; CutLink(
|
|||
|
0, mp_HeadLink, 1, mp_HeadLink->GetNextPtr(AL_DelSize-1), AL_DelSize , VO_StoreList).DeleteAll();
|
|||
|
}/*
|
|||
|
void DeleteHead(TTypSize AL_DelSize)*/
|
|||
|
|
|||
|
void DeleteTail()
|
|||
|
{
|
|||
|
if(ml_Size==0){return;}
|
|||
|
|
|||
|
ZCLink* VP_CutLink=mp_TailLink;
|
|||
|
|
|||
|
if(--ml_Size==0)
|
|||
|
{
|
|||
|
mp_HeadLink =
|
|||
|
mp_TailLink = 0 ;
|
|||
|
|
|||
|
return;
|
|||
|
}/*
|
|||
|
if(--ml_Size==0)*/
|
|||
|
|
|||
|
mp_TailLink =
|
|||
|
mp_HeadLink->GetNextPtr(ml_Size-1);
|
|||
|
mp_TailLink->mp_NextLink=0 ;
|
|||
|
|
|||
|
GetCLinkHeap().ReceiveLink(VP_CutLink);
|
|||
|
}/*
|
|||
|
void DeleteTail()*/
|
|||
|
|
|||
|
void DeleteTail(TTypSize AL_DelSize)
|
|||
|
{
|
|||
|
if(ml_Size==0){return;}
|
|||
|
|
|||
|
if(AL_DelSize>ml_Size) AL_DelSize=ml_Size;
|
|||
|
|
|||
|
if(AL_DelSize==ml_Size)
|
|||
|
{
|
|||
|
GetCLinkHeap().ReceiveLink(mp_HeadLink,mp_TailLink,ml_Size);
|
|||
|
mp_HeadLink=0;
|
|||
|
mp_TailLink=0;
|
|||
|
ml_Size =0;
|
|||
|
|
|||
|
return;
|
|||
|
}/*
|
|||
|
if(AL_DelSize==ml_Size)*/
|
|||
|
|
|||
|
ZCLink* VP_NewTail=mp_HeadLink->GetNextPtr(ml_Size-AL_DelSize-1);
|
|||
|
GetCLinkHeap().ReceiveLink(VP_NewTail->mp_NextLink,mp_TailLink,AL_DelSize);
|
|||
|
mp_TailLink=VP_NewTail;
|
|||
|
mp_TailLink->mp_NextLink=0;
|
|||
|
ml_Size -= AL_DelSize ;
|
|||
|
}/*
|
|||
|
void DeleteTail(TTypSize AL_DelSize)*/
|
|||
|
|
|||
|
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink)
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if ( Find(AP_CutLink)==0 ||
|
|||
|
Find(AP_CutLink)!=Find(AP_PrevLink)+1
|
|||
|
)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error In 'void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink)' : Parameter is Bad Pointer"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
/*
|
|||
|
if ( Find(AP_CutLink)==0 ||
|
|||
|
Find(AP_CutLink)!=Find(AP_PrevLink)+1
|
|||
|
)
|
|||
|
*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
delete CutLink(AP_PrevLink,AP_CutLink);
|
|||
|
}/*
|
|||
|
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink)*/
|
|||
|
|
|||
|
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink, TTypSize AL_CutPos)
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if ( ml_Size==0 ||
|
|||
|
Find(AP_CutLink) !=AL_CutPos ||
|
|||
|
Find(AP_PrevLink)!=(AL_CutPos-1)
|
|||
|
)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error In 'void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink, TTypSize AL_CutPos)' : Parameter is Bad Pointer or Bad AL_Index"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
/*
|
|||
|
if ( ml_Size==0 ||
|
|||
|
Find(AP_CutLink) !=AL_CutPos ||
|
|||
|
Find(AP_PrevLink)!=(AL_CutPos-1)
|
|||
|
)
|
|||
|
*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
delete CutLink(AP_PrevLink,AP_CutLink,AL_CutPos);
|
|||
|
}/*
|
|||
|
void Delete(ZCLink* AP_PrevLink, ZCLink* AP_CutLink, TTypSize AL_CutPos)*/
|
|||
|
|
|||
|
void Delete /*###################################*/
|
|||
|
(
|
|||
|
ZCLink* AP_CutHeadPrev,
|
|||
|
ZCLink* AP_CutHead, TTypSize AL_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail, TTypSize AL_CutTailPos
|
|||
|
)
|
|||
|
/*###############################################*/
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if ( ml_Size==0 ||
|
|||
|
AL_CutHeadPos>AL_CutTailPos ||
|
|||
|
Find(AP_CutHead)!=AL_CutHeadPos ||
|
|||
|
Find(AP_CutTail)!=AL_CutTailPos ||
|
|||
|
(AL_CutHeadPos!=1 && AP_CutHeadPrev->mp_NextLink!=AP_CutHead)
|
|||
|
)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error In 'void Delete(ZCLink* AP_CutHeadPrev,ZCLink* AP_CutHead,TTypSize AL_CutHeadPos,ZCLink* AP_CutTail,TTypSize AL_CutTailPos)' : Parameter is Bad Pointer or Bad AL_Index"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
/*////////////////////////////////////////////////////////////////*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
ZtCSimList VO_StoreList;
|
|||
|
|
|||
|
CutLink(AP_CutHeadPrev,AP_CutHead,AL_CutHeadPos,AP_CutTail,AL_CutTailPos ,VO_StoreList).DeleteAll();
|
|||
|
}/*
|
|||
|
void Delete ///////////////////////////////////////
|
|||
|
(
|
|||
|
ZCLink* AP_CutHeadPrev,
|
|||
|
ZCLink* AP_CutHead, TTypSize AL_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail, TTypSize AL_CutTailPos
|
|||
|
)
|
|||
|
/////////////////////////////////////////////////*/
|
|||
|
|
|||
|
|
|||
|
void DeleteAll()
|
|||
|
{
|
|||
|
if(ml_Size==0) {return;}
|
|||
|
|
|||
|
GetCLinkHeap().ReceiveLink
|
|||
|
(mp_HeadLink, mp_TailLink, ml_Size);
|
|||
|
|
|||
|
mp_HeadLink =
|
|||
|
mp_TailLink =0;
|
|||
|
ml_Size =0;
|
|||
|
}/*
|
|||
|
void DeleteAll()*/
|
|||
|
|
|||
|
|
|||
|
static void DeleteAllInHeap()
|
|||
|
{
|
|||
|
GetCLinkHeap().DeleteAllInHeap();
|
|||
|
}/*
|
|||
|
static void DeleteAllInHeap()*/
|
|||
|
|
|||
|
|
|||
|
TTypSize Find(const ZCLink* AP_pSearchLink, TTypSize AL_FirstFindIndex=1) const
|
|||
|
{
|
|||
|
const bool CB_DoStop = ////////////
|
|||
|
(
|
|||
|
mp_HeadLink ==0 ||
|
|||
|
AL_FirstFindIndex < 1 ||
|
|||
|
AL_FirstFindIndex > ml_Size
|
|||
|
);
|
|||
|
if(CB_DoStop) {return 0;} /////////
|
|||
|
|
|||
|
|
|||
|
TTypSize VL_FindIndex = AL_FirstFindIndex ;
|
|||
|
ZCLink* VP_TempLink = const_cast
|
|||
|
<ZCLink*>(GetLinkPtr(AL_FirstFindIndex));
|
|||
|
|
|||
|
do //////
|
|||
|
{
|
|||
|
if(VP_TempLink==AP_pSearchLink)
|
|||
|
{return VL_FindIndex;}
|
|||
|
///////////////////////////////
|
|||
|
|
|||
|
if(VL_FindIndex==ml_Size){return 0; }
|
|||
|
|
|||
|
VP_TempLink=VP_TempLink->mp_NextLink;
|
|||
|
++VL_FindIndex;
|
|||
|
}
|
|||
|
while(true);
|
|||
|
}/*
|
|||
|
TTypSize Find(ZCLink* AP_pSearchLink, TTypSize AL_FirstFindIndex=1) const*/
|
|||
|
|
|||
|
TTypSize Find(TypeArg AR_TypeArg, TTypSize AL_FirstFindIndex=1)
|
|||
|
{
|
|||
|
const bool CB_DoStop =
|
|||
|
(
|
|||
|
mp_HeadLink==0 || AL_FirstFindIndex<1 || AL_FirstFindIndex>ml_Size
|
|||
|
);
|
|||
|
if(CB_DoStop) return 0;
|
|||
|
|
|||
|
|
|||
|
TTypSize VL_FindIndex = AL_FirstFindIndex ;
|
|||
|
ZCLink* VP_TempLink = const_cast
|
|||
|
<ZCLink*>(GetLinkPtr(AL_FirstFindIndex));
|
|||
|
|
|||
|
do //////
|
|||
|
{
|
|||
|
if(**VP_TempLink==AR_TypeArg)
|
|||
|
{return VL_FindIndex;}
|
|||
|
////////////////////////////
|
|||
|
|
|||
|
if(VL_FindIndex==ml_Size){return 0; }
|
|||
|
|
|||
|
VP_TempLink=VP_TempLink->mp_NextLink;
|
|||
|
++VL_FindIndex;
|
|||
|
}
|
|||
|
while(true);
|
|||
|
}/*
|
|||
|
TTypSize Find(TypeArg AR_TypeArg, TTypSize AL_FirstFindIndex=1)*/
|
|||
|
|
|||
|
|
|||
|
/*////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> FindData(TTypeArg, ~) <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>, TypeCArg <EFBFBD><EFBFBD> const TType& <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ǵǾ<EFBFBD> <EFBFBD>ִ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
|||
|
const TType& <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD>⸦ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ְ<EFBFBD>, TType& <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD>⸦ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
-- 2010-05-29 21:31:00
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////////////////////////////////*/
|
|||
|
|
|||
|
TTypSize FindData(TypeArg AR_TypeArg, TTypSize AL_FirstFindIndex=1) const
|
|||
|
{
|
|||
|
return Find(AR_TypeArg, AL_FirstFindIndex);
|
|||
|
}/*
|
|||
|
TTypSize FindData(TypeArg AR_TypeArg, TTypSize AL_FirstFindIndex=1) const*/
|
|||
|
|
|||
|
|
|||
|
ZCLink* GetLinkPtr(TTypSize AL_Index)
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error In 'ZCLink* GetLinkPtr(TTypSize AL_Index)' : Parameter is Bad AL_Index(AL_Index="<<AL_Index<<")"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return mp_HeadLink->GetNextPtr(AL_Index-1);
|
|||
|
}/*
|
|||
|
ZCLink* GetLinkPtr(TTypSize AL_Index)*/
|
|||
|
|
|||
|
|
|||
|
const ZCLink* GetLinkPtr(TTypSize AL_Index) const
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error In 'const ZCLink* GetLinkPtr(TTypSize AL_Index) const' : Parameter is Bad AL_Index(AL_Index="<<AL_Index<<")"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
exit(1);
|
|||
|
}/*
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return mp_HeadLink->GetNextPtr(AL_Index-1);
|
|||
|
}/*
|
|||
|
const ZCLink* GetLinkPtr(TTypSize AL_Index) const*/
|
|||
|
|
|||
|
|
|||
|
static ZCLinkHeap& GetCLinkHeap()
|
|||
|
{
|
|||
|
static ZCLinkHeap SO_CLinkHeap; return SO_CLinkHeap;
|
|||
|
}/*
|
|||
|
static ZCLinkHeap& GetCLinkHeap()*/
|
|||
|
|
|||
|
|
|||
|
inline TTypSize GetSize() const
|
|||
|
{
|
|||
|
return ml_Size;
|
|||
|
}/*
|
|||
|
inline TTypSize GetSize() const*/
|
|||
|
|
|||
|
inline TTypSize size() const
|
|||
|
{
|
|||
|
return ml_Size;
|
|||
|
}/*
|
|||
|
inline TTypSize size() const*/
|
|||
|
|
|||
|
|
|||
|
inline bool IsEmpty() const
|
|||
|
{
|
|||
|
return mp_HeadLink==0;
|
|||
|
}/*
|
|||
|
inline bool IsEmpty() const*/
|
|||
|
|
|||
|
|
|||
|
// ***************************************************************** //
|
|||
|
|
|||
|
// *********************** Functor <20>κ<EFBFBD> <20><><EFBFBD><EFBFBD> *********************** //
|
|||
|
|
|||
|
// ***************************************************************** //
|
|||
|
|
|||
|
|
|||
|
template<typename TFunctor> void IterElement(TFunctor AO_Functor)
|
|||
|
{
|
|||
|
ZCLink* VP_LoopLink = mp_HeadLink;
|
|||
|
|
|||
|
__for1(TTypSize, VL_Index, ml_Size)
|
|||
|
{
|
|||
|
ZtCTypeData<TFunctor>::
|
|||
|
GetObjRef(AO_Functor)(VP_LoopLink->mo_Type);
|
|||
|
|
|||
|
VP_LoopLink = VP_LoopLink->mp_NextLink;
|
|||
|
}/*
|
|||
|
__for1(TTypSize, VL_Index, ml_Size)*/
|
|||
|
}/*
|
|||
|
template<typename TFunctor> void IterElement(TFunctor AO_Functor) */
|
|||
|
|
|||
|
|
|||
|
template<typename TFunctor, typename TTypeHelp>
|
|||
|
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
|
|||
|
{
|
|||
|
typedef ZNsMain::
|
|||
|
ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
|||
|
|
|||
|
ZCLink* VP_LoopLink=mp_HeadLink;
|
|||
|
|
|||
|
__for0(TTypSize, i, ml_Size)
|
|||
|
{
|
|||
|
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
|
|||
|
(
|
|||
|
VP_LoopLink->mo_Type, ZCCheckRef::PassData(AO_TypeHelp)
|
|||
|
);
|
|||
|
////////////////////////////////////////////
|
|||
|
|
|||
|
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
|||
|
}/*
|
|||
|
__for0(TTypSize, i, ml_Size)*/
|
|||
|
}/*
|
|||
|
template<typename TFunctor, typename TTypeHelp>
|
|||
|
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */
|
|||
|
|
|||
|
template
|
|||
|
<typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
|
|||
|
void IterElement
|
|||
|
(TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2)
|
|||
|
{
|
|||
|
typedef ZNsMain::ZtCCheckRef<TTypeHelp1> ZCCheckRef1;
|
|||
|
typedef ZNsMain::ZtCCheckRef<TTypeHelp2> ZCCheckRef2;
|
|||
|
|
|||
|
ZCLink* VP_LoopLink = mp_HeadLink ;
|
|||
|
|
|||
|
__for0(TTypSize, i, ml_Size)
|
|||
|
{
|
|||
|
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
|
|||
|
(
|
|||
|
VP_LoopLink->mo_Type ,
|
|||
|
ZCCheckRef1::PassData(AO_TypeHelp1),
|
|||
|
ZCCheckRef2::PassData(AO_TypeHelp2)
|
|||
|
);
|
|||
|
////////////////////////////////////////////
|
|||
|
|
|||
|
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
|||
|
}/*
|
|||
|
__for0(TTypSize, i, ml_Size)*/
|
|||
|
}/*
|
|||
|
template
|
|||
|
<typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
|
|||
|
void IterElement
|
|||
|
(TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2)
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
template<typename TFunctor> void IterEleCutIf(TFunctor AO_Functor)
|
|||
|
{
|
|||
|
// <20><> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD>Ͽ<EFBFBD> AO_Functor(ZCLink*) <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
// <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>ũ<EFBFBD><C5A9> <20><>ȸ<EFBFBD>ϸ鼭 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֵ<EFBFBD><D6B5><EFBFBD> <20>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>.
|
|||
|
|
|||
|
ZCLink* VP_TempLink =mp_HeadLink ;
|
|||
|
ZCLink* VP_TempPrev =0 ;
|
|||
|
ZCLink* VP_TempBefore=VP_TempLink ;
|
|||
|
|
|||
|
// <20><>ȸ <20><><EFBFBD>߿<EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD>尹<EFBFBD><E5B0B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>
|
|||
|
// ml_Size <20><> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
|
|||
|
|
|||
|
TTypSize VL_Count=ml_Size ;
|
|||
|
TTypSize VL_Index=1 ;
|
|||
|
|
|||
|
__for1(TTypSize, VL_Loop, VL_Count)
|
|||
|
{
|
|||
|
VP_TempLink=VP_TempLink->mp_NextLink;
|
|||
|
|
|||
|
const bool CB_IsTrue = ZtCTypeData<TFunctor>::
|
|||
|
GetObjRef(AO_Functor)( VP_TempBefore->mo_Type );
|
|||
|
|
|||
|
if(CB_IsTrue)
|
|||
|
{
|
|||
|
Delete(VP_TempPrev, VP_TempBefore, VL_Index);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
++VL_Index;
|
|||
|
|
|||
|
if(VP_TempPrev==0)
|
|||
|
VP_TempPrev=VP_TempBefore;
|
|||
|
else VP_TempPrev=VP_TempPrev->mp_NextLink;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
VP_TempBefore=VP_TempLink;
|
|||
|
}/*
|
|||
|
__for1(TTypSize, VL_Loop, VL_Count)*/
|
|||
|
}/*
|
|||
|
template<typename TFunctor> void IterEleCutIf(TFunctor AO_Functor) */
|
|||
|
|
|||
|
template<typename TFunctor> void IterEleLink
|
|||
|
(
|
|||
|
ZCLink* AP_StdLink ,
|
|||
|
TTypSize AL_WorkDistance,
|
|||
|
TFunctor AO_Functor
|
|||
|
)
|
|||
|
/*########################################*/
|
|||
|
{
|
|||
|
/* AP_StdLink <20><><EFBFBD><EFBFBD> AL_WorkDistance <20><>ŭ <20>̵<EFBFBD><CCB5>ϸ鼭
|
|||
|
* <EFBFBD><EFBFBD> ZCLink <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> AO_Functor() <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.(<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ƚ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (AL_WorkDistance)<EFBFBD><EFBFBD><EFBFBD>밪+1)
|
|||
|
* AL_WorkDistance>=0 <EFBFBD≯<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̵<EFBFBD><EFBFBD>ϰ<EFBFBD>
|
|||
|
* AL_WorkDistance <0 <EFBFBD≯<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̵<EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
*/
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(ml_Size==0 || Find(AP_StdLink)==0 || AL_WorkDistance>=ml_Size || AL_WorkDistance<0)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"Error In 'void IterEleLink( ZCLink* AP_StdLink ,"<<std::endl;
|
|||
|
fileout<<" TTypSize AL_WorkDistance,"<<std::endl;
|
|||
|
fileout<<" TFunctor AO_Functor"<<std::endl;
|
|||
|
fileout<<" )' :"<<std::endl;
|
|||
|
fileout<<" Parameters are not valid"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
exit(1);
|
|||
|
}
|
|||
|
/*if(ml_Size==0 || Find(AP_StdLink)==0 || AL_WorkDistance>=ml_Size || AL_WorkDistance<0)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
for(TTypSize VL_Loop=0; VL_Loop<=AL_WorkDistance; ++VL_Loop)
|
|||
|
{
|
|||
|
ZtCTypeData<TFunctor>::
|
|||
|
GetObjRef(AO_Functor)(AP_StdLink);
|
|||
|
|
|||
|
AP_StdLink = AP_StdLink->mp_NextLink ;
|
|||
|
}/*
|
|||
|
for(TTypSize VL_Loop=0; VL_Loop<=AL_WorkDistance; ++VL_Loop)*/
|
|||
|
}/*
|
|||
|
void IterEleLink /////////////////
|
|||
|
(
|
|||
|
ZCLink* AP_StdLink ,
|
|||
|
TTypSize AL_WorkDistance,
|
|||
|
TFunctor AO_Functor
|
|||
|
)
|
|||
|
////////////////////////////////*/
|
|||
|
|
|||
|
|
|||
|
// ***************************************************************
|
|||
|
|
|||
|
// *********************** Functor <20>κ<EFBFBD> <20><> ***********************
|
|||
|
|
|||
|
// ***************************************************************
|
|||
|
|
|||
|
|
|||
|
/*///////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ҹ<EFBFBD> <EFBFBD><EFBFBD>ȸ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ִ<EFBFBD> <EFBFBD>ڷ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <EFBFBD>迭 Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
MoveNextIter(), MovePrevIter()
|
|||
|
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD>. stl <EFBFBD><EFBFBD> <EFBFBD>ݺ<EFBFBD><EFBFBD>ڴ<EFBFBD> <EFBFBD>ʹ<EFBFBD> <EFBFBD>Ϲ<EFBFBD>ȭ<EFBFBD>ϴٺ<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
-- 2011-06-07 20:25:00
|
|||
|
|
|||
|
GetDataInIter() <EFBFBD><EFBFBD> <EFBFBD>߰<EFBFBD><EFBFBD>ߴ<EFBFBD>.
|
|||
|
|
|||
|
-- 2011-06-12 17:12:00
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////*/
|
|||
|
|
|||
|
void MoveNextIter(ZCLink*& APR_CLink)
|
|||
|
{
|
|||
|
APR_CLink=APR_CLink->GetNextPtr();
|
|||
|
}/*
|
|||
|
void MoveNextIter(ZCLink*& APR_CLink)*/
|
|||
|
|
|||
|
void MoveNextIter(IterEasyID& APPI_IterEasyID)
|
|||
|
{
|
|||
|
MoveNextIter((ZCLink*&)APPI_IterEasyID);
|
|||
|
}/*
|
|||
|
void MoveNextIter(IterEasyID& APPI_IterEasyID)*/
|
|||
|
|
|||
|
void MoveNextIter(const ZCLink*& APR_CLink) const
|
|||
|
{
|
|||
|
APR_CLink=APR_CLink->GetNextPtr();
|
|||
|
}/*
|
|||
|
void MoveNextIter(const ZCLink*& APR_CLink) const*/
|
|||
|
|
|||
|
void MoveNextIter(const IterEasyID& APPI_IterEasyID) const
|
|||
|
{
|
|||
|
MoveNextIter((const ZCLink*&)APPI_IterEasyID);
|
|||
|
}/*
|
|||
|
void MoveNextIter(const IterEasyID& APPI_IterEasyID) const*/
|
|||
|
|
|||
|
|
|||
|
TType& GetDataInIter(ZCLink* AP_CLink)
|
|||
|
{
|
|||
|
return **AP_CLink;
|
|||
|
}/*
|
|||
|
TType& GetDataInIter(ZCLink* AP_CLink)*/
|
|||
|
|
|||
|
TType& GetDataInIter(IterEasyID APPI_IterEasyID)
|
|||
|
{
|
|||
|
return GetDataInIter((ZCLink*)APPI_IterEasyID);
|
|||
|
}/*
|
|||
|
TType& GetDataInIter(IterEasyID APPI_IterEasyID)*/
|
|||
|
|
|||
|
const TType& GetDataInIter(const ZCLink* AP_CLink) const
|
|||
|
{
|
|||
|
return **AP_CLink;
|
|||
|
}/*
|
|||
|
const TType& GetDataInIter(const ZCLink* AP_CLink) const*/
|
|||
|
|
|||
|
const TType& GetDataInIter(const IterEasyID APPI_IterEasyID) const
|
|||
|
{
|
|||
|
return GetDataInIter((const ZCLink*)APPI_IterEasyID);
|
|||
|
}/*
|
|||
|
const TType& GetDataInIter(const IterEasyID APPI_IterEasyID) const*/
|
|||
|
|
|||
|
/*
|
|||
|
public:*/
|
|||
|
};/*
|
|||
|
class ZtCSimList*/
|
|||
|
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
/****************** end class ZtCSimList ******************/
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
|
|||
|
namespace ZNsExam
|
|||
|
{
|
|||
|
|
|||
|
template<typename TDummy=void*> class ZtCExamSimList
|
|||
|
{
|
|||
|
public:
|
|||
|
|
|||
|
|
|||
|
class CHelpObj
|
|||
|
{
|
|||
|
public:
|
|||
|
|
|||
|
CHelpObj()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
CHelpObj(const CHelpObj& rhs)
|
|||
|
{
|
|||
|
cout<<"* CHelpObj(const CHelpObj& rhs)"<<endl;
|
|||
|
}
|
|||
|
|
|||
|
public:
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
struct StFunctor
|
|||
|
{
|
|||
|
static void ShowElement(int ArgiValue){cout<<"#1 Value="<<ArgiValue<<endl;}
|
|||
|
};
|
|||
|
struct StFunctor2
|
|||
|
{
|
|||
|
static void ShowElement(int ArgiValue, CHelpObj)
|
|||
|
{cout<<"#2 Value="<<ArgiValue<<", CHelpObj Addr=None"<<" With CHelpObj"<<endl;}
|
|||
|
};
|
|||
|
struct StFunctor3
|
|||
|
{
|
|||
|
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
|
|||
|
{cout<<"#3 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref"<<endl;}
|
|||
|
};
|
|||
|
struct StFunctor4
|
|||
|
{
|
|||
|
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
|
|||
|
{cout<<"#4 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj in Ptr"<<endl;}
|
|||
|
};
|
|||
|
struct StFunctor5
|
|||
|
{
|
|||
|
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj& AR_CHelpObj2)
|
|||
|
{cout<<"#5 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref 2"<<endl;}
|
|||
|
};
|
|||
|
struct StFunctor6
|
|||
|
{
|
|||
|
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj AO_CHelpObj2)
|
|||
|
{cout<<"#6 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Half Ref"<<endl;}
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
static int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)
|
|||
|
{
|
|||
|
using namespace std ;
|
|||
|
using namespace ZNsMain;
|
|||
|
|
|||
|
typedef ZtCSimList<int> CObjList;
|
|||
|
|
|||
|
CHelpObj VO_CHelpObj;
|
|||
|
CObjList VO_CObjList;
|
|||
|
|
|||
|
VO_CObjList.AddTail(10);
|
|||
|
VO_CObjList.AddTail(20);
|
|||
|
VO_CObjList.AddTail(30);
|
|||
|
VO_CObjList.AddTail(40);
|
|||
|
|
|||
|
cout<<endl<<"#### Show CSimList Element ####"<<endl<<endl;
|
|||
|
|
|||
|
VO_CObjList.IterElement(StFunctor ::ShowElement);
|
|||
|
VO_CObjList.IterElement(StFunctor2::ShowElement, VO_CHelpObj );
|
|||
|
VO_CObjList.IterElement(StFunctor3::ShowElement, ZftMCR(VO_CHelpObj) );
|
|||
|
VO_CObjList.IterElement(StFunctor4::ShowElement, ZftMCP(VO_CHelpObj) );
|
|||
|
VO_CObjList.IterElement(StFunctor5::ShowElement, ZftMCP(VO_CHelpObj), ZftMCP(VO_CHelpObj) );
|
|||
|
VO_CObjList.IterElement(StFunctor6::ShowElement, ZftMCP(VO_CHelpObj), VO_CHelpObj );
|
|||
|
|
|||
|
return 0;
|
|||
|
}/*
|
|||
|
static int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)*/
|
|||
|
|
|||
|
public:
|
|||
|
};/*
|
|||
|
template<typename TDummy=void*> class ZtCExamSimList*/
|
|||
|
|
|||
|
}/*
|
|||
|
namespace ZNsExam*/
|
|||
|
|
|||
|
}/*
|
|||
|
namespace ZNsMain*/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#undef _TYPE_ARG_
|
|||
|
#undef _TYPENAME_CSIM_LIST_
|
|||
|
#undef _TYPENAME_ARGUMENT_
|
|||
|
#undef _TYPENAME_ARGUMENT_DEFAULT_
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#endif //__CSIMLIST_H__
|