commit 2025-10-03 11:51 add ChangeCapacity() in ZtCBaseList : ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-03 11:51:55 +09:00
parent c0cc5540b5
commit 97b1280b15
4 changed files with 379 additions and 88 deletions

View File

@ -4035,68 +4035,75 @@ namespace ZNsMain
typedef typename TLinkList::TypeSize TypeSize; typedef typename TLinkList::TypeSize TypeSize;
public: public:
void RecvFreeIn(ZCLink* AP_CutLink){} _NP_ void RecvFreeIn(ZCLink* AP_CutLink){}
void RecvFreeIn ///////////////////// _NP_ void RecvFreeIn /////////////////////
( (
TypeSize AL_CutCnt , TypeSize AL_CutCnt ,
ZCLink* AP_CutHead, ZCLink* AP_CutHead,
ZCLink* AP_CutTail ZCLink* AP_CutTail
) )
{ } ///////////////////////////////// { } //////////////////////////////////////
ZCLink* SendFreeOut(){} _NP_ ZCLink* SendFreeOut(){}
void SendFreeOut ///////////////// _NP_ void SendFreeOut /////////////////
( (
TypeSize AL_NeedCnt , TypeSize AL_NeedCnt ,
ZCLink*& APR_NewHead, ZCLink*& APR_NewHead,
ZCLink*& APR_NewTail ZCLink*& APR_NewTail
) )
{ } ///////////////////////////////// { } //////////////////////////////////////
void SendFreeOutCopy /*////////////////////////////*/ _NP_ void SendFreeOutCopy /*////////////////////////////*/
( (
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum , ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
) )
{ } /*/////////////////////////////////////////////*/ { } /*//////////////////////////////////////////////////*/
void DeleteHeap(){} _NP_ void DeleteHeap(){}
void MakeEuqal(ZtCBody& rhs) _NP_ void MakeEuqal(ZtCBody& rhs)
{ {
}/* }/*
void MakeEuqal(ZtCBody& rhs)*/ _NP_ void MakeEuqal(ZtCBody& rhs)*/
TypeSize GetUseHeapSize() const _NP_ TypeSize GetUseHeapSize() const
{ {
return 0; return 0;
}/* }/*
TypeSize GetUseHeapSize() const*/ _NP_ TypeSize GetUseHeapSize() const*/
TypeSize GetAllHeapSize() const _NP_ TypeSize GetAllHeapSize() const
{ {
return 0; return 0;
}/* }/*
TypeSize GetAllHeapSize() const*/ _NP_ TypeSize GetAllHeapSize() const*/
TypeSize size() const _NP_ TypeSize size() const
{ {
return GetUseHeapSize(); return GetUseHeapSize();
}/* }/*
TypeSize GetHeapSize() const*/ _NP_ TypeSize size() const*/
TypeSize capacity() const _NP_ TypeSize capacity() const
{ {
return GetAllHeapSize(); return GetAllHeapSize();
}/* }/*
TypeSize GetHeapSize() const*/ _NP_ TypeSize capacity() const*/
_NP_ void ChangeCapacity(TypeSize AI_AddCut)
{
}/*
_NP_ void ChangeCapacity(TypeSize AI_AddCut)*/
public:
};/* };/*
template<typename TLinkList> class ZtCBody*/ template<typename TLinkList> class ZtCBody*/
@ -4155,14 +4162,14 @@ namespace ZNsMain
:::::::::::::::::::::::::::::::::::::::::::::::::::*/ :::::::::::::::::::::::::::::::::::::::::::::::::::*/
public: public:
void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;} _NP_ void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}
void RecvFreeIn /////////////////////////////////////// _NP_ void RecvFreeIn ///////////////////////////////////////
( (
TypeSize AL_CutCnt , TypeSize AL_CutCnt ,
ZCLink* AP_CutHead, ZCLink* AP_CutHead,
ZCLink* AP_CutTail ZCLink* AP_CutTail
) )
/////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
{ {
ZCLink* VP_DelLink = AP_CutHead; ZCLink* VP_DelLink = AP_CutHead;
@ -4174,17 +4181,17 @@ namespace ZNsMain
}/* }/*
__for0(TypeSize, i, AL_CutCnt)*/ __for0(TypeSize, i, AL_CutCnt)*/
} }
/////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
ZCLink* SendFreeOut(){return new ZCLink;} _NP_ ZCLink* SendFreeOut(){return new ZCLink;}
void SendFreeOut /////////////////////////////////// _NP_ void SendFreeOut ///////////////////////////////////
( (
TypeSize AL_NeedCnt , TypeSize AL_NeedCnt ,
ZCLink*& APR_HeadLink , ZCLink*& APR_HeadLink ,
ZCLink*& APR_TailLink ZCLink*& APR_TailLink
) )
/////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
{ {
APR_HeadLink = new ZCLink; APR_HeadLink = new ZCLink;
@ -4205,15 +4212,15 @@ namespace ZNsMain
APR_TailLink = VP_TailLink; APR_TailLink = VP_TailLink;
} }
/////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
void SendFreeOutCopy /*////////////////////////////*/ _NP_ void SendFreeOutCopy /*////////////////////////////*/
( (
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum , ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
) )
///////////////////////////////////////////////////// //////////////////////////////////////////////////////////
{ {
// 총 AL_FarNum+1 개의 링크가 만들어짊. // 총 AL_FarNum+1 개의 링크가 만들어짊.
@ -4239,47 +4246,53 @@ namespace ZNsMain
APR_TailCopy=VP_TailLink; APR_TailCopy=VP_TailLink;
}/* }/*
void SendFreeOutCopy ////////////////////////////// _NP_ void SendFreeOutCopy //////////////////////////////
( (
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum , ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
) )
///////////////////////////////////////////////////*/ ////////////////////////////////////////////////////////*/
void DeleteHeap(){} _NP_ void DeleteHeap(){}
void MakeEuqal(ZtCBody& rhs) _NP_ void MakeEuqal(ZtCBody& rhs)
{ {
}/* }/*
void MakeEuqal(ZtCBody& rhs)*/ _NP_ void MakeEuqal(ZtCBody& rhs)*/
TypeSize GetUseHeapSize() const _NP_ TypeSize GetUseHeapSize() const
{ {
return 0; return 0;
}/* }/*
TypeSize GetUseHeapSize() const*/ _NP_ TypeSize GetUseHeapSize() const*/
TypeSize GetAllHeapSize() const _NP_ TypeSize GetAllHeapSize() const
{ {
return 0; return 0;
}/* }/*
TypeSize GetAllHeapSize() const*/ _NP_ TypeSize GetAllHeapSize() const*/
TypeSize size() const _NP_ TypeSize size() const
{ {
return GetUseHeapSize(); return GetUseHeapSize();
}/* }/*
TypeSize GetHeapSize() const*/ _NP_ TypeSize GetHeapSize() const*/
TypeSize capacity() const _NP_ TypeSize capacity() const
{ {
return GetAllHeapSize(); return GetAllHeapSize();
}/* }/*
TypeSize GetHeapSize() const*/ _NP_ TypeSize capacity() const*/
_NP_ void ChangeCapacity(TypeSize AI_AddCut)
{
}/*
_NP_ void ChangeCapacity(TypeSize AI_AddCut)*/
};/* };/*
template<typename TSnglList> class ZtCBody*/ template<typename TSnglList> class ZtCBody*/
@ -4300,14 +4313,14 @@ namespace ZNsMain
typedef typename TLinkList::TypeSize TypeSize; typedef typename TLinkList::TypeSize TypeSize;
public: public:
void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;} _NP_ void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}
void RecvFreeIn /////////////////////////////////////// _NP_ void RecvFreeIn ///////////////////////////////////////
( (
TypeSize AL_CutCnt , TypeSize AL_CutCnt ,
ZCLink* AP_CutHead, ZCLink* AP_CutHead,
ZCLink* AP_CutTail ZCLink* AP_CutTail
) )
/////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
{ {
ZCLink* VP_DelLink = AP_CutHead; ZCLink* VP_DelLink = AP_CutHead;
@ -4319,17 +4332,17 @@ namespace ZNsMain
}/* }/*
__for0(TypeSize, i, AL_CutCnt)*/ __for0(TypeSize, i, AL_CutCnt)*/
} }
/////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
ZCLink* SendFreeOut(){return new ZCLink;} _NP_ ZCLink* SendFreeOut(){return new ZCLink;}
void SendFreeOut /////////////////////////////////// _NP_ void SendFreeOut ///////////////////////////////////
( (
TypeSize AL_NeedCnt , TypeSize AL_NeedCnt ,
ZCLink*& APR_HeadLink , ZCLink*& APR_HeadLink ,
ZCLink*& APR_TailLink ZCLink*& APR_TailLink
) )
/////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
{ {
APR_HeadLink = new ZCLink; APR_HeadLink = new ZCLink;
@ -4351,15 +4364,15 @@ namespace ZNsMain
APR_TailLink = VP_TailLink; APR_TailLink = VP_TailLink;
} }
/////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
void SendFreeOutCopy /*////////////////////////////*/ _NP_ void SendFreeOutCopy /*////////////////////////////*/
( (
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum , ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
) )
///////////////////////////////////////////////////// //////////////////////////////////////////////////////////
{ {
// 총 AL_FarNum+1 개의 링크가 만들어짊 // 총 AL_FarNum+1 개의 링크가 만들어짊
@ -4385,47 +4398,53 @@ namespace ZNsMain
APR_TailCopy=VP_TailLink; APR_TailCopy=VP_TailLink;
}/* }/*
void SendFreeOutCopy ////////////////////////////// _NP_ void SendFreeOutCopy //////////////////////////////
( (
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum , ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
) )
///////////////////////////////////////////////////*/ ////////////////////////////////////////////////////////*/
void DeleteHeap(){} _NP_ void DeleteHeap(){}
void MakeEuqal(ZtCBody& rhs) _NP_ void MakeEuqal(ZtCBody& rhs)
{ {
}/* }/*
void MakeEuqal(ZtCBody& rhs)*/ _NP_ void MakeEuqal(ZtCBody& rhs)*/
TypeSize GetUseHeapSize() const _NP_ TypeSize GetUseHeapSize() const
{ {
return 0; return 0;
}/* }/*
TypeSize GetUseHeapSize() const*/ _NP_ TypeSize GetUseHeapSize() const*/
TypeSize GetAllHeapSize() const _NP_ TypeSize GetAllHeapSize() const
{ {
return 0; return 0;
}/* }/*
TypeSize GetAllHeapSize() const*/ _NP_ TypeSize GetAllHeapSize() const*/
TypeSize size() const _NP_ TypeSize size() const
{ {
return GetUseHeapSize(); return GetUseHeapSize();
}/* }/*
TypeSize GetHeapSize() const*/ TypeSize size() const*/
TypeSize capacity() const _NP_ TypeSize capacity() const
{ {
return GetAllHeapSize(); return GetAllHeapSize();
}/* }/*
TypeSize GetHeapSize() const*/ _NP_ TypeSize capacity() const*/
_NP_ void ChangeCapacity(TypeSize AI_AddCut)
{
}/*
_NP_ void ChangeCapacity(TypeSize AI_AddCut)*/
};/* };/*
template<typename TLinkList> class ZtCBody*/ template<typename TLinkList> class ZtCBody*/
@ -5602,6 +5621,19 @@ namespace ZNsMain
) )
/////////////////////////////////////////////////////*/ /////////////////////////////////////////////////////*/
_VT_ void ChangeCapacity(TypeSize AI_AddCut)
{
if(TTypeCRTP::ZEUseCRTP<1)
{
return; /*nothing to do*/
}/*
if(TTypeCRTP::ZEUseCRTP<1)*/
GetChildObj().ChangeCapacity(AI_AddCut);
}/*
_VT_ void ChangeCapacity(TypeSize AI_AddCut)*/
/*private :*/ /*private :*/
private : private :
@ -5807,6 +5839,29 @@ namespace ZNsMain
TypeData& AddTail(TypeArg AO_ArgData) ##########################*/ TypeData& AddTail(TypeArg AO_ArgData) ##########################*/
ZtCBaseList& AddHead(ZtCBaseList& rhs)
{
if(this == &rhs ) return *this;
if(rhs.size()<1 ) return *this;
ZtCBaseList VO_TempList(rhs);
return JoinHead(VO_TempList);
}/*
ZtCBaseList& AddHead(ZtCBaseList& rhs)*/
ZtCBaseList& AddTail(ZtCBaseList& rhs)
{
if(this == &rhs ) return *this;
if(rhs.size()<1 ) return *this;
ZtCBaseList VO_TempList(rhs);
return JoinTail(VO_TempList);
}/*
ZtCBaseList& AddTail(ZtCBaseList& rhs)*/
void DeleteHead() void DeleteHead()
{ {
if(ml_LinkCnt<1) return; if(ml_LinkCnt<1) return;
@ -5847,6 +5902,122 @@ namespace ZNsMain
void DeleteTail()*/ void DeleteTail()*/
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLink* AP_StdLink)
{
// AP_StdLink 의 뒤에 rhs 를 삽입.
if(rhs.ml_LinkCnt<1) return *this;
this->ChangeCapacity( rhs.ml_LinkCnt) ;
rhs. ChangeCapacity(-rhs.ml_LinkCnt) ;
if(AP_StdLink==0) // 맨 앞에 삽입
{
if(ml_LinkCnt<1)
{
mp_HeadLink =rhs.mp_HeadLink;
mp_TailLink =rhs.mp_TailLink;
ml_LinkCnt =rhs.ml_LinkCnt ;
}
else // ml_LinkCnt>=1
{
ZCLink::JoinLink( rhs.mp_TailLink, mp_HeadLink );
ZCLink::MakeRing( rhs.mp_HeadLink, mp_TailLink );
mp_HeadLink =rhs.mp_HeadLink;
ml_LinkCnt =rhs.ml_LinkCnt ;
}/*
else // ml_LinkCnt>=1*/
ml_LinkCnt += rhs.ml_LinkCnt;
rhs.mp_HeadLink = 0 ;
rhs.mp_TailLink = 0 ;
rhs.ml_LinkCnt = 0 ;
return *this;
}/*
if(AP_StdLink==0)*/
ZCLink* VP_StdNext=AP_StdLink->mp_NextLink;
ZCLink::JoinLink(AP_StdLink , rhs.mp_HeadLink );
ZCLink::JoinLink(rhs.mp_TailLink, VP_StdNext );
if(AP_StdLink==mp_TailLink)
{ mp_TailLink=rhs.mp_TailLink; }
rhs.mp_HeadLink=0;
rhs.mp_TailLink=0;
rhs.ml_LinkCnt =0;
ml_LinkCnt += rhs.ml_LinkCnt; return *this;
}/*
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLink* AP_StdLink)
{
// AP_StdLink 의 앞에 rhs 를 삽입.
if(rhs.size()<1) return *this;
if(AP_StdLink==0) // 맨 뒤에 삽입
{
if(ml_LinkCnt<1)
{
mp_HeadLink =rhs.mp_HeadLink;
mp_TailLink =rhs.mp_TailLink;
ml_LinkCnt =rhs.ml_LinkCnt ;
}
else // ml_LinkCnt>=1
{
ZCLink::JoinLink(mp_TailLink, rhs.mp_HeadLink );
ZCLink::MakeRing(mp_HeadLink, rhs.mp_TailLink );
mp_TailLink = rhs.mp_TailLink ;
ml_LinkCnt += rhs.ml_LinkCnt ;
}/*
else // ml_LinkCnt>=1*/
this->ChangeCapacity( rhs.ml_LinkCnt) ;
rhs. ChangeCapacity(-rhs.ml_LinkCnt) ;
rhs.mp_HeadLink=0;
rhs.mp_TailLink=0;
rhs.ml_LinkCnt =0;
ml_LinkCnt += rhs.ml_LinkCnt; return *this;
}/*
if(AP_StdLink==0)*/
ZCLink* VP_StdPrev = AP_StdLink->mp_PrevLink;
ZCLink::JoinLink( VP_StdPrev , rhs.mp_HeadLink );
ZCLink::JoinLink(rhs.mp_TailLink, AP_StdLink );
if(AP_StdLink==mp_HeadLink)
{ mp_HeadLink = rhs.mp_HeadLink; }
this->ChangeCapacity( rhs.ml_LinkCnt) ;
rhs. ChangeCapacity(-rhs.ml_LinkCnt) ;
rhs.mp_HeadLink=0;
rhs.mp_TailLink=0;
rhs.ml_LinkCnt =0;
ml_LinkCnt += rhs.ml_LinkCnt; return *this;
}/*
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
ZtCBaseList& JoinHead(ZtCBaseList& rhs)
{ if(this==&rhs) return *this; return JoinAfter (rhs, 0); }
ZtCBaseList& JoinTail(ZtCBaseList& rhs)
{ if(this==&rhs) return *this; return JoinBefore(rhs, 0); }
TypeData& GetHeadData(){return mp_HeadLink->mo_Data;} TypeData& GetHeadData(){return mp_HeadLink->mo_Data;}
TypeData& GetTailData(){return mp_TailLink->mo_Data;} TypeData& GetTailData(){return mp_TailLink->mo_Data;}
@ -5980,6 +6151,72 @@ namespace ZNsMain
###############################################################################*/ ###############################################################################*/
template<typename TFunctor> void IterElemRev(TFunctor AO_Functor)
{
ZCLink* VP_LoopLink=mp_TailLink;
__for0(TypeSize, i, ml_LinkCnt)
{
ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(VP_LoopLink->mo_Data);
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template<typename TFunctor> void IterElemRev(TFunctor AO_Functor) */
template<typename TFunctor, typename TTypeHelp>
void IterElemRev(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::
ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZCLink* VP_LoopLink = mp_TailLink;
__for0(TypeSize, i, ml_LinkCnt)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_Data, ZCCheckRef::PassData(AO_TypeHelp)
);
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template<typename TFunctor, typename TTypeHelp>
void IterElemRev(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElemRev
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
/*#############################################################################*/
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp1> ZCCheckRef1;
typedef ZNsMain::ZtCCheckRef<TTypeHelp2> ZCCheckRef2;
ZCLink* VP_LoopLink = mp_TailLink;
__for0(TypeSize, i, ml_LinkCnt)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_Data
, ZCCheckRef1::PassData(AO_TypeHelp1)
, ZCCheckRef2::PassData(AO_TypeHelp2)
);
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElemRev
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
###############################################################################*/
ZCLink* GetHeadLinkPtr(){return mp_HeadLink;} ZCLink* GetHeadLinkPtr(){return mp_HeadLink;}
ZCLink* GetTailLinkPtr(){return mp_TailLink;} ZCLink* GetTailLinkPtr(){return mp_TailLink;}

View File

@ -769,6 +769,13 @@ namespace ZNsMain
}/* }/*
TypeSize capacity() const*/ TypeSize capacity() const*/
void ChangeCapacity(TypeSize AI_AddCut)
{
ml_AllSize =+ AI_AddCut;
}/*
void ChangeCapacity(TypeSize AI_AddCut)*/
public: public:
};/* };/*
template<typename TObjList> class ZtCBody*/ template<typename TObjList> class ZtCBody*/
@ -1077,6 +1084,9 @@ namespace ZNsMain
if(this == &AO_CObjList ) return; if(this == &AO_CObjList ) return;
if(AO_CObjList.ml_Size<1) return; if(AO_CObjList.ml_Size<1) return;
this-> ChangeCapacity( AO_CObjList.ml_LinkCnt) ;
AO_CObjList.ChangeCapacity(-AO_CObjList.ml_LinkCnt) ;
if(AP_LinkStd==0) if(AP_LinkStd==0)
{ {
if(ml_Size==0) if(ml_Size==0)
@ -1144,9 +1154,7 @@ namespace ZNsMain
{ {
if(AL_CutPos==1) // 첫째 링크를 삭제. if(AL_CutPos==1) // 첫째 링크를 삭제.
{ {
if(ml_Size==1) if(ml_Size==1){ mp_HeadLink=0; }else
mp_HeadLink=0;
else
{ {
ZCLink::MakeRing ZCLink::MakeRing
( (
@ -1155,7 +1163,7 @@ namespace ZNsMain
); );
//////////////// ////////////////
}/* }/*
else*/ else :::::::::::::::::::::::::::::*/
} }
else if(AL_CutPos==ml_Size) // 끝 링크를 삭제할 때 else if(AL_CutPos==ml_Size) // 끝 링크를 삭제할 때
ZCLink::MakeRing(mp_HeadLink , AP_CutLink->mp_PrevLink); ZCLink::MakeRing(mp_HeadLink , AP_CutLink->mp_PrevLink);
@ -1213,7 +1221,8 @@ namespace ZNsMain
}/* }/*
else*/ else*/
ml_Size -= AL_CutTailPos-AL_CutHeadPos+1 ; TypeSize VL_CutSize = AL_CutTailPos-AL_CutHeadPos+1 ;
/*++++*/ ml_Size -= VL_CutSize ;
// AP_CutHead 과 AP_CutTail 을 연결하여 // AP_CutHead 과 AP_CutTail 을 연결하여
// 이중 원형 연결리스트가 되도록 한다. // 이중 원형 연결리스트가 되도록 한다.
@ -1239,8 +1248,11 @@ namespace ZNsMain
#endif //_DEBUG #endif //_DEBUG
ARR_StoreList.mp_HeadLink=AP_CutHead ; this-> ChangeCapacity(-VL_CutSize) ;
ARR_StoreList.ml_Size =AL_CutTailPos-AL_CutHeadPos+1; ARR_StoreList.ChangeCapacity( VL_CutSize) ;
ARR_StoreList.mp_HeadLink = AP_CutHead ;
ARR_StoreList.ml_Size = VL_CutSize ;
return ARR_StoreList; return ARR_StoreList;
}/* }/*
@ -1412,13 +1424,13 @@ namespace ZNsMain
{ {
ZtCObjList VO_StoreList; ZtCObjList VO_StoreList;
CutLink /////////////////////////////////////// CutLink ////////////////////////////////////////
( (
GetLinkPtr(rhs.ml_Size+1), rhs.ml_Size+1, GetLinkPtr(rhs.ml_Size+1), rhs.ml_Size+1,
GetLinkPtr( ml_Size ), ml_Size , GetLinkPtr( ml_Size ), ml_Size ,
RR(VO_StoreList) RR(VO_StoreList)
). DeleteAll(); ). DeleteAll();
//////////////////////////////////////////////// /////////////////////////////////////////////////
}/* }/*
else*/ else*/
@ -1452,7 +1464,11 @@ namespace ZNsMain
TypeSize capacity() const{return mo_FreeObjt.capacity();} TypeSize capacity() const{return mo_FreeObjt.capacity();}
TypeSize GetFreeSize() const TypeSize GetFreeSize() const
{ return mo_FreeObjt.size(); } { return mo_FreeObjt.size(); }
void ChangeCapacity(TypeSize AI_AddCut) const
{ mo_FreeObjt.ChangeCapacity(AI_AddCut); }
ZCLink* GetHeadLinkPtr(){return mp_HeadLink;} ZCLink* GetHeadLinkPtr(){return mp_HeadLink;}
ZCLink* GetTailLinkPtr() ZCLink* GetTailLinkPtr()

View File

@ -771,6 +771,13 @@ namespace ZNsMain
}/* }/*
TypeSize capacity() const*/ TypeSize capacity() const*/
void ChangeCapacity(TypeSize AI_AddCut)
{
ml_AllSize =+ AI_AddCut;
}/*
void ChangeCapacity(TypeSize AI_AddCut)*/
public: public:
};/* };/*
template<typename TSimList> class ZtCBody*/ template<typename TSimList> class ZtCBody*/
@ -1722,13 +1729,13 @@ namespace ZNsMain
if(mp_HeadLink==0) if(mp_HeadLink==0)
{ {
mp_HeadLink=rhs.mp_HeadLink; mp_HeadLink= rhs.mp_HeadLink;
mp_TailLink=rhs.mp_TailLink; mp_TailLink= rhs.mp_TailLink;
ml_Size =rhs.ml_Size ; ml_Size = rhs.ml_Size ;
} }
else else
{ {
rhs.mp_TailLink->mp_NextLink=mp_HeadLink; rhs.mp_TailLink->mp_NextLink = mp_HeadLink;
mp_HeadLink= rhs.mp_HeadLink ; mp_HeadLink= rhs.mp_HeadLink ;
ml_Size += rhs.ml_Size ; ml_Size += rhs.ml_Size ;
@ -1737,6 +1744,10 @@ namespace ZNsMain
}/* }/*
else*/ else*/
this->ChangeCapacity( rhs.ml_LinkCnt) ;
rhs. ChangeCapacity(-rhs.ml_LinkCnt) ;
rhs.mp_HeadLink=0; rhs.mp_HeadLink=0;
rhs.mp_TailLink=0; rhs.mp_TailLink=0;
rhs.ml_Size =0; rhs.ml_Size =0;
@ -1766,6 +1777,9 @@ namespace ZNsMain
}/* }/*
else*/ else*/
this->ChangeCapacity( rhs.ml_LinkCnt) ;
rhs. ChangeCapacity(-rhs.ml_LinkCnt) ;
rhs.mp_HeadLink=0; rhs.mp_HeadLink=0;
rhs.mp_TailLink=0; rhs.mp_TailLink=0;
rhs.ml_Size =0; rhs.ml_Size =0;
@ -2134,6 +2148,12 @@ namespace ZNsMain
}/* }/*
inline TypeSize GetFreeSize() const*/ inline TypeSize GetFreeSize() const*/
void ChangeCapacity(TypeSize AI_AddCut) const
{
mo_FreeObjt.ChangeCapacity(AI_AddCut);
}/*
void ChangeCapacity(TypeSize AI_AddCut) const*/
inline bool IsEmpty() const inline bool IsEmpty() const
{ {

View File

@ -134,7 +134,7 @@ namespace ZNsMain
_VT_ void SendFreeOut _VT_ void SendFreeOut
(ZTypLong AL_NeedCnt, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) (ZTypLong AL_NeedCnt, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink)
{ {
cout<<"** ZCBaseListEx10 : SendFreeOut(ZTypLong, ZCLink*&, ZCLink*&)"<<endl; cout<<"** ZCBaseListEx10 : SendFreeOut("<<AL_NeedCnt<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLink(AL_NeedCnt, APR_HeadLink, APR_TailLink); this->ZCBaseList::NewLink(AL_NeedCnt, APR_HeadLink, APR_TailLink);
} }
@ -146,7 +146,7 @@ namespace ZNsMain
) )
///////////////////////////////////////////////////// /////////////////////////////////////////////////////
{ {
cout<<"** ZCBaseListEx10 : SendFreeOut(ZCLink*, ZTypLong, ZCLink*&, ZCLink*&)"<<endl; cout<<"** ZCBaseListEx10 : SendFreeOut(ZCLink*, "<<AL_FarNum<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLinkCopy(AP_LinkOrgin, AL_FarNum, APR_HeadCopy, APR_TailCopy); this->ZCBaseList::NewLinkCopy(AP_LinkOrgin, AL_FarNum, APR_HeadCopy, APR_TailCopy);
} }
@ -167,11 +167,17 @@ namespace ZNsMain
) )
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
{ {
cout<<"** ZCBaseListEx10 : RecvFreeIn(ZTypLong, AP_CutHead, AP_CutTail)"<<endl; cout<<"** ZCBaseListEx10 : RecvFreeIn("<<AL_CutCnt<<", AP_CutHead, AP_CutTail)"<<endl;
this->ZCBaseList::DelLink(AL_CutCnt, AP_CutHead, AP_CutTail); this->ZCBaseList::DelLink(AL_CutCnt, AP_CutHead, AP_CutTail);
} }
_VT_ void ChangeCapacity(ZTypLong AI_AddCut)
{
cout<<"** ZCBaseListEx10 : ChangeCapacity("<<AI_AddCut<<")"<<endl;
}/*
_VT_ void ChangeCapacity(ZTypLong AI_AddCut)*/
private: private:
};/* };/*
class ZCBaseListEx10 : public ZtCBaseList*/ class ZCBaseListEx10 : public ZtCBaseList*/
@ -225,7 +231,7 @@ namespace ZNsMain
_VT_ void SendFreeOut _VT_ void SendFreeOut
(ZTypLong AL_NeedCnt, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) (ZTypLong AL_NeedCnt, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink)
{ {
cout<<"** ZCBaseListEx11 : SendFreeOut(ZTypLong, ZCLink*&, ZCLink*&)"<<endl; cout<<"** ZCBaseListEx11 : SendFreeOut("<<AL_NeedCnt<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLink(AL_NeedCnt, APR_HeadLink, APR_TailLink); this->ZCBaseList::NewLink(AL_NeedCnt, APR_HeadLink, APR_TailLink);
} }
@ -237,7 +243,7 @@ namespace ZNsMain
) )
///////////////////////////////////////////////////// /////////////////////////////////////////////////////
{ {
cout<<"** ZCBaseListEx11 : SendFreeOut(ZCLink*, ZTypLong, ZCLink*&, ZCLink*&)"<<endl; cout<<"** ZCBaseListEx11 : SendFreeOut(ZCLink*, "<<AL_FarNum<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLinkCopy(AP_LinkOrgin, AL_FarNum, APR_HeadCopy, APR_TailCopy); this->ZCBaseList::NewLinkCopy(AP_LinkOrgin, AL_FarNum, APR_HeadCopy, APR_TailCopy);
} }
@ -258,11 +264,17 @@ namespace ZNsMain
) )
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
{ {
cout<<"** ZCBaseListEx11: RecvFreeIn(ZTypLong, AP_CutHead, AP_CutTail)"<<endl; cout<<"** ZCBaseListEx11: RecvFreeIn("<<AL_CutCnt<<", AP_CutHead, AP_CutTail)"<<endl;
this->ZCBaseList::DelLink(AL_CutCnt, AP_CutHead, AP_CutTail); this->ZCBaseList::DelLink(AL_CutCnt, AP_CutHead, AP_CutTail);
} }
_VT_ void ChangeCapacity(ZTypLong AI_AddCut)
{
cout<<"** ZCBaseListEx11 : ChangeCapacity("<<AI_AddCut<<")"<<endl;
}/*
_VT_ void ChangeCapacity(ZTypLong AI_AddCut)*/
private: private:
};/* };/*
class ZCBaseListEx11 : public ZtCBaseList*/ class ZCBaseListEx11 : public ZtCBaseList*/
@ -348,7 +360,7 @@ namespace ZNsMain
VO_ZCBaseListEx11.AddTail(VO_CStringBase("data ex 11-1")); VO_ZCBaseListEx11.AddTail(VO_CStringBase("data ex 11-1"));
VO_ZCBaseListEx11.AddTail(VO_CStringBase("data ex 11-2")); VO_ZCBaseListEx11.AddTail(VO_CStringBase("data ex 11-2"));
cout<<endl<<"# VO_ZCBaseListEx10_2 = VO_ZCBaseListEx11"<<endl<<endl; cout<<endl<<"# VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10"<<endl<<endl;
VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ; VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ;
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode); VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode);
@ -356,14 +368,20 @@ namespace ZNsMain
VO_ZCBaseListEx10.AddTail().Fetch(VO_CStringBase("data ex 10-3")); VO_ZCBaseListEx10.AddTail().Fetch(VO_CStringBase("data ex 10-3"));
VO_ZCBaseListEx10.AddTail().Fetch(VO_CStringBase("data ex 10-4")); VO_ZCBaseListEx10.AddTail().Fetch(VO_CStringBase("data ex 10-4"));
cout<<endl<<"# VO_ZCBaseListEx10_2 = VO_ZCBaseListEx11 after VO_ZCBaseListEx10.AddTail() 2 times"<<endl<<endl; cout<<endl<<"# VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 after VO_ZCBaseListEx10.AddTail() 2 times"<<endl<<endl;
VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ; VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ;
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode); VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode);
cout<<endl<<"# VO_ZCBaseListEx10_2.AddHead(VO_ZCBaseListEx10)"<<endl<<endl;
VO_ZCBaseListEx10_2.AddHead(VO_ZCBaseListEx10) ;
VO_ZCBaseListEx10_2.IterElemRev(&ShowDataInNode);
VO_ZCBaseListEx10_2.DeleteTail(); VO_ZCBaseListEx10_2.DeleteTail();
cout<<endl<<"# VO_ZCBaseListEx10_2DeleteTail()"<<endl<<endl; cout<<endl<<"# VO_ZCBaseListEx10_2 : DeleteTail()"<<endl<<endl;
return 0; return 0;
}/* }/*