commit 2025-10-07 18:26 add TypeMain in ZCppMain/ZtCLinkList.H
This commit is contained in:
@ -28,6 +28,30 @@
|
||||
|
||||
-- 2025-10-07 12:23
|
||||
|
||||
|
||||
ZNsIFaceEx::ZtCLink 는 TypeData 라는 자료형을 갖는데, ZtCLink 이
|
||||
|
||||
상속 클래스가 있다면, 그 상속 클래스
|
||||
기반 클래스만 있다면, 그 기반 클래스
|
||||
|
||||
를 나타낸다. 상속 클래스도 기반 클래스도 없다면, 자기 자신을 나타낸다.
|
||||
|
||||
-- 2025-10-07 17:18
|
||||
|
||||
|
||||
ZNsIFaceEx::ZtCLink 는 TypeMain 이라는 자료형을 갖는데, ZtCLink 이
|
||||
|
||||
상속 클래스가 있다면, 그 상속 클래스
|
||||
상속 클래스가 없다면, 클래스 자기 자신
|
||||
|
||||
를 나타낸다. 그래서 ZtCLinkList 에서 new 로 객체를 만들 때,
|
||||
|
||||
ZtCLink* my=new TypeMain;
|
||||
|
||||
처럼 쓸 수 있게 한다.
|
||||
|
||||
-- 2025-10-07 17:49
|
||||
|
||||
■ class ZtCLinkMoveList 은 고정적으로 맨 앞과 맨 뒤를 가상으로 표시하는 링크 객체를 멤
|
||||
버로 가지고 있다. 그래서 중간에서 링크 자료를 떼어 내어 다른 리스트로 옮길 때, 그 링
|
||||
크가 리스트의 앞이나 뒤가 아닌, 무조건 중간에 존재한다고 가정하고 빠르게 떼어낼 수 있
|
||||
@ -99,6 +123,8 @@ namespace ZNsMain
|
||||
typedef ZtCLink TypeThis ;
|
||||
typedef TTypBase TypeBase ;
|
||||
typedef TChild TypeChild;
|
||||
typedef TChild TypeData ;
|
||||
typedef TChild TypeMain ;
|
||||
typedef ZTypLong TypeSize ;
|
||||
protected:
|
||||
ZtCLink* mp_NextLink;
|
||||
@ -147,6 +173,11 @@ namespace ZNsMain
|
||||
}/*
|
||||
ZtCLink(const TTypBase& rhs)*/
|
||||
|
||||
virtual ~ZtCLink()
|
||||
{
|
||||
}/*
|
||||
virtual ~ZtCLink()*/
|
||||
|
||||
|
||||
ZtCLink& operator=(const ZtCLink& rhs)
|
||||
{
|
||||
@ -167,8 +198,8 @@ namespace ZNsMain
|
||||
ZtCLink& operator=(TypeBase& AR_CBase)*/
|
||||
|
||||
|
||||
/***/ TypeBase& operator()() { return *static_cast< TypeBase*>(this); }
|
||||
const TypeBase& operator()() const{ return *static_cast<const TypeBase*>(this); }
|
||||
/***/ TypeData& operator()() { return *static_cast< TypeData*>(this); }
|
||||
const TypeData& operator()() const{ return *static_cast<const TypeData*>(this); }
|
||||
|
||||
|
||||
ZtCLink* GetNextPtr(){return mp_NextLink;}
|
||||
@ -318,6 +349,8 @@ namespace ZNsMain
|
||||
typedef ZtCLink<TTypBase, ZCEmpty> TypeThis ;
|
||||
typedef TTypBase /*+++++++++++++*/ TypeBase ;
|
||||
typedef ZCEmpty /*+++++++++++++*/ TypeChild;
|
||||
typedef TypeBase /*+++++++++++++*/ TypeData ;
|
||||
typedef TypeThis /*+++++++++++++*/ TypeMain ;
|
||||
typedef ZTypLong /*+++++++++++++*/ TypeSize ;
|
||||
protected:
|
||||
ZtCLink* mp_NextLink;
|
||||
@ -524,13 +557,15 @@ namespace ZNsMain
|
||||
|
||||
public :
|
||||
typedef ZtCLink<ZCEmpty, TChild> TypeThis ;
|
||||
typedef ZCEmpty /*+++++++++++*/ TypeBase ;
|
||||
typedef TChild /*+++++++++++*/ TypeChild;
|
||||
typedef ZTypLong /*++++++++++++*/ TypeSize ;
|
||||
typedef ZCEmpty /*++++++++++*/ TypeBase ;
|
||||
typedef TChild /*++++++++++*/ TypeChild;
|
||||
typedef TypeChild /*++++++++++*/ TypeData ;
|
||||
typedef TypeChild /*++++++++++*/ TypeMain ;
|
||||
typedef ZTypLong /*++++++++++*/ TypeSize ;
|
||||
protected:
|
||||
ZtCLink* mp_NextLink;
|
||||
ZtCLink* mp_PrevLink;
|
||||
protected:
|
||||
protected: ////////////////////////////////////
|
||||
|
||||
static void JoinLink(ZtCLink* AP_PrevLink, ZtCLink* AP_NextLink)
|
||||
{
|
||||
@ -546,8 +581,24 @@ namespace ZNsMain
|
||||
}/*
|
||||
static void MakeRing(ZtCLink* AP_HeadLink, ZtCLink* AP_TailLink)*/
|
||||
|
||||
/*protected:*/
|
||||
public :
|
||||
protected: /////////////////////////////////////////////
|
||||
|
||||
TypeChild& GetChildObj()
|
||||
{
|
||||
return *static_cast<TypeChild*>(this);
|
||||
}/*
|
||||
TypeChild& GetChildObj()*/
|
||||
|
||||
const TypeChild& GetChildObj() const
|
||||
{
|
||||
return *static_cast<const TypeChild*>(this);
|
||||
}/*
|
||||
const TypeChild& GetChildObj() const*/
|
||||
|
||||
protected: /////////////////////////////////////////////
|
||||
|
||||
// 생성자와 복사 생성자를 protected 영역에 두어서,
|
||||
// 상속 클래스를 만드는 것을 강제한다.
|
||||
|
||||
ZtCLink<ZCEmpty, TChild>()
|
||||
{
|
||||
@ -563,15 +614,39 @@ namespace ZNsMain
|
||||
}/*
|
||||
ZtCLink<ZCEmpty, TChild>(const TypeThis& rhs)*/
|
||||
|
||||
public : /////////////////////////////////////////////
|
||||
|
||||
virtual ~ZtCLink<ZCEmpty, TChild>()
|
||||
{
|
||||
/*/////////////////////////////////////////////
|
||||
|
||||
■ ZtCLink<ZCEmpty, TChild> 는 상속을 하려고
|
||||
설계한 것이라, 소멸자를 virtual 로 만든다.
|
||||
그러니까 아래 코드처럼 작성해야 할 때가 있
|
||||
을 것이다.
|
||||
|
||||
TypeThis* myp = new TypeChild;
|
||||
|
||||
// some code
|
||||
|
||||
delete myp;
|
||||
|
||||
-- 2025-10-07 16:31
|
||||
|
||||
/////////////////////////////////////////////*/
|
||||
}/*
|
||||
virtual ~ZtCLink<ZCEmpty, TChild>()*/
|
||||
|
||||
|
||||
TypeThis& operator=(const TypeThis& rhs)
|
||||
{
|
||||
return *this;
|
||||
this->GetChildObj() = rhs.GetChildObj(); return *this;
|
||||
}/*
|
||||
TypeThis& operator=(const TypeThis& rhs)*/
|
||||
|
||||
|
||||
/***/ TypeThis& operator()() { return *this; }
|
||||
const TypeThis& operator()() const{ return *this; }
|
||||
/***/ TypeData& operator()() { return GetChildObj(); }
|
||||
const TypeData& operator()() const{ return GetChildObj(); }
|
||||
|
||||
ZtCLink* GetNextPtr(){return mp_NextLink;}
|
||||
ZtCLink* GetPrevPtr(){return mp_PrevLink;}
|
||||
@ -717,6 +792,8 @@ namespace ZNsMain
|
||||
typedef ZtCLink<ZCEmpty, ZCEmpty> TypeThis ;
|
||||
typedef ZCEmpty /*++++++++++++*/ TypeBase ;
|
||||
typedef ZCEmpty /*++++++++++++*/ TypeChild;
|
||||
typedef TypeThis /*++++++++++++*/ TypeData ;
|
||||
typedef TypeThis /*++++++++++++*/ TypeMain ;
|
||||
typedef ZTypLong /*++++++++++++*/ TypeSize ;
|
||||
protected:
|
||||
ZtCLink* mp_NextLink;
|
||||
@ -737,8 +814,8 @@ namespace ZNsMain
|
||||
}/*
|
||||
static void MakeRing(ZtCLink* AP_HeadLink, ZtCLink* AP_TailLink)*/
|
||||
|
||||
/*protected:*/
|
||||
public :
|
||||
/*protected: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
|
||||
public : /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
|
||||
|
||||
ZtCLink<ZCEmpty, ZCEmpty>()
|
||||
{
|
||||
@ -761,6 +838,10 @@ namespace ZNsMain
|
||||
TypeThis& operator=(const TypeThis& rhs)*/
|
||||
|
||||
|
||||
/***/ TypeThis& operator()() { return *this; }
|
||||
const TypeThis& operator()() const{ return *this; }
|
||||
|
||||
|
||||
ZtCLink* GetNextPtr(){return mp_NextLink;}
|
||||
ZtCLink* GetPrevPtr(){return mp_PrevLink;}
|
||||
|
||||
@ -911,6 +992,8 @@ namespace ZNsMain
|
||||
typedef TCLink ZCLink ;
|
||||
typedef TCLink TypeData;
|
||||
typedef TTypSize TypeSize;
|
||||
public :
|
||||
typedef typename TCLink::TypeMain TypeMain;
|
||||
private:
|
||||
ZCLink* mp_HeadLink;
|
||||
ZCLink* mp_TailLink;
|
||||
@ -923,19 +1006,25 @@ namespace ZNsMain
|
||||
}/*
|
||||
TypeChild& GetChildObj()*/
|
||||
|
||||
const TypeChild& GetChildObj() const
|
||||
{
|
||||
return *static_cast<const TypeChild*>(this);
|
||||
}/*
|
||||
const TypeChild& GetChildObj() const*/
|
||||
|
||||
private:
|
||||
|
||||
ZCLink* NewLink()
|
||||
{
|
||||
return new ZCLink;
|
||||
return new TypeMain;
|
||||
}/*
|
||||
ZCLink* NewLink()*/
|
||||
|
||||
ZCLink* NewLink( ZCLink& AR_ArgData)
|
||||
{ return new ZCLink(AR_ArgData); }
|
||||
{ return new TypeMain(AR_ArgData); }
|
||||
|
||||
ZCLink* NewLink(const ZCLink& AR_ArgData)
|
||||
{ return new ZCLink(AR_ArgData); }
|
||||
{ return new TypeMain(AR_ArgData); }
|
||||
|
||||
void NewLink ////////////////////////////////////////
|
||||
(
|
||||
@ -945,7 +1034,7 @@ namespace ZNsMain
|
||||
)
|
||||
/////////////////////////////////////////////////////
|
||||
{
|
||||
APR_HeadLink = new ZCLink;
|
||||
APR_HeadLink = new TypeMain;
|
||||
|
||||
ZCLink* VP_MakeLink = 0 ;
|
||||
ZCLink* VP_TailLink = APR_HeadLink;
|
||||
@ -954,7 +1043,7 @@ namespace ZNsMain
|
||||
{
|
||||
// AL_NeedCnt - 1 번 순환
|
||||
|
||||
VP_MakeLink = new ZCLink;
|
||||
VP_MakeLink = new TypeMain;
|
||||
|
||||
ZCLink::JoinLink
|
||||
(VP_TailLink, VP_MakeLink);
|
||||
@ -986,14 +1075,14 @@ namespace ZNsMain
|
||||
ZCLink* VP_TailLink = 0 ;
|
||||
|
||||
VP_TailLink = VP_MakeLink =
|
||||
new ZCLink(**AP_LinkOrgin) ;
|
||||
new TypeMain(*AP_LinkOrgin) ;
|
||||
|
||||
APR_HeadCopy = VP_MakeLink;
|
||||
|
||||
while(--AL_FarNum >= 0)
|
||||
{
|
||||
AP_LinkOrgin= AP_LinkOrgin->GetNextPtr();
|
||||
VP_MakeLink = new ZCLink(**AP_LinkOrgin);
|
||||
AP_LinkOrgin= AP_LinkOrgin->GetNextPtr() ;
|
||||
VP_MakeLink = new TypeMain(*AP_LinkOrgin);
|
||||
|
||||
ZCLink::JoinLink
|
||||
(VP_TailLink, VP_MakeLink);
|
||||
@ -1943,6 +2032,8 @@ namespace ZNsMain
|
||||
typedef TCLink ZCLink ;
|
||||
typedef TCLink TypeData;
|
||||
typedef TTypSize TypeSize;
|
||||
public :
|
||||
typedef typename TCLink::TypeMain TypeMain;
|
||||
private:
|
||||
ZCLink mo_HeadFake; // 고정된 가상의 맨 앞 링크 객체
|
||||
ZCLink mo_TailFake; // 고정된 가상의 맨 뒤 링크 객체
|
||||
@ -1958,6 +2049,12 @@ namespace ZNsMain
|
||||
}/*
|
||||
TypeChild& GetChildObj()*/
|
||||
|
||||
const TypeChild& GetChildObj() const
|
||||
{
|
||||
return *static_cast<const TypeChild*>(this);
|
||||
}/*
|
||||
const TypeChild& GetChildObj() const*/
|
||||
|
||||
private:
|
||||
|
||||
ZCLink* NewLink()
|
||||
@ -1967,10 +2064,10 @@ namespace ZNsMain
|
||||
ZCLink* NewLink()*/
|
||||
|
||||
ZCLink* NewLink( ZCLink& AR_ArgData)
|
||||
{ return new ZCLink(AR_ArgData); }
|
||||
{ return new TypeMain(AR_ArgData); }
|
||||
|
||||
ZCLink* NewLink(const ZCLink& AR_ArgData)
|
||||
{ return new ZCLink(AR_ArgData); }
|
||||
{ return new TypeMain(AR_ArgData); }
|
||||
|
||||
void NewLink ////////////////////////////////////////
|
||||
(
|
||||
@ -1980,7 +2077,7 @@ namespace ZNsMain
|
||||
)
|
||||
/////////////////////////////////////////////////////
|
||||
{
|
||||
APR_HeadLink = new ZCLink;
|
||||
APR_HeadLink = new TypeMain;
|
||||
|
||||
ZCLink* VP_MakeLink = 0 ;
|
||||
ZCLink* VP_TailLink = APR_HeadLink;
|
||||
@ -1989,7 +2086,7 @@ namespace ZNsMain
|
||||
{
|
||||
// AL_NeedCnt - 1 번 순환
|
||||
|
||||
VP_MakeLink = new ZCLink;
|
||||
VP_MakeLink = new TypeMain;
|
||||
|
||||
ZCLink::JoinLink
|
||||
(VP_TailLink, VP_MakeLink);
|
||||
@ -2021,14 +2118,14 @@ namespace ZNsMain
|
||||
ZCLink* VP_TailLink = 0 ;
|
||||
|
||||
VP_TailLink = VP_MakeLink =
|
||||
new ZCLink(**AP_LinkOrgin) ;
|
||||
new TypeMain(*AP_LinkOrgin) ;
|
||||
|
||||
APR_HeadCopy = VP_MakeLink;
|
||||
|
||||
while(--AL_FarNum >= 0)
|
||||
{
|
||||
AP_LinkOrgin= AP_LinkOrgin->GetNextPtr();
|
||||
VP_MakeLink = new ZCLink(**AP_LinkOrgin);
|
||||
VP_MakeLink = new TypeMain(*AP_LinkOrgin);
|
||||
|
||||
ZCLink::JoinLink
|
||||
(VP_TailLink, VP_MakeLink);
|
||||
|
@ -522,8 +522,9 @@ namespace ZNsMain
|
||||
)
|
||||
/////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
/*private :*/
|
||||
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
private :
|
||||
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
|
||||
public :
|
||||
|
||||
|
||||
|
298
ZCppMainTest/ZtCLinkList_001.cpp
Normal file
298
ZCppMainTest/ZtCLinkList_001.cpp
Normal file
@ -0,0 +1,298 @@
|
||||
|
||||
|
||||
#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& 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;
|
||||
|
||||
public:
|
||||
typedef ZCLinkData ZCLinkCStr ;
|
||||
typedef ZtCLinkList<ZCLinkBase> ZCLinkStrList;
|
||||
typedef typename
|
||||
ZCLinkStrList::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 ;
|
||||
ZCLinkStrList VO_ZCLinkStrLis1;
|
||||
ZCLinkStrList VO_ZCLinkStrLis2;
|
||||
ZCStrLinkOpt VO_StrLinkOpt = VO_ZCLinkStrLis1.GetObjOpt(1);
|
||||
|
||||
cout<<"# VO_StrLinkOpt.has_value()="<<VO_StrLinkOpt.has_value()<<endl;
|
||||
cout<<"# VO_StrLinkOpt.bool() ="<<bool(VO_StrLinkOpt) <<endl;
|
||||
|
||||
VO_ZCLinkStrLis1.AddTail()().GetData()=string("123");
|
||||
VO_ZCLinkStrLis1.AddTail()().GetData()=string("ABC");
|
||||
VO_ZCLinkStrLis1.AddTail()().GetData()=string("xyz");
|
||||
|
||||
VO_ZCLinkStrLis2.AddTail()().GetData()=string("Z01");
|
||||
VO_ZCLinkStrLis2.AddTail()().GetData()=string("Z02");
|
||||
VO_ZCLinkStrLis2.AddTail()().GetData()=string("Z03");
|
||||
|
||||
VO_StrLinkOpt = VO_ZCLinkStrLis1.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;
|
||||
|
||||
VO_StrLinkOpt = VO_ZCLinkStrLis1.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<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
||||
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
VO_ZCLinkStrLis1.IterElement(&ShowNode1, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
|
||||
VO_ZCLinkStrLis1.JoinHead(VO_ZCLinkStrLis2);
|
||||
|
||||
cout<<"# after VO_ZCLinkStrLis1.JoinHead(VO_ZCLinkStrLis2)"<<endl;
|
||||
|
||||
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
||||
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
VO_ZCLinkStrLis1.IterElement(&ShowNode1, ZftMCP(VI_CallCnt=0));
|
||||
|
||||
|
||||
VO_ZCLinkStrLis2 = VO_ZCLinkStrLis1 ;
|
||||
|
||||
cout<<"# after VO_ZCLinkStrLis2 = VO_ZCLinkStrLis1"<<endl;
|
||||
|
||||
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
||||
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
|
||||
|
||||
VO_ZCLinkStrLis1.IterElement(&AppendEach);
|
||||
cout<<"***********************************************"<<endl;
|
||||
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
|
||||
VO_ZCLinkStrLis1.SendRangeOutAfter
|
||||
(
|
||||
VO_ZCLinkStrLis1.GetObjOpt(1).value()
|
||||
, VO_ZCLinkStrLis1.GetObjOpt(2).value()
|
||||
, 2
|
||||
, VO_ZCLinkStrLis2
|
||||
, VO_ZCLinkStrLis2.GetObjOpt(1)
|
||||
) ;
|
||||
cout<<"# after VO_ZCLinkStrLis1.SendRangeOutAfter(1th, 2th, 2, rhs, rhs's 1th)"<<endl;
|
||||
|
||||
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
||||
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
|
||||
|
||||
VO_ZCLinkStrLis2.SendRangeOutBefore
|
||||
(
|
||||
VO_ZCLinkStrLis2.GetObjOpt(7).value()
|
||||
, VO_ZCLinkStrLis2.GetObjOpt(8).value()
|
||||
, 2
|
||||
, VO_ZCLinkStrLis1
|
||||
, VO_ZCLinkStrLis1.GetObjOpt(1)
|
||||
) ;
|
||||
cout<<"# after VO_ZCLinkStrLis2.SendRangeOutAfter(7th, 8th, 2, rhs, rhs's 1th)"<<endl;
|
||||
|
||||
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
|
||||
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
|
||||
cout<<"***********************************************"<<endl;
|
||||
VO_ZCLinkStrLis1.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[])*/
|
||||
|
||||
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
<EFBFBD><EFBFBD> cygwin <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// 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
|
||||
|
||||
<EFBFBD><EFBFBD> mingw <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
g++.exe -o ZtCLinkList_001_mw.exe ZtCLinkList_001.cpp -I../ -lWs2_32
|
||||
g++.exe -o ZtCLinkList_001_mw_D.exe ZtCLinkList_001.cpp -I../ -lWs2_32 -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.
|
||||
|
||||
|
||||
<EFBFBD><EFBFBD> Linux <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
g++ -std=c++98 -o ZtCLinkList_001.exe ZtCLinkList_001.cpp -I../
|
||||
g++ -std=c++98 -o ZtCLinkList_001_D.exe ZtCLinkList_001.cpp -I../ -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.
|
||||
|
||||
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
./ZtCLinkList_001.exe
|
||||
./ZtCLinkList_001_D.exe
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////*/
|
Reference in New Issue
Block a user