commit 2025-10-07 18:26 add TypeMain in ZCppMain/ZtCLinkList.H

This commit is contained in:
2025-10-07 18:27:05 +09:00
parent cf870b5c9c
commit 3db771e9d9
3 changed files with 425 additions and 29 deletions

View File

@ -28,6 +28,30 @@
-- 2025-10-07 12:23 -- 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 은 고정적으로 맨 앞과 맨 뒤를 가상으로 표시하는 링크 객체를 멤 ■ class ZtCLinkMoveList 은 고정적으로 맨 앞과 맨 뒤를 가상으로 표시하는 링크 객체를 멤
버로 가지고 있다. 그래서 중간에서 링크 자료를 떼어 내어 다른 리스트로 옮길 때, 그 링 버로 가지고 있다. 그래서 중간에서 링크 자료를 떼어 내어 다른 리스트로 옮길 때, 그 링
크가 리스트의 앞이나 뒤가 아닌, 무조건 중간에 존재한다고 가정하고 빠르게 떼어낼 수 있 크가 리스트의 앞이나 뒤가 아닌, 무조건 중간에 존재한다고 가정하고 빠르게 떼어낼 수 있
@ -99,6 +123,8 @@ namespace ZNsMain
typedef ZtCLink TypeThis ; typedef ZtCLink TypeThis ;
typedef TTypBase TypeBase ; typedef TTypBase TypeBase ;
typedef TChild TypeChild; typedef TChild TypeChild;
typedef TChild TypeData ;
typedef TChild TypeMain ;
typedef ZTypLong TypeSize ; typedef ZTypLong TypeSize ;
protected: protected:
ZtCLink* mp_NextLink; ZtCLink* mp_NextLink;
@ -147,6 +173,11 @@ namespace ZNsMain
}/* }/*
ZtCLink(const TTypBase& rhs)*/ ZtCLink(const TTypBase& rhs)*/
virtual ~ZtCLink()
{
}/*
virtual ~ZtCLink()*/
ZtCLink& operator=(const ZtCLink& rhs) ZtCLink& operator=(const ZtCLink& rhs)
{ {
@ -167,8 +198,8 @@ namespace ZNsMain
ZtCLink& operator=(TypeBase& AR_CBase)*/ ZtCLink& operator=(TypeBase& AR_CBase)*/
/***/ TypeBase& operator()() { return *static_cast< TypeBase*>(this); } /***/ TypeData& operator()() { return *static_cast< TypeData*>(this); }
const TypeBase& operator()() const{ return *static_cast<const TypeBase*>(this); } const TypeData& operator()() const{ return *static_cast<const TypeData*>(this); }
ZtCLink* GetNextPtr(){return mp_NextLink;} ZtCLink* GetNextPtr(){return mp_NextLink;}
@ -318,6 +349,8 @@ namespace ZNsMain
typedef ZtCLink<TTypBase, ZCEmpty> TypeThis ; typedef ZtCLink<TTypBase, ZCEmpty> TypeThis ;
typedef TTypBase /*+++++++++++++*/ TypeBase ; typedef TTypBase /*+++++++++++++*/ TypeBase ;
typedef ZCEmpty /*+++++++++++++*/ TypeChild; typedef ZCEmpty /*+++++++++++++*/ TypeChild;
typedef TypeBase /*+++++++++++++*/ TypeData ;
typedef TypeThis /*+++++++++++++*/ TypeMain ;
typedef ZTypLong /*+++++++++++++*/ TypeSize ; typedef ZTypLong /*+++++++++++++*/ TypeSize ;
protected: protected:
ZtCLink* mp_NextLink; ZtCLink* mp_NextLink;
@ -524,13 +557,15 @@ namespace ZNsMain
public : public :
typedef ZtCLink<ZCEmpty, TChild> TypeThis ; typedef ZtCLink<ZCEmpty, TChild> TypeThis ;
typedef ZCEmpty /*+++++++++++*/ TypeBase ; typedef ZCEmpty /*++++++++++*/ TypeBase ;
typedef TChild /*+++++++++++*/ TypeChild; typedef TChild /*++++++++++*/ TypeChild;
typedef ZTypLong /*++++++++++++*/ TypeSize ; typedef TypeChild /*++++++++++*/ TypeData ;
typedef TypeChild /*++++++++++*/ TypeMain ;
typedef ZTypLong /*++++++++++*/ TypeSize ;
protected: protected:
ZtCLink* mp_NextLink; ZtCLink* mp_NextLink;
ZtCLink* mp_PrevLink; ZtCLink* mp_PrevLink;
protected: protected: ////////////////////////////////////
static void JoinLink(ZtCLink* AP_PrevLink, ZtCLink* AP_NextLink) static void JoinLink(ZtCLink* AP_PrevLink, ZtCLink* AP_NextLink)
{ {
@ -546,8 +581,24 @@ namespace ZNsMain
}/* }/*
static void MakeRing(ZtCLink* AP_HeadLink, ZtCLink* AP_TailLink)*/ static void MakeRing(ZtCLink* AP_HeadLink, ZtCLink* AP_TailLink)*/
/*protected:*/ protected: /////////////////////////////////////////////
public :
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>() ZtCLink<ZCEmpty, TChild>()
{ {
@ -563,15 +614,39 @@ namespace ZNsMain
}/* }/*
ZtCLink<ZCEmpty, TChild>(const TypeThis& rhs)*/ 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) TypeThis& operator=(const TypeThis& rhs)
{ {
return *this; this->GetChildObj() = rhs.GetChildObj(); return *this;
}/* }/*
TypeThis& operator=(const TypeThis& rhs)*/ TypeThis& operator=(const TypeThis& rhs)*/
/***/ TypeThis& operator()() { return *this; } /***/ TypeData& operator()() { return GetChildObj(); }
const TypeThis& operator()() const{ return *this; } const TypeData& operator()() const{ return GetChildObj(); }
ZtCLink* GetNextPtr(){return mp_NextLink;} ZtCLink* GetNextPtr(){return mp_NextLink;}
ZtCLink* GetPrevPtr(){return mp_PrevLink;} ZtCLink* GetPrevPtr(){return mp_PrevLink;}
@ -717,6 +792,8 @@ namespace ZNsMain
typedef ZtCLink<ZCEmpty, ZCEmpty> TypeThis ; typedef ZtCLink<ZCEmpty, ZCEmpty> TypeThis ;
typedef ZCEmpty /*++++++++++++*/ TypeBase ; typedef ZCEmpty /*++++++++++++*/ TypeBase ;
typedef ZCEmpty /*++++++++++++*/ TypeChild; typedef ZCEmpty /*++++++++++++*/ TypeChild;
typedef TypeThis /*++++++++++++*/ TypeData ;
typedef TypeThis /*++++++++++++*/ TypeMain ;
typedef ZTypLong /*++++++++++++*/ TypeSize ; typedef ZTypLong /*++++++++++++*/ TypeSize ;
protected: protected:
ZtCLink* mp_NextLink; ZtCLink* mp_NextLink;
@ -737,8 +814,8 @@ namespace ZNsMain
}/* }/*
static void MakeRing(ZtCLink* AP_HeadLink, ZtCLink* AP_TailLink)*/ static void MakeRing(ZtCLink* AP_HeadLink, ZtCLink* AP_TailLink)*/
/*protected:*/ /*protected: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
public : public : /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
ZtCLink<ZCEmpty, ZCEmpty>() ZtCLink<ZCEmpty, ZCEmpty>()
{ {
@ -761,6 +838,10 @@ namespace ZNsMain
TypeThis& operator=(const TypeThis& rhs)*/ TypeThis& operator=(const TypeThis& rhs)*/
/***/ TypeThis& operator()() { return *this; }
const TypeThis& operator()() const{ return *this; }
ZtCLink* GetNextPtr(){return mp_NextLink;} ZtCLink* GetNextPtr(){return mp_NextLink;}
ZtCLink* GetPrevPtr(){return mp_PrevLink;} ZtCLink* GetPrevPtr(){return mp_PrevLink;}
@ -911,6 +992,8 @@ namespace ZNsMain
typedef TCLink ZCLink ; typedef TCLink ZCLink ;
typedef TCLink TypeData; typedef TCLink TypeData;
typedef TTypSize TypeSize; typedef TTypSize TypeSize;
public :
typedef typename TCLink::TypeMain TypeMain;
private: private:
ZCLink* mp_HeadLink; ZCLink* mp_HeadLink;
ZCLink* mp_TailLink; ZCLink* mp_TailLink;
@ -923,19 +1006,25 @@ namespace ZNsMain
}/* }/*
TypeChild& GetChildObj()*/ TypeChild& GetChildObj()*/
const TypeChild& GetChildObj() const
{
return *static_cast<const TypeChild*>(this);
}/*
const TypeChild& GetChildObj() const*/
private: private:
ZCLink* NewLink() ZCLink* NewLink()
{ {
return new ZCLink; return new TypeMain;
}/* }/*
ZCLink* NewLink()*/ ZCLink* NewLink()*/
ZCLink* NewLink( ZCLink& AR_ArgData) ZCLink* NewLink( ZCLink& AR_ArgData)
{ return new ZCLink(AR_ArgData); } { return new TypeMain(AR_ArgData); }
ZCLink* NewLink(const ZCLink& AR_ArgData) ZCLink* NewLink(const ZCLink& AR_ArgData)
{ return new ZCLink(AR_ArgData); } { return new TypeMain(AR_ArgData); }
void NewLink //////////////////////////////////////// void NewLink ////////////////////////////////////////
( (
@ -945,7 +1034,7 @@ namespace ZNsMain
) )
///////////////////////////////////////////////////// /////////////////////////////////////////////////////
{ {
APR_HeadLink = new ZCLink; APR_HeadLink = new TypeMain;
ZCLink* VP_MakeLink = 0 ; ZCLink* VP_MakeLink = 0 ;
ZCLink* VP_TailLink = APR_HeadLink; ZCLink* VP_TailLink = APR_HeadLink;
@ -954,7 +1043,7 @@ namespace ZNsMain
{ {
// AL_NeedCnt - 1 번 순환 // AL_NeedCnt - 1 번 순환
VP_MakeLink = new ZCLink; VP_MakeLink = new TypeMain;
ZCLink::JoinLink ZCLink::JoinLink
(VP_TailLink, VP_MakeLink); (VP_TailLink, VP_MakeLink);
@ -986,14 +1075,14 @@ namespace ZNsMain
ZCLink* VP_TailLink = 0 ; ZCLink* VP_TailLink = 0 ;
VP_TailLink = VP_MakeLink = VP_TailLink = VP_MakeLink =
new ZCLink(**AP_LinkOrgin) ; new TypeMain(*AP_LinkOrgin) ;
APR_HeadCopy = VP_MakeLink; APR_HeadCopy = VP_MakeLink;
while(--AL_FarNum >= 0) while(--AL_FarNum >= 0)
{ {
AP_LinkOrgin= AP_LinkOrgin->GetNextPtr() ; AP_LinkOrgin= AP_LinkOrgin->GetNextPtr() ;
VP_MakeLink = new ZCLink(**AP_LinkOrgin); VP_MakeLink = new TypeMain(*AP_LinkOrgin);
ZCLink::JoinLink ZCLink::JoinLink
(VP_TailLink, VP_MakeLink); (VP_TailLink, VP_MakeLink);
@ -1943,6 +2032,8 @@ namespace ZNsMain
typedef TCLink ZCLink ; typedef TCLink ZCLink ;
typedef TCLink TypeData; typedef TCLink TypeData;
typedef TTypSize TypeSize; typedef TTypSize TypeSize;
public :
typedef typename TCLink::TypeMain TypeMain;
private: private:
ZCLink mo_HeadFake; // 고정된 가상의 맨 앞 링크 객체 ZCLink mo_HeadFake; // 고정된 가상의 맨 앞 링크 객체
ZCLink mo_TailFake; // 고정된 가상의 맨 뒤 링크 객체 ZCLink mo_TailFake; // 고정된 가상의 맨 뒤 링크 객체
@ -1958,6 +2049,12 @@ namespace ZNsMain
}/* }/*
TypeChild& GetChildObj()*/ TypeChild& GetChildObj()*/
const TypeChild& GetChildObj() const
{
return *static_cast<const TypeChild*>(this);
}/*
const TypeChild& GetChildObj() const*/
private: private:
ZCLink* NewLink() ZCLink* NewLink()
@ -1967,10 +2064,10 @@ namespace ZNsMain
ZCLink* NewLink()*/ ZCLink* NewLink()*/
ZCLink* NewLink( ZCLink& AR_ArgData) ZCLink* NewLink( ZCLink& AR_ArgData)
{ return new ZCLink(AR_ArgData); } { return new TypeMain(AR_ArgData); }
ZCLink* NewLink(const ZCLink& AR_ArgData) ZCLink* NewLink(const ZCLink& AR_ArgData)
{ return new ZCLink(AR_ArgData); } { return new TypeMain(AR_ArgData); }
void NewLink //////////////////////////////////////// void NewLink ////////////////////////////////////////
( (
@ -1980,7 +2077,7 @@ namespace ZNsMain
) )
///////////////////////////////////////////////////// /////////////////////////////////////////////////////
{ {
APR_HeadLink = new ZCLink; APR_HeadLink = new TypeMain;
ZCLink* VP_MakeLink = 0 ; ZCLink* VP_MakeLink = 0 ;
ZCLink* VP_TailLink = APR_HeadLink; ZCLink* VP_TailLink = APR_HeadLink;
@ -1989,7 +2086,7 @@ namespace ZNsMain
{ {
// AL_NeedCnt - 1 번 순환 // AL_NeedCnt - 1 번 순환
VP_MakeLink = new ZCLink; VP_MakeLink = new TypeMain;
ZCLink::JoinLink ZCLink::JoinLink
(VP_TailLink, VP_MakeLink); (VP_TailLink, VP_MakeLink);
@ -2021,14 +2118,14 @@ namespace ZNsMain
ZCLink* VP_TailLink = 0 ; ZCLink* VP_TailLink = 0 ;
VP_TailLink = VP_MakeLink = VP_TailLink = VP_MakeLink =
new ZCLink(**AP_LinkOrgin) ; new TypeMain(*AP_LinkOrgin) ;
APR_HeadCopy = VP_MakeLink; APR_HeadCopy = VP_MakeLink;
while(--AL_FarNum >= 0) while(--AL_FarNum >= 0)
{ {
AP_LinkOrgin= AP_LinkOrgin->GetNextPtr(); AP_LinkOrgin= AP_LinkOrgin->GetNextPtr();
VP_MakeLink = new ZCLink(**AP_LinkOrgin); VP_MakeLink = new TypeMain(*AP_LinkOrgin);
ZCLink::JoinLink ZCLink::JoinLink
(VP_TailLink, VP_MakeLink); (VP_TailLink, VP_MakeLink);

View File

@ -522,8 +522,9 @@ namespace ZNsMain
) )
/////////////////////////////////////////////////////////////////*/ /////////////////////////////////////////////////////////////////*/
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*private :*/ private :
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
public : public :

View 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
////////////////////////////////////////////////////////////////////////////////////////*/