commit 2025-10-05 12:02 add SendOutAfter() & SendOutBefore() etc ZCppMain/ZtCObjList.H

This commit is contained in:
2025-10-05 12:02:59 +09:00
parent bc20d259f5
commit cb73c93360
4 changed files with 380 additions and 163 deletions

View File

@ -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();}

View File

@ -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&()
{

View File

@ -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)*/

View File

@ -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;
}/*