commit 2025-10-05 15:31 edit CutLink() argument : ZCppMain/ZtCObjList.H
This commit is contained in:
@ -1214,8 +1214,9 @@ namespace ZNsMain
|
||||
|
||||
ZtCObjList& CutLink /*########################################################*/
|
||||
(
|
||||
ZCLink* AP_CutHead, TypeSize AL_CutHeadPos,
|
||||
ZCLink* AP_CutTail, TypeSize AL_CutTailPos,
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& ARR_StoreList
|
||||
)
|
||||
/*#############################################################################*/
|
||||
@ -1224,32 +1225,22 @@ namespace ZNsMain
|
||||
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치
|
||||
// 따라서 AL_CutHeadPos <= AL_CutTailPos
|
||||
|
||||
#ifdef _DEBUG
|
||||
if(this==&ARR_StoreList) return *this ;
|
||||
|
||||
if(AL_CutHeadPos>AL_CutTailPos)
|
||||
if(ml_LinkSize<1) return ARR_StoreList;
|
||||
|
||||
ZCLink* VP_TailLink = mp_HeadLink->mp_PrevLink;
|
||||
|
||||
if(AP_CutHead==mp_HeadLink && AP_CutTail==VP_TailLink)
|
||||
{
|
||||
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, TypeSize AL_CutHeadPos,"<<std::endl;
|
||||
fileout<<" ZCLink* AP_CutTail, TypeSize 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
|
||||
|
||||
if(AL_CutHeadPos==1 && AL_CutTailPos==ml_LinkSize) // 모든 링크를 삭제할 때.
|
||||
{
|
||||
mp_HeadLink=0;
|
||||
mp_HeadLink=0; // 모든 링크를 삭제할 때.
|
||||
}
|
||||
else if(AL_CutHeadPos==1) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
||||
else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
||||
{
|
||||
ZCLink::MakeRing(mp_HeadLink=AP_CutTail->mp_NextLink, AP_CutHead->mp_PrevLink);
|
||||
ZCLink::MakeRing
|
||||
(mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink);
|
||||
}
|
||||
else if(AL_CutTailPos==ml_LinkSize) // 잘라내려는 링크가 끝 링크를 포함할 때.
|
||||
else if(AP_CutTail==VP_TailLink) // 잘라내려는 링크가 끝 링크를 포함할 때.
|
||||
{
|
||||
ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink);
|
||||
}
|
||||
@ -1259,13 +1250,8 @@ namespace ZNsMain
|
||||
}/*
|
||||
else*/
|
||||
|
||||
TypeSize VL_CutSize = AL_CutTailPos-AL_CutHeadPos+1 ;
|
||||
/*++++*/ ml_LinkSize -= VL_CutSize ;
|
||||
|
||||
// AP_CutHead 과 AP_CutTail 을 연결하여
|
||||
// 이중 원형 연결리스트가 되도록 한다.
|
||||
|
||||
ZCLink::MakeRing(AP_CutHead, AP_CutTail);
|
||||
ml_LinkSize -= AL_CutSize; ZCLink::MakeRing(AP_CutHead, AP_CutTail);
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
@ -1274,8 +1260,8 @@ namespace ZNsMain
|
||||
{
|
||||
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, TypeSize AL_CutHeadPos," <<std::endl;
|
||||
fileout<<" ZCLink* AP_CutTail, TypeSize AL_CutTailPos, ZtCObjList& ARR_StoreList" <<std::endl;
|
||||
fileout<<"Error In 'ZtCObjList& CutLink( ZCLink* AP_CutHead , ZCLink* AP_CutTail," <<std::endl;
|
||||
fileout<<" TypeSize AL_CutSize, ZtCObjList& ARR_StoreList" <<std::endl;
|
||||
fileout<<" /****************/ )" <<std::endl;
|
||||
fileout<<"Object ARR_StoreList is not EMPTY !"<<std::endl;
|
||||
fileout.close();
|
||||
@ -1286,15 +1272,16 @@ namespace ZNsMain
|
||||
|
||||
#endif //_DEBUG
|
||||
|
||||
ARR_StoreList.mp_HeadLink = AP_CutHead ;
|
||||
ARR_StoreList.ml_LinkSize = VL_CutSize ;
|
||||
ARR_StoreList.mp_HeadLink = AP_CutHead ;
|
||||
ARR_StoreList.ml_LinkSize = AL_CutSize ;
|
||||
|
||||
return ARR_StoreList;
|
||||
}/*
|
||||
ZtCObjList& CutLink ############################################################
|
||||
(
|
||||
ZCLink* AP_CutHead, TypeSize AL_CutHeadPos,
|
||||
ZCLink* AP_CutTail, TypeSize AL_CutTailPos,
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& ARR_StoreList
|
||||
)
|
||||
###############################################################################*/
|
||||
@ -1461,8 +1448,9 @@ namespace ZNsMain
|
||||
|
||||
CutLink ////////////////////////////////////////////////
|
||||
(
|
||||
GetLinkPtr(rhs.ml_LinkSize+1), rhs.ml_LinkSize+1,
|
||||
GetLinkPtr( ml_LinkSize ), ml_LinkSize ,
|
||||
GetLinkPtr(rhs.ml_LinkSize+1),
|
||||
GetLinkPtr( ml_LinkSize ),
|
||||
ml_LinkSize - rhs.ml_LinkSize,
|
||||
RR(VO_StoreList)
|
||||
). DeleteAll();
|
||||
/////////////////////////////////////////////////////////
|
||||
@ -2108,8 +2096,9 @@ namespace ZNsMain
|
||||
|
||||
ZtCObjList& CutLinkOut /*#####################################################*/
|
||||
(
|
||||
ZCLink* AP_CutHead, TypeSize AL_CutHeadPos,
|
||||
ZCLink* AP_CutTail, TypeSize AL_CutTailPos,
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& ARR_StoreList
|
||||
)
|
||||
/*#############################################################################*/
|
||||
@ -2118,49 +2107,37 @@ namespace ZNsMain
|
||||
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치
|
||||
// 따라서 AL_CutHeadPos <= AL_CutTailPos
|
||||
|
||||
if(this==&ARR_StoreList) return *this;
|
||||
if(this==&ARR_StoreList) return *this ;
|
||||
|
||||
#ifdef _DEBUG
|
||||
if(ml_LinkSize<1) return ARR_StoreList;
|
||||
|
||||
if(AL_CutHeadPos>AL_CutTailPos)
|
||||
ZCLink* VP_TailLink = mp_HeadLink->mp_PrevLink;
|
||||
|
||||
if(AP_CutHead==mp_HeadLink && AP_CutTail==VP_TailLink)
|
||||
{
|
||||
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, TypeSize AL_CutHeadPos,"<<std::endl;
|
||||
fileout<<" ZCLink* AP_CutTail, TypeSize 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
|
||||
|
||||
if(AL_CutHeadPos==1 && AL_CutTailPos==ml_LinkSize) // 모든 링크를 삭제할 때.
|
||||
{
|
||||
mp_HeadLink=0;
|
||||
mp_HeadLink=0; // 모든 링크를 삭제할 때.
|
||||
}
|
||||
else if(AL_CutHeadPos==1) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
||||
else if(AP_CutHead==mp_HeadLink) // 잘라내려는 링크가 처음 링크를 포함할 때.
|
||||
{
|
||||
ZCLink::MakeRing(mp_HeadLink=AP_CutTail->mp_NextLink, AP_CutHead->mp_PrevLink);
|
||||
ZCLink::MakeRing
|
||||
(mp_HeadLink=AP_CutTail->mp_NextLink, VP_TailLink);
|
||||
}
|
||||
else if(AL_CutTailPos==ml_LinkSize) // 잘라내려는 링크가 끝 링크를 포함할 때.
|
||||
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);
|
||||
ZCLink::JoinLink(AP_CutHead->mp_PrevLink, AP_CutTail->mp_NextLink);
|
||||
}/*
|
||||
else*/
|
||||
|
||||
TypeSize VL_CutSize = AL_CutTailPos-AL_CutHeadPos+1 ;
|
||||
/*++++*/ ml_LinkSize -= VL_CutSize ;
|
||||
|
||||
ml_LinkSize -= AL_CutSize;
|
||||
|
||||
/* 여기까지는
|
||||
|
||||
CutLink(ZCLink*, TypeSize, ZCLink*, TypeSize, ZtCObjList&)
|
||||
CutLink(ZCLink*, ZCLink*, TypeSize, ZtCObjList&)
|
||||
|
||||
와 같다. 이후에 CutLink() 에서는 ARR_StoreList 가 비어 있는 것으로
|
||||
간주하지만, CutLinkOut() 는 ARR_StoreList 이 비어 있지 않은 경우에
|
||||
@ -2172,15 +2149,15 @@ namespace ZNsMain
|
||||
|
||||
ZCLink::MakeRing(AP_CutHead, AP_CutTail);
|
||||
|
||||
ARR_StoreList.mp_HeadLink = AP_CutHead ;
|
||||
ARR_StoreList.ml_LinkSize = AL_CutTailPos-AL_CutHeadPos+1;
|
||||
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_CutTailPos-AL_CutHeadPos+1 ;
|
||||
ARR_StoreList.ml_LinkSize += AL_CutSize ;
|
||||
}/*
|
||||
else*/
|
||||
|
||||
@ -2188,8 +2165,9 @@ namespace ZNsMain
|
||||
}/*
|
||||
ZtCObjList& CutLinkOut #########################################################
|
||||
(
|
||||
ZCLink* AP_CutHead, TypeSize AL_CutHeadPos,
|
||||
ZCLink* AP_CutTail, TypeSize AL_CutTailPos,
|
||||
ZCLink* AP_CutHead ,
|
||||
ZCLink* AP_CutTail ,
|
||||
TypeSize AL_CutSize ,
|
||||
ZtCObjList& ARR_StoreList
|
||||
)
|
||||
###############################################################################*/
|
||||
@ -2934,11 +2912,13 @@ namespace ZNsMain
|
||||
{
|
||||
ZtCObjList VO_CObjList;
|
||||
|
||||
CutLink( AR_CIterator1.GetLink(), AR_CIterator1.GetPos(),
|
||||
AR_CIterator2.GetLink(), AR_CIterator2.GetPos(), RR(VO_CObjList)
|
||||
/****/ );
|
||||
|
||||
VO_CObjList.DeleteAll();
|
||||
CutLink //////////////////////////////////////////////////
|
||||
(
|
||||
AR_CIterator1.GetLink(), AR_CIterator2.GetLink(),
|
||||
AR_CIterator2.GetPos () - AR_CIterator1.GetPos (),
|
||||
RR(VO_CObjList)
|
||||
)
|
||||
.DeleteAll(); ////////////////////////////////////////////
|
||||
}/*
|
||||
void erase(ZCIterator& AR_CIterator1, ZCIterator& AR_CIterator2)*/
|
||||
|
||||
|
@ -60,6 +60,27 @@ namespace ZNsMain
|
||||
static void ShowNode2(ZCLink2& AR_CLink)*/
|
||||
|
||||
|
||||
static void ShowNode1_2(ZCLink1& AR_CLink, int& ARRI_CallCnt)
|
||||
{
|
||||
++ARRI_CallCnt;
|
||||
|
||||
cout<<ARRI_CallCnt<<" * Node Prev : "<<*(AR_CLink-1)<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node Curr : "<<*(AR_CLink )<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node Next : "<<*(AR_CLink+1)<<endl;
|
||||
}/*
|
||||
static void ShowNode1(ZCLink1& AR_CLink, int& ARRI_CallCnt)*/
|
||||
|
||||
static void ShowNode2_2(ZCLink2& AR_CLink, int& ARRI_CallCnt)
|
||||
{
|
||||
++ARRI_CallCnt;
|
||||
|
||||
cout<<ARRI_CallCnt<<" * Node Prev : "<<*(AR_CLink-1)<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node Curr : "<<*(AR_CLink )<<endl;
|
||||
cout<<ARRI_CallCnt<<" * Node Next : "<<*(AR_CLink+1)<<endl;
|
||||
}/*
|
||||
static void ShowNode2(ZCLink2& AR_CLink, int& ARRI_CallCnt)*/
|
||||
|
||||
|
||||
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
|
||||
{
|
||||
CStringBase VO_CStringBase ;
|
||||
@ -229,24 +250,27 @@ namespace ZNsMain
|
||||
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
|
||||
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
|
||||
|
||||
cout<<"# list10 IterElemLink"<<endl;
|
||||
VO_ListOfStr10.IterElemLink(&ShowNode1);
|
||||
|
||||
cout<<"# list10 2th link to list10 tail"<<endl;
|
||||
int VI_CallCnt=0;
|
||||
|
||||
cout<<"# list10 IterElemLink ################"<<endl;
|
||||
VO_ListOfStr10.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
cout<<"# list10 2th link to list11 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 IterElemLink ################"<<endl;
|
||||
VO_ListOfStr10.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"# list11 IterElemLink ################"<<endl;
|
||||
VO_ListOfStr11.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
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);
|
||||
cout<<"# list10 IterElemLink ################"<<endl;
|
||||
VO_ListOfStr10.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"# list11 IterElemLink ################"<<endl;
|
||||
VO_ListOfStr11.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user