commit 2025-10-05 12:02 add SendOutAfter() & SendOutBefore() etc ZCppMain/ZtCObjList.H
This commit is contained in:
@ -5620,7 +5620,7 @@ namespace ZNsMain
|
||||
|
||||
return AP_NewLink; /*::::::::::::::::::::*/
|
||||
}/*
|
||||
ZCLink* AddTailLink(ZCLink* AP_CLink)*/
|
||||
ZCLink* AddTailLink(ZCLink* AP_NewLink)*/
|
||||
|
||||
ZCLink* AddHeadLink(ZCLink* AP_NewLink)
|
||||
{
|
||||
@ -5643,7 +5643,126 @@ namespace ZNsMain
|
||||
|
||||
return AP_NewLink; /*::::::::::::::::::::*/
|
||||
}/*
|
||||
ZCLink* AddHeadLink(ZCLink* AP_CLink)*/
|
||||
ZCLink* AddHeadLink(ZCLink* AP_NewLink)*/
|
||||
|
||||
|
||||
ZCLink* AddLinkAfter(ZCLink* AP_StdLink, ZCLink* AP_NewLink)
|
||||
{
|
||||
// *this 에 속한 AP_StdLink 의 뒤에, AP_NewLink 를 삽입한다.
|
||||
// AP_StdLink 이 0 이면, 맨 앞에 삽입한다.
|
||||
|
||||
if(AP_StdLink==0) // 맨 앞에 삽입
|
||||
{
|
||||
if(ml_LinkSize<1)
|
||||
{
|
||||
mp_HeadLink = AP_NewLink;
|
||||
mp_TailLink = AP_NewLink;
|
||||
|
||||
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
|
||||
}
|
||||
else
|
||||
{
|
||||
ZCLink::JoinLink(AP_NewLink, mp_HeadLink) ;
|
||||
ZCLink::MakeRing(AP_NewLink, mp_TailLink) ;
|
||||
|
||||
mp_HeadLink = AP_NewLink;
|
||||
}
|
||||
}
|
||||
else if(AP_StdLink==mp_TailLink)
|
||||
{
|
||||
ZCLink::JoinLink(mp_TailLink, AP_NewLink) ;
|
||||
ZCLink::MakeRing(mp_HeadLink, AP_NewLink) ;
|
||||
|
||||
mp_TailLink = AP_NewLink;
|
||||
}
|
||||
else
|
||||
{
|
||||
ZCLink* VP_StdNext = AP_StdLink->mp_NextLink ;
|
||||
|
||||
ZCLink::JoinLink(AP_StdLink, AP_NewLink) ;
|
||||
ZCLink::JoinLink(AP_NewLink, VP_StdNext) ;
|
||||
}
|
||||
|
||||
++ml_LinkSize; return AP_NewLink;
|
||||
}/*
|
||||
ZCLink* AddLinkAfter(ZCLink* AP_StdLink, ZCLink* AP_NewLink)*/
|
||||
|
||||
|
||||
ZCLink* AddLinkBefore(ZCLink* AP_StdLink, ZCLink* AP_NewLink)
|
||||
{
|
||||
// *this 에 속한 AP_StdLink 의 앞에, AP_NewLink 를 삽입한다.
|
||||
// AP_StdLink 이 0 이면, 맨 뒤에 삽입한다.
|
||||
|
||||
if(AP_StdLink==0) // 맨 뒤에 삽입
|
||||
{
|
||||
if(ml_LinkSize<1)
|
||||
{
|
||||
mp_HeadLink = AP_NewLink;
|
||||
mp_TailLink = AP_NewLink;
|
||||
|
||||
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
|
||||
}
|
||||
else
|
||||
{
|
||||
ZCLink::JoinLink(mp_TailLink, AP_NewLink) ;
|
||||
ZCLink::MakeRing(mp_HeadLink, AP_NewLink) ;
|
||||
|
||||
mp_TailLink = AP_NewLink;
|
||||
}
|
||||
}
|
||||
else if(AP_StdLink==mp_HeadLink)
|
||||
{
|
||||
ZCLink::JoinLink(AP_NewLink, mp_HeadLink) ;
|
||||
ZCLink::MakeRing(AP_NewLink, mp_TailLink) ;
|
||||
|
||||
mp_HeadLink = AP_NewLink;
|
||||
}
|
||||
else
|
||||
{
|
||||
ZCLink* VP_StdPrev = AP_StdLink->mp_PrevLink ;
|
||||
|
||||
ZCLink::JoinLink(VP_StdPrev, AP_NewLink) ;
|
||||
ZCLink::JoinLink(AP_NewLink, AP_StdLink) ;
|
||||
}
|
||||
|
||||
++ml_LinkSize; return AP_NewLink;
|
||||
}/*
|
||||
ZCLink* AddLinkBefore(ZCLink* AP_StdLink, ZCLink* AP_NewLink)*/
|
||||
|
||||
|
||||
void CutLink(ZCLink* AP_StdLink)
|
||||
{
|
||||
if(mp_HeadLink==AP_StdLink)
|
||||
{
|
||||
if(ml_LinkSize==1)
|
||||
{
|
||||
mp_HeadLink = 0;
|
||||
mp_TailLink = 0;
|
||||
}
|
||||
else // ml_LinkSize>1
|
||||
{
|
||||
mp_HeadLink = mp_HeadLink->mp_NextLink ;
|
||||
|
||||
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
|
||||
}/*
|
||||
else*/
|
||||
}
|
||||
else if(mp_TailLink==AP_StdLink)
|
||||
{
|
||||
mp_TailLink = mp_TailLink->mp_PrevLink ;
|
||||
|
||||
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
|
||||
}
|
||||
else
|
||||
{
|
||||
ZCLink::JoinLink
|
||||
(AP_StdLink->mp_PrevLink, AP_StdLink->mp_NextLink) ;
|
||||
}/*
|
||||
else*/
|
||||
|
||||
--ml_LinkSize ;
|
||||
}/*
|
||||
void CutLink(ZCLink* AP_StdLink)*/
|
||||
|
||||
|
||||
/*private :*/
|
||||
@ -6036,6 +6155,39 @@ namespace ZNsMain
|
||||
{ if(this==&rhs) return *this; return JoinBefore(rhs, 0); }
|
||||
|
||||
|
||||
void SendOutAfter(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 뒤에 연결한다.
|
||||
|
||||
CutLink(AP_CutLink); rhs.AddLinkAfter(AP_StdLink, AP_CutLink);
|
||||
}/*
|
||||
void SendOutAfter(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
|
||||
|
||||
void SendOutBefore(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다.
|
||||
|
||||
CutLink(AP_CutLink); rhs.AddLinkBefore(AP_StdLink, AP_CutLink);
|
||||
}/*
|
||||
void SendOutBefore(ZCLink* AP_CutLink, ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
|
||||
|
||||
|
||||
void SendOutHead(ZCLink* AP_CutLink, ZtCBaseList& rhs)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 앞에 연결한다.
|
||||
|
||||
SendOutAfter (AP_CutLink, rhs, 0);
|
||||
}
|
||||
void SendOutTail(ZCLink* AP_CutLink, ZtCBaseList& rhs)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 뒤에 연결한다.
|
||||
|
||||
SendOutBefore(AP_CutLink, rhs, 0);
|
||||
}/*
|
||||
void SendOutTail(ZCLink* AP_CutLink, ZtCBaseList& rhs)*/
|
||||
|
||||
|
||||
|
||||
TypeData& GetHeadData(){return mp_HeadLink->mo_DataObjt;}
|
||||
TypeData& GetTailData(){return mp_TailLink->mo_DataObjt;}
|
||||
|
||||
@ -6316,12 +6468,27 @@ namespace ZNsMain
|
||||
###############################################################################*/
|
||||
|
||||
|
||||
|
||||
ZCLink* GetHeadLinkPtr(){return mp_HeadLink;}
|
||||
ZCLink* GetTailLinkPtr(){return mp_TailLink;}
|
||||
|
||||
const ZCLink* GetHeadLinkPtr() const{return mp_HeadLink;}
|
||||
const ZCLink* GetTailLinkPtr() const{return mp_TailLink;}
|
||||
|
||||
ZCLink* GetLinkPtr(TypeSize AI_Distance) {return mp_HeadLink->GetNextPrevPtr(AI_Distance);}
|
||||
const ZCLink* GetLinkPtr(TypeSize AI_Distance) const{return mp_HeadLink->GetNextPrevPtr(AI_Distance);}
|
||||
|
||||
|
||||
ZCLink& GetHeadLink(TypeSize AI_Distance){return (*mp_HeadLink)+AI_Distance;}
|
||||
ZCLink& GetTailLink(TypeSize AI_Distance){return (*mp_TailLink)-AI_Distance;}
|
||||
|
||||
const ZCLink& GetHeadLink(TypeSize AI_Distance) const{return (*mp_HeadLink)+AI_Distance;}
|
||||
const ZCLink& GetTailLink(TypeSize AI_Distance) const{return (*mp_TailLink)-AI_Distance;}
|
||||
|
||||
|
||||
ZCLink& GetLink(TypeSize AI_Distance) {return (*mp_HeadLink)+AI_Distance;}
|
||||
const ZCLink& GetLink(TypeSize AI_Distance) const{return (*mp_HeadLink)+AI_Distance;}
|
||||
|
||||
|
||||
IterEasy GetHeadIterEasy (){return GetHeadLinkPtr();}
|
||||
IterEasy GetTailIterEasy (){return GetTailLinkPtr();}
|
||||
|
@ -1012,9 +1012,9 @@ namespace ZNsMain
|
||||
protected:
|
||||
|
||||
|
||||
void JoinAfter(ZCLink* AP_LinkInsert, ZCLink* AP_LinkStd, TypeSize AL_PosStd)
|
||||
void JoinAfter(ZCLink* AP_LinkNew, ZCLink* AP_LinkStd)
|
||||
{
|
||||
// AP_LinkInsert 를 AL_PosStd 번째 링크인 AP_LinkStd 뒤에 삽입한다.
|
||||
// AP_LinkNew 를 AP_LinkStd 뒤에 삽입한다.
|
||||
// AL_PosStd==0 이면 맨 앞에 삽입한다.
|
||||
|
||||
if(AP_LinkStd==0)
|
||||
@ -1023,18 +1023,18 @@ namespace ZNsMain
|
||||
|
||||
if(++ml_LinkSize==1)
|
||||
{
|
||||
mp_HeadLink =AP_LinkInsert ;
|
||||
mp_HeadLink =AP_LinkNew ;
|
||||
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 ;
|
||||
ZCLink* VP_TailLink = mp_HeadLink->mp_PrevLink ;
|
||||
|
||||
mp_HeadLink=AP_LinkInsert;
|
||||
ZCLink::JoinLink(AP_LinkNew, mp_HeadLink);
|
||||
ZCLink::MakeRing(AP_LinkNew, VP_TailLink);
|
||||
|
||||
mp_HeadLink=AP_LinkNew;
|
||||
}/*
|
||||
else*/
|
||||
}
|
||||
@ -1042,79 +1042,151 @@ namespace ZNsMain
|
||||
{
|
||||
++ml_LinkSize;
|
||||
|
||||
AP_LinkInsert->mp_NextLink = AP_LinkStd->mp_NextLink ;
|
||||
AP_LinkStd ->mp_NextLink = AP_LinkInsert ;
|
||||
ZCLink* AP_NextStd = AP_LinkStd->mp_NextLink ;
|
||||
|
||||
AP_LinkInsert->mp_PrevLink =AP_LinkStd ;
|
||||
AP_LinkInsert->mp_NextLink->mp_PrevLink=AP_LinkInsert;
|
||||
ZCLink::JoinLink(AP_LinkStd, AP_LinkNew);
|
||||
ZCLink::JoinLink(AP_LinkNew, AP_NextStd);
|
||||
}/*
|
||||
else*/
|
||||
}/*
|
||||
void JoinAfter(ZCLink* AP_LinkInsert, ZCLink* AP_LinkStd, TypeSize AL_PosStd)*/
|
||||
void JoinAfter(ZCLink* AP_LinkNew, ZCLink* AP_LinkStd)*/
|
||||
|
||||
|
||||
public : void JoinAfter
|
||||
(ZtCObjList& AO_CObjList, ZCLink* AP_LinkStd, TypeSize AL_PosStd)
|
||||
void JoinBefore(ZCLink* AP_LinkNew, ZCLink* AP_LinkStd)
|
||||
{
|
||||
#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<<" TypeSize 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(this == &AO_CObjList ) return;
|
||||
if(AO_CObjList.ml_LinkSize<1) return;
|
||||
// AP_LinkNew 를 AP_LinkStd 앞에 삽입한다.
|
||||
// AL_PosStd==0 이면 맨 뒤에 삽입한다.
|
||||
|
||||
if(AP_LinkStd==0)
|
||||
{
|
||||
if(ml_LinkSize==0)
|
||||
// 맨 뒤에 삽입.
|
||||
|
||||
if(++ml_LinkSize==1)
|
||||
{
|
||||
mp_HeadLink = AO_CObjList.mp_HeadLink ;
|
||||
ml_LinkSize = AO_CObjList.ml_LinkSize ;
|
||||
mp_HeadLink =AP_LinkNew ;
|
||||
mp_HeadLink->mp_NextLink=mp_HeadLink;
|
||||
mp_HeadLink->mp_PrevLink=mp_HeadLink;
|
||||
}
|
||||
else
|
||||
{
|
||||
ZCLink* VP_TailLink = AO_CObjList.mp_HeadLink->mp_PrevLink;
|
||||
ZCLink* VP_TailLink = mp_HeadLink->mp_PrevLink ;
|
||||
|
||||
ZCLink::MakeRing(AO_CObjList.mp_HeadLink, mp_HeadLink->mp_PrevLink);
|
||||
ZCLink::JoinLink(VP_TailLink, AP_LinkNew);
|
||||
ZCLink::MakeRing(mp_HeadLink, AP_LinkNew);
|
||||
}/*
|
||||
else*/
|
||||
}
|
||||
else
|
||||
{
|
||||
++ml_LinkSize;
|
||||
|
||||
ZCLink* AP_PrevStd = AP_LinkStd->mp_PrevLink ;
|
||||
|
||||
ZCLink::JoinLink(AP_PrevStd, AP_LinkNew);
|
||||
ZCLink::JoinLink(AP_LinkNew, AP_LinkStd);
|
||||
}/*
|
||||
else*/
|
||||
}/*
|
||||
void JoinBefore(ZCLink* AP_LinkNew, ZCLink* AP_LinkStd)*/
|
||||
|
||||
|
||||
/*protected:*/
|
||||
public :
|
||||
|
||||
|
||||
void JoinAfter
|
||||
(ZtCObjList& rhs, ZCLink* AP_LinkStd)
|
||||
{
|
||||
if(this == &rhs ) return;
|
||||
if(rhs.ml_LinkSize<1) return;
|
||||
|
||||
if(AP_LinkStd==0) // 맨 앞에 삽입
|
||||
{
|
||||
if(ml_LinkSize==0)
|
||||
{
|
||||
mp_HeadLink = rhs.mp_HeadLink ;
|
||||
ml_LinkSize = rhs.ml_LinkSize ;
|
||||
}
|
||||
else
|
||||
{
|
||||
ZCLink* VP_TailLink = rhs.mp_HeadLink->mp_PrevLink;
|
||||
|
||||
ZCLink::MakeRing(rhs.mp_HeadLink, mp_HeadLink->mp_PrevLink);
|
||||
ZCLink::JoinLink(VP_TailLink , mp_HeadLink );
|
||||
|
||||
mp_HeadLink = AO_CObjList.mp_HeadLink ;
|
||||
ml_LinkSize += AO_CObjList.ml_LinkSize ;
|
||||
mp_HeadLink = rhs.mp_HeadLink ;
|
||||
ml_LinkSize += rhs.ml_LinkSize ;
|
||||
}/*
|
||||
else*/
|
||||
}
|
||||
else // AP_LinkStd!=0
|
||||
{
|
||||
ZCLink* VP_TailLink=AO_CObjList.mp_HeadLink->mp_PrevLink;
|
||||
ZCLink* VP_RhsTail=rhs.mp_HeadLink->mp_PrevLink;
|
||||
|
||||
ZCLink::JoinLink(VP_TailLink, AP_LinkStd->mp_NextLink);
|
||||
ZCLink::JoinLink(AP_LinkStd , AO_CObjList.mp_HeadLink);
|
||||
ZCLink::JoinLink(VP_RhsTail, AP_LinkStd->mp_NextLink);
|
||||
ZCLink::JoinLink(AP_LinkStd, rhs.mp_HeadLink);
|
||||
|
||||
ml_LinkSize += AO_CObjList.ml_LinkSize ;
|
||||
ml_LinkSize += rhs.ml_LinkSize ;
|
||||
}/*
|
||||
else // AP_LinkStd!=0*/
|
||||
|
||||
AO_CObjList.mp_HeadLink = 0;
|
||||
AO_CObjList.ml_LinkSize = 0;
|
||||
rhs.mp_HeadLink = 0;
|
||||
rhs.ml_LinkSize = 0;
|
||||
}/*
|
||||
void JoinAfter
|
||||
(ZtCObjList& AO_CObjList, ZCLink* AP_LinkStd, TypeSize AL_PosStd)*/
|
||||
(ZtCObjList& rhs, ZCLink* AP_LinkStd)*/
|
||||
|
||||
|
||||
protected: ZCLink* CutLink(ZCLink* AP_CutLink)
|
||||
void JoinBefore
|
||||
(ZtCObjList& rhs, ZCLink* AP_LinkStd)
|
||||
{
|
||||
if(this == &rhs ) return;
|
||||
if(rhs.ml_LinkSize<1) return;
|
||||
|
||||
if(AP_LinkStd==0) // 맨 뒤에 삽입
|
||||
{
|
||||
if(ml_LinkSize==0)
|
||||
{
|
||||
mp_HeadLink = rhs.mp_HeadLink ;
|
||||
ml_LinkSize = rhs.ml_LinkSize ;
|
||||
}
|
||||
else
|
||||
{
|
||||
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink ;
|
||||
ZCLink* VP_LhsTail = mp_HeadLink->mp_PrevLink ;
|
||||
|
||||
ZCLink::JoinLink(VP_LhsTail , rhs.mp_HeadLink);
|
||||
ZCLink::MakeRing(mp_HeadLink, VP_RhsTail );
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize ;
|
||||
}/*
|
||||
else*/
|
||||
}
|
||||
else // AP_LinkStd!=0
|
||||
{
|
||||
ZCLink* VP_RhsTail = rhs.mp_HeadLink->mp_PrevLink;
|
||||
ZCLink* VP_RhsHead = rhs.mp_HeadLink ;
|
||||
ZCLink* VP_PrevStd = AP_LinkStd ->mp_PrevLink;
|
||||
|
||||
ZCLink::JoinLink(VP_PrevStd, VP_RhsHead);
|
||||
ZCLink::JoinLink(VP_RhsTail, AP_LinkStd);
|
||||
|
||||
ml_LinkSize += rhs.ml_LinkSize ;
|
||||
}/*
|
||||
else // AP_LinkStd!=0*/
|
||||
|
||||
rhs.mp_HeadLink = 0;
|
||||
rhs.ml_LinkSize = 0;
|
||||
}/*
|
||||
void JoinBefore
|
||||
(ZtCObjList& rhs, ZCLink* AP_LinkStd)*/
|
||||
|
||||
|
||||
/*public :*/
|
||||
protected:
|
||||
|
||||
|
||||
ZCLink* CutLink(ZCLink* AP_CutLink)
|
||||
{
|
||||
if(AP_CutLink==mp_HeadLink)
|
||||
{
|
||||
@ -1140,30 +1212,6 @@ namespace ZNsMain
|
||||
protected: ZCLink* CutLink(ZCLink* AP_CutLink)*/
|
||||
|
||||
|
||||
ZCLink* CutLink(ZCLink* AP_CutLink, TypeSize AL_CutPos)
|
||||
{
|
||||
if(AL_CutPos==1) // 첫째 링크를 삭제.
|
||||
{
|
||||
if(ml_LinkSize==1){ mp_HeadLink=0; }else
|
||||
{
|
||||
ZCLink::MakeRing
|
||||
(
|
||||
mp_HeadLink = mp_HeadLink->mp_NextLink,
|
||||
AP_CutLink-> mp_PrevLink
|
||||
);
|
||||
////////////////
|
||||
}/*
|
||||
else :::::::::::::::::::::::::::::*/
|
||||
}
|
||||
else if(AL_CutPos==ml_LinkSize) // 끝 링크를 삭제할 때
|
||||
ZCLink::MakeRing(mp_HeadLink , AP_CutLink->mp_PrevLink);
|
||||
else ZCLink::JoinLink(AP_CutLink->mp_PrevLink, AP_CutLink->mp_NextLink);
|
||||
|
||||
return (--ml_LinkSize, AP_CutLink);
|
||||
}/*
|
||||
ZCLink* CutLink(ZCLink* AP_CutLink, TypeSize AL_CutPos)*/
|
||||
|
||||
|
||||
ZtCObjList& CutLink /*########################################################*/
|
||||
(
|
||||
ZCLink* AP_CutHead, TypeSize AL_CutHeadPos,
|
||||
@ -1211,8 +1259,8 @@ namespace ZNsMain
|
||||
}/*
|
||||
else*/
|
||||
|
||||
TypeSize VL_CutSize = AL_CutTailPos-AL_CutHeadPos+1 ;
|
||||
/*++++*/ ml_LinkSize -= VL_CutSize ;
|
||||
TypeSize VL_CutSize = AL_CutTailPos-AL_CutHeadPos+1 ;
|
||||
/*++++*/ ml_LinkSize -= VL_CutSize ;
|
||||
|
||||
// AP_CutHead 과 AP_CutTail 을 연결하여
|
||||
// 이중 원형 연결리스트가 되도록 한다.
|
||||
@ -1759,34 +1807,6 @@ namespace ZNsMain
|
||||
}/*
|
||||
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink)*/
|
||||
|
||||
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink, TypeSize 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,TypeSize 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
|
||||
|
||||
#if(_CODE_NEW_)
|
||||
mo_FreeObjt.RecvFreeIn
|
||||
( this->CutLink(AP_DeleteLink, AL_DeletePos) );
|
||||
#else
|
||||
delete this->CutLink(AP_DeleteLink, AL_DeletePos);
|
||||
#endif
|
||||
return *this;
|
||||
}/*
|
||||
ZtCObjList& DeleteLink(ZCLink* AP_DeleteLink, TypeSize AL_DeletePos)*/
|
||||
|
||||
|
||||
ZtCObjList& Delete(ZCLink* AP_DeleteLink)
|
||||
{
|
||||
@ -1794,19 +1814,13 @@ namespace ZNsMain
|
||||
}/*
|
||||
ZtCObjList& Delete(ZCLink* AP_DeleteLink)*/
|
||||
|
||||
ZtCObjList& Delete(ZCLink* AP_DeleteLink, TypeSize AL_DeletePos)
|
||||
ZtCObjList& Delete(TypeSize AL_DeletePos)
|
||||
{
|
||||
return DeleteLink(AP_DeleteLink, AL_DeletePos);
|
||||
if(AL_DeletePos<1 || this->ml_LinkSize>AL_DeletePos)
|
||||
{ return *this; }
|
||||
Delete(this->GetLinkPtr(AL_DeletePos)); return *this;
|
||||
}/*
|
||||
ZtCObjList& Delete(ZCLink* AP_DeleteLink, TypeSize AL_DeletePos)*/
|
||||
|
||||
ZtCObjList& DeleteLink(TypeSize AL_DeletePos)
|
||||
{
|
||||
if(AL_DeletePos<1 || this->ml_LinkSize>AL_DeletePos) return *this;
|
||||
|
||||
Delete(this->GetLinkPtr(AL_DeletePos), AL_DeletePos); return *this;
|
||||
}/*
|
||||
ZtCObjList& DeleteLink(TypeSize AL_DeletePos)*/
|
||||
ZtCObjList& Delete(TypeSize AL_DeletePos)*/
|
||||
|
||||
|
||||
ZtCObjList& DeleteHead()
|
||||
@ -1918,8 +1932,8 @@ namespace ZNsMain
|
||||
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);
|
||||
JoinAfter(VO_StoreList, 0 );
|
||||
else JoinAfter(VO_StoreList, GetLinkPtr(AL_AddPos-1));
|
||||
|
||||
return VP_HeadLink;
|
||||
}/*
|
||||
@ -1939,14 +1953,14 @@ namespace ZNsMain
|
||||
{
|
||||
TypeMoveObj::Exec(**VP_NewNode, AR_Type);
|
||||
|
||||
JoinAfter(VP_NewNode, 0, 0); return *this;
|
||||
JoinAfter(VP_NewNode, 0); return *this ;
|
||||
}
|
||||
////////////////////////////////////////////////////
|
||||
#endif
|
||||
|
||||
**VP_NewNode = AR_Type;
|
||||
|
||||
JoinAfter(VP_NewNode, 0, 0); return *this;
|
||||
JoinAfter(VP_NewNode, 0); return *this;
|
||||
}/*
|
||||
ZtCObjList& AddHead(TypeArg AR_Type)*/
|
||||
|
||||
@ -1956,7 +1970,7 @@ namespace ZNsMain
|
||||
|
||||
ZtCObjList VO_StoreList(rhs);
|
||||
|
||||
JoinAfter(VO_StoreList, 0, 0); return *this;
|
||||
JoinAfter(VO_StoreList, 0); return *this;
|
||||
}/*
|
||||
ZtCObjList& AddHead(const ZtCObjList& rhs)*/
|
||||
|
||||
@ -1974,7 +1988,7 @@ namespace ZNsMain
|
||||
{
|
||||
TypeMoveObj::Exec(**VP_NewNode, AR_Type);
|
||||
|
||||
JoinAfter(VP_NewNode, GetTailLinkPtr(), 0); return *this;
|
||||
JoinAfter(VP_NewNode, GetTailLinkPtr()); return *this;
|
||||
}
|
||||
////////////////////////////////////////////////////
|
||||
#endif
|
||||
@ -1982,7 +1996,7 @@ namespace ZNsMain
|
||||
**VP_NewNode = AR_Type;
|
||||
|
||||
JoinAfter
|
||||
(VP_NewNode, GetTailLinkPtr(), ml_LinkSize);
|
||||
(VP_NewNode, GetTailLinkPtr());
|
||||
return *this ;
|
||||
}/*
|
||||
ZtCObjList& AddTail(TypeArg AR_Type)*/
|
||||
@ -2009,7 +2023,7 @@ namespace ZNsMain
|
||||
#else
|
||||
ZCLink* VP_NewLink = new ZCLink ;
|
||||
#endif
|
||||
JoinAfter(VP_NewLink, 0 /*/////////*/ , 0 ); return VP_NewLink;
|
||||
JoinAfter(VP_NewLink, 0); return VP_NewLink;
|
||||
}
|
||||
ZCLink* AddTailDef()
|
||||
{
|
||||
@ -2018,7 +2032,7 @@ namespace ZNsMain
|
||||
#else
|
||||
ZCLink* VP_NewLink = new ZCLink ;
|
||||
#endif
|
||||
JoinAfter(VP_NewLink, GetTailLinkPtr(), ml_LinkSize); return VP_NewLink;
|
||||
JoinAfter(VP_NewLink, GetTailLinkPtr()); return VP_NewLink;
|
||||
}
|
||||
|
||||
|
||||
@ -2028,21 +2042,18 @@ namespace ZNsMain
|
||||
|
||||
ZtCObjList& JoinHead(ZtCObjList& rhs)
|
||||
{
|
||||
if(this==&rhs) return *this; JoinAfter(rhs, 0, 0); return *this;
|
||||
if(this==&rhs) return *this; JoinAfter(rhs, 0); return *this;
|
||||
}/*
|
||||
ZtCObjList& JoinHead(ZtCObjList& rhs)*/
|
||||
|
||||
ZtCObjList& JoinHead(ZtCObjList& rhs, ZCLink* AP_CLink)
|
||||
{
|
||||
// rhs 의 AP_CLink 를 앞으로 연결한다.
|
||||
// 일단 뒤로 연결한 다음 mp_HeadLink 을 뒤로 움직인다.
|
||||
|
||||
if(this==&rhs) return *this;
|
||||
|
||||
JoinAfter
|
||||
(rhs.CutLink(AP_CLink), GetTailLinkPtr(), ml_LinkSize);
|
||||
|
||||
mp_HeadLink = mp_HeadLink->GetPrevPtr() ;
|
||||
(rhs.CutLink(AP_CLink), 0);
|
||||
|
||||
return *this;
|
||||
}/*
|
||||
@ -2050,7 +2061,7 @@ namespace ZNsMain
|
||||
|
||||
ZtCObjList& JoinTail(ZtCObjList& rhs)
|
||||
{
|
||||
if(this==&rhs) return *this; JoinAfter(rhs, GetTailLinkPtr(), ml_LinkSize); return *this;
|
||||
if(this==&rhs) return *this; JoinAfter(rhs, GetTailLinkPtr()); return *this;
|
||||
}/*
|
||||
ZtCObjList& JoinTail(ZtCObjList& rhs)*/
|
||||
|
||||
@ -2060,13 +2071,11 @@ namespace ZNsMain
|
||||
|
||||
if(this==&rhs) return *this;
|
||||
|
||||
JoinAfter ////////////////////////////////
|
||||
JoinAfter /////////////////////////////////////
|
||||
(
|
||||
rhs.CutLink(AP_CLink) ,
|
||||
GetTailLinkPtr() ,
|
||||
ml_LinkSize
|
||||
rhs.CutLink(AP_CLink), GetTailLinkPtr()
|
||||
);
|
||||
return *this; ////////////////////////////
|
||||
return *this; /////////////////////////////////
|
||||
}/*
|
||||
ZtCObjList& JoinTail(ZtCObjList& rhs, ZCLink* AP_CLink)*/
|
||||
|
||||
@ -2074,8 +2083,8 @@ namespace ZNsMain
|
||||
ZtCObjList& JoinAfter /*######################################################*/
|
||||
(
|
||||
ZtCObjList& rhs ,
|
||||
ZCLink* AP_LinkOfRhs, TypeSize AL_AddPosOfRhs ,
|
||||
ZCLink* AP_LinkStd , TypeSize AL_PosStd
|
||||
ZCLink* AP_LinkOfRhs,
|
||||
ZCLink* AP_LinkStd
|
||||
)
|
||||
/*#############################################################################*/
|
||||
{
|
||||
@ -2083,37 +2092,16 @@ namespace ZNsMain
|
||||
|
||||
if(this==&rhs) return *this;
|
||||
|
||||
#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<<" TypeSize AL_AddPosOfRhs ,"<<std::endl;
|
||||
fileout<<" ZCLink* AP_LinkStd ,"<<std::endl;
|
||||
fileout<<" TypeSize 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);
|
||||
rhs.CutLink(AP_LinkOfRhs), AP_LinkStd);
|
||||
|
||||
return *this;
|
||||
}/*
|
||||
ZtCObjList& JoinAfter ##########################################################
|
||||
(
|
||||
ZtCObjList& rhs ,
|
||||
ZCLink* AP_LinkOfRhs, TypeSize AL_AddPosOfRhs ,
|
||||
ZCLink* AP_LinkStd , TypeSize AL_PosStd
|
||||
ZCLink* AP_LinkOfRhs,
|
||||
ZCLink* AP_LinkStd
|
||||
)
|
||||
###############################################################################*/
|
||||
|
||||
@ -2207,6 +2195,39 @@ namespace ZNsMain
|
||||
###############################################################################*/
|
||||
|
||||
|
||||
void SendOutAfter(ZCLink* AP_CutLink, ZtCObjList& rhs, ZCLink* AP_StdLink)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 뒤에 연결한다.
|
||||
// AP_StdLink==0 이면, rhs 의 앞에 삽입한다.
|
||||
|
||||
CutLink(AP_CutLink); rhs.JoinAfter(AP_CutLink, AP_StdLink);
|
||||
}/*
|
||||
void SendOutAfter(ZCLink* AP_CutLink, ZtCObjList& rhs, ZCLink* AP_StdLink)*/
|
||||
|
||||
void SendOutBefore(ZCLink* AP_CutLink, ZtCObjList& rhs, ZCLink* AP_StdLink)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 AP_StdLink 앞에 연결한다.
|
||||
// AP_StdLink==0 이면, rhs 의 뒤에 삽입한다.
|
||||
|
||||
CutLink(AP_CutLink); rhs.JoinBefore(AP_CutLink, AP_StdLink);
|
||||
}/*
|
||||
void SendOutBefore(ZCLink* AP_CutLink, ZtCObjList& rhs, ZCLink* AP_StdLink)*/
|
||||
|
||||
|
||||
void SendOutHead(ZCLink* AP_CutLink, ZtCObjList& rhs)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 앞에 연결한다.
|
||||
|
||||
SendOutAfter (AP_CutLink, rhs, 0);
|
||||
}
|
||||
void SendOutTail(ZCLink* AP_CutLink, ZtCObjList& rhs)
|
||||
{
|
||||
// AP_CutLink 를 잘라서 rhs 의 뒤에 연결한다.
|
||||
|
||||
SendOutBefore(AP_CutLink, rhs, 0);
|
||||
}/*
|
||||
void SendOutTail(ZCLink* AP_CutLink, ZtCObjList& rhs)*/
|
||||
|
||||
|
||||
operator Type&()
|
||||
{
|
||||
|
@ -449,6 +449,19 @@ namespace ZNsMain
|
||||
cout<<"*****************************************************"<<endl;
|
||||
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_2, ZftMCP(cout));
|
||||
|
||||
|
||||
cout<<endl<<"# show VO_ZCBaseListEx10 element"<<endl;
|
||||
|
||||
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10);
|
||||
VO_ZCBaseListEx10_2.SendOutTail
|
||||
(VO_ZCBaseListEx10_2.GetLinkPtr(1), VO_ZCBaseListEx10);
|
||||
|
||||
cout<<endl<<"# after VO_ZCBaseListEx10_2's 2th link to VO_ZCBaseListEx10's tail"<<endl;
|
||||
|
||||
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10);
|
||||
cout<<"*****************************************************"<<endl;
|
||||
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_2, ZftMCP(cout));
|
||||
|
||||
return 0;
|
||||
}/*
|
||||
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
||||
|
@ -232,6 +232,22 @@ namespace ZNsMain
|
||||
cout<<"# list10 IterElemLink"<<endl;
|
||||
VO_ListOfStr10.IterElemLink(&ShowNode1);
|
||||
|
||||
cout<<"# list10 2th link to list10 tail"<<endl;
|
||||
VO_ListOfStr10.SendOutTail(VO_ListOfStr10.GetLinkPtr(2), VO_ListOfStr11);
|
||||
|
||||
cout<<"# list10 IterElemLink"<<endl;
|
||||
VO_ListOfStr10.IterElemLink(&ShowNode1);
|
||||
cout<<"# list11 IterElemLink"<<endl;
|
||||
VO_ListOfStr11.IterElemLink(&ShowNode1);
|
||||
|
||||
cout<<"# list10 1th link to list10 head"<<endl;
|
||||
VO_ListOfStr10.SendOutHead(VO_ListOfStr10.GetLinkPtr(1), VO_ListOfStr11);
|
||||
|
||||
cout<<"# list10 IterElemLink"<<endl;
|
||||
VO_ListOfStr10.IterElemLink(&ShowNode1);
|
||||
cout<<"# list11 IterElemLink"<<endl;
|
||||
VO_ListOfStr11.IterElemLink(&ShowNode1);
|
||||
|
||||
|
||||
return 0;
|
||||
}/*
|
||||
|
Reference in New Issue
Block a user