3209 lines
106 KiB
C++
3209 lines
106 KiB
C++
|
|
|||
|
|
|||
|
#ifndef __NSCPP_COBJLIST_H__
|
|||
|
#define __NSCPP_COBJLIST_H__
|
|||
|
|
|||
|
|
|||
|
#include "ZtCSortObjList.H"
|
|||
|
|
|||
|
|
|||
|
namespace ZNsMain
|
|||
|
{
|
|||
|
|
|||
|
/*/////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> std::CDoubleList template <EFBFBD>̳<EFBFBD> std::ZtCObjList template <EFBFBD>ʹ<EFBFBD> <EFBFBD><EFBFBD>
|
|||
|
<EFBFBD>ܼ<EFBFBD><EFBFBD>ϰ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <EFBFBD>ִ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ḯ<EFBFBD><EFBFBD>Ʈ class ZtCObjList <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> typename TypCInit <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><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>.
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////*/
|
|||
|
|
|||
|
|
|||
|
template<typename TypeObjList> class ZtCSortObjList;
|
|||
|
|
|||
|
|
|||
|
template< typename Type ,
|
|||
|
typename TypCArg =const Type&,
|
|||
|
typename TypCAlloc=ZCAllocator,
|
|||
|
typename TypCInit =ZCInit ,
|
|||
|
typename TypSize =ZTypLong
|
|||
|
>
|
|||
|
class ZtCObjList
|
|||
|
{
|
|||
|
public:
|
|||
|
template<typename TypeObjList> friend class ZtCSortObjList;
|
|||
|
public:
|
|||
|
typedef Type TypeData ;
|
|||
|
typedef TypCArg TypeArg ;
|
|||
|
typedef TypCAlloc TypeAlloc;
|
|||
|
typedef TypCInit TypeInit ;
|
|||
|
typedef TypSize TypeSize ;
|
|||
|
public:
|
|||
|
class ZCIterator;
|
|||
|
class ZCLink ;
|
|||
|
public:
|
|||
|
typedef ZCLink* IterEasy; // <20><><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD><C7A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20>ݺ<EFBFBD><DDBA><EFBFBD>.
|
|||
|
typedef ZCIterator iterator;
|
|||
|
typedef const ZCIterator const_iterator;
|
|||
|
public:
|
|||
|
|
|||
|
class ZCLink : public TypCAlloc
|
|||
|
{
|
|||
|
public :
|
|||
|
template<typename TypeObjList> friend class ZtCSortObjList;
|
|||
|
/*##########################*/ friend class ZtCObjList ;
|
|||
|
private:
|
|||
|
Type mo_Type ;
|
|||
|
ZCLink* mp_NextLink;
|
|||
|
ZCLink* mp_PrevLink;
|
|||
|
private:
|
|||
|
|
|||
|
static void JoinLink(ZCLink* AP_PrevLink, ZCLink* AP_NextLink)
|
|||
|
{
|
|||
|
AP_PrevLink->mp_NextLink=AP_NextLink;
|
|||
|
AP_NextLink->mp_PrevLink=AP_PrevLink;
|
|||
|
}/*
|
|||
|
static void JoinLink(ZCLink* AP_PrevLink, ZCLink* AP_NextLink)*/
|
|||
|
|
|||
|
static void MakeCircle(ZCLink* AP_HeadLink, ZCLink* AP_TailLink)
|
|||
|
{
|
|||
|
AP_HeadLink->mp_PrevLink=AP_TailLink;
|
|||
|
AP_TailLink->mp_NextLink=AP_HeadLink;
|
|||
|
}/*
|
|||
|
static void MakeCircle(ZCLink* AP_HeadLink, ZCLink* AP_TailLink)*/
|
|||
|
|
|||
|
/*private:*/
|
|||
|
public :
|
|||
|
|
|||
|
ZCLink()
|
|||
|
{
|
|||
|
mp_NextLink=0;
|
|||
|
mp_PrevLink=0;
|
|||
|
}/*
|
|||
|
ZCLink(TypCArg AR_Type)*/
|
|||
|
|
|||
|
ZCLink(TypCArg AR_Type):mo_Type(AR_Type)
|
|||
|
{
|
|||
|
mp_NextLink=0;
|
|||
|
mp_PrevLink=0;
|
|||
|
}/*
|
|||
|
ZCLink(TypCArg AR_Type)*/
|
|||
|
|
|||
|
ZCLink(const ZCLink& rhs):mo_Type(rhs.mo_Type)
|
|||
|
{
|
|||
|
mp_NextLink=0;
|
|||
|
mp_PrevLink=0;
|
|||
|
}/*
|
|||
|
ZCLink(TypCArg AR_Type)*/
|
|||
|
|
|||
|
|
|||
|
operator Type& (){return mo_Type;}
|
|||
|
operator Type (){return mo_Type;}
|
|||
|
Type& GetData (){return mo_Type;}
|
|||
|
Type& operator*(){return mo_Type;}
|
|||
|
|
|||
|
operator const Type& () const{return mo_Type;}
|
|||
|
const Type& GetData () const{return mo_Type;}
|
|||
|
const Type& operator*() const{return mo_Type;}
|
|||
|
|
|||
|
|
|||
|
ZCLink* GetNextPrevPtr(TypSize AL_FarNum) // AL_FarNum <20><> 0 <20>̰ų<CCB0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
|||
|
{
|
|||
|
ZCLink* VP_TmpLink=this;
|
|||
|
|
|||
|
if(AL_FarNum>=0)
|
|||
|
{
|
|||
|
while(--AL_FarNum>=0) VP_TmpLink=VP_TmpLink->mp_NextLink;
|
|||
|
}
|
|||
|
else // AL_FarNum<0 <20><> <20><><EFBFBD><EFBFBD>.
|
|||
|
{
|
|||
|
while(++AL_FarNum<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
return VP_TmpLink;
|
|||
|
}/*
|
|||
|
ZCLink* GetNextPrevPtr(TypSize AL_FarNum)*/
|
|||
|
|
|||
|
const ZCLink* GetNextPrevPtr(TypSize AL_FarNum) const // or ZCLink const * const GetNextPrevPtr(TypSize AL_FarNum) const
|
|||
|
{
|
|||
|
ZCLink* VP_TmpLink=const_cast<ZCLink*>(this);
|
|||
|
|
|||
|
if(AL_FarNum>=0)
|
|||
|
{
|
|||
|
while(--AL_FarNum>=0) VP_TmpLink=VP_TmpLink->mp_NextLink;
|
|||
|
}
|
|||
|
else // AL_FarNum<0 <20><> <20><><EFBFBD><EFBFBD>.
|
|||
|
{
|
|||
|
while(++AL_FarNum<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
return VP_TmpLink;
|
|||
|
}/*
|
|||
|
const ZCLink* GetNextPrevPtr(TypSize AL_FarNum) const*/
|
|||
|
|
|||
|
|
|||
|
ZCLink* GetNextPtr(){return mp_NextLink;}
|
|||
|
ZCLink* GetPrevPtr(){return mp_PrevLink;}
|
|||
|
|
|||
|
const ZCLink* GetNextPtr() const{return mp_NextLink;}
|
|||
|
const ZCLink* GetPrevPtr() const{return mp_PrevLink;}
|
|||
|
|
|||
|
|
|||
|
ZCLink* GetNextPtr(TypSize AL_Distance)
|
|||
|
{
|
|||
|
TypSize VL_LoopIndex=0;
|
|||
|
|
|||
|
ZCLink* VP_TmpLink=this;
|
|||
|
|
|||
|
while(VL_LoopIndex++<AL_Distance)
|
|||
|
VP_TmpLink=VP_TmpLink->mp_NextLink;
|
|||
|
|
|||
|
return VP_TmpLink;
|
|||
|
}/*
|
|||
|
ZCLink* GetNextPtr(TypSize AL_Distance)*/
|
|||
|
|
|||
|
ZCLink* GetPrevPtr(TypSize AL_Distance)
|
|||
|
{
|
|||
|
TypSize VL_LoopIndex=0 ;
|
|||
|
ZCLink* VP_TmpLink =this;
|
|||
|
|
|||
|
while(VL_LoopIndex++<AL_Distance)
|
|||
|
VP_TmpLink=VP_TmpLink->mp_PrevtLink;
|
|||
|
|
|||
|
return VP_TmpLink;
|
|||
|
}/*
|
|||
|
ZCLink* GetPrevPtr(TypSize AL_Distance)*/
|
|||
|
|
|||
|
|
|||
|
const ZCLink* GetNextPtr(TypSize AL_Distance) const
|
|||
|
{
|
|||
|
TypSize VL_LoopIndex=0;
|
|||
|
|
|||
|
ZCLink* VP_TmpLink=const_cast<ZCLink*>(this);
|
|||
|
|
|||
|
while(VL_LoopIndex++<AL_Distance)
|
|||
|
VP_TmpLink=VP_TmpLink->mp_NextLink;
|
|||
|
|
|||
|
return VP_TmpLink;
|
|||
|
}/*
|
|||
|
const ZCLink* GetNextPtr(TypSize AL_Distance) const*/
|
|||
|
|
|||
|
const ZCLink* GetPrevPtr(TypSize AL_Distance) const
|
|||
|
{
|
|||
|
TypSize VL_LoopIndex=0;
|
|||
|
ZCLink* VP_TmpLink =const_cast<ZCLink*>(this);
|
|||
|
|
|||
|
while(VL_LoopIndex++<AL_Distance)
|
|||
|
VP_TmpLink=VP_TmpLink->mp_PrevtLink;
|
|||
|
|
|||
|
return VP_TmpLink;
|
|||
|
}/*
|
|||
|
const ZCLink* GetPrevPtr(TypSize AL_Distance) const*/
|
|||
|
|
|||
|
|
|||
|
public:
|
|||
|
};/*
|
|||
|
class ZCLink*/
|
|||
|
|
|||
|
|
|||
|
/*public :*/
|
|||
|
protected:
|
|||
|
ZCLink* mp_HeadLink;
|
|||
|
TypSize ml_Size ;
|
|||
|
protected:
|
|||
|
|
|||
|
virtual void OnDelete(
|
|||
|
ZCLink* AP_CutHead, TypSize AI_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail, TypSize AI_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> overload <20>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
}/*
|
|||
|
virtual void OnDelete(
|
|||
|
ZCLink* AP_CutHead,TypSize AI_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail,TypSize AI_CutTailPos
|
|||
|
////////////// ) */
|
|||
|
|
|||
|
|
|||
|
virtual void OnInsert(
|
|||
|
TypSize AI_InsertPos , // <20><><EFBFBD>ԵǴ<D4B5> <20><>ġ
|
|||
|
TypSize AI_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> overload <20>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
}/*
|
|||
|
virtual void OnInsert(
|
|||
|
TypSize AI_InsertPos ,
|
|||
|
TypSize AI_InsertSize,
|
|||
|
ZCLink* AP_HeadInsert
|
|||
|
////////////// ) */
|
|||
|
|
|||
|
|
|||
|
void JoinAfter(ZCLink* AP_LinkInsert, ZCLink* AP_LinkStd, TypSize AL_PosStd)
|
|||
|
{
|
|||
|
// AP_LinkInsert <20><> AL_PosStd <20><>° <20><>ũ<EFBFBD><C5A9> AP_LinkStd <20>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
// AL_PosStd==0 <20≯<EFBFBD> <20><> <20>տ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
if(AP_LinkStd==0)
|
|||
|
{
|
|||
|
OnInsert(1,1,AP_LinkInsert);
|
|||
|
|
|||
|
if(++ml_Size==1)
|
|||
|
{
|
|||
|
mp_HeadLink =AP_LinkInsert ;
|
|||
|
mp_HeadLink->mp_NextLink=mp_HeadLink ;
|
|||
|
mp_HeadLink->mp_PrevLink=mp_HeadLink ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
AP_LinkInsert->mp_NextLink =mp_HeadLink ;
|
|||
|
mp_HeadLink->mp_PrevLink->mp_NextLink=AP_LinkInsert ;
|
|||
|
AP_LinkInsert->mp_PrevLink =mp_HeadLink->mp_PrevLink ;
|
|||
|
mp_HeadLink->mp_PrevLink =AP_LinkInsert ;
|
|||
|
|
|||
|
mp_HeadLink=AP_LinkInsert;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
OnInsert(AL_PosStd+1, 1, AP_LinkInsert); ++ml_Size;
|
|||
|
|
|||
|
AP_LinkInsert->mp_NextLink = AP_LinkStd->mp_NextLink ;
|
|||
|
AP_LinkStd ->mp_NextLink = AP_LinkInsert ;
|
|||
|
|
|||
|
AP_LinkInsert->mp_PrevLink =AP_LinkStd ;
|
|||
|
AP_LinkInsert->mp_NextLink->mp_PrevLink=AP_LinkInsert;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
}/*
|
|||
|
void JoinAfter(ZCLink* AP_LinkInsert, ZCLink* AP_LinkStd, TypSize AL_PosStd)*/
|
|||
|
|
|||
|
|
|||
|
public : void JoinAfter(ZtCObjList& AO_CObjList, ZCLink* AP_LinkStd, TypSize AL_PosStd)
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AP_LinkStd!=0 && Find(AP_LinkStd)!=AL_PosStd)
|
|||
|
{
|
|||
|
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 'ZtCObjList& JoinAfter( ZtCObjList& rhs," <<std::endl;
|
|||
|
fileout<<" ZCLink* AP_LinkStd," <<std::endl;
|
|||
|
fileout<<" TypSize AL_PosStd" <<std::endl;
|
|||
|
fileout<<" ): Parameter is bad index"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return;
|
|||
|
}/*
|
|||
|
if(AP_LinkStd!=0 && Find(AP_LinkStd)!=AL_PosStd)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
if(AO_CObjList.ml_Size<1) return;
|
|||
|
|
|||
|
if(AP_LinkStd==0)
|
|||
|
{
|
|||
|
if(ml_Size==0)
|
|||
|
{
|
|||
|
mp_HeadLink=AO_CObjList.mp_HeadLink ;
|
|||
|
ml_Size =AO_CObjList.ml_Size ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLink* VP_TailLink=AO_CObjList.mp_HeadLink->mp_PrevLink;
|
|||
|
|
|||
|
ZCLink::MakeCircle(AO_CObjList.mp_HeadLink, mp_HeadLink->mp_PrevLink);
|
|||
|
ZCLink::JoinLink (VP_TailLink,mp_HeadLink );
|
|||
|
|
|||
|
mp_HeadLink = AO_CObjList.mp_HeadLink;
|
|||
|
ml_Size += AO_CObjList.ml_Size ;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
}
|
|||
|
else // AP_LinkStd!=0
|
|||
|
{
|
|||
|
ZCLink* VP_TailLink=AO_CObjList.mp_HeadLink->mp_PrevLink;
|
|||
|
|
|||
|
ZCLink::JoinLink(VP_TailLink, AP_LinkStd->mp_NextLink);
|
|||
|
ZCLink::JoinLink(AP_LinkStd , AO_CObjList.mp_HeadLink);
|
|||
|
|
|||
|
ml_Size += AO_CObjList.ml_Size ;
|
|||
|
}/*
|
|||
|
else // AP_LinkStd!=0*/
|
|||
|
|
|||
|
AO_CObjList.mp_HeadLink=0;
|
|||
|
AO_CObjList.ml_Size =0;
|
|||
|
}/*
|
|||
|
void JoinAfter(ZtCObjList& AO_CObjList, ZCLink* AP_LinkStd, TypSize AL_PosStd)*/
|
|||
|
|
|||
|
|
|||
|
protected: ZCLink* CutLink(ZCLink* AP_CutLink)
|
|||
|
{
|
|||
|
// <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_HeadLink->mp_PrevLink)
|
|||
|
mp_HeadLink=0;
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLink::MakeCircle( mp_HeadLink=mp_HeadLink->mp_NextLink,
|
|||
|
AP_CutLink->mp_PrevLink
|
|||
|
/*////////////*/ );
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
}
|
|||
|
else if(AP_CutLink==mp_HeadLink->mp_PrevLink)
|
|||
|
ZCLink::MakeCircle(mp_HeadLink , AP_CutLink->mp_PrevLink);
|
|||
|
else ZCLink::JoinLink (AP_CutLink->mp_PrevLink, AP_CutLink->mp_NextLink);
|
|||
|
|
|||
|
return (--ml_Size, AP_CutLink);
|
|||
|
}/*
|
|||
|
ZCLink* CutLink(ZCLink* AP_CutLink)*/
|
|||
|
|
|||
|
|
|||
|
ZCLink* CutLink(ZCLink* AP_CutLink, TypSize AL_CutPos)
|
|||
|
{
|
|||
|
OnDelete(AP_CutLink, AL_CutPos, AP_CutLink, AL_CutPos);
|
|||
|
|
|||
|
if(AL_CutPos==1) // ù° <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD>.
|
|||
|
{
|
|||
|
if(ml_Size==1)
|
|||
|
mp_HeadLink=0;
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLink::MakeCircle( mp_HeadLink=mp_HeadLink->mp_NextLink,
|
|||
|
AP_CutLink->mp_PrevLink
|
|||
|
/*////////////*/ );
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
}
|
|||
|
else if(AL_CutPos==ml_Size) // <20><> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
|||
|
ZCLink::MakeCircle(mp_HeadLink , AP_CutLink->mp_PrevLink);
|
|||
|
else ZCLink::JoinLink (AP_CutLink->mp_PrevLink, AP_CutLink->mp_NextLink);
|
|||
|
|
|||
|
return (--ml_Size, AP_CutLink);
|
|||
|
}/*
|
|||
|
ZCLink* CutLink(ZCLink* AP_CutLink, TypSize AL_CutPos)*/
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& CutLink(
|
|||
|
ZCLink* AP_CutHead, TypSize AL_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail, TypSize AL_CutTailPos, ZtCObjList& 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_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><>ġ
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AL_CutHeadPos <= AL_CutTailPos
|
|||
|
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AL_CutHeadPos>AL_CutTailPos)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"ZtCObjList& CutLink( ZCLink* AP_CutHead,TypSize AL_CutHeadPos,"<<std::endl;
|
|||
|
fileout<<" ZCLink* AP_CutTail,TypSize AL_CutTailPos, ZtCObjList& ARR_StoreList"<<std::endl;
|
|||
|
fileout<<"/****************/ ) : AL_CutHeadPos>AL_CutTailPos"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return ARR_StoreList;
|
|||
|
}/*
|
|||
|
if(AL_CutHeadPos>AL_CutTailPos)*/
|
|||
|
|
|||
|
#endif // _DEBUG
|
|||
|
|
|||
|
|
|||
|
OnDelete(AP_CutHead, AL_CutHeadPos, AP_CutTail, AL_CutTailPos);
|
|||
|
|
|||
|
if(AL_CutHeadPos==1 && AL_CutTailPos==ml_Size) // <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
|||
|
{
|
|||
|
mp_HeadLink=0;
|
|||
|
}
|
|||
|
else if(AL_CutHeadPos==1) // <20>߶<DFB6><F3B3BBB7><EFBFBD> <20><>ũ<EFBFBD><C5A9> ó<><C3B3> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
|||
|
{
|
|||
|
ZCLink::MakeCircle(mp_HeadLink=AP_CutTail->mp_NextLink, AP_CutHead->mp_PrevLink);
|
|||
|
}
|
|||
|
else if(AL_CutTailPos==ml_Size) // <20>߶<DFB6><F3B3BBB7><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
|||
|
{
|
|||
|
ZCLink::MakeCircle(mp_HeadLink, AP_CutHead->mp_PrevLink);
|
|||
|
}
|
|||
|
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><>.
|
|||
|
{
|
|||
|
ZCLink::JoinLink(AP_CutHead ->mp_PrevLink, AP_CutTail->mp_NextLink);
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
ml_Size -= AL_CutTailPos-AL_CutHeadPos+1 ;
|
|||
|
|
|||
|
// AP_CutHead <20><> AP_CutTail <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ḯ<EFBFBD><E1B8AE>Ʈ<EFBFBD><C6AE> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
ZCLink::MakeCircle(AP_CutHead, AP_CutTail);
|
|||
|
|
|||
|
|
|||
|
#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 'ZtCObjList& CutLink( ZCLink* AP_CutHead, TypSize AL_CutHeadPos," <<std::endl;
|
|||
|
fileout<<" ZCLink* AP_CutTail, TypSize AL_CutTailPos, ZtCObjList& ARR_StoreList" <<std::endl;
|
|||
|
fileout<<" /****************/ )" <<std::endl;
|
|||
|
fileout<<"Object ARR_StoreList is not EMPTY !"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return ARR_StoreList;
|
|||
|
}/*
|
|||
|
if(ARR_StoreList.IsEmpty()!=true)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
ARR_StoreList.mp_HeadLink=AP_CutHead ;
|
|||
|
ARR_StoreList.ml_Size =AL_CutTailPos-AL_CutHeadPos+1;
|
|||
|
|
|||
|
return ARR_StoreList;
|
|||
|
}/*
|
|||
|
ZtCObjList& CutLink(
|
|||
|
ZCLink* AP_CutHead,TypSize AL_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail,TypSize AL_CutTailPos, ZtCObjList& ARR_StoreList
|
|||
|
//////////////// ) */
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& CopyLink(
|
|||
|
const ZCLink* AP_CopyLink ,
|
|||
|
TypSize AL_FarNum ,
|
|||
|
ZtCObjList& ARR_StoreList
|
|||
|
/*///////////////*/ ) const
|
|||
|
{
|
|||
|
// AP_CopyLink <20><><EFBFBD><EFBFBD> AP_CopyLink->GetNextPrevPtr(AL_FarNum) <20><>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
// AL_FarNum <20><> 0 <20>̰ų<CCB0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
|||
|
// <20><> (FarNum<75><6D> <20><><EFBFBD>밪) + 1 <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
#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 'ZtCObjList& CopyLink( const ZCLink* AP_CopyLink,"<<std::endl;
|
|||
|
fileout<<" TypSize AL_FarNum, ZtCObjList& ARR_StoreList" <<std::endl;
|
|||
|
fileout<<" /*///////////////*/ )" <<std::endl;
|
|||
|
fileout<<"Static Object ARR_StoreList is not EMPTY !" <<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return ARR_StoreList;
|
|||
|
}/*
|
|||
|
if(ARR_StoreList.IsEmpty()!=true)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
|
|||
|
ZCLink* VP_HeadLink=0;
|
|||
|
ZCLink* VP_TailLink=0;
|
|||
|
|
|||
|
GetManyLinkCopy(const_cast<ZCLink*>(AP_CopyLink),
|
|||
|
AL_FarNum ,
|
|||
|
VP_HeadLink,
|
|||
|
VP_TailLink
|
|||
|
/*//////////*/ ); //////////////////////////////
|
|||
|
|
|||
|
ZCLink::MakeCircle(VP_HeadLink, VP_TailLink);
|
|||
|
|
|||
|
ARR_StoreList.mp_HeadLink=VP_HeadLink;
|
|||
|
ARR_StoreList.ml_Size =(AL_FarNum<0 ? -AL_FarNum : AL_FarNum)+1 ;
|
|||
|
|
|||
|
return ARR_StoreList;
|
|||
|
}/*
|
|||
|
ZtCObjList& CopyLink( const ZCLink* AP_CopyLink,
|
|||
|
TypSize AL_FarNum ,
|
|||
|
ZtCObjList& ARR_StoreList
|
|||
|
///////////////// ) const */
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& CopyThis(ZtCObjList& ARR_StoreList) const
|
|||
|
{
|
|||
|
return CopyLink(mp_HeadLink, ml_Size-1, RR(ARR_StoreList));
|
|||
|
}/*
|
|||
|
ZtCObjList& CopyThis(ZtCObjList& ARR_StoreList) const*/
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& MakeDefault(TypSize 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);
|
|||
|
|
|||
|
ARR_StoreList.mp_HeadLink=VP_HeadLink ;
|
|||
|
ARR_StoreList.ml_Size =AL_DefaultSize;
|
|||
|
|
|||
|
return ARR_StoreList;
|
|||
|
}/*
|
|||
|
ZtCObjList& MakeDefault(TypSize AL_DefaultSize, ZtCObjList& ARR_StoreList) const*/
|
|||
|
|
|||
|
|
|||
|
void GetManyLink(
|
|||
|
TypSize AL_LinkSize ,
|
|||
|
ZCLink*& APR_HeadLink,
|
|||
|
ZCLink*& APR_TailLink
|
|||
|
/*///////////*/ ) const
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
std::CCheckAlloc::CAllowAlloc VO_CAllowAllocObj;
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
APR_HeadLink=new ZCLink; ZCLink* VP_TempLink=APR_HeadLink;
|
|||
|
|
|||
|
for(TypSize i=2; i<=AL_LinkSize; ++i)
|
|||
|
{
|
|||
|
ZCLink::JoinLink(VP_TempLink, new ZCLink);
|
|||
|
|
|||
|
VP_TempLink=VP_TempLink->mp_NextLink;
|
|||
|
}/*
|
|||
|
for(TypSize i=2; i<=AL_LinkSize; ++i)*/
|
|||
|
|
|||
|
APR_TailLink=VP_TempLink;
|
|||
|
}/*
|
|||
|
void GetManyLink(
|
|||
|
TypSize AL_LinkSize ,
|
|||
|
ZCLink*& APR_HeadLink,
|
|||
|
ZCLink*& APR_TailLink
|
|||
|
/////////////// ) const */
|
|||
|
|
|||
|
|
|||
|
void GetManyLinkCopy(
|
|||
|
ZCLink* AP_CopyLink , TypSize AL_FarNum ,
|
|||
|
ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink
|
|||
|
/*///////////////*/ ) const
|
|||
|
{
|
|||
|
// AL_FarNum <20><> <20><><EFBFBD>밪 + 1 <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
std::CCheckAlloc::CAllowAlloc VO_CAllowAllocObj;
|
|||
|
#endif
|
|||
|
|
|||
|
if(AL_FarNum>0)
|
|||
|
{
|
|||
|
APR_HeadLink=
|
|||
|
new ZCLink(AP_CopyLink->GetData());
|
|||
|
|
|||
|
ZCLink* VP_TempLink=APR_HeadLink;
|
|||
|
|
|||
|
for(TypSize i=1; i<=AL_FarNum; ++i)
|
|||
|
{
|
|||
|
AP_CopyLink=AP_CopyLink->mp_NextLink;
|
|||
|
|
|||
|
ZCLink::JoinLink(
|
|||
|
VP_TempLink, new ZCLink(AP_CopyLink->GetData()));
|
|||
|
|
|||
|
VP_TempLink=VP_TempLink->mp_NextLink;
|
|||
|
}/*
|
|||
|
for(TypSize i=1; i<=AL_FarNum; ++i)*/
|
|||
|
|
|||
|
APR_TailLink=VP_TempLink;
|
|||
|
}
|
|||
|
else //AL_FarNum<=0
|
|||
|
{
|
|||
|
APR_TailLink=
|
|||
|
new ZCLink(AP_CopyLink->GetData());
|
|||
|
|
|||
|
ZCLink* VP_TempLink=APR_TailLink;
|
|||
|
|
|||
|
for(TypSize i=AL_FarNum; i<0; ++i)
|
|||
|
{
|
|||
|
AP_CopyLink=AP_CopyLink->mp_PrevLink;
|
|||
|
|
|||
|
ZCLink::JoinLink(
|
|||
|
VP_TempLink, new ZCLink(AP_CopyLink->GetData()));
|
|||
|
|
|||
|
VP_TempLink=VP_TempLink->mp_PrevLink;
|
|||
|
}/*
|
|||
|
for(TypSize i=AL_FarNum; i<0; ++i)*/
|
|||
|
|
|||
|
APR_HeadLink=VP_TempLink;
|
|||
|
}/*
|
|||
|
else //AL_FarNum<=0*/
|
|||
|
}/*
|
|||
|
void GetManyLinkCopy(
|
|||
|
ZCLink* AP_CopyLink , TypSize AL_FarNum ,
|
|||
|
ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink
|
|||
|
////////////////// ) const */
|
|||
|
|
|||
|
|
|||
|
/*protected:*/
|
|||
|
public :
|
|||
|
|
|||
|
|
|||
|
ZtCObjList()
|
|||
|
{
|
|||
|
mp_HeadLink=0;
|
|||
|
ml_Size =0;
|
|||
|
}/*
|
|||
|
ZtCObjList()*/
|
|||
|
|
|||
|
ZtCObjList(const ZtCObjList& rhs):mp_HeadLink(0),ml_Size(0)
|
|||
|
{
|
|||
|
*this=rhs;
|
|||
|
}/*
|
|||
|
ZtCObjList(const ZtCObjList& rhs)*/
|
|||
|
|
|||
|
|
|||
|
virtual ~ZtCObjList()
|
|||
|
{
|
|||
|
DeleteAll();
|
|||
|
}/*
|
|||
|
virtual ~ZtCObjList()*/
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& operator=(const ZtCObjList& rhs)
|
|||
|
{
|
|||
|
if(rhs.ml_Size<1)
|
|||
|
{
|
|||
|
return DeleteAll();
|
|||
|
}
|
|||
|
else if(ml_Size<=rhs.ml_Size)
|
|||
|
{
|
|||
|
AddDefault(rhs.ml_Size-ml_Size,ml_Size+1);
|
|||
|
|
|||
|
ZCLink* pRhsLink=rhs.mp_HeadLink;
|
|||
|
ZCLink* pLhsLink= mp_HeadLink;
|
|||
|
|
|||
|
__for1(TypSize, i, ml_Size)
|
|||
|
{
|
|||
|
pLhsLink->GetData()=pRhsLink->GetData();
|
|||
|
|
|||
|
pLhsLink=pLhsLink->mp_NextLink;
|
|||
|
pRhsLink=pRhsLink->mp_NextLink;
|
|||
|
}/*
|
|||
|
__for1(TypSize, i, ml_Size)*/
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZtCObjList VO_StoreList;
|
|||
|
|
|||
|
CutLink( GetLinkPtr(rhs.ml_Size+1),rhs.ml_Size+1,
|
|||
|
GetLinkPtr( ml_Size ), ml_Size ,
|
|||
|
RR(VO_StoreList)
|
|||
|
/****/ ).DeleteAll(); //////////////////////////////
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& operator=(const ZtCObjList& rhs)*/
|
|||
|
|
|||
|
|
|||
|
bool IsEmpty() const
|
|||
|
{
|
|||
|
return mp_HeadLink==0 ;
|
|||
|
}/*
|
|||
|
bool IsEmpty() const*/
|
|||
|
|
|||
|
|
|||
|
TypSize GetSize() const{return ml_Size;}
|
|||
|
TypSize size () const{return ml_Size;}
|
|||
|
|
|||
|
ZCLink* GetHeadLinkPtr(){return mp_HeadLink;}
|
|||
|
ZCLink* GetTailLinkPtr()
|
|||
|
{
|
|||
|
return mp_HeadLink==0 ? 0 : mp_HeadLink->mp_PrevLink ;
|
|||
|
}/*
|
|||
|
ZCLink* GetTailLinkPtr()*/
|
|||
|
|
|||
|
|
|||
|
const ZCLink* GetHeadLinkPtr() const{return mp_HeadLink;}
|
|||
|
const ZCLink* GetTailLinkPtr() const
|
|||
|
{
|
|||
|
return mp_HeadLink==0 ? 0 : mp_HeadLink->mp_PrevLink ;
|
|||
|
}/*
|
|||
|
const ZCLink* GetTailLinkPtr() const*/
|
|||
|
|
|||
|
|
|||
|
IterEasy GetHeadIterEasy (){return GetHeadLinkPtr();}
|
|||
|
IterEasy GetTailIterEasy (){return GetTailLinkPtr();}
|
|||
|
IterEasyID GetHeadIterEasyID(){return (IterEasyID)GetHeadLinkPtr();}
|
|||
|
IterEasyID GetTailIterEasyID(){return (IterEasyID)GetTailLinkPtr();}
|
|||
|
|
|||
|
IterEasy GetHeadIterEasy () const{return GetHeadLinkPtr();}
|
|||
|
IterEasy GetTailIterEasy () const{return GetTailLinkPtr();}
|
|||
|
IterEasyID GetHeadIterEasyID() const{return (IterEasyID)GetHeadLinkPtr();}
|
|||
|
IterEasyID GetTailIterEasyID() const{return (IterEasyID)GetTailLinkPtr();}
|
|||
|
|
|||
|
IterEasyID ItHead() {return GetHeadIterEasyID();}
|
|||
|
IterEasyID ItTail() {return GetTailIterEasyID();}
|
|||
|
|
|||
|
IterEasyID ItHead() const{return GetHeadIterEasyID();}
|
|||
|
IterEasyID ItTail() const{return GetTailIterEasyID();}
|
|||
|
|
|||
|
|
|||
|
Type& operator[](TypSize AL_Index)
|
|||
|
{
|
|||
|
// [] <20><> <20><><EFBFBD><EFBFBD><EEB0A1> AL_Index <20><> 1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> ÷<><C3B7><EFBFBD>̴<EFBFBD>.
|
|||
|
|
|||
|
#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 'Type& ZtCObjList::operator[](TypSize AL_Index)' : Parameter is bad index("<<AL_Index<<")"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return *(new Type);
|
|||
|
}/*
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return GetLinkPtr(AL_Index)->GetData();
|
|||
|
}/*
|
|||
|
Type& operator[](TypSize AL_Index)*/
|
|||
|
|
|||
|
const Type& operator[](TypSize 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 Type& ZtCObjList::operator[](TypSize AL_Index) const' : Parameter is bad index("<<AL_Index<<")"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return *(new Type);
|
|||
|
}/*
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return GetLinkPtr(AL_Index)->GetData();
|
|||
|
}/*
|
|||
|
Type& operator[](TypSize AL_Index) const*/
|
|||
|
|
|||
|
|
|||
|
TypSize Find(TypCArg AR_SearchType, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const
|
|||
|
{
|
|||
|
// AB_DoFindFromFront==true <20≯<EFBFBD> AL_FirstFindIndex <20><>° <20><>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><>ȸ<EFBFBD>ϸ鼭 GetData() == AR_SearchType <20><> <20>Ǵ<EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
const bool CB_IsTrue = (
|
|||
|
mp_HeadLink == 0 ||
|
|||
|
AL_FirstFindIndex < 1 ||
|
|||
|
AL_FirstFindIndex > ml_Size
|
|||
|
/*//////////////////*/ ) ;
|
|||
|
|
|||
|
if(CB_IsTrue) return 0;
|
|||
|
|
|||
|
TypSize VL_FindIndex=AL_FirstFindIndex; const
|
|||
|
ZCLink* VP_TempLink =GetLinkPtr(AL_FirstFindIndex);
|
|||
|
|
|||
|
if(AB_DoFindFromFront==true)
|
|||
|
{
|
|||
|
do /////////
|
|||
|
{
|
|||
|
if(VP_TempLink->GetData()==AR_SearchType) return VL_FindIndex;
|
|||
|
if(VL_FindIndex ==ml_Size ) return 0 ;
|
|||
|
|
|||
|
VP_TempLink=VP_TempLink->mp_NextLink; ++VL_FindIndex;
|
|||
|
}
|
|||
|
while(true);
|
|||
|
}
|
|||
|
else // AB_DoFindFromFront!=true
|
|||
|
{
|
|||
|
do /////////
|
|||
|
{
|
|||
|
if(VP_TempLink->GetData()==AR_SearchType) return VL_FindIndex;
|
|||
|
if(VL_FindIndex ==1 ) return 0 ;
|
|||
|
|
|||
|
VP_TempLink=VP_TempLink->mp_PrevLink; --VL_FindIndex;
|
|||
|
}
|
|||
|
while(true);
|
|||
|
}/*
|
|||
|
else // AB_DoFindFromFront!=true*/
|
|||
|
|
|||
|
return 0;
|
|||
|
}/*
|
|||
|
TypSize Find(TypCArg AR_SearchType, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const*/
|
|||
|
|
|||
|
TypSize Find(const ZCLink* AP_SearchLink, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const
|
|||
|
{
|
|||
|
if(mp_HeadLink==0 || AL_FirstFindIndex<1 || AL_FirstFindIndex>ml_Size)
|
|||
|
return 0;
|
|||
|
//endif
|
|||
|
|
|||
|
TypSize VL_FindIndex=AL_FirstFindIndex;
|
|||
|
ZCLink* VP_TempLink =const_cast<ZCLink*>(GetLinkPtr(AL_FirstFindIndex));
|
|||
|
|
|||
|
if(AB_DoFindFromFront==true)
|
|||
|
{
|
|||
|
do /**/
|
|||
|
{
|
|||
|
if(VP_TempLink ==AP_SearchLink) return VL_FindIndex;
|
|||
|
if(VL_FindIndex==ml_Size ) return 0 ;
|
|||
|
|
|||
|
VP_TempLink=VP_TempLink->mp_NextLink; ++VL_FindIndex;
|
|||
|
}
|
|||
|
while(true);
|
|||
|
}
|
|||
|
else // AB_DoFindFromFront!=true
|
|||
|
{
|
|||
|
do /**/
|
|||
|
{
|
|||
|
if(VP_TempLink ==AP_SearchLink) return VL_FindIndex;
|
|||
|
if(VL_FindIndex==1 ) return 0 ;
|
|||
|
|
|||
|
VP_TempLink=VP_TempLink->mp_PrevLink; --VL_FindIndex;
|
|||
|
}
|
|||
|
while(true);
|
|||
|
}/*
|
|||
|
else // AB_DoFindFromFront!=true*/
|
|||
|
|
|||
|
return 0;
|
|||
|
}/*
|
|||
|
TypSize Find(ZCLink* AP_SearchLink, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const*/
|
|||
|
|
|||
|
|
|||
|
/*////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> FindData(TypeCArg, ~) <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>, TypeCArg <EFBFBD><EFBFBD> const Type& <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ǵǾ<EFBFBD> <EFBFBD>ִ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
|||
|
const Type& <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD>⸦ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ְ<EFBFBD>, Type& <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
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////////////////////////////////*/
|
|||
|
|
|||
|
TypSize FindData(TypCArg AR_SearchType, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const
|
|||
|
{
|
|||
|
return Find(AR_SearchType, AL_FirstFindIndex, AB_DoFindFromFront);
|
|||
|
}/*
|
|||
|
TypSize FindData(TypCArg AR_SearchType, TypSize AL_FirstFindIndex=1, bool AB_DoFindFromFront=true) const*/
|
|||
|
|
|||
|
|
|||
|
ZCLink* GetLinkPtr(TypSize 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(TypSize AL_Index)' : Parameter is bad index("<<AL_Index<<")"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return 0;
|
|||
|
}/*
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif // _DEBUG
|
|||
|
|
|||
|
TypSize VI_LeftDistance =AL_Index-1 ;
|
|||
|
TypSize VI_RightDistance=ml_Size-AL_Index+1;
|
|||
|
TypSize VI_ShortDistance=
|
|||
|
(VI_LeftDistance<=VI_RightDistance ? VI_LeftDistance : -VI_RightDistance);
|
|||
|
|
|||
|
return mp_HeadLink->GetNextPrevPtr(VI_ShortDistance);
|
|||
|
}/*
|
|||
|
ZCLink* GetLinkPtr(TypSize AL_Index)*/
|
|||
|
|
|||
|
const ZCLink* GetLinkPtr(TypSize AL_Index) const // or 'ZCLink const * const GetLinkPtr(TypSize 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(TypSize AL_Index) const' : Parameter is bad index("<<AL_Index<<")"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return 0;
|
|||
|
}/*
|
|||
|
if(AL_Index<1 || AL_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif // _DEBUG
|
|||
|
|
|||
|
TypSize VI_LeftDistance =AL_Index-1 ;
|
|||
|
TypSize VI_RightDistance=ml_Size-AL_Index+1;
|
|||
|
TypSize VI_ShortDistance=
|
|||
|
(VI_LeftDistance<=VI_RightDistance ? VI_LeftDistance : -VI_RightDistance);
|
|||
|
|
|||
|
return mp_HeadLink->GetNextPrevPtr(VI_ShortDistance);
|
|||
|
}/*
|
|||
|
const ZCLink* GetLinkPtr(TypSize AL_Index) const*/
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& DeleteAll()
|
|||
|
{
|
|||
|
if(mp_HeadLink!=0)
|
|||
|
{
|
|||
|
OnDelete(
|
|||
|
mp_HeadLink, 1, mp_HeadLink->mp_PrevLink, ml_Size);
|
|||
|
|
|||
|
ZCLink* VP_DelLink=0;
|
|||
|
|
|||
|
do ////
|
|||
|
{
|
|||
|
VP_DelLink =mp_HeadLink;
|
|||
|
mp_HeadLink=mp_HeadLink->mp_NextLink;
|
|||
|
|
|||
|
delete VP_DelLink;
|
|||
|
}
|
|||
|
while(--ml_Size>0);
|
|||
|
|
|||
|
mp_HeadLink =0;
|
|||
|
}/*
|
|||
|
if(mp_HeadLink!=0)*/
|
|||
|
|
|||
|
return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& DeleteAll()*/
|
|||
|
|
|||
|
ZtCObjList& clear()
|
|||
|
{
|
|||
|
return this->DeleteAll();
|
|||
|
}/*
|
|||
|
ZtCObjList& clear()*/
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(Find(AP_DeleteLink)<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 'ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)"<<std::endl;
|
|||
|
fileout<<"Parameter ZCLink* type AP_DeleteLink Is Not Valid !"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return *this;
|
|||
|
}/*
|
|||
|
if(Find(AP_DeleteLink)<1)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
delete this->CutLink(AP_DeleteLink); return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)*/
|
|||
|
|
|||
|
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink, TypSize AL_DeletePos)
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AL_DeletePos<1 || Find(AP_DeleteLink)!=AL_DeletePos)
|
|||
|
{
|
|||
|
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 'ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink,TypSize AL_DeletePos)"<<std::endl;
|
|||
|
fileout<<"Parameter ZCLink* type AP_DeleteLink Is Not Valid !"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return *this;
|
|||
|
}/*
|
|||
|
if(AL_DeletePos<1 || Find(AP_DeleteLink)!=AL_DeletePos)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
delete this->CutLink(AP_DeleteLink, AL_DeletePos); return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink, TypSize AL_DeletePos)*/
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& Delete(ZCLink* AP_DeleteLink)
|
|||
|
{
|
|||
|
return DeleteLink(AP_DeleteLink);
|
|||
|
}/*
|
|||
|
ZtCObjList& Delete(ZCLink* AP_DeleteLink)*/
|
|||
|
|
|||
|
ZtCObjList& Delete(ZCLink* AP_DeleteLink, TypSize AL_DeletePos)
|
|||
|
{
|
|||
|
return DeleteLink(AP_DeleteLink, AL_DeletePos);
|
|||
|
}/*
|
|||
|
ZtCObjList& Delete(ZCLink* AP_DeleteLink, TypSize AL_DeletePos)*/
|
|||
|
|
|||
|
ZtCObjList& DeleteLink(TypSize AL_DeletePos)
|
|||
|
{
|
|||
|
if(AL_DeletePos<1 || this->ml_Size>AL_DeletePos) return *this;
|
|||
|
|
|||
|
Delete(this->GetLinkPtr(AL_DeletePos), AL_DeletePos); return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& DeleteLink(TypSize AL_DeletePos)*/
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& DeleteHead()
|
|||
|
{
|
|||
|
if(ml_Size>0)
|
|||
|
delete this->CutLink(mp_HeadLink);
|
|||
|
|
|||
|
return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& DeleteHead()*/
|
|||
|
|
|||
|
ZtCObjList& DeleteHead(TypSize AI_DeleteCnt)
|
|||
|
{
|
|||
|
__for1(TypSize, i, AI_DeleteCnt)
|
|||
|
{
|
|||
|
if(ml_Size<1) return *this;
|
|||
|
|
|||
|
delete this->CutLink(mp_HeadLink);
|
|||
|
}/*
|
|||
|
__for1(TypSize, i, AI_DeleteCnt)*/
|
|||
|
|
|||
|
return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& DeleteHead(TypSize AI_DeleteCnt)*/
|
|||
|
|
|||
|
ZtCObjList& DeleteTail()
|
|||
|
{
|
|||
|
if(ml_Size>0)
|
|||
|
delete this->CutLink(mp_HeadLink->mp_PrevLink);
|
|||
|
|
|||
|
return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& DeleteTail()*/
|
|||
|
|
|||
|
|
|||
|
ZCLink* AddDefault(TypSize AL_DefaultSize, TypSize AL_AddPos)
|
|||
|
{
|
|||
|
if(AL_DefaultSize<1 || AL_AddPos<1 || AL_AddPos>ml_Size+1)
|
|||
|
return 0;
|
|||
|
//////////////////////////////////////////////////////////
|
|||
|
|
|||
|
ZtCObjList VO_StoreList; MakeDefault(
|
|||
|
AL_DefaultSize, VO_StoreList);
|
|||
|
|
|||
|
ZCLink* VP_HeadLink=VO_StoreList.mp_HeadLink;
|
|||
|
|
|||
|
if(AL_AddPos==1)
|
|||
|
JoinAfter(VO_StoreList, 0 , 1 );
|
|||
|
else JoinAfter(VO_StoreList, GetLinkPtr(AL_AddPos-1), AL_AddPos-1);
|
|||
|
|
|||
|
return VP_HeadLink;
|
|||
|
}/*
|
|||
|
ZCLink* AddDefault(TypSize AL_DefaultSize, TypSize AL_AddPos)*/
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& AddHead(TypCArg AR_Type)
|
|||
|
{
|
|||
|
JoinAfter(new ZCLink(AR_Type), 0, 0); return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& AddHead(TypCArg AR_Type)*/
|
|||
|
|
|||
|
ZtCObjList& AddHead(const ZtCObjList& rhs)
|
|||
|
{
|
|||
|
if(this==&rhs) return *this;
|
|||
|
|
|||
|
ZtCObjList VO_StoreList(rhs);
|
|||
|
|
|||
|
JoinAfter(VO_StoreList, 0, 0); return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& AddHead(const ZtCObjList& rhs)*/
|
|||
|
|
|||
|
|
|||
|
ZCLink* AddHeadDefault()
|
|||
|
{
|
|||
|
/* <20>Ʒ<EFBFBD> <20>ڵ<EFBFBD> <20><> return <20><><EFBFBD><EFBFBD> return *this <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD>. 10 <20><><EFBFBD>Ⱓ <20≯<EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>. <EFBFBD>ڱ<EFBFBD>ġ 10 <EFBFBD><EFBFBD><EFBFBD>Ⱓ! -- 2015-02-21- 21:36:00
|
|||
|
*/
|
|||
|
ZCLink* VP_NewLink=new ZCLink; JoinAfter(VP_NewLink, 0, 0); return VP_NewLink;
|
|||
|
}/*
|
|||
|
ZCLink& AddHeadDefault()*/
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& AddTail(TypCArg AR_Type)
|
|||
|
{
|
|||
|
JoinAfter(new ZCLink(AR_Type), GetTailLinkPtr(), ml_Size); return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& AddTail(TypCArg AR_Type)*/
|
|||
|
|
|||
|
ZtCObjList& AddTail(const ZtCObjList& rhs)
|
|||
|
{
|
|||
|
ZtCObjList VO_StoreList(rhs); return JoinTail(VO_StoreList);
|
|||
|
}/*
|
|||
|
ZtCObjList& AddTail(const ZtCObjList& rhs)*/
|
|||
|
|
|||
|
|
|||
|
ZCLink* AddTailDefault()
|
|||
|
{
|
|||
|
ZCLink* VP_NewLink=new ZCLink;
|
|||
|
|
|||
|
JoinAfter(
|
|||
|
VP_NewLink, GetTailLinkPtr(), ml_Size);
|
|||
|
|
|||
|
return VP_NewLink;
|
|||
|
}/*
|
|||
|
ZCLink* AddTailDefault()*/
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& pop_back (TypCArg AR_Type){return AddHead(AR_Type);}
|
|||
|
ZtCObjList& push_back(TypCArg AR_Type){return AddTail(AR_Type);}
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& JoinHead(ZtCObjList& rhs)
|
|||
|
{
|
|||
|
JoinAfter(rhs, 0, 0); return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& JoinHead(ZtCObjList& rhs)*/
|
|||
|
|
|||
|
ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink* AP_CLink)
|
|||
|
{
|
|||
|
// rhs <20><> AP_CLink <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
// <20>ϴ<EFBFBD> <20>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> mp_HeadLink <20><> <20>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>.
|
|||
|
|
|||
|
JoinAfter(rhs.CutLink(AP_CLink), GetTailLinkPtr(), ml_Size);
|
|||
|
|
|||
|
mp_HeadLink=mp_HeadLink->GetPrevPtr(); return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink* AP_CLink)*/
|
|||
|
|
|||
|
ZtCObjList& JoinTail(ZtCObjList& rhs)
|
|||
|
{
|
|||
|
JoinAfter(rhs, GetTailLinkPtr(), ml_Size); return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& JoinTail(ZtCObjList& rhs)*/
|
|||
|
|
|||
|
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink* AP_CLink)
|
|||
|
{
|
|||
|
// rhs <20><> AP_CLink <20><> <20>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
JoinAfter(rhs.CutLink(AP_CLink), GetTailLinkPtr(), ml_Size); return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink* AP_CLink)*/
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& JoinAfter(
|
|||
|
ZtCObjList& rhs ,
|
|||
|
ZCLink* AP_LinkOfRhs ,
|
|||
|
TypSize AL_AddPosOfRhs ,
|
|||
|
ZCLink* AP_LinkStd ,
|
|||
|
TypSize AL_PosStd
|
|||
|
/*////////////////*/ )
|
|||
|
{
|
|||
|
// rhs <20><> AP_LinkOfRhs <20><>ũ<EFBFBD><C5A9> <20>߶<EFBFBD><DFB6><EFBFBD> AP_LinkStd <20>տ<EFBFBD> <20><><EFBFBD>δ<EFBFBD>.
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(rhs.Find(AP_LinkOfRhs)!=AL_AddPosOfRhs || (AP_LinkStd!=0 && Find(AP_LinkStd)!=AL_PosStd) )
|
|||
|
{
|
|||
|
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 'ZtCObjList& JoinAfter(ZtCObjList& rhs,"<<std::endl;
|
|||
|
fileout<<" (ZtCObjList& rhs ,"<<std::endl;
|
|||
|
fileout<<" ZCLink* AP_LinkOfRhs ,"<<std::endl;
|
|||
|
fileout<<" TypSize AL_AddPosOfRhs ,"<<std::endl;
|
|||
|
fileout<<" ZCLink* AP_LinkStd ,"<<std::endl;
|
|||
|
fileout<<" TypSize AL_PosStd" <<std::endl;
|
|||
|
fileout<<"/*//////////////////////////*/ ): Parameter is bad index"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return *this;
|
|||
|
}/*
|
|||
|
if(rhs.Find(AP_LinkOfRhs)!=AL_AddPosOfRhs || (AP_LinkStd!=0 && Find(AP_LinkStd)!=AL_PosStd) )*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
JoinAfter(rhs.CutLink(AP_LinkOfRhs, AL_AddPosOfRhs), AP_LinkStd, AL_PosStd); return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& JoinAfter(
|
|||
|
ZtCObjList& rhs ,
|
|||
|
ZCLink* AP_LinkOfRhs ,
|
|||
|
TypSize AL_AddPosOfRhs ,
|
|||
|
ZCLink* AP_LinkStd ,
|
|||
|
TypSize AL_PosStd
|
|||
|
/*///////////////// ) */
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& CutLinkOut(
|
|||
|
ZCLink* AP_CutHead, TypSize AL_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail, TypSize AL_CutTailPos,
|
|||
|
ZtCObjList& 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_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><>ġ
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AL_CutHeadPos <= AL_CutTailPos
|
|||
|
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AL_CutHeadPos>AL_CutTailPos)
|
|||
|
{
|
|||
|
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
|
|||
|
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
|
|||
|
fileout<<"ZtCObjList& CutLinkOut( ZCLink* AP_CutHead, TypSize AL_CutHeadPos,"<<std::endl;
|
|||
|
fileout<<" ZCLink* AP_CutTail, TypSize AL_CutTailPos, ZtCObjList& ARR_StoreList"<<std::endl;
|
|||
|
fileout<<"/*******************/ ) : AL_CutHeadPos>AL_CutTailPos"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1); return *this;
|
|||
|
}/*
|
|||
|
if(AL_CutHeadPos>AL_CutTailPos)*/
|
|||
|
|
|||
|
#endif // _DEBUG
|
|||
|
|
|||
|
|
|||
|
OnDelete(AP_CutHead, AL_CutHeadPos, AP_CutTail, AL_CutTailPos);
|
|||
|
|
|||
|
if(AL_CutHeadPos==1 && AL_CutTailPos==ml_Size) // <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
|||
|
{
|
|||
|
mp_HeadLink=0;
|
|||
|
}
|
|||
|
else if(AL_CutHeadPos==1) // <20>߶<DFB6><F3B3BBB7><EFBFBD> <20><>ũ<EFBFBD><C5A9> ó<><C3B3> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
|||
|
{
|
|||
|
ZCLink::MakeCircle(mp_HeadLink=AP_CutTail->mp_NextLink, AP_CutHead->mp_PrevLink);
|
|||
|
}
|
|||
|
else if(AL_CutTailPos==ml_Size) // <20>߶<DFB6><F3B3BBB7><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
|||
|
{
|
|||
|
ZCLink::MakeCircle(mp_HeadLink, AP_CutHead->mp_PrevLink);
|
|||
|
}
|
|||
|
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><>.
|
|||
|
{
|
|||
|
ZCLink::JoinLink(AP_CutHead ->mp_PrevLink, AP_CutTail->mp_NextLink);
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
ml_Size -= AL_CutTailPos-AL_CutHeadPos+1 ;
|
|||
|
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CutLink(ZCLink*,TypSize,ZCLink*,TypSize,ZtCObjList&) <20><> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD>Ŀ<EFBFBD> CutLink() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// ARR_StoreList <20><> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, CutLinkOut() <20><> ARR_StoreList <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
if(ARR_StoreList.ml_Size<1)
|
|||
|
{
|
|||
|
// AP_CutHead <20><> AP_CutTail <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ḯ<EFBFBD><E1B8AE>Ʈ<EFBFBD><C6AE> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
ZCLink::MakeCircle(AP_CutHead, AP_CutTail);
|
|||
|
|
|||
|
ARR_StoreList.mp_HeadLink=AP_CutHead ;
|
|||
|
ARR_StoreList.ml_Size =AL_CutTailPos-AL_CutHeadPos+1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLink::JoinLink (ARR_StoreList.mp_HeadLink->mp_PrevLink, AP_CutHead);
|
|||
|
ZCLink::MakeCircle(ARR_StoreList.mp_HeadLink , AP_CutTail);
|
|||
|
|
|||
|
ARR_StoreList.ml_Size += AL_CutTailPos-AL_CutHeadPos+1 ;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
return ARR_StoreList;
|
|||
|
}/*
|
|||
|
ZtCObjList& CutLinkOut(
|
|||
|
ZCLink* AP_CutHead, TypSize AL_CutHeadPos,
|
|||
|
ZCLink* AP_CutTail, TypSize AL_CutTailPos,
|
|||
|
ZtCObjList& ARR_StoreList
|
|||
|
///////////// ) */
|
|||
|
|
|||
|
|
|||
|
|
|||
|
operator Type&()
|
|||
|
{
|
|||
|
return AddDefault(1, ml_Size+1)->GetData();
|
|||
|
}/*
|
|||
|
operator Type&()*/
|
|||
|
|
|||
|
|
|||
|
Type& GetData(TypSize AI_Index)
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AI_Index<1 || AI_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 'Type& GetData(TypSize AI_Index)' : Parameter is bad index("<<AI_Index<<")"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1);
|
|||
|
}/*
|
|||
|
if(AI_Index<1 || AI_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return GetLinkPtr(AI_Index)->GetData();
|
|||
|
}/*
|
|||
|
Type& GetData(TypSize AI_Index)*/
|
|||
|
|
|||
|
|
|||
|
const Type& GetData(TypSize AI_Index) const
|
|||
|
{
|
|||
|
#ifdef _DEBUG
|
|||
|
|
|||
|
if(AI_Index<1 || AI_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 Type& GetData(TypSize AI_Index) const' : Parameter is bad index("<<AI_Index<<")"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1);
|
|||
|
}/*
|
|||
|
if(AI_Index<1 || AI_Index>ml_Size)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return GetLinkPtr(AI_Index)->GetData();
|
|||
|
}/*
|
|||
|
const Type& GetData(TypSize AI_Index) const*/
|
|||
|
|
|||
|
|
|||
|
Type& 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 'Type& ZNsMain::ZtCObjList::GetHeadData()' : Type Instance is nothing"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1);
|
|||
|
}/*
|
|||
|
if(mp_HeadLink==0)*/
|
|||
|
|
|||
|
#endif //#_DEBUG
|
|||
|
|
|||
|
return mp_HeadLink->GetData();
|
|||
|
}/*
|
|||
|
Type& GetHeadData()*/
|
|||
|
|
|||
|
const Type& 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 Type& ZNsMain::ZtCObjList::GetHeadData() const' : Type Instance is nothing"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1);
|
|||
|
}/*
|
|||
|
if(mp_HeadLink==0)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return mp_HeadLink->GetData();
|
|||
|
}/*
|
|||
|
const Type& GetHeadData() const*/
|
|||
|
|
|||
|
|
|||
|
Type& GetTailData()
|
|||
|
{
|
|||
|
#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 'Type& ZNsMain::ZtCObjList::GetTailData()' : Type Instance is nothing"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1);
|
|||
|
}/*
|
|||
|
if(mp_HeadLink==0)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return mp_HeadLink->mp_PrevLink->GetData();
|
|||
|
}/*
|
|||
|
Type& GetTailData()*/
|
|||
|
|
|||
|
const Type& GetTailData() 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 Type& ZNsMain::ZtCObjList::GetTailData() const' : Type Instance is nothing"<<std::endl;
|
|||
|
fileout.close();
|
|||
|
|
|||
|
::exit(1);
|
|||
|
}/*
|
|||
|
if(mp_HeadLink==0)*/
|
|||
|
|
|||
|
#endif //_DEBUG
|
|||
|
|
|||
|
return mp_HeadLink->mp_PrevLink->GetData();
|
|||
|
}/*
|
|||
|
const Type& GetTailData() const*/
|
|||
|
|
|||
|
|
|||
|
Type& front(){return GetHeadData();}
|
|||
|
Type& back (){return GetTailData();}
|
|||
|
|
|||
|
const Type& front() const{return GetHeadData();}
|
|||
|
const Type& back () const{return GetTailData();}
|
|||
|
|
|||
|
|
|||
|
ZtCObjList& Rotate(TypSize AL_RotateNum)
|
|||
|
{
|
|||
|
if(ml_Size>0)
|
|||
|
mp_HeadLink=mp_HeadLink->GetNextPrevPtr(AL_RotateNum);
|
|||
|
|
|||
|
return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& Rotate(TypSize AL_RotateNum)*/
|
|||
|
|
|||
|
ZtCObjList& Rotate()
|
|||
|
{
|
|||
|
if(ml_Size>0)
|
|||
|
mp_HeadLink=mp_HeadLink->mp_NextLink;
|
|||
|
|
|||
|
return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& Rotate()*/
|
|||
|
|
|||
|
ZtCObjList& RotateBack()
|
|||
|
{
|
|||
|
if(ml_Size>0)
|
|||
|
mp_HeadLink=mp_HeadLink->mp_PrevLink;
|
|||
|
|
|||
|
return *this;
|
|||
|
}/*
|
|||
|
ZtCObjList& RotateBack()*/
|
|||
|
|
|||
|
|
|||
|
template<typename TFunctor> void IterElement(TFunctor AO_Functor)
|
|||
|
{
|
|||
|
ZCLink* VP_LoopLink=mp_HeadLink;
|
|||
|
|
|||
|
__for0(int, i, ml_Size)
|
|||
|
{
|
|||
|
std::CTypeData_T<TFunctor>::GetObjRef(AO_Functor)(VP_LoopLink->mo_Type);
|
|||
|
|
|||
|
/* <20><> <20>ڵ<EFBFBD><DAB5><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD>, AO_Functor <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ƴ϶<C6B4>, operator()
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> object <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>. */
|
|||
|
|
|||
|
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
|||
|
}/*
|
|||
|
__for0(int, i, ml_Size)*/
|
|||
|
}/*
|
|||
|
template<typename TFunctor> void IterElement(TFunctor AO_Functor) */
|
|||
|
|
|||
|
template<typename TFunctor, typename TTypeHelp>
|
|||
|
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
|
|||
|
{
|
|||
|
/*/////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> TTypeHelp <EFBFBD><EFBFBD> class <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ũ<EFBFBD>Ⱑ Ŀ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ѿ<EFBFBD><EFBFBD> <EFBFBD>Ѵٸ<EFBFBD>,
|
|||
|
|
|||
|
IterElement<myFunctor, myClass&>(myFunctor_obj, myClass_Obj);
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> ȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ƴ϶<EFBFBD>, std::CObjectPtr_T<> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD>,
|
|||
|
|
|||
|
myClass myClass_Obj; std::CObjectPtr_T<myClass> myCObjPtr(myClass_Obj);
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>
|
|||
|
|
|||
|
IterElement(myFunctor_obj, std::CObjectPtr_T<myClass>(myClass_Obj));
|
|||
|
|
|||
|
<EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. -- 2014-06-16 23:11:00
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////*/
|
|||
|
|
|||
|
ZCLink* VP_LoopLink=mp_HeadLink;
|
|||
|
|
|||
|
__for0(int, i, ml_Size)
|
|||
|
{
|
|||
|
std::CTypeData_T<TFunctor>::
|
|||
|
GetObjRef(AO_Functor)(VP_LoopLink->mo_Type, AO_TypeHelp);
|
|||
|
|
|||
|
/* <20><> <20>ڵ<EFBFBD><DAB5><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD>, AO_Functor <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ƴ϶<C6B4>, operator()
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> object <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>. */
|
|||
|
|
|||
|
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
|||
|
}/*
|
|||
|
__for0(int, i, ml_Size)*/
|
|||
|
}/*
|
|||
|
template<typename TFunctor, typename TTypeHelp>
|
|||
|
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */
|
|||
|
|
|||
|
|
|||
|
template<typename TFunctor, typename TTypeHelp>
|
|||
|
void IterElemRef(TFunctor AO_Functor, TTypeHelp& AR_TypeHelp)
|
|||
|
{
|
|||
|
/* TTypeHelp <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ް<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. -- 2015-09-07 02:55:00 */
|
|||
|
|
|||
|
ZCLink* VP_LoopLink=mp_HeadLink;
|
|||
|
|
|||
|
__for0(int, i, ml_Size)
|
|||
|
{
|
|||
|
std::CTypeData_T<TFunctor>::
|
|||
|
GetObjRef(AO_Functor)(VP_LoopLink->mo_Type, AR_TypeHelp);
|
|||
|
|
|||
|
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
|||
|
}/*
|
|||
|
__for0(int, i, ml_Size)*/
|
|||
|
}/*
|
|||
|
template<typename TFunctor, typename TTypeHelp>
|
|||
|
void IterElemRef(TFunctor AO_Functor, TTypeHelp& AR_TypeHelp) */
|
|||
|
|
|||
|
|
|||
|
/*///////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> IterElement() <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
#include <iostream>
|
|||
|
#include "ZtCObjList.H"
|
|||
|
|
|||
|
using namespace std;
|
|||
|
|
|||
|
int main()
|
|||
|
{
|
|||
|
ZNsMain:: ZtCObjList<int> myArray;
|
|||
|
|
|||
|
myArray.AddTail(10);
|
|||
|
myArray.AddTail(20);
|
|||
|
myArray.AddTail(30);
|
|||
|
myArray.AddTail(40);
|
|||
|
|
|||
|
struct StFunctor
|
|||
|
{
|
|||
|
static void ShowElement(int ArgiValue){cout<<"# Value="<<ArgiValue<<endl;}
|
|||
|
};
|
|||
|
struct StFunctor2
|
|||
|
{
|
|||
|
int MI_Index;
|
|||
|
|
|||
|
StFunctor2(){MI_Index=0;}
|
|||
|
|
|||
|
void operator()(int ArgiValue){cout<<"# index="<<++MI_Index<<", Value="<<ArgiValue<<endl;}
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
StFunctor2 VO_StFunctor2;
|
|||
|
|
|||
|
myArray.IterElement(StFunctor::ShowElement);
|
|||
|
myArray.IterElement(&VO_StFunctor2); // linux g++ 4.4.7 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
// struct StFunctor2 <20><><EFBFBD>Ǹ<EFBFBD> main() <20>Լ<EFBFBD> <20>ٱ<EFBFBD><D9B1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵȴ<CFB5>.
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> -- 2014-06-16 23:34:00
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////*/
|
|||
|
|
|||
|
|
|||
|
class ZCIterator
|
|||
|
{
|
|||
|
protected:
|
|||
|
mutable ZCLink* mp_Link;
|
|||
|
mutable TypSize ml_Pos ;
|
|||
|
public :
|
|||
|
|
|||
|
ZCIterator(ZCLink* AP_CLink=0, TypSize AL_Pos=0)
|
|||
|
{
|
|||
|
mp_Link=AP_CLink;
|
|||
|
ml_Pos =AL_Pos ;
|
|||
|
}/*
|
|||
|
ZCIterator(ZCLink* AP_CLink=0, TypSize AL_Pos=0)*/
|
|||
|
|
|||
|
ZCLink* GetLink()
|
|||
|
{
|
|||
|
return mp_Link;
|
|||
|
}/*
|
|||
|
ZCLink* GetLink()*/
|
|||
|
|
|||
|
const ZCLink* GetLink() const
|
|||
|
{
|
|||
|
return mp_Link;
|
|||
|
}/*
|
|||
|
const ZCLink* GetLink() const*/
|
|||
|
|
|||
|
TypSize GetPos() const
|
|||
|
{
|
|||
|
return ml_Pos;
|
|||
|
}/*
|
|||
|
TypSize GetPos() const*/
|
|||
|
|
|||
|
Type& operator *()
|
|||
|
{
|
|||
|
return mp_Link->GetData();
|
|||
|
}/*
|
|||
|
Type& operator *()*/
|
|||
|
|
|||
|
const Type& operator *() const
|
|||
|
{
|
|||
|
return mp_Link->GetData();
|
|||
|
}/*
|
|||
|
const Type& operator *() const*/
|
|||
|
|
|||
|
ZCIterator& operator++()
|
|||
|
{
|
|||
|
mp_Link=mp_Link->GetNextPtr(); ++ml_Pos; return *this;
|
|||
|
}/*
|
|||
|
ZCIterator& operator++()*/
|
|||
|
|
|||
|
const ZCIterator& operator++() const
|
|||
|
{
|
|||
|
mp_Link=mp_Link->GetNextPtr(); ++ml_Pos; return *this;
|
|||
|
}/*
|
|||
|
const ZCIterator& operator++() const*/
|
|||
|
|
|||
|
ZCIterator operator++(int)
|
|||
|
{
|
|||
|
ZCIterator VO_CIterator(*this);
|
|||
|
|
|||
|
mp_Link=mp_Link->GetNextPtr();
|
|||
|
|
|||
|
++ml_Pos; return VO_CIterator;
|
|||
|
}/*
|
|||
|
ZCIterator operator++(int)*/
|
|||
|
|
|||
|
const ZCIterator operator++(int) const
|
|||
|
{
|
|||
|
ZCIterator VO_CIterator(*this);
|
|||
|
|
|||
|
mp_Link=mp_Link->GetNextPtr();
|
|||
|
|
|||
|
++ml_Pos; return VO_CIterator;
|
|||
|
}/*
|
|||
|
const ZCIterator operator++(int) const*/
|
|||
|
|
|||
|
|
|||
|
ZCIterator& operator--()
|
|||
|
{
|
|||
|
mp_Link=mp_Link->GetPrevPtr(); --ml_Pos; return *this;
|
|||
|
}/*
|
|||
|
ZCIterator& operator--()*/
|
|||
|
|
|||
|
const ZCIterator& operator--() const
|
|||
|
{
|
|||
|
mp_Link=mp_Link->GetPrevPtr(); --ml_Pos; return *this;
|
|||
|
}/*
|
|||
|
const ZCIterator& operator--() const*/
|
|||
|
|
|||
|
ZCIterator operator--(int)
|
|||
|
{
|
|||
|
ZCIterator VO_CIterator(*this);
|
|||
|
|
|||
|
mp_Link=mp_Link->GetPrevPtr();
|
|||
|
|
|||
|
--ml_Pos; return VO_CIterator;
|
|||
|
}/*
|
|||
|
ZCIterator operator--(int)*/
|
|||
|
|
|||
|
const ZCIterator operator--(int) const
|
|||
|
{
|
|||
|
ZCIterator VO_CIterator(*this);
|
|||
|
|
|||
|
mp_Link=mp_Link->GetPrevPtr();
|
|||
|
|
|||
|
--ml_Pos; return VO_CIterator;
|
|||
|
}/*
|
|||
|
ZCIterator operator--(int) const*/
|
|||
|
|
|||
|
|
|||
|
ZCIterator operator+(TypeSize AI_FarNum) const
|
|||
|
{
|
|||
|
ZCIterator VO_CIterator(*this);
|
|||
|
|
|||
|
VO_CIterator.mp_Link =mp_Link->GetNextPtr(AI_FarNum);
|
|||
|
VO_CIterator.ml_Pos +=AI_FarNum ;
|
|||
|
|
|||
|
return VO_CIterator;
|
|||
|
}/*
|
|||
|
ZCIterator operator+(TypeSize AI_FarNum) const*/
|
|||
|
|
|||
|
ZCIterator operator-(TypeSize AI_FarNum) const
|
|||
|
{
|
|||
|
ZCIterator VO_CIterator(*this);
|
|||
|
|
|||
|
VO_CIterator.mp_Link =mp_Link->GetNextPtr(-AI_FarNum);
|
|||
|
VO_CIterator.ml_Pos -=AI_FarNum ;
|
|||
|
|
|||
|
return VO_CIterator;
|
|||
|
}/*
|
|||
|
ZCIterator operator-(TypeSize AI_FarNum) const*/
|
|||
|
|
|||
|
|
|||
|
bool operator==(const ZCIterator& rhs) const
|
|||
|
{
|
|||
|
return mp_Link==rhs.mp_Link && ml_Pos==rhs.ml_Pos ;
|
|||
|
}/*
|
|||
|
bool operator==(const ZCIterator& rhs) const*/
|
|||
|
bool operator!=(const ZCIterator& rhs) const
|
|||
|
{
|
|||
|
return mp_Link!=rhs.mp_Link || ml_Pos!=rhs.mp_Pos ;
|
|||
|
}/*
|
|||
|
bool operator!=(const ZCIterator& rhs) const*/
|
|||
|
|
|||
|
public:
|
|||
|
};/*
|
|||
|
class ZCIterator*/
|
|||
|
|
|||
|
|
|||
|
ZCIterator begin()
|
|||
|
{
|
|||
|
return ZCIterator(mp_HeadLink, (ml_Size>0 ? 1 : 0) );
|
|||
|
}/*
|
|||
|
ZCIterator begin()*/
|
|||
|
|
|||
|
ZCIterator end()
|
|||
|
{
|
|||
|
return ZCIterator(mp_HeadLink, (ml_Size>0 ? ml_Size+1 : 0) );
|
|||
|
}/*
|
|||
|
ZCIterator end()*/
|
|||
|
|
|||
|
const ZCIterator begin() const
|
|||
|
{
|
|||
|
return ZCIterator(mp_HeadLink, (ml_Size>0 ? 1 : 0) );
|
|||
|
}/*
|
|||
|
const ZCIterator begin() const*/
|
|||
|
|
|||
|
const ZCIterator end() const
|
|||
|
{
|
|||
|
return ZCIterator(mp_HeadLink, (ml_Size>0 ? ml_Size+1 : 0) );
|
|||
|
}/*
|
|||
|
const ZCIterator end() const*/
|
|||
|
|
|||
|
|
|||
|
void erase(ZCIterator& AR_CIterator)
|
|||
|
{
|
|||
|
return DeleteLink(AR_CIterator.GetLink(), AR_CIterator.GetPos());
|
|||
|
}/*
|
|||
|
void erase(ZCIterator& AR_CIterator)*/
|
|||
|
|
|||
|
void erase(ZCIterator& AR_CIterator1, ZCIterator& AR_CIterator2)
|
|||
|
{
|
|||
|
ZtCObjList VO_CObjList;
|
|||
|
|
|||
|
CutLink( AR_CIterator1.GetLink(), AR_CIterator1.GetPos(),
|
|||
|
AR_CIterator2.GetLink(), AR_CIterator2.GetPos(), RR(VO_CObjList)
|
|||
|
/****/ );
|
|||
|
|
|||
|
VO_CObjList.DeleteAll();
|
|||
|
}/*
|
|||
|
void erase(ZCIterator& AR_CIterator1, ZCIterator& AR_CIterator2)*/
|
|||
|
|
|||
|
|
|||
|
/*///////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
<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 16:35:00
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> --
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////*/
|
|||
|
|
|||
|
void MoveNextIter(ZCLink*& APR_CLink) const
|
|||
|
{
|
|||
|
APR_CLink=APR_CLink->GetNextPtr();
|
|||
|
}/*
|
|||
|
void MoveNextIter(ZCLink*& APR_CLink) const*/
|
|||
|
|
|||
|
void MoveNextIter(iterator& ARR_CIterator)
|
|||
|
{
|
|||
|
++ARR_CIterator;
|
|||
|
}/*
|
|||
|
void MoveNextIter(iterator& ARR_CIterator)*/
|
|||
|
|
|||
|
void MoveNextIter(IterEasyID& ARRI_IterEasyID) const
|
|||
|
{
|
|||
|
MoveNextIter((ZCLink*&)(ARRI_IterEasyID));
|
|||
|
}/*
|
|||
|
void MoveNextIter(IterEasyID& ARRI_IterEasyID) const*/
|
|||
|
|
|||
|
void MoveNextIter(const ZCLink*& APR_CLink) const
|
|||
|
{
|
|||
|
APR_CLink=APR_CLink->GetNextPtr();
|
|||
|
}/*
|
|||
|
void MoveNextIter(const ZCLink*& APR_CLink) const*/
|
|||
|
|
|||
|
void MoveNextIter(const iterator& ARR_CIterator) const
|
|||
|
{
|
|||
|
++ARR_CIterator;
|
|||
|
}/*
|
|||
|
void MoveNextIter(const iterator& ARR_CIterator) const*/
|
|||
|
|
|||
|
void MoveNextIter(IterEasyIDc& ARRI_IterEasyID) const
|
|||
|
{
|
|||
|
MoveNextIter((const ZCLink*&)(ARRI_IterEasyID));
|
|||
|
}/*
|
|||
|
void MoveNextIter(IterEasyIDc& ARRI_IterEasyID) const*/
|
|||
|
|
|||
|
|
|||
|
void MovePrevIter(ZCLink*& APR_CLink)
|
|||
|
{
|
|||
|
APR_CLink=APR_CLink->GetPrevPtr();
|
|||
|
}/*
|
|||
|
void MovePrevIter(ZCLink*& APR_CLink)*/
|
|||
|
|
|||
|
void MovePrevIter(iterator& ARR_CIterator)
|
|||
|
{
|
|||
|
--ARR_CIterator;
|
|||
|
}/*
|
|||
|
void MovePrevIter(iterator& ARR_CIterator)*/
|
|||
|
|
|||
|
void MovePrevIter(IterEasyID& ARRI_IterEasyID)
|
|||
|
{
|
|||
|
MovePrevIter((ZCLink*&)(ARRI_IterEasyID));
|
|||
|
}/*
|
|||
|
void MovePrevIter(IterEasyID& ARRI_IterEasyID)*/
|
|||
|
|
|||
|
void MovePrevIter(const ZCLink*& APR_CLink) const
|
|||
|
{
|
|||
|
APR_CLink=APR_CLink->GetPrevPtr();
|
|||
|
}/*
|
|||
|
void MovePrevIter(const ZCLink*& APR_CLink) const*/
|
|||
|
|
|||
|
void MovePrevIter(const iterator& ARR_CIterator) const
|
|||
|
{
|
|||
|
--ARR_CIterator;
|
|||
|
}/*
|
|||
|
void MovePrevIter(const iterator& ARR_CIterator) const*/
|
|||
|
|
|||
|
void MovePrevIter(IterEasyIDc& ARRI_IterEasyID) const
|
|||
|
{
|
|||
|
MovePrevIter((const ZCLink*&)(ARRI_IterEasyID));
|
|||
|
}/*
|
|||
|
void MovePrevIter(IterEasyIDc& ARRI_IterEasyID) const*/
|
|||
|
|
|||
|
|
|||
|
Type& GetDataInIter(ZCLink* AP_CLink)
|
|||
|
{
|
|||
|
return **AP_CLink;
|
|||
|
}/*
|
|||
|
Type& GetDataInIter(ZCLink* AP_CLink)*/
|
|||
|
|
|||
|
Type& GetDataInIter(iterator& ARR_CIterator)
|
|||
|
{
|
|||
|
return *ARR_CIterator;
|
|||
|
}/*
|
|||
|
Type& GetDataInIter(iterator& ARR_CIterator)*/
|
|||
|
|
|||
|
Type& GetDataInIter(IterEasyID ARRI_IterEasyID)
|
|||
|
{
|
|||
|
return GetDataInIter((ZCLink*)ARRI_IterEasyID);
|
|||
|
}/*
|
|||
|
Type& GetDataInIter(IterEasyID ARRI_IterEasyID)*/
|
|||
|
|
|||
|
|
|||
|
Type& GetDataInIter(ZCLink* AP_CLink, TypeSize AI_FarNum)
|
|||
|
{
|
|||
|
return **AP_CLink->GetNextPrevPtr(AI_FarNum);
|
|||
|
}/*
|
|||
|
Type& GetDataInIter(ZCLink* AP_CLink, TypeSize AI_FarNum)*/
|
|||
|
|
|||
|
Type& GetDataInIter(iterator& ARR_CIterator, TypeSize AI_FarNum)
|
|||
|
{
|
|||
|
return *(ARR_CIterator+AI_FarNum);
|
|||
|
}/*
|
|||
|
Type& GetDataInIter(iterator& ARR_CIterator, TypeSize AI_FarNum)*/
|
|||
|
|
|||
|
Type& GetDataInIter(IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum)
|
|||
|
{
|
|||
|
return GetDataInIter((ZCLink*)ARRI_IterEasyID, AI_FarNum);
|
|||
|
}/*
|
|||
|
Type& GetDataInIter(IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum)*/
|
|||
|
|
|||
|
|
|||
|
const Type& GetDataInIter(const ZCLink* AP_CLink) const
|
|||
|
{
|
|||
|
return **AP_CLink;
|
|||
|
}/*
|
|||
|
const Type& GetDataInIter(const ZCLink* AP_CLink) const*/
|
|||
|
|
|||
|
const Type& GetDataInIter(const iterator& ARR_CIterator) const
|
|||
|
{
|
|||
|
return *ARR_CIterator;
|
|||
|
}/*
|
|||
|
const Type& GetDataInIter(const iterator& ARR_CIterator) const*/
|
|||
|
|
|||
|
const Type& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const
|
|||
|
{
|
|||
|
return GetDataInIter((const ZCLink*)ARRI_IterEasyID);
|
|||
|
}/*
|
|||
|
const Type& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const*/
|
|||
|
|
|||
|
|
|||
|
const Type& GetDataInIter(const ZCLink* AP_CLink, TypeSize AI_FarNum) const
|
|||
|
{
|
|||
|
return **AP_CLink->GetNextPrevPtr(AI_FarNum);
|
|||
|
}/*
|
|||
|
const Type& GetDataInIter(const ZCLink* AP_CLink, TypeSize AI_FarNum) const*/
|
|||
|
|
|||
|
const Type& GetDataInIter(const iterator& ARR_CIterator, TypeSize AI_FarNum) const
|
|||
|
{
|
|||
|
return *(ARR_CIterator+AI_FarNum);
|
|||
|
}/*
|
|||
|
const Type& GetDataInIter(const iterator& ARR_CIterator, TypeSize AI_FarNum) const*/
|
|||
|
|
|||
|
const Type& GetDataInIter(IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const
|
|||
|
{
|
|||
|
return GetDataInIter((ZCLink*)ARRI_IterEasyID, AI_FarNum);
|
|||
|
}/*
|
|||
|
const Type& GetDataInIter(IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const*/
|
|||
|
|
|||
|
|
|||
|
// <20>Ʒ<EFBFBD> ItD() <20>Լ<EFBFBD><D4BC><EFBFBD> GetDataInIter() <20><> ª<><C2AA> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
|
|||
|
|
|||
|
Type& ItD(ZCLink* AP_CLink ){return GetDataInIter(AP_CLink );}
|
|||
|
Type& ItD(iterator& ARR_CIterator ){return GetDataInIter(ARR_CIterator );}
|
|||
|
Type& ItD(IterEasyID ARRI_IterEasyID ){return GetDataInIter(ARRI_IterEasyID );}
|
|||
|
Type& ItD(ZCLink* AP_CLink , TypeSize AI_FarNum){return GetDataInIter(AP_CLink , AI_FarNum);}
|
|||
|
Type& ItD(iterator& ARR_CIterator , TypeSize AI_FarNum){return GetDataInIter(ARR_CIterator , AI_FarNum);}
|
|||
|
Type& ItD(IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum){return GetDataInIter(ARRI_IterEasyID, AI_FarNum);}
|
|||
|
|
|||
|
const Type& ItD(const ZCLink* AP_CLink ) const{return GetDataInIter(AP_CLink );}
|
|||
|
const Type& ItD(const iterator& ARR_CIterator ) const{return GetDataInIter(ARR_CIterator );}
|
|||
|
const Type& ItD(IterEasyIDc ARRI_IterEasyID ) const{return GetDataInIter(ARRI_IterEasyID );}
|
|||
|
const Type& ItD(const ZCLink* AP_CLink , TypeSize AI_FarNum) const{return GetDataInIter(AP_CLink );}
|
|||
|
const Type& ItD(const iterator& ARR_CIterator , TypeSize AI_FarNum) const{return GetDataInIter(ARR_CIterator , AI_FarNum);}
|
|||
|
const Type& ItD(IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const{return GetDataInIter(ARRI_IterEasyID, AI_FarNum);}
|
|||
|
|
|||
|
public:
|
|||
|
};/*
|
|||
|
template< typename Type ,
|
|||
|
typename TypCArg =const Type&,
|
|||
|
typename TypCAlloc=ZCAllocator,
|
|||
|
typename TypCInit =ZCInit ,
|
|||
|
typename TypSize =long
|
|||
|
>
|
|||
|
class ZtCObjList ////////////////////////*/
|
|||
|
|
|||
|
|
|||
|
namespace ZNsType
|
|||
|
{
|
|||
|
|
|||
|
/*////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> class ZtCTypeObjUnitList<> <EFBFBD><EFBFBD> ZNsMain::CObjUnitList<> <EFBFBD><EFBFBD> 2<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> CObjUnitList<> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ܼ<EFBFBD><EFBFBD>ϰ<EFBFBD> <EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
CObjUnitList<> <EFBFBD><EFBFBD> IOCP <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> int TInMaxUnitCnt
|
|||
|
|
|||
|
<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> ZCLinkUnit <EFBFBD><EFBFBD> <EFBFBD>ִ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>, epoll_wait() <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><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><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> ť'<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>ȭ <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><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><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>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> '<EFBFBD>ӽ<EFBFBD> <EFBFBD>۾<EFBFBD> ť'<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> ZCLinkUnit <EFBFBD><EFBFBD>
|
|||
|
<EFBFBD>ִ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
int TInMaxUnitCnt
|
|||
|
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////////////////////////////*/
|
|||
|
|
|||
|
|
|||
|
template< typename Type ,
|
|||
|
typename TypArg =const Type& ,
|
|||
|
typename TypCAlloc =ZCAllocator ,
|
|||
|
typename TypSize =ZTypLong ,
|
|||
|
ZTypInt TInArrSize =4 ,
|
|||
|
ZTypInt TInMaxUnitCnt =5
|
|||
|
>
|
|||
|
class ZtCTypeObjUnitList //////////////////////////
|
|||
|
{
|
|||
|
public :
|
|||
|
enum{EArrSize =TInArrSize };
|
|||
|
enum{EMaxUnitCnt=TInMaxUnitCnt};
|
|||
|
public :
|
|||
|
typedef Type TypeData ;
|
|||
|
typedef TypArg TypeArg ;
|
|||
|
typedef TypSize TypeSize ;
|
|||
|
typedef TypCAlloc TypeAlloc;
|
|||
|
public:
|
|||
|
};/*
|
|||
|
template< typename Type ,
|
|||
|
typename TypArg =const Type& ,
|
|||
|
typename TypCAlloc =ZCAllocator ,
|
|||
|
typename TypSize =ZTypLong ,
|
|||
|
ZTypInt TInArrSize =4 ,
|
|||
|
ZTypInt TInMaxUnitCnt =5
|
|||
|
>
|
|||
|
class ZtCTypeObjUnitList ////////////////////////*/
|
|||
|
|
|||
|
}/*
|
|||
|
namespace ZNsType*/
|
|||
|
|
|||
|
|
|||
|
/*////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
<EFBFBD><EFBFBD> class CObjUnitList<> <EFBFBD><EFBFBD> IOCP <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> class CObjUnitList<> <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><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ'
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZCLinkUnit <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><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
|||
|
|
|||
|
-- 2013-02-14 10:42:00
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////*/
|
|||
|
|
|||
|
|
|||
|
template< typename TType,
|
|||
|
typename TTypeObjUnitList=ZNsType::ZtCTypeObjUnitList<TType>
|
|||
|
>
|
|||
|
class CObjUnitList /////////////////////////////////////////////////////
|
|||
|
{
|
|||
|
public :
|
|||
|
typedef TTypeObjUnitList TypeObjUnitList;
|
|||
|
public :
|
|||
|
enum{EArrSize =TypeObjUnitList::EArrSize };
|
|||
|
enum{EMaxUnitCnt=TypeObjUnitList::EMaxUnitCnt};
|
|||
|
public :
|
|||
|
typedef typename TypeObjUnitList::TypeData TypeData ;
|
|||
|
typedef typename TypeObjUnitList::TypeArg TypeArg ;
|
|||
|
typedef typename TypeObjUnitList::TypeSize TypeSize ;
|
|||
|
typedef typename TypeObjUnitList::TypeAlloc TypeAlloc;
|
|||
|
public :
|
|||
|
typedef TypeData TypeArr[EArrSize];
|
|||
|
typedef TypeData ZCLink ; // <20><> typedef <20><> <20><><EFBFBD><EFBFBD>.
|
|||
|
public :
|
|||
|
|
|||
|
|
|||
|
class ZCLinkUnit : public TypeAlloc
|
|||
|
{
|
|||
|
public :
|
|||
|
friend class CObjUnitList;
|
|||
|
private:
|
|||
|
TypeArr mo_TypeArr ;
|
|||
|
TypeSize ml_UseSize ;
|
|||
|
ZCLinkUnit* mp_NextUnit;
|
|||
|
ZCLinkUnit* mp_PrevUnit;
|
|||
|
private:
|
|||
|
|
|||
|
static void JoinLink(ZCLinkUnit* lhs, ZCLinkUnit* rhs)
|
|||
|
{
|
|||
|
lhs->mp_NextUnit=rhs;
|
|||
|
rhs->mp_PrevUnit=lhs;
|
|||
|
}/*
|
|||
|
static void JoinLink(ZCLinkUnit* lhs, ZCLinkUnit* rhs)*/
|
|||
|
|
|||
|
static void MakeCircle(ZCLinkUnit* AP_HeadUnit, ZCLinkUnit* AP_TailUnit)
|
|||
|
{
|
|||
|
AP_HeadUnit->mp_PrevUnit=AP_TailUnit;
|
|||
|
AP_TailUnit->mp_NextUnit=AP_HeadUnit;
|
|||
|
}/*
|
|||
|
static void MakeCircle(ZCLinkUnit* AP_HeadUnit, ZCLinkUnit* AP_TailUnit)*/
|
|||
|
|
|||
|
TypeData& AddEmptyObj_E() // E <20><> Error <20><> <20><EFBFBD><DFBB><EFBFBD> <20><> <20>ִٴ<D6B4> <20><>.
|
|||
|
{
|
|||
|
return mo_TypeArr[ml_UseSize++]; // error üũ <20><>, ml_UseSize>=EArrSize <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC><C5A9><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
|||
|
}/*
|
|||
|
TypeData& AddEmptyObj_E()*/
|
|||
|
|
|||
|
/*private:*/
|
|||
|
public :
|
|||
|
|
|||
|
ZCLinkUnit()
|
|||
|
{
|
|||
|
ml_UseSize =0;
|
|||
|
mp_NextUnit=0;
|
|||
|
mp_PrevUnit=0;
|
|||
|
}/*
|
|||
|
ZCLinkUnit()*/
|
|||
|
|
|||
|
ZCLinkUnit(const ZCLinkUnit& rhs)
|
|||
|
{
|
|||
|
ml_UseSize =rhs.ml_UseSize;
|
|||
|
mp_NextUnit=0 ;
|
|||
|
mp_PrevUnit=0 ;
|
|||
|
|
|||
|
::memcpy( mo_TypeArr,
|
|||
|
rhs.mo_TypeArr, ml_UseSize*sizeof(TypeData));
|
|||
|
}/*
|
|||
|
ZCLinkUnit(const ZCLinkUnit& rhs)*/
|
|||
|
|
|||
|
ZCLinkUnit& operator=(const ZCLinkUnit& rhs)
|
|||
|
{
|
|||
|
if(this==&rhs) return *this;
|
|||
|
|
|||
|
ml_UseSize=rhs.ml_UseSize;
|
|||
|
|
|||
|
::memcpy( mo_TypeArr,
|
|||
|
rhs.mo_TypeArr, ml_UseSize*sizeof(TypeData));
|
|||
|
|
|||
|
return *this;
|
|||
|
}/*
|
|||
|
ZCLinkUnit& operator=(const ZCLinkUnit& rhs)*/
|
|||
|
|
|||
|
TypeData* GetHeadObjPtr (){return mo_TypeArr ;}
|
|||
|
ZCLinkUnit* GetNextUnitPtr(){return mp_NextUnit;}
|
|||
|
ZCLinkUnit* GetPrevUniPtr (){return mp_PrevUnit;}
|
|||
|
|
|||
|
TypeSize size () const{return ml_UseSize ;}
|
|||
|
TypeSize GetUseSize () const{return ml_UseSize ;}
|
|||
|
const TypeData* GetHeadObjPtr () const{return mo_TypeArr ;}
|
|||
|
const ZCLinkUnit* GetNextUnitPtr() const{return mp_NextUnit;}
|
|||
|
const ZCLinkUnit* GetPrevUniPtr () const{return mp_PrevUnit;}
|
|||
|
|
|||
|
TypeData& GetData(TypeSize AI_Index) // AI_Index start from 1
|
|||
|
{
|
|||
|
return mo_TypeArr[AI_Index-1];
|
|||
|
}/*
|
|||
|
TypeData& GetData(TypeSize AI_Index) // AI_Index start from 1*/
|
|||
|
TypeArg GetData(TypeSize AI_Index) const // AI_Index start from 1
|
|||
|
{
|
|||
|
return mo_TypeArr[AI_Index-1];
|
|||
|
}/*
|
|||
|
TypeArg GetData(TypeSize AI_Index) const // AI_Index start from 1*/
|
|||
|
|
|||
|
|
|||
|
bool AddObj(TypeArg AR_Object)
|
|||
|
{
|
|||
|
if(ml_UseSize>=EArrSize) return false;
|
|||
|
|
|||
|
mo_TypeArr[ml_UseSize++]=AR_Object; return true;
|
|||
|
}/*
|
|||
|
bool AddObj(TypeArg AR_Object)*/
|
|||
|
|
|||
|
void AddObjArr(TypeData* AP_ObjArr, TypeSize AI_ArrSize)
|
|||
|
{
|
|||
|
if(ml_UseSize>=EArrSize) return;
|
|||
|
|
|||
|
while(--AI_ArrSize>=0)
|
|||
|
{
|
|||
|
mo_TypeArr[ml_UseSize++] = *AP_ObjArr++;
|
|||
|
|
|||
|
if(ml_UseSize>=EArrSize) return;
|
|||
|
}/*
|
|||
|
while(--AI_ArrSize>=0)*/
|
|||
|
}/*
|
|||
|
void AddObjArr(TypeData* AP_ObjArr, TypeSize AI_ArrSize)*/
|
|||
|
|
|||
|
bool AddEmptyObj(TypeData*& APR_Object)
|
|||
|
{
|
|||
|
if(ml_UseSize>=EArrSize) return false;
|
|||
|
|
|||
|
APR_Object=mo_TypeArr+(ml_UseSize++); return true;
|
|||
|
}/*
|
|||
|
bool AddEmptyObj(TypeData*& APR_Object)*/
|
|||
|
|
|||
|
|
|||
|
ZCLinkUnit* GetObjtPtr(TypeSize AI_Distance)
|
|||
|
{
|
|||
|
if(AI_Distance==0) return this;
|
|||
|
|
|||
|
ZCLinkUnit* VP_NowUnit=this;
|
|||
|
|
|||
|
if(AI_Distance<0)
|
|||
|
{
|
|||
|
for(; AI_Distance!=0; ++AI_Distance)
|
|||
|
VP_NowUnit = VP_NowUnit->mp_PrevUnit;
|
|||
|
|
|||
|
return VP_NowUnit;
|
|||
|
}/*
|
|||
|
if(AI_Distance<0)*/
|
|||
|
|
|||
|
for(; AI_Distance!=0; --AI_Distance)
|
|||
|
VP_NowUnit = VP_NowUnit->mp_NextUnit;
|
|||
|
|
|||
|
return VP_NowUnit;
|
|||
|
}/*
|
|||
|
ZCLinkUnit* GetObjtPtr(TypeSize AI_Distance)*/
|
|||
|
|
|||
|
const ZCLinkUnit* GetObjtPtr(TypeSize AI_Distance) const
|
|||
|
{
|
|||
|
if(AI_Distance==0) return this;
|
|||
|
|
|||
|
ZCLinkUnit* VP_NowUnit=this;
|
|||
|
|
|||
|
if(AI_Distance<0)
|
|||
|
{
|
|||
|
for(; AI_Distance!=0; ++AI_Distance)
|
|||
|
VP_NowUnit = VP_NowUnit->mp_PrevUnit;
|
|||
|
|
|||
|
return VP_NowUnit;
|
|||
|
}/*
|
|||
|
if(AI_Distance<0)*/
|
|||
|
|
|||
|
for(; AI_Distance!=0; --AI_Distance)
|
|||
|
VP_NowUnit=VP_NowUnit->mp_NextUnit;
|
|||
|
|
|||
|
return VP_NowUnit;
|
|||
|
}/*
|
|||
|
const ZCLinkUnit* GetObjtPtr(TypeSize AI_Distance) const*/
|
|||
|
|
|||
|
ZCLinkUnit* GetObjtPtr(TypeSize AI_Distance, TypeSize& ARRI_ObjCnt)
|
|||
|
{
|
|||
|
if(AI_Distance==0) return this;
|
|||
|
|
|||
|
|
|||
|
ARRI_ObjCnt=ml_UseSize; ZCLinkUnit* VP_NowUnit=this;
|
|||
|
|
|||
|
if(AI_Distance<0)
|
|||
|
{
|
|||
|
for(; AI_Distance!=0; ++AI_Distance)
|
|||
|
{
|
|||
|
VP_NowUnit =VP_NowUnit->mp_PrevUnit;
|
|||
|
ARRI_ObjCnt+=VP_NowUnit->ml_UseSize ;
|
|||
|
}/*
|
|||
|
for(; AI_Distance!=0; ++AI_Distance)*/
|
|||
|
|
|||
|
return VP_NowUnit;
|
|||
|
}/*
|
|||
|
if(AI_Distance<0)*/
|
|||
|
|
|||
|
for(; AI_Distance!=0; --AI_Distance)
|
|||
|
{
|
|||
|
VP_NowUnit =VP_NowUnit->mp_NextUnit;
|
|||
|
ARRI_ObjCnt+=VP_NowUnit->ml_UseSize ;
|
|||
|
}/*
|
|||
|
for(; AI_Distance!=0; --AI_Distance)*/
|
|||
|
|
|||
|
return VP_NowUnit;
|
|||
|
}/*
|
|||
|
ZCLinkUnit* GetObjtPtr(TypeSize AI_Distance, TypeSize& ARRI_ObjCnt)*/
|
|||
|
|
|||
|
const ZCLinkUnit* GetObjtPtr(TypeSize AI_Distance, TypeSize& ARRI_ObjCnt) const
|
|||
|
{
|
|||
|
if(AI_Distance==0) return this;
|
|||
|
|
|||
|
|
|||
|
ARRI_ObjCnt=ml_UseSize; ZCLinkUnit* VP_NowUnit=this;
|
|||
|
|
|||
|
if(AI_Distance<0)
|
|||
|
{
|
|||
|
for(; AI_Distance!=0; ++AI_Distance)
|
|||
|
{
|
|||
|
VP_NowUnit =VP_NowUnit->mp_PrevUnit;
|
|||
|
ARRI_ObjCnt+=VP_NowUnit->ml_UseSize ;
|
|||
|
}/*
|
|||
|
for(; AI_Distance!=0; ++AI_Distance)*/
|
|||
|
|
|||
|
return VP_NowUnit;
|
|||
|
}/*
|
|||
|
if(AI_Distance<0)*/
|
|||
|
|
|||
|
for(; AI_Distance!=0; --AI_Distance)
|
|||
|
{
|
|||
|
VP_NowUnit =VP_NowUnit->mp_NextUnit;
|
|||
|
ARRI_ObjCnt+=VP_NowUnit->ml_UseSize ;
|
|||
|
}/*
|
|||
|
for(; AI_Distance!=0; --AI_Distance)*/
|
|||
|
|
|||
|
return VP_NowUnit;
|
|||
|
}/*
|
|||
|
const ZCLinkUnit* GetObjtPtr(TypeSize AI_Distance, TypeSize& ARRI_ObjCnt) const*/
|
|||
|
|
|||
|
public :
|
|||
|
};/*
|
|||
|
class ZCLinkUnit*/
|
|||
|
|
|||
|
|
|||
|
/*public :*/
|
|||
|
private:
|
|||
|
ZCLinkUnit* mp_NowHeadUnit; // '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> ù ZCLinkUnit <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
ZCLinkUnit* mp_CutHeadUnit; // '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> ù ZCLinkUnit <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>۴<EFBFBD>.
|
|||
|
TypeSize ml_NowUnitCnt ; // '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> ZCLinkUnit <20><> <20><><EFBFBD><EFBFBD>.
|
|||
|
TypeSize ml_CutUnitCnt ; // '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> ZCLinkUnit <20><> <20><><EFBFBD><EFBFBD> , <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ۿ<EFBFBD> <20>ִ<EFBFBD> ZCLinkUnit <20><> <20><><EFBFBD><EFBFBD>.
|
|||
|
TypeSize ml_NowObjtCnt ; // mp_NowHeadUnit <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><>.
|
|||
|
/*private:*/
|
|||
|
private:
|
|||
|
|
|||
|
ZCLinkUnit* CreateUnit()
|
|||
|
{
|
|||
|
return new ZCLinkUnit;
|
|||
|
}/*
|
|||
|
ZCLinkUnit* CreateUnit()*/
|
|||
|
|
|||
|
void DeleteUnit(ZCLinkUnit* AP_CLinkUnit)
|
|||
|
{
|
|||
|
delete AP_CLinkUnit;
|
|||
|
}/*
|
|||
|
void DeleteUnit(ZCLinkUnit* AP_CLinkUnit)*/
|
|||
|
|
|||
|
ZCLinkUnit* AllocUnit()
|
|||
|
{
|
|||
|
// '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> ZCLinkUnit <20><> <20>ִٸ<D6B4> <20>װ<EFBFBD><D7B0><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
if(ml_CutUnitCnt<1)
|
|||
|
{
|
|||
|
ZCLinkUnit* VP_NewCLinkUnit=CreateUnit();
|
|||
|
|
|||
|
VP_NewCLinkUnit->ml_UseSize=0; return VP_NewCLinkUnit;
|
|||
|
}/*
|
|||
|
if(ml_CutUnitCnt<1)*/
|
|||
|
|
|||
|
ZCLinkUnit* VP_CutHeadUnit=mp_CutHeadUnit ;
|
|||
|
ZCLinkUnit* VP_CutTailUnit=mp_CutHeadUnit->mp_PrevUnit;
|
|||
|
|
|||
|
mp_CutHeadUnit=mp_CutHeadUnit->mp_NextUnit;
|
|||
|
|
|||
|
if(--ml_CutUnitCnt<1)
|
|||
|
mp_CutHeadUnit=0;
|
|||
|
else
|
|||
|
ZCLinkUnit::MakeCircle(mp_CutHeadUnit, VP_CutTailUnit);
|
|||
|
//else
|
|||
|
|
|||
|
VP_CutHeadUnit->ml_UseSize=0; return VP_CutHeadUnit;
|
|||
|
}/*
|
|||
|
ZCLinkUnit* AllocUnit()*/
|
|||
|
|
|||
|
ZCLinkUnit* AllocUnitAtHead()
|
|||
|
{
|
|||
|
// AllocUnit() <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZCLinkUnit* <20><> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20>տ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
ZCLinkUnit* VP_NewCLinkUnit=AllocUnit();
|
|||
|
|
|||
|
if(++ml_NowUnitCnt<=1)
|
|||
|
{
|
|||
|
mp_NowHeadUnit=VP_NewCLinkUnit;
|
|||
|
mp_NowHeadUnit->mp_NextUnit=mp_NowHeadUnit;
|
|||
|
mp_NowHeadUnit->mp_PrevUnit=mp_NowHeadUnit;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit* VP_TailCLinkUnit=mp_NowHeadUnit->mp_PrevUnit;
|
|||
|
|
|||
|
ZCLinkUnit::JoinLink (VP_NewCLinkUnit, mp_NowHeadUnit );
|
|||
|
ZCLinkUnit::MakeCircle(VP_NewCLinkUnit, VP_TailCLinkUnit);
|
|||
|
|
|||
|
mp_NowHeadUnit=VP_NewCLinkUnit;
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
return VP_NewCLinkUnit;
|
|||
|
}/*
|
|||
|
ZCLinkUnit* AllocUnitAtHead()*/
|
|||
|
|
|||
|
ZCLinkUnit* AllocUnitAtTail()
|
|||
|
{
|
|||
|
// AllocUnit() <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZCLinkUnit* <20><> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
ZCLinkUnit* VP_NewCLinkUnit=AllocUnit();
|
|||
|
|
|||
|
if(++ml_NowUnitCnt<=1)
|
|||
|
{
|
|||
|
mp_NowHeadUnit=VP_NewCLinkUnit;
|
|||
|
mp_NowHeadUnit->mp_NextUnit=mp_NowHeadUnit;
|
|||
|
mp_NowHeadUnit->mp_PrevUnit=mp_NowHeadUnit;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit* VP_TailCLinkUnit=mp_NowHeadUnit->mp_PrevUnit;
|
|||
|
|
|||
|
ZCLinkUnit::JoinLink (VP_TailCLinkUnit,VP_NewCLinkUnit);
|
|||
|
ZCLinkUnit::MakeCircle(mp_NowHeadUnit ,VP_NewCLinkUnit);
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
return VP_NewCLinkUnit;
|
|||
|
}/*
|
|||
|
ZCLinkUnit* AllocUnitAtTail()*/
|
|||
|
|
|||
|
/*private:*/
|
|||
|
public :
|
|||
|
|
|||
|
CObjUnitList()
|
|||
|
{
|
|||
|
mp_NowHeadUnit=0;
|
|||
|
mp_CutHeadUnit=0;
|
|||
|
ml_NowUnitCnt =0;
|
|||
|
ml_CutUnitCnt =0;
|
|||
|
ml_NowObjtCnt =0;
|
|||
|
}/*
|
|||
|
CObjUnitList()*/
|
|||
|
|
|||
|
CObjUnitList(const CObjUnitList& rhs)
|
|||
|
{
|
|||
|
mp_NowHeadUnit=0;
|
|||
|
mp_CutHeadUnit=0;
|
|||
|
ml_NowUnitCnt =0;
|
|||
|
ml_CutUnitCnt =0;
|
|||
|
ml_NowObjtCnt =0;
|
|||
|
|
|||
|
AddTail(rhs);
|
|||
|
}/*
|
|||
|
CObjUnitList(const CObjUnitList& rhs)*/
|
|||
|
|
|||
|
~CObjUnitList()
|
|||
|
{
|
|||
|
ClearEx();
|
|||
|
}/*
|
|||
|
~CObjUnitList()*/
|
|||
|
|
|||
|
CObjUnitList& operator=(const CObjUnitList& rhs)
|
|||
|
{
|
|||
|
if(this!=&rhs)
|
|||
|
{
|
|||
|
DeleteAll(); AddTail(rhs);
|
|||
|
}/*
|
|||
|
if(this!=&rhs)*/
|
|||
|
|
|||
|
return *this;
|
|||
|
}/*
|
|||
|
CObjUnitList& operator=(const CObjUnitList& rhs)*/
|
|||
|
|
|||
|
TypeSize size () const{return ml_NowObjtCnt;}
|
|||
|
|
|||
|
TypeSize GetNowUnitCnt() const{return ml_NowUnitCnt;}
|
|||
|
TypeSize GetNowObjtCnt() const{return ml_NowObjtCnt;}
|
|||
|
TypeSize GetCutUnitCnt() const{return ml_CutUnitCnt;}
|
|||
|
|
|||
|
ZCLinkUnit* GetNowHeadUnitPtr() {return mp_NowHeadUnit;}
|
|||
|
ZCLinkUnit* GetCutHeadUnitPtr() {return mp_CutHeadUnit;}
|
|||
|
TypeData& GetHeadData () {return mp_NowHeadUnit->mo_TypeArr[0];}
|
|||
|
|
|||
|
const ZCLinkUnit* GetNowHeadUnitPtr() const{return mp_NowHeadUnit;}
|
|||
|
const ZCLinkUnit* GetCutHeadUnitPtr() const{return mp_CutHeadUnit;}
|
|||
|
const TypeData& GetHeadData () const{return mp_NowHeadUnit->mo_TypeArr[0];}
|
|||
|
|
|||
|
ZCLinkUnit* GetNowUnitPtr(TypeSize AI_Distance){
|
|||
|
if(mp_NowHeadUnit==0) return 0; return mp_NowHeadUnit->GetObjtPtr(AI_Distance); }
|
|||
|
ZCLinkUnit* GetCutUnitPtr(TypeSize AI_Distance){
|
|||
|
if(mp_CutHeadUnit==0) return 0; return mp_CutHeadUnit->GetObjtPtr(AI_Distance); }
|
|||
|
|
|||
|
const ZCLinkUnit* GetNowUnitPtr(TypeSize AI_Distance) const{
|
|||
|
if(mp_NowHeadUnit==0) return 0; return mp_NowHeadUnit->GetObjtPtr(AI_Distance); }
|
|||
|
const ZCLinkUnit* GetCutUnitPtr(TypeSize AI_Distance) const{
|
|||
|
if(mp_CutHeadUnit==0) return 0; return mp_CutHeadUnit->GetObjtPtr(AI_Distance); }
|
|||
|
|
|||
|
|
|||
|
void AddTail(TypeArg AR_Object)
|
|||
|
{
|
|||
|
if(ml_NowUnitCnt>0 && mp_NowHeadUnit->mp_PrevUnit->size()<this->EArrSize)
|
|||
|
{
|
|||
|
mp_NowHeadUnit->mp_PrevUnit->AddObj(AR_Object); ++ml_NowObjtCnt; return;
|
|||
|
}/*
|
|||
|
if(ml_NowUnitCnt>0 && mp_NowHeadUnit->mp_PrevUnit->size()<this->EArrSize)*/
|
|||
|
|
|||
|
AllocUnitAtTail()->AddObj(AR_Object); ++ml_NowObjtCnt;
|
|||
|
}/*
|
|||
|
void AddTail(TypeArg AR_Object)*/
|
|||
|
|
|||
|
void AddTail(const ZCLinkUnit& AR_CLinkUnit)
|
|||
|
{
|
|||
|
if(AR_CLinkUnit.size()>0)
|
|||
|
{
|
|||
|
*AllocUnitAtTail()=AR_CLinkUnit; ml_NowObjtCnt+=AR_CLinkUnit.size();
|
|||
|
}/*
|
|||
|
if(AR_CLinkUnit.size()>0)*/
|
|||
|
}/*
|
|||
|
void AddTail(const ZCLinkUnit& AR_CLinkUnit)*/
|
|||
|
|
|||
|
void AddTail(const CObjUnitList& AR_CObjUnitList)
|
|||
|
{
|
|||
|
TypeSize VL_RhsNowUnitCnt = AR_CObjUnitList.GetNowUnitCnt ();
|
|||
|
const ZCLinkUnit* VP_RhsNowHeadUnit = AR_CObjUnitList.GetNowHeadUnitPtr();
|
|||
|
|
|||
|
while(--VL_RhsNowUnitCnt>=0)
|
|||
|
{
|
|||
|
AddTail(*VP_RhsNowHeadUnit); VP_RhsNowHeadUnit=VP_RhsNowHeadUnit->GetNextUnitPtr();
|
|||
|
}/*
|
|||
|
while(--VL_RhsNowUnitCnt>=0)*/
|
|||
|
}/*
|
|||
|
void AddTail(const CObjUnitList& AR_CObjUnitList)*/
|
|||
|
|
|||
|
TypeData& AddTail()
|
|||
|
{
|
|||
|
if(ml_NowUnitCnt>0 && mp_NowHeadUnit->mp_PrevUnit->size()<this->EArrSize)
|
|||
|
{
|
|||
|
++ml_NowObjtCnt; return mp_NowHeadUnit->mp_PrevUnit->AddEmptyObj_E();
|
|||
|
}/*
|
|||
|
if(ml_NowUnitCnt>0 && mp_NowHeadUnit->mp_PrevUnit->size()<this->EArrSize)*/
|
|||
|
|
|||
|
++ml_NowObjtCnt; return AllocUnitAtTail()->AddEmptyObj_E();
|
|||
|
}/*
|
|||
|
TypeData& AddTail()*/
|
|||
|
|
|||
|
|
|||
|
void AddTail(TypeData* AP_ObjArr, TypeSize AI_ArrSize)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZCLinkUnit <20><> ä<><C3A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾƵ<CABE>, <20>dz<EFBFBD>
|
|||
|
// <20>ٰ<EFBFBD> <20><> ZCLinkUnit <20><><EFBFBD><EFBFBD> ä<><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
if(AI_ArrSize<1) return;
|
|||
|
|
|||
|
TypeSize VI_AddUnitCnt =AI_ArrSize/EArrSize;
|
|||
|
TypeSize VI_AddExtraCnt=AI_ArrSize%EArrSize;
|
|||
|
|
|||
|
while(--VI_AddUnitCnt>=0)
|
|||
|
{
|
|||
|
AllocUnitAtTail()->AddObjArr(AP_ObjArr, EArrSize); AP_ObjArr += EArrSize;
|
|||
|
}/*
|
|||
|
while(--VI_AddUnitCnt>=0)*/
|
|||
|
|
|||
|
if(VI_AddExtraCnt<1) return;
|
|||
|
|
|||
|
AllocUnitAtTail()->
|
|||
|
AddObjArr(AP_ObjArr, VI_AddExtraCnt);
|
|||
|
ml_NowObjtCnt += AI_ArrSize ;
|
|||
|
}/*
|
|||
|
void AddTail(TypeData* AP_ObjArr, TypeSize AI_ArrSize)*/
|
|||
|
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> ZCLinkUnit <20><> AR_Object <20><> <20>߰<EFBFBD>.
|
|||
|
|
|||
|
void AddTailInNewUnit(TypeArg AR_Object)
|
|||
|
{
|
|||
|
AllocUnitAtTail()->AddObj(AR_Object); ++ml_NowObjtCnt;
|
|||
|
}/*
|
|||
|
void AddTailInNewUnit(TypeArg AR_Object)*/
|
|||
|
|
|||
|
|
|||
|
template<typename TAllocWork> void AddTailInPool(
|
|||
|
TAllocWork& AR_CAllocWork, TypeData* AP_ObjArr, TypeSize AI_ArrSize)
|
|||
|
{
|
|||
|
// EMaxUnitCnt <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
// CAllocWork_BASE2_T<> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>, *this <20><> '<27>ӽ<EFBFBD> <20>۾<EFBFBD> ť'<27><>.
|
|||
|
|
|||
|
typedef typename TAllocWork::CSyncExec CSyncExec;
|
|||
|
|
|||
|
if(AI_ArrSize<1) return;
|
|||
|
|
|||
|
TypeSize VI_AddUnitCnt =AI_ArrSize/EArrSize;
|
|||
|
TypeSize VI_AddExtraCnt=AI_ArrSize%EArrSize;
|
|||
|
TypeSize VI_MaxUnitCnt =EMaxUnitCnt ;
|
|||
|
|
|||
|
while(--VI_AddUnitCnt>=0)
|
|||
|
{
|
|||
|
AllocUnitAtTail()->
|
|||
|
AddObjArr(AP_ObjArr, EArrSize); AP_ObjArr += EArrSize;
|
|||
|
ml_NowObjtCnt += EArrSize ;
|
|||
|
|
|||
|
if(--VI_MaxUnitCnt<=0)
|
|||
|
{
|
|||
|
// CAllocWork_BASE2_T<> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>, *this <20><> '<27>ӽ<EFBFBD> <20>۾<EFBFBD> ť'<27><>.
|
|||
|
|
|||
|
AR_CAllocWork.AddList(RR(*this)); VI_MaxUnitCnt=EMaxUnitCnt;
|
|||
|
}/*
|
|||
|
if(--VI_MaxUnitCnt<=0)*/
|
|||
|
}/*
|
|||
|
while(--VI_AddUnitCnt>=0)*/
|
|||
|
|
|||
|
if(VI_MaxUnitCnt>0)
|
|||
|
{
|
|||
|
if(VI_AddExtraCnt>0)
|
|||
|
{
|
|||
|
AllocUnitAtTail()->
|
|||
|
AddObjArr(AP_ObjArr, VI_AddExtraCnt);
|
|||
|
ml_NowObjtCnt += VI_AddExtraCnt ;
|
|||
|
|
|||
|
AR_CAllocWork.AddList(RR(*this)); return;
|
|||
|
}/*
|
|||
|
if(VI_AddExtraCnt>0)*/
|
|||
|
}/*
|
|||
|
if(VI_MaxUnitCnt>0)*/
|
|||
|
|
|||
|
|
|||
|
if(VI_AddExtraCnt<1)
|
|||
|
{
|
|||
|
AR_CAllocWork.AddList(RR(*this)); return;
|
|||
|
}/*
|
|||
|
if(VI_AddExtraCnt<1)*/
|
|||
|
|
|||
|
AllocUnitAtTail()->
|
|||
|
AddObjArr(AP_ObjArr, VI_AddExtraCnt);
|
|||
|
ml_NowObjtCnt += VI_AddExtraCnt ;
|
|||
|
|
|||
|
AR_CAllocWork.AddList(RR(*this));
|
|||
|
}/*
|
|||
|
template<typename TAllocWork> void AddTailInPool(
|
|||
|
TAllocWork& AR_CAllocWork, TypeData* AP_ObjArr, TypeSize AI_ArrSize) */
|
|||
|
|
|||
|
|
|||
|
template<typename TAllocWork, typename TypeData2> void AddTailInPool2(
|
|||
|
TAllocWork& AR_CAllocWork, TypeData2* AP_ObjArr, TypeSize AI_ArrSize)
|
|||
|
{
|
|||
|
// TypeData = TypeData2 <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20>Ѵ<EFBFBD>.
|
|||
|
|
|||
|
typedef typename TAllocWork::CSyncExec CSyncExec;
|
|||
|
|
|||
|
if(AI_ArrSize<1) return;
|
|||
|
|
|||
|
TypeSize VI_AddUnitCnt =AI_ArrSize/EArrSize;
|
|||
|
TypeSize VI_AddExtraCnt=AI_ArrSize%EArrSize;
|
|||
|
TypeSize VI_MaxUnitCnt =EMaxUnitCnt ;
|
|||
|
|
|||
|
while(--VI_AddUnitCnt>=0)
|
|||
|
{
|
|||
|
__for0(TypeSize, i, EArrSize)
|
|||
|
push_back() = *(AP_ObjArr++);
|
|||
|
|
|||
|
if(--VI_MaxUnitCnt<=0)
|
|||
|
{
|
|||
|
AR_CAllocWork.AddList(RR(*this)); VI_MaxUnitCnt=EMaxUnitCnt;
|
|||
|
}/*
|
|||
|
if(--VI_MaxUnitCnt<=0)*/
|
|||
|
}/*
|
|||
|
while(--VI_AddUnitCnt>=0)*/
|
|||
|
|
|||
|
if(VI_MaxUnitCnt>0)
|
|||
|
{
|
|||
|
if(VI_AddExtraCnt>0)
|
|||
|
{
|
|||
|
__for0(TypeSize, i, VI_AddExtraCnt)
|
|||
|
push_back() = *(AP_ObjArr++);
|
|||
|
|
|||
|
AR_CAllocWork.AddList(RR(*this)); return;
|
|||
|
}/*
|
|||
|
if(VI_AddExtraCnt>0)*/
|
|||
|
}/*
|
|||
|
if(VI_MaxUnitCnt>0)*/
|
|||
|
|
|||
|
|
|||
|
if(VI_AddExtraCnt<1)
|
|||
|
{
|
|||
|
AR_CAllocWork.AddList(RR(*this)); return;
|
|||
|
}/*
|
|||
|
if(VI_AddExtraCnt<1)*/
|
|||
|
|
|||
|
__for0(TypeSize, i, VI_AddExtraCnt)
|
|||
|
push_back() = *(AP_ObjArr++);
|
|||
|
|
|||
|
AR_CAllocWork.AddList(RR(*this));
|
|||
|
}/*
|
|||
|
template<typename TAllocWork, typename TypeData2> void AddTailInPool2(
|
|||
|
TAllocWork& AR_CAllocWork, TypeData2* AP_ObjArr, TypeSize AI_ArrSize) */
|
|||
|
|
|||
|
|
|||
|
void AddUnitInCutList(TypeSize AI_AddUnitCnt)
|
|||
|
{
|
|||
|
// <20>ʱ <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> <20≯<EFBFBD> ZCLinkUnit <20><> <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
if(AI_AddUnitCnt<1) return;
|
|||
|
|
|||
|
ZCLinkUnit* VP_UnitHead =CreateUnit() ;
|
|||
|
ZCLinkUnit* VP_UnitTail =VP_UnitHead ;
|
|||
|
TypeSize VI_AddUnitCnt=AI_AddUnitCnt;
|
|||
|
|
|||
|
while(--VI_AddUnitCnt>0) // AI_AddUnitCnt-1 <20><> <20><>ȯ.
|
|||
|
{
|
|||
|
ZCLinkUnit* VP_UnitTail2=CreateUnit();
|
|||
|
ZCLinkUnit::JoinLink(VP_UnitTail, VP_UnitTail2);
|
|||
|
|
|||
|
VP_UnitTail=VP_UnitTail2;
|
|||
|
}/*
|
|||
|
while(--VI_AddUnitCnt>0)*/
|
|||
|
|
|||
|
if(ml_CutUnitCnt<1)
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(VP_UnitHead, VP_UnitTail);
|
|||
|
|
|||
|
mp_CutHeadUnit = VP_UnitHead; ///////////////////
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::JoinLink (mp_CutHeadUnit->mp_PrevUnit, VP_UnitHead);
|
|||
|
ZCLinkUnit::MakeCircle(mp_CutHeadUnit , VP_UnitTail);
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
ml_CutUnitCnt += AI_AddUnitCnt;
|
|||
|
}/*
|
|||
|
void AddUnitInCutList(TypeSize AI_AddUnitCnt)*/
|
|||
|
|
|||
|
|
|||
|
operator TypeData& (){return AddTail();}
|
|||
|
|
|||
|
void push_back(TypeArg AR_Object){return AddTail(AR_Object);}
|
|||
|
TypeData& push_back() {return AddTail() ;}
|
|||
|
|
|||
|
|
|||
|
void DeleteAll()
|
|||
|
{
|
|||
|
// '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ű<EFBFBD><C5B1><EFBFBD>.
|
|||
|
|
|||
|
if(ml_NowUnitCnt<1) return;
|
|||
|
|
|||
|
if(ml_CutUnitCnt>0)
|
|||
|
{
|
|||
|
ZCLinkUnit* VP_TailLink=mp_NowHeadUnit->mp_PrevUnit;
|
|||
|
|
|||
|
ZCLinkUnit::JoinLink (mp_CutHeadUnit->mp_PrevUnit, mp_NowHeadUnit);
|
|||
|
ZCLinkUnit::MakeCircle(mp_CutHeadUnit , VP_TailLink );
|
|||
|
}
|
|||
|
else
|
|||
|
mp_CutHeadUnit=mp_NowHeadUnit;
|
|||
|
//else
|
|||
|
|
|||
|
mp_NowHeadUnit=0 ;
|
|||
|
|
|||
|
ml_CutUnitCnt+=ml_NowUnitCnt ;
|
|||
|
ml_NowUnitCnt =0 ;
|
|||
|
ml_NowObjtCnt =0 ;
|
|||
|
}/*
|
|||
|
void DeleteAll()*/
|
|||
|
|
|||
|
void DeleteHead()
|
|||
|
{
|
|||
|
if(ml_NowUnitCnt<1) return;
|
|||
|
|
|||
|
if(--ml_NowUnitCnt<1)
|
|||
|
{
|
|||
|
ZCLinkUnit::JoinLink (mp_CutHeadUnit->mp_PrevUnit, mp_NowHeadUnit);
|
|||
|
ZCLinkUnit::MakeCircle(mp_CutHeadUnit , mp_NowHeadUnit);
|
|||
|
|
|||
|
mp_NowHeadUnit=0;
|
|||
|
ml_NowObjtCnt =0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit* VP_HeadLink=mp_NowHeadUnit;
|
|||
|
ZCLinkUnit* VP_TailLink=mp_NowHeadUnit->mp_PrevUnit;
|
|||
|
|
|||
|
mp_NowHeadUnit = mp_NowHeadUnit->mp_NextUnit;
|
|||
|
ml_NowObjtCnt -= VP_HeadLink->size();
|
|||
|
|
|||
|
ZCLinkUnit::MakeCircle(mp_NowHeadUnit , VP_TailLink);
|
|||
|
ZCLinkUnit::JoinLink (mp_CutHeadUnit->mp_PrevUnit, VP_HeadLink);
|
|||
|
ZCLinkUnit::MakeCircle(mp_CutHeadUnit , VP_HeadLink);
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
++ml_CutUnitCnt;
|
|||
|
}/*
|
|||
|
void DeleteHead()*/
|
|||
|
|
|||
|
void DeleteAllCutList()
|
|||
|
{
|
|||
|
// '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|||
|
ZCLinkUnit* VP_CutHead=mp_CutHeadUnit;
|
|||
|
|
|||
|
for(; ml_CutUnitCnt>0; --ml_CutUnitCnt)
|
|||
|
{
|
|||
|
mp_CutHeadUnit=mp_CutHeadUnit->mp_NextUnit;
|
|||
|
|
|||
|
DeleteUnit(VP_CutHead); VP_CutHead=mp_CutHeadUnit;
|
|||
|
}/*
|
|||
|
for(; ml_CutUnitCnt>0; --ml_CutUnitCnt)*/
|
|||
|
|
|||
|
mp_CutHeadUnit=0;
|
|||
|
}/*
|
|||
|
void DeleteAllCutList()*/
|
|||
|
|
|||
|
void Clear (){DeleteAll();}
|
|||
|
void clear (){DeleteAll();}
|
|||
|
|
|||
|
void ClearEx(){DeleteAll(); DeleteAllCutList();}
|
|||
|
|
|||
|
void JoinTail (CObjUnitList& rhs){JoinAtTail(rhs);} // for compatiblity with ZNsMain::ZtCObjList<>
|
|||
|
void JoinHead (CObjUnitList& rhs){JoinAtHead(rhs);} // for compatiblity with ZNsMain::ZtCObjList<>
|
|||
|
|
|||
|
void JoinHeadEx(CObjUnitList& rhs){JoinAtHead(rhs); JoinCutListAtTail(rhs);}
|
|||
|
void JoinTailEx(CObjUnitList& rhs){JoinAtTail(rhs); JoinCutListAtTail(rhs);}
|
|||
|
|
|||
|
void JoinAtTail(CObjUnitList& rhs)
|
|||
|
{
|
|||
|
if(this==&rhs) return;
|
|||
|
|
|||
|
if(rhs.ml_NowUnitCnt<1) return;
|
|||
|
|
|||
|
if(ml_NowUnitCnt<1)
|
|||
|
{
|
|||
|
mp_NowHeadUnit=rhs.mp_NowHeadUnit;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit* VP_RhsTailUnit=rhs.mp_NowHeadUnit->mp_PrevUnit;
|
|||
|
|
|||
|
ZCLinkUnit::JoinLink (mp_NowHeadUnit->mp_PrevUnit, rhs.mp_NowHeadUnit);
|
|||
|
ZCLinkUnit::MakeCircle(mp_NowHeadUnit, VP_RhsTailUnit );
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
ml_NowUnitCnt+=rhs.ml_NowUnitCnt; rhs.ml_NowUnitCnt=0;
|
|||
|
ml_NowObjtCnt+=rhs.ml_NowObjtCnt; rhs.ml_NowObjtCnt=0; rhs.mp_NowHeadUnit=0;
|
|||
|
}/*
|
|||
|
void JoinAtTail(CObjUnitList& rhs)*/
|
|||
|
|
|||
|
void JoinAtHead(CObjUnitList& rhs)
|
|||
|
{
|
|||
|
if(this==&rhs) return;
|
|||
|
|
|||
|
if(rhs.ml_NowUnitCnt<1) return;
|
|||
|
|
|||
|
if(ml_NowUnitCnt>=1)
|
|||
|
{
|
|||
|
ZCLinkUnit* VP_RhsTailUnit=rhs.mp_NowHeadUnit->mp_PrevUnit;
|
|||
|
ZCLinkUnit* VP_LhsTailUnit= mp_NowHeadUnit->mp_PrevUnit;
|
|||
|
|
|||
|
ZCLinkUnit::JoinLink (VP_RhsTailUnit , mp_NowHeadUnit);
|
|||
|
ZCLinkUnit::MakeCircle(rhs.mp_NowHeadUnit, VP_LhsTailUnit);
|
|||
|
}/*
|
|||
|
if(ml_NowUnitCnt>=1)*/
|
|||
|
|
|||
|
ml_NowUnitCnt += rhs.ml_NowUnitCnt ; rhs.ml_NowUnitCnt =0;
|
|||
|
ml_NowObjtCnt += rhs.ml_NowObjtCnt ; rhs.ml_NowObjtCnt =0;
|
|||
|
mp_NowHeadUnit = rhs.mp_NowHeadUnit; rhs.mp_NowHeadUnit=0;
|
|||
|
}/*
|
|||
|
void JoinAtHead(CObjUnitList& rhs)*/
|
|||
|
|
|||
|
void JoinRhsTailAtTail(CObjUnitList& rhs, TypeSize AI_FetchSize)
|
|||
|
{
|
|||
|
// rhs <20><> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AI_FetchSize <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ڽ<EFBFBD><DABD><EFBFBD> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
|||
|
|
|||
|
if(AI_FetchSize<1) return ;
|
|||
|
|
|||
|
if(rhs.ml_NowUnitCnt<=AI_FetchSize)
|
|||
|
{
|
|||
|
JoinAtTail(RR(rhs)); return;
|
|||
|
}/*
|
|||
|
if(rhs.ml_CutUnitCnt<=AI_FetchSize)*/
|
|||
|
|
|||
|
|
|||
|
// rhs.ml_NowUnitCnt>AI_FetchSize <20>̰<EFBFBD> rhs.ml_NowUnitCnt>0
|
|||
|
|
|||
|
TypeSize VI_RhsObjCnt =0 ;
|
|||
|
ZCLinkUnit* VP_RhsNowTail=rhs.mp_NowHeadUnit->mp_PrevUnit ;
|
|||
|
ZCLinkUnit* VP_RhsNowHead=VP_RhsNowTail->
|
|||
|
GetObjtPtr( -(AI_FetchSize-1), RR(VI_RhsObjCnt) ) ;
|
|||
|
|
|||
|
ZCLinkUnit::MakeCircle(
|
|||
|
rhs.mp_NowHeadUnit, VP_RhsNowHead->mp_PrevUnit);
|
|||
|
rhs.ml_NowUnitCnt -= AI_FetchSize;
|
|||
|
rhs.ml_NowObjtCnt -= VI_RhsObjCnt;
|
|||
|
|
|||
|
if(ml_NowUnitCnt<1)
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(VP_RhsNowHead, VP_RhsNowTail); mp_NowHeadUnit=VP_RhsNowHead;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::JoinLink (mp_NowHeadUnit->mp_PrevUnit, VP_RhsNowHead);
|
|||
|
ZCLinkUnit::MakeCircle(mp_NowHeadUnit , VP_RhsNowTail);
|
|||
|
}
|
|||
|
ml_NowUnitCnt += AI_FetchSize;
|
|||
|
ml_NowObjtCnt += VI_RhsObjCnt;
|
|||
|
}/*
|
|||
|
void JoinRhsTailAtTail(CObjUnitList& rhs, TypeSize AI_FetchSize)*/
|
|||
|
|
|||
|
void JoinRhsHeadAtTail(CObjUnitList& rhs, TypeSize AI_FetchSize)
|
|||
|
{
|
|||
|
// rhs <20><> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> ó<><C3B3> AI_FetchSize <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ڽ<EFBFBD><DABD><EFBFBD> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
|||
|
|
|||
|
if(AI_FetchSize<1) return ;
|
|||
|
|
|||
|
if(rhs.ml_NowUnitCnt<=AI_FetchSize)
|
|||
|
{
|
|||
|
JoinAtTail(RR(rhs)); return;
|
|||
|
}/*
|
|||
|
if(rhs.ml_CutUnitCnt<=AI_FetchSize)*/
|
|||
|
|
|||
|
|
|||
|
// rhs.ml_NowUnitCnt>AI_FetchSize <20>̰<EFBFBD> rhs.ml_NowUnitCnt>0
|
|||
|
|
|||
|
TypeSize VI_RhsObjCnt =0 ;
|
|||
|
ZCLinkUnit* VP_RhsNowHead=rhs.mp_NowHeadUnit ;
|
|||
|
ZCLinkUnit* VP_RhsNowTail=VP_RhsNowHead->
|
|||
|
GetObjtPtr( AI_FetchSize-1, RR(VI_RhsObjCnt) );
|
|||
|
|
|||
|
rhs.mp_NowHeadUnit=VP_RhsNowTail->mp_NextUnit;
|
|||
|
|
|||
|
ZCLinkUnit::MakeCircle(
|
|||
|
rhs.mp_NowHeadUnit, VP_RhsNowHead->mp_PrevUnit);
|
|||
|
rhs.ml_NowUnitCnt -= AI_FetchSize;
|
|||
|
rhs.ml_NowObjtCnt -= VI_RhsObjCnt;
|
|||
|
|
|||
|
if(ml_NowUnitCnt<1)
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(VP_RhsNowHead, VP_RhsNowTail);
|
|||
|
|
|||
|
mp_NowHeadUnit=VP_RhsNowHead; ///////////////////////
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::JoinLink (mp_NowHeadUnit->mp_PrevUnit, VP_RhsNowHead);
|
|||
|
ZCLinkUnit::MakeCircle(mp_NowHeadUnit , VP_RhsNowTail);
|
|||
|
}
|
|||
|
ml_NowUnitCnt += AI_FetchSize;
|
|||
|
ml_NowObjtCnt += VI_RhsObjCnt;
|
|||
|
}/*
|
|||
|
void JoinRhsHeadAtTail(CObjUnitList& rhs, TypeSize AI_FetchSize)*/
|
|||
|
|
|||
|
void JoinRhsTailOneAtTail(CObjUnitList& rhs)
|
|||
|
{
|
|||
|
// rhs <20><> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ڽ<EFBFBD><DABD><EFBFBD> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
|||
|
|
|||
|
if(rhs.ml_NowUnitCnt<1) return;
|
|||
|
|
|||
|
ZCLinkUnit* VP_RhsNowTail=rhs.mp_NowHeadUnit->mp_PrevUnit;
|
|||
|
|
|||
|
if(--rhs.ml_NowUnitCnt<1)
|
|||
|
{
|
|||
|
rhs.mp_NowHeadUnit=0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(
|
|||
|
rhs.mp_NowHeadUnit, VP_RhsNowTail->mp_PrevUnit);
|
|||
|
}
|
|||
|
rhs.ml_NowObjtCnt -= VP_RhsNowTail->ml_UseSize ;
|
|||
|
|
|||
|
if(++ml_NowUnitCnt<=1)
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(VP_RhsNowTail, VP_RhsNowTail);
|
|||
|
|
|||
|
mp_NowHeadUnit=VP_RhsNowTail; ///////////////////////
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::JoinLink (mp_NowHeadUnit->mp_PrevUnit, VP_RhsNowTail);
|
|||
|
ZCLinkUnit::MakeCircle(mp_NowHeadUnit , VP_RhsNowTail);
|
|||
|
}
|
|||
|
ml_NowObjtCnt += VP_RhsNowTail->ml_UseSize ;
|
|||
|
}/*
|
|||
|
void JoinRhsTailOneAtTail(CObjUnitList& rhs)*/
|
|||
|
|
|||
|
void JoinRhsHeadOneAtTail(CObjUnitList& rhs)
|
|||
|
{
|
|||
|
// rhs <20><> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> ó<><C3B3> 1 <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ڽ<EFBFBD><DABD><EFBFBD> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
|||
|
|
|||
|
if(rhs.ml_NowUnitCnt<1) return;
|
|||
|
|
|||
|
ZCLinkUnit* VP_RhsNowHead=rhs.mp_NowHeadUnit;
|
|||
|
rhs.mp_NowHeadUnit =rhs.mp_NowHeadUnit->mp_NextUnit;
|
|||
|
|
|||
|
if(--rhs.ml_NowUnitCnt<1)
|
|||
|
{
|
|||
|
rhs.mp_NowHeadUnit=0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(
|
|||
|
rhs.mp_NowHeadUnit, VP_RhsNowHead->mp_PrevUnit);
|
|||
|
}
|
|||
|
rhs.ml_NowObjtCnt -= VP_RhsNowHead->ml_UseSize ;
|
|||
|
|
|||
|
if(++ml_NowUnitCnt<=1)
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(VP_RhsNowHead, VP_RhsNowHead);
|
|||
|
|
|||
|
mp_NowHeadUnit=VP_RhsNowHead; ///////////////////////
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::JoinLink (mp_NowHeadUnit->mp_PrevUnit, VP_RhsNowHead);
|
|||
|
ZCLinkUnit::MakeCircle(mp_NowHeadUnit , VP_RhsNowHead);
|
|||
|
}
|
|||
|
ml_NowObjtCnt += VP_RhsNowHead->ml_UseSize ;
|
|||
|
}/*
|
|||
|
void JoinRhsHeadOneAtTail(CObjUnitList& rhs)*/
|
|||
|
|
|||
|
|
|||
|
void JoinCutListAtTail(CObjUnitList& rhs)
|
|||
|
{
|
|||
|
if(rhs.ml_CutUnitCnt<1) return;
|
|||
|
|
|||
|
if(ml_CutUnitCnt<1)
|
|||
|
{
|
|||
|
mp_CutHeadUnit=rhs.mp_CutHeadUnit;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit* VP_RhsTailUnit=rhs.mp_CutHeadUnit->mp_PrevUnit;
|
|||
|
|
|||
|
ZCLinkUnit::JoinLink (mp_CutHeadUnit->mp_PrevUnit, rhs.mp_CutHeadUnit);
|
|||
|
ZCLinkUnit::MakeCircle(mp_CutHeadUnit , VP_RhsTailUnit );
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
ml_CutUnitCnt+=rhs.ml_CutUnitCnt; rhs.ml_CutUnitCnt=0; rhs.mp_CutHeadUnit=0;
|
|||
|
}/*
|
|||
|
void JoinCutListAtTail(CObjUnitList& rhs)*/
|
|||
|
|
|||
|
void JoinRhsCutListTailAtTail(CObjUnitList& rhs, TypeSize AI_FetchSize)
|
|||
|
{
|
|||
|
// rhs <20><> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AI_FetchSize <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ڽ<EFBFBD><DABD><EFBFBD> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
|||
|
|
|||
|
if(AI_FetchSize<1) return ;
|
|||
|
|
|||
|
if(rhs.ml_CutUnitCnt<=AI_FetchSize)
|
|||
|
{
|
|||
|
JoinCutListAtTail(RR(rhs)); return;
|
|||
|
}/*
|
|||
|
if(rhs.ml_CutUnitCnt<=AI_FetchSize)*/
|
|||
|
|
|||
|
|
|||
|
// rhs.ml_CutUnitCnt>AI_FetchSize <20>̰<EFBFBD> rhs.ml_CutUnitCnt>0
|
|||
|
|
|||
|
ZCLinkUnit* VP_RhsCutTail=rhs.mp_CutHeadUnit->mp_PrevUnit;
|
|||
|
ZCLinkUnit* VP_RhsCutHead=VP_RhsCutTail->GetObjtPtr(-(AI_FetchSize-1));
|
|||
|
|
|||
|
ZCLinkUnit::MakeCircle(
|
|||
|
rhs.mp_CutHeadUnit, VP_RhsCutHead->mp_PrevUnit);
|
|||
|
rhs.ml_CutUnitCnt -= AI_FetchSize;
|
|||
|
|
|||
|
if(ml_CutUnitCnt<1)
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(VP_RhsCutHead, VP_RhsCutTail);
|
|||
|
|
|||
|
mp_CutHeadUnit=VP_RhsCutHead; ///////////////////////
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::JoinLink (mp_CutHeadUnit->mp_PrevUnit, VP_RhsCutHead);
|
|||
|
ZCLinkUnit::MakeCircle(mp_CutHeadUnit , VP_RhsCutTail);
|
|||
|
}
|
|||
|
ml_CutUnitCnt += AI_FetchSize;
|
|||
|
}/*
|
|||
|
void JoinRhsCutListTailAtTail(CObjUnitList& rhs, TypeSize AI_FetchSize)*/
|
|||
|
|
|||
|
void JoinRhsCutListHeadAtTail(CObjUnitList& rhs, TypeSize AI_FetchSize)
|
|||
|
{
|
|||
|
// rhs <20><> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> ó<><C3B3> AI_FetchSize <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ڽ<EFBFBD><DABD><EFBFBD> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
|||
|
|
|||
|
if(AI_FetchSize<1) return ;
|
|||
|
|
|||
|
if(rhs.ml_CutUnitCnt<=AI_FetchSize)
|
|||
|
{
|
|||
|
JoinCutListAtTail(RR(rhs)); return;
|
|||
|
}/*
|
|||
|
if(rhs.ml_CutUnitCnt<=AI_FetchSize)*/
|
|||
|
|
|||
|
|
|||
|
// rhs.ml_CutUnitCnt>AI_FetchSize <20>̰<EFBFBD> rhs.ml_CutUnitCnt>0
|
|||
|
|
|||
|
ZCLinkUnit* VP_RhsCutHead=rhs.mp_CutHeadUnit;
|
|||
|
ZCLinkUnit* VP_RhsCutTail=VP_RhsCutHead->GetObjtPtr(AI_FetchSize-1);
|
|||
|
|
|||
|
rhs.mp_CutHeadUnit=VP_RhsCutTail->mp_NextUnit;
|
|||
|
|
|||
|
ZCLinkUnit::MakeCircle(
|
|||
|
rhs.mp_CutHeadUnit, VP_RhsCutHead->mp_PrevUnit);
|
|||
|
rhs.ml_CutUnitCnt -= AI_FetchSize;
|
|||
|
|
|||
|
if(ml_CutUnitCnt<1)
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(VP_RhsCutHead, VP_RhsCutTail);
|
|||
|
|
|||
|
mp_CutHeadUnit=VP_RhsCutHead; ///////////////////////
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::JoinLink (mp_CutHeadUnit->mp_PrevUnit, VP_RhsCutHead);
|
|||
|
ZCLinkUnit::MakeCircle(mp_CutHeadUnit , VP_RhsCutTail);
|
|||
|
}
|
|||
|
ml_CutUnitCnt += AI_FetchSize;
|
|||
|
}/*
|
|||
|
void JoinRhsCutListHeadAtTail(CObjUnitList& rhs, TypeSize AI_FetchSize)*/
|
|||
|
|
|||
|
void JoinRhsCutTailOneAtTail(CObjUnitList& rhs)
|
|||
|
{
|
|||
|
// rhs <20><> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ڽ<EFBFBD><DABD><EFBFBD> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
|||
|
|
|||
|
if(rhs.ml_CutUnitCnt<1) return;
|
|||
|
|
|||
|
ZCLinkUnit* VP_RhsNowTail=rhs.mp_CutHeadUnit->mp_PrevUnit;
|
|||
|
|
|||
|
if(--rhs.ml_CutUnitCnt<1)
|
|||
|
rhs.mp_CutHeadUnit=0;
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(
|
|||
|
rhs.mp_CutHeadUnit, VP_RhsNowTail->mp_PrevUnit);
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
if(++ml_CutUnitCnt<=1)
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(VP_RhsNowTail, VP_RhsNowTail);
|
|||
|
|
|||
|
mp_CutHeadUnit=VP_RhsNowTail; ///////////////////////
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::JoinLink (mp_CutHeadUnit->mp_PrevUnit, VP_RhsNowTail);
|
|||
|
ZCLinkUnit::MakeCircle(mp_CutHeadUnit , VP_RhsNowTail);
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
}/*
|
|||
|
void JoinRhsCutTailOneAtTail(CObjUnitList& rhs)*/
|
|||
|
|
|||
|
void JoinRhsCutHeadOneAtTail(CObjUnitList& rhs)
|
|||
|
{
|
|||
|
// rhs <20><> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> ó<><C3B3> 1 <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ڽ<EFBFBD><DABD><EFBFBD> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ'<27><> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
|||
|
|
|||
|
if(rhs.ml_CutUnitCnt<1) return;
|
|||
|
|
|||
|
ZCLinkUnit* VP_RhsNowHead=rhs.mp_CutHeadUnit;
|
|||
|
|
|||
|
rhs.mp_CutHeadUnit=rhs.mp_CutHeadUnit->mp_NextUnit;
|
|||
|
|
|||
|
if(--rhs.ml_CutUnitCnt<1)
|
|||
|
rhs.mp_CutHeadUnit=0;
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(
|
|||
|
rhs.mp_CutHeadUnit, VP_RhsNowHead->mp_PrevUnit);
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
|
|||
|
if(++ml_CutUnitCnt<=1)
|
|||
|
{
|
|||
|
ZCLinkUnit::MakeCircle(VP_RhsNowHead, VP_RhsNowHead); mp_CutHeadUnit=VP_RhsNowHead;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ZCLinkUnit::JoinLink (mp_CutHeadUnit->mp_PrevUnit, VP_RhsNowHead);
|
|||
|
ZCLinkUnit::MakeCircle(mp_CutHeadUnit , VP_RhsNowHead);
|
|||
|
}/*
|
|||
|
else*/
|
|||
|
}/*
|
|||
|
void JoinRhsCutHeadOneAtTail(CObjUnitList& rhs)*/
|
|||
|
|
|||
|
|
|||
|
TypeData& GetDataInIter(TypeData* AP_Object ){return *AP_Object ;}
|
|||
|
TypeArr & GetDataInIter(ZCLinkUnit* AP_CLinkUnit){return AP_CLinkUnit->mo_TypeArr;}
|
|||
|
|
|||
|
void MoveNextIter(TypeData*& APR_Object){++APR_Object;}
|
|||
|
void MovePrevIter(TypeData*& APR_Object){--APR_Object;}
|
|||
|
|
|||
|
void MoveNextIter(ZCLinkUnit*& APR_CLinkUnit){APR_CLinkUnit=APR_CLinkUnit->mp_NextUnit;}
|
|||
|
void MovePrevIter(ZCLinkUnit*& APR_CLinkUnit){APR_CLinkUnit=APR_CLinkUnit->mp_PrevUnit;}
|
|||
|
|
|||
|
TypeData& ItD(TypeData* AP_Object ){return *AP_Object;}
|
|||
|
TypeArr & ItD(ZCLinkUnit* AP_CLinkUnit)
|
|||
|
{
|
|||
|
return AP_CLinkUnit->mo_TypeArr;
|
|||
|
}/*
|
|||
|
TypeArr & ItD(ZCLinkUnit* AP_CLinkUnit)*/
|
|||
|
|
|||
|
public :
|
|||
|
};/*
|
|||
|
template< typename TType,
|
|||
|
typename TTypeObjUnitList=ZNsType::ZtCTypeObjUnitList<TType>
|
|||
|
>
|
|||
|
class CObjUnitList //////////////////////////////////////////////////*/
|
|||
|
|
|||
|
}/*
|
|||
|
namespace ZNsMain*/
|
|||
|
|
|||
|
|
|||
|
#endif //__NSCPP_COBJLIST_H__
|