commit 2025-10-06 15:02 add Raw() in ZtCObjOpt : ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-06 15:03:06 +09:00
parent b5cf36be19
commit 80c7b85ec2
6 changed files with 483 additions and 289 deletions

View File

@ -1097,13 +1097,12 @@ namespace ZNsMain
public :
void JoinAfter
(ZtCObjList& rhs, ZCLink* AP_LinkStd)
void JoinAfter(ZtCObjList& rhs, ZCLinkOpt AO_StdOpt)
{
if(this == &rhs ) return;
if(rhs.ml_LinkSize<1) return;
if(AP_LinkStd==0) // 맨 앞에 삽입
if(!bool(AO_StdOpt)) // 맨 앞에 삽입
{
if(ml_LinkSize==0)
{
@ -1115,38 +1114,37 @@ namespace ZNsMain
ZCLink* VP_TailLink = rhs.mp_HeadLink->mp_PrevLink;
ZCLink::MakeRing(rhs.mp_HeadLink, mp_HeadLink->mp_PrevLink);
ZCLink::JoinLink(VP_TailLink , mp_HeadLink );
ZCLink::JoinLink( VP_TailLink, mp_HeadLink );
mp_HeadLink = rhs.mp_HeadLink ;
ml_LinkSize += rhs.ml_LinkSize ;
}/*
else*/
}
else // AP_LinkStd!=0
else // bool(AO_StdOpt)
{
ZCLink* VP_RhsTail=rhs.mp_HeadLink->mp_PrevLink;
ZCLink* VP_RhsTail= rhs.mp_HeadLink->mp_PrevLink ;
ZCLink* VP_LinkStd= &AO_StdOpt.value() ;
ZCLink* VP_StdNext= VP_LinkStd->mp_NextLink ;
ZCLink::JoinLink(VP_RhsTail, AP_LinkStd->mp_NextLink);
ZCLink::JoinLink(AP_LinkStd, rhs.mp_HeadLink);
ZCLink::JoinLink(VP_LinkStd, rhs.mp_HeadLink);
ZCLink::JoinLink(VP_RhsTail, VP_StdNext );
ml_LinkSize += rhs.ml_LinkSize ;
}/*
else // AP_LinkStd!=0*/
else // bool(AO_StdOpt)*/
rhs.mp_HeadLink = 0;
rhs.ml_LinkSize = 0;
}/*
void JoinAfter
(ZtCObjList& rhs, ZCLink* AP_LinkStd)*/
void JoinAfter (ZtCObjList& rhs, ZCLinkOpt AO_StdOpt)*/
void JoinBefore
(ZtCObjList& rhs, ZCLink* AP_LinkStd)
void JoinBefore(ZtCObjList& rhs, ZCLinkOpt AO_StdOpt)
{
if(this == &rhs ) return;
if(rhs.ml_LinkSize<1) return;
if(AP_LinkStd==0) // 맨 뒤에 삽입
if(!bool(AO_StdOpt)) // 맨 뒤에 삽입
{
if(ml_LinkSize==0)
{
@ -1165,24 +1163,24 @@ namespace ZNsMain
}/*
else*/
}
else // AP_LinkStd!=0
else // bool(AO_StdOpt)
{
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink;
ZCLink* VP_RhsHead = rhs.mp_HeadLink ;
ZCLink* VP_PrevStd = AP_LinkStd ->mp_PrevLink;
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink;
ZCLink* VP_LinkStd= &AO_StdOpt.value() ;
ZCLink* VP_PrevStd = VP_LinkStd ->mp_PrevLink;
ZCLink::JoinLink(VP_PrevStd, VP_RhsHead);
ZCLink::JoinLink(VP_RhsTail, AP_LinkStd);
ZCLink::JoinLink(VP_RhsTail, VP_LinkStd);
ml_LinkSize += rhs.ml_LinkSize ;
}/*
else // AP_LinkStd!=0*/
else // bool(AO_StdOpt)*/
rhs.mp_HeadLink = 0;
rhs.ml_LinkSize = 0;
}/*
void JoinBefore
(ZtCObjList& rhs, ZCLink* AP_LinkStd)*/
void JoinBefore(ZtCObjList& rhs, ZCLinkOpt AO_StdOpt)*/
/*public :*/
@ -1289,6 +1287,88 @@ namespace ZNsMain
###############################################################################*/
ZtCObjList& CutLinkRangeOut /*################################################*/
(
ZCLink* AP_CutHead ,
ZCLink* AP_CutTail ,
TypeSize AL_CutSize ,
ZtCObjList& rhs ,
ZCLink* AP_RhsStd
)
/*#############################################################################*/
{
// AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크
// 이 범위의 링크를 AP_RhsStd 뒤에 붙인다.
// AP_RhsStd 이 0 이면, rhs 의 앞에 붙인다.
if(this==&rhs ) return *this;
if(ml_LinkSize<1) return rhs ;
ZCLink* VP_TailLink = mp_HeadLink->mp_PrevLink;
if(AP_CutHead==mp_HeadLink && AP_CutTail==VP_TailLink)
{
mp_HeadLink=0; // 모든 링크를 삭제할 때.
}
else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
{
ZCLink::MakeRing
(mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink);
}
else if(AP_CutTail==VP_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때.
{
ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink);
}
else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때.
{
ZCLink::JoinLink(AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink);
}/*
else*/
ml_LinkSize -= AL_CutSize;
if(rhs.size()<1)
{
// AP_CutHead 과 AP_CutTail 을 연결하여 이중 원형 연결리스트가 되도록 한다.
ZCLink::MakeRing(AP_CutHead, AP_CutTail);
rhs.mp_HeadLink = AP_CutHead ;
}
else if(AP_RhsStd==0) // 맨 앞에 삽입.
{
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink;
ZCLink::JoinLink(AP_CutTail, rhs.mp_HeadLink);
ZCLink::MakeRing(AP_CutHead, VP_RhsTail );
rhs.mp_HeadLink = AP_CutHead;
}
else // AP_RhsStd 의 뒤에 삽입.
{
ZCLink* VP_RhsStdNext = AP_RhsStd->mp_NextLink ;
ZCLink::JoinLink(AP_RhsStd , AP_CutHead );
ZCLink::JoinLink(AP_CutTail, VP_RhsStdNext);
}/*
else*/
rhs.ml_LinkSize += AL_CutSize; return rhs;
}/*
ZtCObjList& CutLinkRangeOut ####################################################
(
ZCLink* AP_CutHead ,
ZCLink* AP_CutTail ,
TypeSize AL_CutSize ,
ZtCObjList& rhs ,
ZCLink* AP_RhsStd
)
###############################################################################*/
ZtCObjList& CopyLink /*########################################################*/
(
const ZCLink* AP_CopyLink ,
@ -1297,29 +1377,24 @@ namespace ZNsMain
) const
/*#############################################################################*/
{
// AP_CopyLink 부터 AP_CopyLink->GetNextPrevPtr(AL_FarNum) 링크까지를 복사한다.
// AL_FarNum 은 0 이거나 음수일 수 있다.
// 총 (FarNum의 절대값) + 1 개의 링크가 만들어 진다.
/*/////////////////////////////////////////////////////////
#ifdef _DEBUG
■ AP_CopyLink 부터 AP_CopyLink->GetNextPrevPtr(AL_FarNum)
링크까지를 복사한다.
AL_FarNum 은 0 이거나 음수일 수 있다.
총 (FarNum의 절대값) + 1 개의 링크가 만들어진다.
ARR_StoreList 은 비어 있어야 한다. -- 2025-10-06 13:01
/////////////////////////////////////////////////////////*/
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<<" TypeSize 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;
return ARR_StoreList;
}/*
if(ARR_StoreList.IsEmpty()!=true)*/
#endif //_DEBUG
ZCLink* VP_HeadLink=0;
ZCLink* VP_TailLink=0;
@ -1532,46 +1607,14 @@ namespace ZNsMain
Type& operator[](TypeSize AL_Index)
Type& operator[](TypeSize AL_Index) // start by 1
{
// [] 에 들어가는 AL_Index 은 1 부터 시작하는 첨자이다.
#ifdef _DEBUG
if(AL_Index<1 || AL_Index>ml_LinkSize)
{
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[](TypeSize AL_Index)' : Parameter is bad index("<<AL_Index<<")"<<std::endl;
fileout.close();
::exit(1); return *(new Type);
}/*
if(AL_Index<1 || AL_Index>ml_LinkSize)*/
#endif //_DEBUG
return GetLinkPtr(AL_Index)->GetData();
}/*
Type& operator[](TypeSize AL_Index)*/
const Type& operator[](TypeSize AL_Index) const
{
#ifdef _DEBUG
if(AL_Index<1 || AL_Index>ml_LinkSize)
{
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[](TypeSize 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_LinkSize)*/
#endif //_DEBUG
return GetLinkPtr(AL_Index)->GetData();
}/*
Type& operator[](TypeSize AL_Index) const*/
@ -1644,7 +1687,7 @@ namespace ZNsMain
TypeSize Find /*##############################################################*/
(
const ZCLink* AP_SearchLink ,
const ZCLink& AR_SearchLink ,
TypeSize AL_FirstFindIndex =1,
bool AB_DoFindFromFront=true
) const
@ -1662,8 +1705,8 @@ namespace ZNsMain
{
do /**/
{
if(VP_TempLink ==AP_SearchLink) return VL_FindIndex;
if(VL_FindIndex==ml_LinkSize ) return 0 ;
if(VP_TempLink ==&AR_SearchLink) return VL_FindIndex;
if(VL_FindIndex==ml_LinkSize ) return 0 ;
VP_TempLink=VP_TempLink->mp_NextLink; ++VL_FindIndex;
}
@ -1673,8 +1716,8 @@ namespace ZNsMain
{
do /**/
{
if(VP_TempLink ==AP_SearchLink) return VL_FindIndex;
if(VL_FindIndex==1 ) return 0 ;
if(VP_TempLink ==&AR_SearchLink) return VL_FindIndex;
if(VL_FindIndex==1 ) return 0 ;
VP_TempLink=VP_TempLink->mp_PrevLink; --VL_FindIndex;
}
@ -1686,7 +1729,7 @@ namespace ZNsMain
}/*
TypeSize Find ##################################################################
(
ZCLink* AP_SearchLink ,
ZCLink& AR_SearchLink ,
TypeSize AL_FirstFindIndex =1 ,
bool AB_DoFindFromFront=true
) const
@ -1777,40 +1820,24 @@ namespace ZNsMain
ZtCObjList& DeleteHeap()*/
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)
ZtCObjList& DeleteLink(ZCLink& AR_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
#if(_CODE_NEW_)
mo_FreeObjt.RecvFreeIn
( this->CutLink(AP_DeleteLink) );
( this->CutLink(&AR_DeleteLink) );
#else
delete this->CutLink(AP_DeleteLink);
delete this->CutLink(&AR_DeleteLink);
#endif
return *this;
}/*
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)*/
ZtCObjList& DeleteLink(ZCLink& AR_DeleteLink)*/
ZtCObjList& Delete(ZCLink* AP_DeleteLink)
ZtCObjList& Delete(ZCLink& AR_DeleteLink)
{
return DeleteLink(AP_DeleteLink);
return DeleteLink(&AR_DeleteLink);
}/*
ZtCObjList& Delete(ZCLink* AP_DeleteLink)*/
ZtCObjList& Delete(ZCLink& AR_DeleteLink)*/
ZtCObjList& Delete(TypeSize AL_DeletePos)
{
@ -1855,9 +1882,8 @@ namespace ZNsMain
}/*
if(AL_DelSize==ml_LinkSize)*/
ZCLink* VP_TailLink= mp_HeadLink->mp_PrevLink;
ZCLink* VP_NewHead = mp_HeadLink->
GetNextPtr( AL_DelSize );
ZCLink* VP_TailLink= mp_HeadLink->mp_PrevLink ;
ZCLink* VP_NewHead = &((*mp_HeadLink)+AL_DelSize);
GetCFreeHeap().RecvFreeIn
(AL_DelSize, mp_HeadLink, VP_NewHead->mp_PrevLink);
@ -1901,9 +1927,8 @@ namespace ZNsMain
}/*
if(AL_DelSize==ml_LinkSize)*/
ZCLink* VP_TailLink= mp_HeadLink->mp_PrevLink;
ZCLink* VP_NewTail = VP_TailLink->
GetPrevPtr( AL_DelSize ) ;
ZCLink* VP_TailLink= mp_HeadLink->mp_PrevLink ;
ZCLink* VP_NewTail = &((*VP_TailLink)-AL_DelSize);
GetCFreeHeap().RecvFreeIn
(AL_DelSize, VP_NewTail->mp_NextLink, VP_TailLink);
@ -1914,28 +1939,23 @@ namespace ZNsMain
void DeleteTail(TypeSize AL_DelSize)*/
ZCLink* AddDefault(TypeSize AL_DefaultSize, TypeSize AL_AddPos)
ZCLink& AddDefault(TypeSize AL_DefSize, TypeSize AL_AddPos)
{
const bool CB_IsTrue = ///////////////////
(
AL_DefaultSize< 1 ||
AL_AddPos < 1 ||
AL_AddPos > ml_LinkSize+1
);
if(CB_IsTrue) return 0; //////////////////
if(AL_DefSize<1) AL_DefSize= 1;
if(AL_AddPos <1) AL_AddPos = 1;
ZtCObjList VO_StoreList; MakeDefault
( AL_DefaultSize, RR(VO_StoreList) ) ;
( AL_DefSize, RR(VO_StoreList) ) ;
ZCLink* VP_HeadLink= VO_StoreList.mp_HeadLink;
if(AL_AddPos==1)
JoinAfter(VO_StoreList, 0 );
else JoinAfter(VO_StoreList, GetLinkPtr(AL_AddPos-1));
JoinAfter(VO_StoreList, ZCLinkOpt(0) );
else JoinAfter(VO_StoreList, GetLinkOpt(AL_AddPos-1));
return VP_HeadLink;
return *VP_HeadLink;
}/*
ZCLink* AddDefault(TypeSize AL_DefaultSize, TypeSize AL_AddPos)*/
ZCLink& AddDefault(TypeSize AL_DefSize, TypeSize AL_AddPos)*/
ZtCObjList& AddHead(TypeArg AR_Type)
@ -2014,23 +2034,23 @@ namespace ZNsMain
///////////////////////////////////////////////////////////////////*/
ZCLink* AddHeadDef()
ZCLink& AddHeadDef()
{
#if(_CODE_NEW_)
ZCLink* VP_NewLink = mo_FreeObjt.SendFreeOut();
#else
ZCLink* VP_NewLink = new ZCLink ;
#endif
JoinAfter(VP_NewLink, 0); return VP_NewLink;
JoinAfter(VP_NewLink, 0); return *VP_NewLink;
}
ZCLink* AddTailDef()
ZCLink& AddTailDef()
{
#if(_CODE_NEW_)
ZCLink* VP_NewLink = mo_FreeObjt.SendFreeOut();
#else
ZCLink* VP_NewLink = new ZCLink ;
#endif
JoinAfter(VP_NewLink, GetTailLinkPtr()); return VP_NewLink;
JoinAfter(VP_NewLink, GetTailLinkPtr()); return *VP_NewLink;
}
@ -2044,18 +2064,18 @@ namespace ZNsMain
}/*
ZtCObjList& JoinHead(ZtCObjList& rhs)*/
ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink* AP_CLink)
ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink& AR_CLink)
{
// rhs 의 AP_CLink 를 앞으로 연결한다.
if(this==&rhs) return *this;
JoinAfter
(rhs.CutLink(AP_CLink), 0);
(rhs.CutLink(&AR_CLink), 0);
return *this;
}/*
ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink* AP_CLink)*/
ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink& AR_CLink)*/
ZtCObjList& JoinTail(ZtCObjList& rhs)
{
@ -2063,121 +2083,43 @@ namespace ZNsMain
}/*
ZtCObjList& JoinTail(ZtCObjList& rhs)*/
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink* AP_CLink)
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink& AR_CLink)
{
// rhs 의 AP_CLink 를 뒤로 연결한다.
// rhs 의 AR_CLink 를 뒤로 연결한다.
if(this==&rhs) return *this;
JoinAfter /////////////////////////////////////
JoinAfter //////////////////////////////////////
(
rhs.CutLink(AP_CLink), GetTailLinkPtr()
rhs.CutLink(&AR_CLink), GetTailLinkPtr()
);
return *this; /////////////////////////////////
return *this; //////////////////////////////////
}/*
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink* AP_CLink)*/
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink& AR_CLink)*/
ZtCObjList& JoinAfter /*######################################################*/
(
ZtCObjList& rhs ,
ZCLink* AP_LinkOfRhs,
ZCLink* AP_LinkStd
ZCLink& AR_LinkOfRhs,
ZCLinkOpt AO_StdOpt
)
/*#############################################################################*/
{
// rhs 의 AP_LinkOfRhs 링크를 잘라서 AP_LinkStd 앞에 붙인다.
// rhs 의 AP_LinkOfRhs 링크를 잘라서 AO_StdOpt 뒤에 붙인다.
if(this==&rhs) return *this;
JoinAfter(
rhs.CutLink(AP_LinkOfRhs), AP_LinkStd);
rhs.CutLink(&AR_LinkOfRhs), AO_StdOpt.Raw() );
return *this;
}/*
ZtCObjList& JoinAfter ##########################################################
(
ZtCObjList& rhs ,
ZCLink* AP_LinkOfRhs,
ZCLink* AP_LinkStd
)
###############################################################################*/
ZtCObjList& CutLinkOut /*#####################################################*/
(
ZCLink* AP_CutHead ,
ZCLink* AP_CutTail ,
TypeSize AL_CutSize ,
ZtCObjList& ARR_StoreList
)
/*#############################################################################*/
{
// AP_CutHead 는 삭제하려는 링크의 범위의 앞의 링크
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크
if(this==&ARR_StoreList) return *this ;
if(ml_LinkSize<1) return ARR_StoreList;
ZCLink* VP_TailLink = mp_HeadLink->mp_PrevLink;
if(AP_CutHead==mp_HeadLink && AP_CutTail==VP_TailLink)
{
mp_HeadLink=0; // 모든 링크를 삭제할 때.
}
else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
{
ZCLink::MakeRing
(mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink);
}
else if(AP_CutTail==VP_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때.
{
ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink);
}
else // 잘라내려는 링크가 처음과 끝 링크를 포함하지 않을 때.
{
ZCLink::JoinLink(AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink);
}/*
else*/
ml_LinkSize -= AL_CutSize;
/* 여기까지는
CutLink(ZCLink*, ZCLink*, TypeSize, ZtCObjList&)
와 같다. 이후에 CutLink() 에서는 ARR_StoreList 가 비어 있는 것으로
간주하지만, CutLinkOut() 는 ARR_StoreList 이 비어 있지 않은 경우에
도 대비한다.
*/
if(ARR_StoreList.ml_LinkSize<1)
{
// AP_CutHead 과 AP_CutTail 을 연결하여 이중 원형 연결리스트가 되도록 한다.
ZCLink::MakeRing(AP_CutHead, AP_CutTail);
ARR_StoreList.mp_HeadLink = AP_CutHead ;
ARR_StoreList.ml_LinkSize = AL_CutSize ;
}
else
{
ZCLink::JoinLink(ARR_StoreList.mp_HeadLink->mp_PrevLink, AP_CutHead);
ZCLink::MakeRing(ARR_StoreList.mp_HeadLink , AP_CutTail);
ARR_StoreList.ml_LinkSize += AL_CutSize ;
}/*
else*/
return ARR_StoreList;
}/*
ZtCObjList& CutLinkOut #########################################################
(
ZCLink* AP_CutHead ,
ZCLink* AP_CutTail ,
TypeSize AL_CutSize ,
ZtCObjList& ARR_StoreList
ZCLink& AR_LinkOfRhs,
ZCLinkOpt AO_StdOpt
)
###############################################################################*/
@ -2206,6 +2148,35 @@ namespace ZNsMain
{ CutLink(&AR_CutLink); rhs.JoinBefore(&AR_CutLink, 0); }
ZtCObjList& SendRangeOutAfter ///////////////////////////////////////////
(
ZCLink& AR_CutHead,
ZCLink& AR_CutTail,
TypeSize AI_CutSize,
ZtCObjList& rhs ,
ZCLinkOpt AO_LinkOpt
)
/*#####################################################################*/
{
// AR_CutHead 부터 AR_CutTail 까지를 잘라서 rhs 의 AO_ObjOpt 뒤에 연결한다.
return CutLinkRangeOut
(
&AR_CutHead, &AR_CutTail, AI_CutSize, rhs, AO_LinkOpt.Raw()
);
//////////////////////
}/*
ZtCObjList& SendRangeOutAfter //////////////////////////////////////////
(
ZCLink& AR_CutHead,
ZCLink& AR_CutTail,
TypeSize AI_CutSize,
ZtCObjList& rhs ,
ZCLinkOpt AO_LinkOpt
)
/*#####################################################################*/
operator Type&()
{
return AddDefault(1, ml_LinkSize+1)->GetData();