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 /*########################################################*/ ZtCObjList& CutLink /*########################################################*/
( (
ZCLink* AP_CutHead, TypeSize AL_CutHeadPos, ZCLink* AP_CutHead ,
ZCLink* AP_CutTail, TypeSize AL_CutTailPos, ZCLink* AP_CutTail ,
TypeSize AL_CutSize ,
ZtCObjList& ARR_StoreList ZtCObjList& ARR_StoreList
) )
/*#############################################################################*/ /*#############################################################################*/
@ -1224,32 +1225,22 @@ namespace ZNsMain
// AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치 // AP_CutTail 은 삭제하려는 링크의 범위의 뒤의 링크, AL_CutTailPos 는 그 위치
// 따라서 AL_CutHeadPos <= 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); mp_HeadLink=0; // 모든 링크를 삭제할 때.
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;
} }
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); ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink);
} }
@ -1259,13 +1250,8 @@ namespace ZNsMain
}/* }/*
else*/ else*/
TypeSize VL_CutSize = AL_CutTailPos-AL_CutHeadPos+1 ;
/*++++*/ ml_LinkSize -= VL_CutSize ;
// AP_CutHeadAP_CutTail 을 연결하여 ml_LinkSize -= AL_CutSize; ZCLink::MakeRing(AP_CutHead, AP_CutTail);
// 이중 원형 연결리스트가 되도록 한다.
ZCLink::MakeRing(AP_CutHead, AP_CutTail);
#ifdef _DEBUG #ifdef _DEBUG
@ -1274,8 +1260,8 @@ namespace ZNsMain
{ {
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app); std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl; 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<<"Error In 'ZtCObjList& CutLink( ZCLink* AP_CutHead , ZCLink* AP_CutTail," <<std::endl;
fileout<<" ZCLink* AP_CutTail, TypeSize AL_CutTailPos, ZtCObjList& ARR_StoreList" <<std::endl; fileout<<" TypeSize AL_CutSize, ZtCObjList& ARR_StoreList" <<std::endl;
fileout<<" /****************/ )" <<std::endl; fileout<<" /****************/ )" <<std::endl;
fileout<<"Object ARR_StoreList is not EMPTY !"<<std::endl; fileout<<"Object ARR_StoreList is not EMPTY !"<<std::endl;
fileout.close(); fileout.close();
@ -1287,14 +1273,15 @@ namespace ZNsMain
#endif //_DEBUG #endif //_DEBUG
ARR_StoreList.mp_HeadLink = AP_CutHead ; ARR_StoreList.mp_HeadLink = AP_CutHead ;
ARR_StoreList.ml_LinkSize = VL_CutSize ; ARR_StoreList.ml_LinkSize = AL_CutSize ;
return ARR_StoreList; return ARR_StoreList;
}/* }/*
ZtCObjList& CutLink ############################################################ ZtCObjList& CutLink ############################################################
( (
ZCLink* AP_CutHead, TypeSize AL_CutHeadPos, ZCLink* AP_CutHead ,
ZCLink* AP_CutTail, TypeSize AL_CutTailPos, ZCLink* AP_CutTail ,
TypeSize AL_CutSize ,
ZtCObjList& ARR_StoreList ZtCObjList& ARR_StoreList
) )
###############################################################################*/ ###############################################################################*/
@ -1461,8 +1448,9 @@ namespace ZNsMain
CutLink //////////////////////////////////////////////// CutLink ////////////////////////////////////////////////
( (
GetLinkPtr(rhs.ml_LinkSize+1), rhs.ml_LinkSize+1, GetLinkPtr(rhs.ml_LinkSize+1),
GetLinkPtr( ml_LinkSize ), ml_LinkSize , GetLinkPtr( ml_LinkSize ),
ml_LinkSize - rhs.ml_LinkSize,
RR(VO_StoreList) RR(VO_StoreList)
). DeleteAll(); ). DeleteAll();
///////////////////////////////////////////////////////// /////////////////////////////////////////////////////////
@ -2108,8 +2096,9 @@ namespace ZNsMain
ZtCObjList& CutLinkOut /*#####################################################*/ ZtCObjList& CutLinkOut /*#####################################################*/
( (
ZCLink* AP_CutHead, TypeSize AL_CutHeadPos, ZCLink* AP_CutHead ,
ZCLink* AP_CutTail, TypeSize AL_CutTailPos, ZCLink* AP_CutTail ,
TypeSize AL_CutSize ,
ZtCObjList& ARR_StoreList ZtCObjList& ARR_StoreList
) )
/*#############################################################################*/ /*#############################################################################*/
@ -2120,32 +2109,20 @@ namespace ZNsMain
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); mp_HeadLink=0; // 모든 링크를 삭제할 때.
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;
} }
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); ZCLink::MakeRing(mp_HeadLink, AP_CutHead->mp_PrevLink);
} }
@ -2155,12 +2132,12 @@ namespace ZNsMain
}/* }/*
else*/ 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 가 비어 있는 것으로 와 같다. 이후에 CutLink() 에서는 ARR_StoreList 가 비어 있는 것으로
간주하지만, CutLinkOut() 는 ARR_StoreList 이 비어 있지 않은 경우에 간주하지만, CutLinkOut() 는 ARR_StoreList 이 비어 있지 않은 경우에
@ -2173,14 +2150,14 @@ namespace ZNsMain
ZCLink::MakeRing(AP_CutHead, AP_CutTail); ZCLink::MakeRing(AP_CutHead, AP_CutTail);
ARR_StoreList.mp_HeadLink = AP_CutHead ; ARR_StoreList.mp_HeadLink = AP_CutHead ;
ARR_StoreList.ml_LinkSize = AL_CutTailPos-AL_CutHeadPos+1; ARR_StoreList.ml_LinkSize = AL_CutSize ;
} }
else else
{ {
ZCLink::JoinLink(ARR_StoreList.mp_HeadLink->mp_PrevLink, AP_CutHead); ZCLink::JoinLink(ARR_StoreList.mp_HeadLink->mp_PrevLink, AP_CutHead);
ZCLink::MakeRing(ARR_StoreList.mp_HeadLink , AP_CutTail); ZCLink::MakeRing(ARR_StoreList.mp_HeadLink , AP_CutTail);
ARR_StoreList.ml_LinkSize += AL_CutTailPos-AL_CutHeadPos+1 ; ARR_StoreList.ml_LinkSize += AL_CutSize ;
}/* }/*
else*/ else*/
@ -2188,8 +2165,9 @@ namespace ZNsMain
}/* }/*
ZtCObjList& CutLinkOut ######################################################### ZtCObjList& CutLinkOut #########################################################
( (
ZCLink* AP_CutHead, TypeSize AL_CutHeadPos, ZCLink* AP_CutHead ,
ZCLink* AP_CutTail, TypeSize AL_CutTailPos, ZCLink* AP_CutTail ,
TypeSize AL_CutSize ,
ZtCObjList& ARR_StoreList ZtCObjList& ARR_StoreList
) )
###############################################################################*/ ###############################################################################*/
@ -2934,11 +2912,13 @@ namespace ZNsMain
{ {
ZtCObjList VO_CObjList; ZtCObjList VO_CObjList;
CutLink( AR_CIterator1.GetLink(), AR_CIterator1.GetPos(), CutLink //////////////////////////////////////////////////
AR_CIterator2.GetLink(), AR_CIterator2.GetPos(), RR(VO_CObjList) (
/****/ ); AR_CIterator1.GetLink(), AR_CIterator2.GetLink(),
AR_CIterator2.GetPos () - AR_CIterator1.GetPos (),
VO_CObjList.DeleteAll(); RR(VO_CObjList)
)
.DeleteAll(); ////////////////////////////////////////////
}/* }/*
void erase(ZCIterator& AR_CIterator1, ZCIterator& AR_CIterator2)*/ void erase(ZCIterator& AR_CIterator1, ZCIterator& AR_CIterator2)*/

View File

@ -60,6 +60,27 @@ namespace ZNsMain
static void ShowNode2(ZCLink2& AR_CLink)*/ 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) static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{ {
CStringBase VO_CStringBase ; CStringBase VO_CStringBase ;
@ -229,24 +250,27 @@ namespace ZNsMain
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl; cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.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); VO_ListOfStr10.SendOutTail(VO_ListOfStr10.GetLinkPtr(2), VO_ListOfStr11);
cout<<"# list10 IterElemLink"<<endl; cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1); VO_ListOfStr10.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
cout<<"# list11 IterElemLink"<<endl; cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1); VO_ListOfStr11.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
cout<<"# list10 1th link to list10 head"<<endl; cout<<"# list10 1th link to list10 head"<<endl;
VO_ListOfStr10.SendOutHead(VO_ListOfStr10.GetLinkPtr(1), VO_ListOfStr11); VO_ListOfStr10.SendOutHead(VO_ListOfStr10.GetLinkPtr(1), VO_ListOfStr11);
cout<<"# list10 IterElemLink"<<endl; cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1); VO_ListOfStr10.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
cout<<"# list11 IterElemLink"<<endl; cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1); VO_ListOfStr11.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
return 0; return 0;