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
|
-- 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);
|
||||||
|
@ -522,8 +522,9 @@ namespace ZNsMain
|
|||||||
)
|
)
|
||||||
/////////////////////////////////////////////////////////////////*/
|
/////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
/*private :*/
|
private :
|
||||||
|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
|
||||||
public :
|
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