commit 2025-10-05 15:31 edit CutLink() argument : ZCppMain/ZtCObjList.H

This commit is contained in:
2025-10-05 15:31:38 +09:00
parent 1cb7045ad8
commit 8890462b1b
2 changed files with 90 additions and 86 deletions

View File

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

View File

@ -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;