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 :
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user