432 lines
18 KiB
C++
432 lines
18 KiB
C++
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
#include "ZCppMain/ZtCLinkList.H"
|
|
|
|
|
|
using namespace std ;
|
|
using namespace ZNsMain ;
|
|
|
|
|
|
namespace ZNsMain
|
|
{
|
|
|
|
namespace ZNsExam
|
|
{
|
|
|
|
template<typename TDummy=void*> class ZtCExamCLinkList
|
|
{
|
|
public:
|
|
|
|
class ZCLinkData : public ZNsIFaceEx::ZtCLink<ZCEmpty, ZCLinkData>
|
|
{
|
|
private:
|
|
string mo_DataCStr;
|
|
private:
|
|
static int SI_CallCnt;
|
|
public :
|
|
typedef ZNsIFaceEx::ZtCLink<ZCEmpty, ZCLinkData> TypeBase;
|
|
public :
|
|
|
|
ZCLinkData() : ZNsIFaceEx::ZtCLink<ZCEmpty, ZCLinkData>()
|
|
{
|
|
cout<<"* ZCLinkData() : "<<++ZCLinkData::SI_CallCnt<<endl;
|
|
}
|
|
ZCLinkData(const ZCLinkData& rhs) :
|
|
ZNsIFaceEx::
|
|
ZtCLink<ZCEmpty, ZCLinkData>(),
|
|
mo_DataCStr(rhs.mo_DataCStr)
|
|
{cout<<"* ZCLinkData(const ZCLinkData& rhs) : "<<++ZCLinkData::SI_CallCnt<<endl;}
|
|
|
|
ZCLinkData(const TypeBase& rhs) :
|
|
ZNsIFaceEx::
|
|
ZtCLink<ZCEmpty, ZCLinkData>(),
|
|
mo_DataCStr
|
|
(
|
|
(*static_cast<const ZCLinkData*>(&rhs)).mo_DataCStr
|
|
)
|
|
{cout<<"* ZCLinkData(const TypeBase& rhs) : "<<++ZCLinkData::SI_CallCnt<<endl;}
|
|
|
|
|
|
~ZCLinkData()
|
|
{
|
|
cout<<"* ~ZCLinkData() : "<<ZCLinkData::SI_CallCnt--<<endl;
|
|
}
|
|
|
|
|
|
ZCLinkData& operator=(const ZCLinkData& rhs)
|
|
{
|
|
mo_DataCStr = rhs.mo_DataCStr; return *this;
|
|
}/*
|
|
ZCLinkData& operator=(const ZCLinkData& rhs)*/
|
|
|
|
/***/ string& GetData() {return mo_DataCStr;}
|
|
const string& GetData() const{return mo_DataCStr;}
|
|
|
|
public :
|
|
};/*
|
|
class ZCLinkData : public ZNsIFaceEx::ZtCLink<ZCEmpty, ZCLinkData>*/
|
|
|
|
|
|
typedef ZNsIFaceEx::ZtCLink
|
|
<ZCEmpty, ZCLinkData> ZCLinkBase;
|
|
typedef ZNsIFaceEx::ZtCLink
|
|
<string , ZCEmpty > ZCLinkStr ;
|
|
|
|
public:
|
|
typedef ZtCLinkList<ZCLinkBase> ZCLinkDataList;
|
|
typedef ZtCLinkList<ZCLinkStr > ZCLinkStrList ;
|
|
typedef typename
|
|
ZCLinkDataList::ZCLinkOpt ZCStrLinkOpt ;
|
|
public:
|
|
|
|
|
|
static void ShowNode0(ZCLinkBase& AR_CLink, ZTypLong& ARRI_CallCnt)
|
|
{
|
|
++ARRI_CallCnt;
|
|
|
|
cout<<ARRI_CallCnt<<" * Node Curr : "<<(AR_CLink)().GetData()<<endl;
|
|
}/*
|
|
static void ShowNode0(ZCLinkBase& AR_CLink, ZTypLong& ARRI_CallCnt)*/
|
|
|
|
static void ShowNode1(ZCLinkBase& AR_CLink, ZTypLong& ARRI_CallCnt)
|
|
{
|
|
++ARRI_CallCnt;
|
|
|
|
cout<<ARRI_CallCnt<<" * Node Prev : "<<(AR_CLink-1)().GetData()<<endl;
|
|
cout<<ARRI_CallCnt<<" * Node Curr : " <<(AR_CLink )().GetData()<<endl;
|
|
cout<<ARRI_CallCnt<<" * Node Next : "<<(AR_CLink+1)().GetData()<<endl;
|
|
}/*
|
|
static void ShowNode1(ZCLinkBase& AR_CLink, ZTypLong& ARRI_CallCnt)*/
|
|
|
|
|
|
static void AppendEach(ZCLinkBase& AR_CLink)
|
|
{
|
|
AR_CLink().GetData().append("_");
|
|
}/*
|
|
static void AppendEach(ZCLinkBase& AR_CLink)*/
|
|
|
|
|
|
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
|
|
{
|
|
ZTypLong VI_CallCnt =0 ;
|
|
ZCLinkDataList VO_CDataList1;
|
|
ZCLinkDataList VO_CDataList2;
|
|
ZCLinkStrList VO_CStrLis20 ;
|
|
ZCStrLinkOpt VO_StrLinkOpt = VO_CDataList1.GetObjOpt(1);
|
|
|
|
cout<<"# VO_StrLinkOpt.has_value()="<<VO_StrLinkOpt.has_value()<<endl;
|
|
cout<<"# VO_StrLinkOpt.bool() ="<<bool(VO_StrLinkOpt) <<endl;
|
|
|
|
VO_CDataList1.AddTail()().GetData()=string("123");
|
|
VO_CDataList1.AddTail()().GetData()=string("ABC");
|
|
VO_CDataList1.AddTail()().GetData()=string("xyz");
|
|
|
|
VO_CDataList2.AddTail()().GetData()=string("Z01");
|
|
VO_CDataList2.AddTail()().GetData()=string("Z02");
|
|
VO_CDataList2.AddTail()().GetData()=string("Z03");
|
|
|
|
VO_CStrLis20.AddTail()()=string("__1");
|
|
VO_CStrLis20.AddTail()()=string("__2");
|
|
VO_CStrLis20.AddTail()()=string("__3");
|
|
|
|
VO_StrLinkOpt = VO_CDataList1.GetObjOpt(1);
|
|
|
|
cout<<"# VO_StrLinkOpt.GetObjOpt(1) : has_value()="<<VO_StrLinkOpt.has_value()<<endl;
|
|
cout<<"# VO_StrLinkOpt.GetObjOpt(1) : bool ()="<<bool(VO_StrLinkOpt) <<endl;
|
|
|
|
if(VO_StrLinkOpt.has_value())
|
|
{
|
|
cout<<"# value by VO_StrLinkOpt : "<<VO_StrLinkOpt.value()().GetData()<<endl;
|
|
cout<<"# value by VO_StrLinkOpt() : "<<VO_StrLinkOpt() ().GetData()<<endl;
|
|
}/*
|
|
if(VO_StrLinkOpt.has_value())*/
|
|
|
|
VO_StrLinkOpt = VO_CDataList1.GetTailOpt();
|
|
|
|
cout<<"# VO_StrLinkOpt.GetTailOpt() : has_value()="<<VO_StrLinkOpt.has_value()<<endl;
|
|
cout<<"# VO_StrLinkOpt.GetTailOpt() : bool ()="<<bool(VO_StrLinkOpt) <<endl;
|
|
|
|
if(VO_StrLinkOpt.has_value())
|
|
{
|
|
cout<<"# value by VO_StrLinkOpt : "<<VO_StrLinkOpt.value()().GetData()<<endl;
|
|
cout<<"# value by VO_StrLinkOpt() : "<<VO_StrLinkOpt() ().GetData()<<endl;
|
|
}/*
|
|
if(VO_StrLinkOpt.has_value())*/
|
|
|
|
|
|
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode1, ZftMCP(VI_CallCnt=0));
|
|
|
|
|
|
VO_CDataList1.JoinHead(VO_CDataList2);
|
|
|
|
cout<<"# after VO_CDataList1.JoinHead(VO_CDataList2)"<<endl;
|
|
|
|
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
|
VO_CDataList2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode1, ZftMCP(VI_CallCnt=0));
|
|
|
|
|
|
VO_CDataList2 = VO_CDataList1 ;
|
|
|
|
cout<<"# after VO_CDataList2 = VO_CDataList1"<<endl;
|
|
|
|
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
|
VO_CDataList2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
|
|
VO_CDataList1.IterElement(&AppendEach);
|
|
cout<<"***********************************************"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
VO_CDataList1.SendRangeOutAfter
|
|
(
|
|
VO_CDataList1.GetObjOpt(1).value()
|
|
, VO_CDataList1.GetObjOpt(2).value()
|
|
, 2
|
|
, VO_CDataList2
|
|
, VO_CDataList2.GetObjOpt(1)
|
|
) ;
|
|
cout<<"# after VO_CDataList1.SendRangeOutAfter(1th, 2th, 2, rhs, rhs's 1th)"<<endl;
|
|
|
|
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
|
VO_CDataList2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
|
|
VO_CDataList2.SendRangeOutBefore
|
|
(
|
|
VO_CDataList2.GetObjOpt(7).value()
|
|
, VO_CDataList2.GetObjOpt(8).value()
|
|
, 2
|
|
, VO_CDataList1
|
|
, VO_CDataList1.GetObjOpt(1)
|
|
) ;
|
|
cout<<"# after VO_CDataList2.SendRangeOutAfter(7th, 8th, 2, rhs, rhs's 1th)"<<endl;
|
|
|
|
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
|
VO_CDataList2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
|
|
VO_CDataList2.CopyThis( RR(VO_CDataList1) );
|
|
cout<<"# after VO_CDataList2.CopyThis( RR(VO_CDataList1) )"<<endl;
|
|
|
|
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
|
VO_CDataList2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
VO_CDataList1.SwapLink
|
|
(VO_CDataList1.HeadRef(), VO_CDataList1.HeadRef(1));
|
|
cout<<"# after VO_CDataList1.SwapLink(1th, 2th)"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
VO_CDataList1.SwapLink
|
|
(VO_CDataList1.HeadRef(), VO_CDataList1.HeadRef(11));
|
|
cout<<"# after VO_CDataList1.SwapLink(1th, 12th)"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
VO_CDataList1.SwapLink
|
|
(VO_CDataList1.HeadRef(11), VO_CDataList1.HeadRef(10));
|
|
cout<<"# after VO_CDataList1.SwapLink(12th, 11th)"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
VO_CDataList1.MoveLinkTail
|
|
(VO_CDataList1.HeadRef());
|
|
cout<<"# after VO_CDataList1.MoveLinkTail(1th)"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
|
|
_FOR_ITER_EASY_START0_C(ZCLinkDataList, VO_CDataList1, VH_NowIter, i)
|
|
{
|
|
cout<<"# list1 const: "<<(i+1)<<" "<<VO_CDataList1.ItD(VH_NowIter).GetData()<<endl;
|
|
}
|
|
_FOR_ITER_EASY_CLOSE0_C(ZCLinkDataList, VO_CDataList1, VH_NowIter, i)
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
_FOR_ITER_EASY_START0_RC(ZCLinkDataList, VO_CDataList1, VH_NowIter, i)
|
|
{
|
|
cout<<"# list1 rev const: "<<(i+1)<<" "<<VO_CDataList1.ItD(VH_NowIter).GetData()<<endl;
|
|
}
|
|
_FOR_ITER_EASY_CLOSE0_RC(ZCLinkDataList, VO_CDataList1, VH_NowIter, i)
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
|
|
__for_it(ZCLinkDataList, VO_CDataList1, VH_NowIter)
|
|
{
|
|
cout<<"# list1 __for_it : "<<VH_NowIter.GetPos()<<" "<<(*VH_NowIter).GetData()<<endl;
|
|
}
|
|
cout<<"***********************************************"<<endl;
|
|
__for_it(ZCLinkStrList , VO_CStrLis20, VH_NowIter)
|
|
{
|
|
cout<<"# list20 __for_it : "<<VH_NowIter.GetPos()<<" "<<(*VH_NowIter)<<endl;
|
|
}
|
|
|
|
_FOR_ITER_EASY_START0_C(ZCLinkStrList, VO_CStrLis20, VH_NowIter, i)
|
|
{
|
|
cout<<"# list20 const: "<<(i+1)<<" "<<VO_CStrLis20.ItD(VH_NowIter)<<endl;
|
|
}
|
|
_FOR_ITER_EASY_CLOSE0_C(ZCLinkStrList, VO_CStrLis20, VH_NowIter, i)
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
|
|
VO_CDataList1.MoveRangeIn
|
|
(
|
|
VO_CDataList1.HeadRef( ),
|
|
VO_CDataList1.HeadRef(1 ),
|
|
VO_CDataList1.HeadRef(11),
|
|
true
|
|
);
|
|
cout<<"# after VO_CDataList1.MoveRangeIn(1th, 2th, 12th, after)"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
|
|
VO_CDataList1.MoveRangeIn
|
|
(
|
|
VO_CDataList1.HeadRef(1 ),
|
|
VO_CDataList1.HeadRef(11),
|
|
VO_CDataList1.HeadRef( ),
|
|
false
|
|
);
|
|
cout<<"# after VO_CDataList1.MoveRangeIn(2th, 12th, 1th, before)"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
|
|
VO_CDataList1.MoveRangeIn
|
|
(
|
|
VO_CDataList1.HeadRef( ),
|
|
VO_CDataList1.HeadRef(1),
|
|
VO_CDataList1.HeadRef(2),
|
|
false
|
|
);
|
|
cout<<"# after VO_CDataList1.MoveRangeIn(1th, 2th, 3th, before)"<<endl;
|
|
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
|
cout<<"***********************************************"<<endl;
|
|
|
|
return 0;
|
|
}/*
|
|
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
|
|
|
|
|
|
public:
|
|
};/*
|
|
template<typename TDummy=void*> class ZtCExamCLinkList*/
|
|
|
|
|
|
|
|
template<typename TDummy> int
|
|
ZtCExamCLinkList<TDummy>::ZCLinkData::SI_CallCnt(0) ;
|
|
|
|
|
|
}/*
|
|
namespace ZNsExam*/
|
|
|
|
}/*
|
|
namespace ZNsMain*/
|
|
|
|
|
|
int main(int AI_ArgCnt, char* APP_ArgVal[])
|
|
{
|
|
return ZNsMain::ZNsExam::
|
|
|
|
ZtCExamCLinkList<>::Main(AI_ArgCnt, APP_ArgVal);
|
|
}/*
|
|
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
|
|
|
|
|
|
/*////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
■ cygwin 컴파일
|
|
|
|
// g++ -mno-cygwin -o ZtCLinkList_001.exe ZtCLinkList_001.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
|
|
// g++ -mno-cygwin -o ZtCLinkList_001_D.exe ZtCLinkList_001.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
|
|
|
|
■ mingw 컴파일
|
|
|
|
g++.exe -o ZtCLinkList_001_mw.exe ZtCLinkList_001.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation
|
|
g++.exe -o ZtCLinkList_001_mw_D.exe ZtCLinkList_001.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
|
|
|
|
./ZtCLinkList_001_mw.exe
|
|
./ZtCLinkList_001_mw_D.exe
|
|
|
|
|
|
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
|
|
# date
|
|
Sun Aug 24 10:47:09 KST 2025
|
|
|
|
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
|
|
# g++ --version
|
|
g++.exe (Rev2, Built by MSYS2 project) 13.2.0
|
|
Copyright (C) 2023 Free Software Foundation, Inc.
|
|
This is free software; see the source for copying conditions. There is NO
|
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
|
■ Linux 컴파일
|
|
|
|
g++ -std=c++98 -o ZtCLinkList_001.exe ZtCLinkList_001.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
|
|
g++ -std=c++98 -o ZtCLinkList_001_D.exe ZtCLinkList_001.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
|
|
|
|
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
|
|
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
|
|
Copyright (C) 2019 Free Software Foundation, Inc.
|
|
This is free software; see the source for copying conditions. There is NO
|
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ date
|
|
Sun Aug 24 00:05:51 DST 2025
|
|
|
|
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ cat /etc/os-release
|
|
NAME="Ubuntu"
|
|
VERSION="20.04.6 LTS (Focal Fossa)"
|
|
ID=ubuntu
|
|
ID_LIKE=debian
|
|
PRETTY_NAME="Ubuntu 20.04.6 LTS"
|
|
VERSION_ID="20.04"
|
|
HOME_URL="https://www.ubuntu.com/"
|
|
SUPPORT_URL="https://help.ubuntu.com/"
|
|
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
|
|
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
|
|
VERSION_CODENAME=focal
|
|
UBUNTU_CODENAME=focal
|
|
|
|
|
|
[sauron@q381-2657 ZCppMainTest]$ cat /etc/centos-release
|
|
CentOS Linux release 7.9.2009 (Core)
|
|
|
|
[sauron@q381-2657 ZCppMainTest]$ g++ --version
|
|
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
|
|
Copyright (C) 2015 Free Software Foundation, Inc.
|
|
This is free software; see the source for copying conditions. There is NO
|
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
■ 실행
|
|
|
|
./ZtCLinkList_001.exe
|
|
./ZtCLinkList_001_D.exe
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////*/
|