Compare commits

..

2 Commits

Author SHA1 Message Date
/* User with id == 0 is a fake user from git author */ sauron
9eeed268f2 commit 2025-08-21 14:12 edit a bit in ZMainHead.H 2025-08-21 14:13:00 +09:00
/* User with id == 0 is a fake user from git author */ sauron
777c3745a4 commit 2025-08-21 14:06 ATOI => AtoI, ATOL => AtoL etc it ZMainHead.H and ZtCStringEx.H 2025-08-21 14:07:08 +09:00
40 changed files with 9332 additions and 43907 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -15,9 +15,9 @@ namespace ZNsMain
enum ZEAVL_INSERT
{
ZEAVL_INSERT_RIGHT = +1 ,
ZEAVL_INSERT_OK = 0 , /* 삽입 후의 평형계수가 0 이다. */
ZEAVL_INSERT_LEFT = -1 ,
ZEAVL_INSERT_RIGHT = +1,
ZEAVL_INSERT_OK = 0, /* 삽입 후의 평형계수가 0 이다. */
ZEAVL_INSERT_LEFT = -1,
ZEAVL_INSERT_NONE = -2 /* 삽입 안 됨 */
};/*
enum ZEAVL_INSERT*/
@ -26,7 +26,7 @@ namespace ZNsMain
namespace ZNsEnum*/
namespace ZNsIFace
namespace ZNsInterface
{
template<typename TypeArg> class ZtCAVL_BASE
@ -110,7 +110,7 @@ namespace ZNsMain
class CTypeMy
{
public:
typedef CLargeAVL<some param> CLargeMap;
typedef CLargeAVL<some param> CLargeMap;
typedef typename CLargeMap::ZCNode::TypeEqual TypeEqual;
}
@ -300,7 +300,7 @@ namespace ZNsMain
class ZtCAVL_KeyData ////////////////////////*/
}/*
namespace ZNsIFace*/
namespace ZNsInterface*/
/*/////////////////////////////////////////////////////////////////////////////////////
@ -311,8 +311,8 @@ namespace ZNsMain
<
int,
int,
ZNsMain::ZNsIFace::ZtCAVL_Multi_BASE<int>,
ZNsMain::ZNsIFace::ZtCAVL_Multi_NodeBase<int, ZNsMain::ZtCDoubleList<int> >
ZNsMain::ZNsInterface::ZtCAVL_Multi_BASE<int>,
ZNsMain::ZNsInterface::ZtCAVL_Multi_NodeBase<int, ZNsMain::ZtCDoubleList<int> >
>
VO_CLargeAvl_Multi; //////////////////////////////////
@ -348,7 +348,7 @@ namespace ZNsMain
typename TEnvVar , //= ZNsMain::ZNsCGI::ZNsBase::ZtCEnvVar<TStringData>,
typename TEnvVarSet //= NsCPP::ZtCObjAVL<TEnvVar>
>
class ZtCTypeEnvVarSet ##############################################################*/
class ZtCTypeEnvVarSet /*############################################################*/
}/*
namespace NsType*/

View File

@ -1,628 +0,0 @@
#ifndef __ZNSMAIN__ZMAIN_CGI_H__
#define __ZNSMAIN__ZMAIN_CGI_H__
#include "ZCppMain/ZMainHead.H"
#include "ZCppMain/ZMainEnc.H"
#include "ZCppMain/ZtCStringEx.H"
#include "ZCppMain/ZtCObjAVL.H"
#include "ZCppMain/ZtCLoadXml.H"
#include "ZCppMain/ZtCLoadDataBlock.H"
namespace ZNsMain
{
namespace ZNsCGI
{
namespace NsInterface
{
}/*
namespace NsInterface*/
namespace NsIFace
{
using namespace NsInterface;
}/*
namespace NsIFace*/
namespace ZNsBase
{
template<typename TStringData> class ZtCEnvVar
{
protected:
TStringData mo_CStrEnvName ;
TStringData mo_CStrEnvValue;
public :
ZtCEnvVar()
{
}/*
ZtCEnvVar()*/
ZtCEnvVar(const TStringData& AR_CStrEnvName)
{
mo_CStrEnvName = AR_CStrEnvName;
}/*
ZtCEnvVar(const TStringData& AR_CStrEnvName)*/
ZtCEnvVar(const TStringData& AR_CStrEnvName, const TStringData& AR_CStrEnvValue)
{
mo_CStrEnvName = AR_CStrEnvName ;
mo_CStrEnvValue = AR_CStrEnvValue;
}/*
ZtCEnvVar(const TStringData& AR_CStrEnvName, const TStringData& AR_CStrEnvValue)*/
ZtCEnvVar<TStringData>& operator=(const ZtCEnvVar<TStringData>& rhs)
{
mo_CStrEnvName = rhs.mo_CStrEnvName ;
mo_CStrEnvValue = rhs.mo_CStrEnvValue; return *this;
}/*
ZtCEnvVar<TStringData>& operator=(const ZtCEnvVar<TStringData>& rhs)*/
ZtCEnvVar<TStringData>& operator=(const TStringData& AR_CStrEnvName)
{
mo_CStrEnvName = AR_CStrEnvName; return *this;
}/*
ZtCEnvVar<TStringData>& operator=(const ZtCEnvVar<TStringData>& rhs)*/
void Set(const TStringData& AR_CStringEnvName, const TStringData& AR_CStringEnvValue)
{
mo_CStrEnvName = AR_CStringEnvName ;
mo_CStrEnvValue = AR_CStringEnvValue;
}/*
void Set(const TStringData& AR_CStringEnvName, const TStringData& AR_CStringEnvValue)*/
TStringData& GetName () {return mo_CStrEnvName ;}
TStringData& GetValue() {return mo_CStrEnvValue;}
const TStringData& GetName () const {return mo_CStrEnvName ;}
const TStringData& GetValue() const {return mo_CStrEnvValue;}
bool operator==(const ZtCEnvVar<TStringData>& rhs) const{
return mo_CStrEnvName ==rhs.mo_CStrEnvName ;}
bool operator< (const ZtCEnvVar<TStringData>& rhs) const{
return mo_CStrEnvName < rhs.mo_CStrEnvName ;}
bool operator> (const ZtCEnvVar<TStringData>& rhs) const{
return mo_CStrEnvName > rhs.mo_CStrEnvName ;}
bool operator==(const TStringData& AR_CStrEnvName) const{
return mo_CStrEnvName ==AR_CStrEnvName ;}
bool operator> (const TStringData& AR_CStrEnvName) const{
return mo_CStrEnvName > AR_CStrEnvName ;}
bool operator< (const TStringData& AR_CStrEnvName) const{
return mo_CStrEnvName < AR_CStrEnvName ;}
public:
};/*
template<typename TStringData> class ZtCEnvVar*/
// CGI <20><><EFBFBD>̺귯<CCBA><EAB7AF><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8>׸<EFBFBD> Http Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ
// <20><EFBFBD><EEBFA1>, class ZtCFileUp <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
template< typename TStringData,
typename TFileSize=ZNsMain::ZTypLengthF
>
class ZtCFileUp ///////////////////////////////////
{
public :
typedef TFileSize TypeFileSize;
protected:
TStringData mo_FileName;
TStringData mo_FileType;
TStringData mo_EnviName;
TFileSize ml_FileSize;
public :
ZtCFileUp()
{
ml_FileSize = 0;
};/*
ZtCFileUp()*/
TStringData& GetFileName() {return mo_FileName;}
TStringData& GetFileType() {return mo_FileType;}
TStringData& GetEnviName() {return mo_EnviName;}
const TStringData& GetFileName() const{return mo_FileName;}
const TStringData& GetFileType() const{return mo_FileType;}
const TStringData& GetEnviName() const{return mo_EnviName;}
TFileSize GetDataSize() const
{
return ml_FileSize;
}/*
TFileSize GetDataSize() const*/
void SetDataSize(TFileSize AL_FileSize)
{
ml_FileSize = AL_FileSize;
}/*
void SetDataSize(TFileSize AL_FileSize)*/
void AddDataSize(TFileSize AL_FileSize)
{
ml_FileSize += AL_FileSize;
}/*
void AddDataSize(TFileSize AL_FileSize)*/
TFileSize& GetDataSizeRef()
{
return ml_FileSize;
}/*
TFileSize& GetDataSizeRef()*/
public:
};/*
template< typename TStringData,
typename TFileSize=ZNsMain::ZTypLengthF
>
class ZtCFileUp /////////////////////////////////*/
}/*
namespace ZNsBase*/
template<typename TStringData> void ZftEscapeHtml(TStringData& ARR_CString)
{
ARR_CString.Replace("&", "&amp;" ).
Replace("\"","&quot;").
Replace("<", "&lt;" ).
Replace(">", "&gt;" ).
Replace(" ", "&nbsp;").
/*//////*/ Replace("\n","<br />");
}/*
template<typename TStringData> void ZftEscapeHtml(TStringData& ARR_CString) */
template<typename TStringData> void ZftNL2BR(TStringData& ARR_CStringData)
{
ARR_CStringData.
Replace("\r\n", "<br />").Replace("\n" , "<br />");
}/*
template<typename TStringData> void ZftNL2BR(TStringData& ARR_CStringData) */
namespace ZNsType
{
template< typename TStringData=ZNsMain::ZtCStringBase<char>
>
class ZtCTypeEnvVarSet /*##################################*/
{
public:
typedef TStringData ZCStringData ;
typedef ZNsMain::ZNsCGI::ZNsBase::
ZtCEnvVar<ZCStringData> ZCEnvVar ;
typedef ZNsMain::ZtCObjAVL<ZCEnvVar> ZCEnvVarSet ;
typedef typename ZCEnvVarSet ::ZCNode ZCEnvVarNode ;
typedef typename ZCStringData::ZCMainChars ZCMainChars ;
typedef typename ZCStringData::TypeChar TypeChar ;
typedef typename ZCStringData::TypeLength TypeLength ;
public:
};/*
template< typename TStringData=ZNsMain::ZtCStringBase<char>
>
class ZtCTypeEnvVarSet ####################################*/
}/*
namespace ZNsType*/
template< typename TStringData, /*############################*/
typename TTypeEnvVarSet =
ZNsType::ZtCTypeEnvVarSet<TStringData>
>
class ZtCLoadSimUrlConfig : protected ZNsMain::ZtCLoadDataBlockOne
< ZtCLoadSimUrlConfig
<
TStringData, TTypeEnvVarSet
>,
TStringData
/*###########*/ > /*############################################*/
{
public :
template< typename TTDerive, typename TTStringData
>
friend class ZNsMain::ZtCLoadDataBlockOne;
public :
typedef typename TTypeEnvVarSet::ZCStringData ZCStringData;
typedef typename TTypeEnvVarSet::ZCEnvVar ZCEnvVar ;
typedef typename TTypeEnvVarSet::ZCEnvVarSet ZCEnvVarSet ;
typedef typename TTypeEnvVarSet::ZCEnvVarNode ZCEnvVarNode;
typedef typename TTypeEnvVarSet::ZCMainChars ZCMainChars ;
typedef typename TTypeEnvVarSet::TypeChar TypeChar ;
typedef typename TTypeEnvVarSet::TypeLength TypeLength ;
public :
typedef ZNsMain::ZtCLoadDataBlockOne
<ZtCLoadSimUrlConfig, TStringData> TypeBase;
private:
ZCEnvVarSet mo_CEnvVarSet ;
ZCStringData mo_CStringName ;
ZCStringData mo_CStringBuff ;
ZCEnvVarNode* mp_CStringNode ;
bool mb_DoFindEqual ; // '=' <20><> ã<><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
public :
typedef void (*TypePfOnMeetCEnvVar)
(const ZCEnvVar& AR_CEnvVar, ZCStringData& ARR_CStringBuff);
private:
static void OnMeetCEnvVar(const ZCEnvVar& AR_CEnvVar, ZCStringData& ARR_CStringBuff)
{
ZCStringData VO_CStringEnc(AR_CEnvVar.GetValue());
ZNsMain::ZNsEnc::ZftGetSimUrlEnc(RR(VO_CStringEnc));
ARR_CStringBuff
("&")(AR_CEnvVar.GetName())("=")(VO_CStringEnc)("&\r\n");
}/*
static void OnMeetCEnvVar(const ZCEnvVar& AR_CEnvVar, ZCStringData& ARR_CStringBuff)*/
private:
static void ShowEnvVar(ZCEnvVar& AR_CEnvVar)
{
cout<<"# "<<AR_CEnvVar.GetName()<<" : "<<AR_CEnvVar.GetValue()<<endl;
}/*
static void ShowEnvVar(ZCEnvVar& AR_CEnvVar)*/
/*private:*/
private:
ZNsMain::ZERun ExecBlockIn(const TypeChar* AP_Data, TypeLength AL_Length)
{
if(mb_DoFindEqual)
{
// mp_CStringNode==0 <20≯<EFBFBD> '=' <20><> ã<><C3A3> ã<><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>, <20>ߺ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// mo_CEnvVarSet <20><> <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20>ʾҴٴ<D2B4> <20><><EFBFBD>̴<EFBFBD>. <20>̶<EFBFBD><CCB6><EFBFBD> AP_Data <20><> <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. (2011-12-18 15:28:00)
if(mp_CStringNode!=0)
{
// mo_CEnvVarSet <20><> <20><> <20>Է<EFBFBD>.
const_cast<ZCEnvVar&>(mp_CStringNode->GetData()).
GetValue()(AP_Data, AL_Length) ;
/*+++++++++++++++++++++++++++++++++++++++++++++*/
}/*
if(mp_CStringNode!=0)*/
return ZNsMain::ZERun_OK;
}/*
if(mb_DoFindEqual)*/
TypeLength VL_FindPos = ZCMainChars::
FindPos(AP_Data, "=", AL_Length, 1); // 1 <20><> "=" <20><> <20><><EFBFBD><EFBFBD>
if(VL_FindPos<0)
{
mo_CStringName(AP_Data, AL_Length); return ZNsMain::ZERun_OK;
}/*
if(VL_FindPos<0)*/
mb_DoFindEqual=true; mo_CStringName(AP_Data, VL_FindPos).Trim();
if(mo_CStringName.size()< 1) return ZNsMain::ZERun_OK;
mo_CStringName = ZNsMain::
ZNsEnc::ZftGetSimUrlDec( RR(mo_CStringName) ) ;
if(mo_CStringName.size()< 1) return ZNsMain::ZERun_OK;
mp_CStringNode=mo_CEnvVarSet.AddKey(mo_CStringName);
if(mp_CStringNode ==0) return ZNsMain::ZERun_OK;
const_cast<ZCEnvVar&>(mp_CStringNode->GetData()).GetValue()
(
AP_Data +VL_FindPos+1,
AL_Length-VL_FindPos-1
);
///////////////////////////////////////////////////////////
return ZNsMain::ZERun_OK;
}/*
ZNsMain::ZERun ExecBlockIn(const TypeChar* AP_Data, TypeLength AL_Length)*/
ZNsMain::ZERun ExecBlockMatch(const TypeChar* AP_Data, TypeLength AL_Length)
{
// <20>и<EFBFBD> <20><><EFBFBD><EFBFBD> "&" <20><> <20>߰ߵ<DFB0> <20><><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ.
if(mp_CStringNode!=0)
{
const_cast<ZCEnvVar&>(mp_CStringNode->GetData()).GetValue().Trim();
}/*
if(mp_CStringNode!=0)*/
mp_CStringNode = 0 ;
mo_CStringName = "" ;
mb_DoFindEqual = false;
return ZNsMain::ZERun_OK;
}/*
ZNsMain::ZERun ExecBlockMatch(const TypeChar* AP_Data, TypeLength AL_Length)*/
/*private:*/
public :
ZtCLoadSimUrlConfig()
{
mp_CStringNode=0 ;
mb_DoFindEqual=false;
this->TypeBase::SetSearchCString(ZCStringData("&"));
}/*
ZtCLoadSimUrlConfig()*/
ZCStringData& GetCStringBuff() {return mo_CStringBuff;}
ZCEnvVarSet GetCEnvVarSet () {return mo_CEnvVarSet ;}
const ZCStringData& GetCStringBuff() const{return mo_CStringBuff;}
const ZCEnvVarSet GetCEnvVarSet () const{return mo_CEnvVarSet ;}
void LoadData (const ZCStringData& AR_CStringConf){
LoadData (AR_CStringConf.data(), AR_CStringConf.size()); }
void LoadDataEx(const ZCStringData& AR_CStringConf){
LoadDataEx(AR_CStringConf.data(), AR_CStringConf.size()); }
void LoadData(const TypeChar* APC_ConfigData, TypeLength AI_ConfigLen)
{
this->TypeBase::LoadData(APC_ConfigData, AI_ConfigLen);
}/*
void LoadData(const TypeChar* APC_ConfigData, TypeLength AI_ConfigLen)*/
void LoadDataEx(const TypeChar* APC_ConfigData, TypeLength AI_ConfigLen)
{
this->TypeBase::LoadData(APC_ConfigData, AI_ConfigLen);
mo_CStringName.clear();
mp_CStringNode=0 ;
mb_DoFindEqual=false ;
}/*
void LoadDataEx(const TypeChar* APC_ConfigData, TypeLength AI_ConfigLen)*/
void clear()
{
mo_CEnvVarSet .clear();
mo_CStringName.clear();
mp_CStringNode=0 ;
mb_DoFindEqual=false ;
}/*
void clear()*/
long GetLongValue(const ZCStringData& AR_CStringName)
{
ZCEnvVarNode* VP_CEnvVarNode=mo_CEnvVarSet.FindKey(AR_CStringName);
if(VP_CEnvVarNode==0) return 0; return VP_CEnvVarNode->GetData().GetValue().GetLong();
}/*
long GetLongValue(const ZCStringData& AR_CStringName)*/
long GetLongValue(const ZCStringData& AR_CStringName, long& ARRL_Long)
{
ZCEnvVarNode* VP_CEnvVarNode=mo_CEnvVarSet.FindKey(AR_CStringName);
if(VP_CEnvVarNode==0) return ARRL_Long; return ARRL_Long=VP_CEnvVarNode->GetData().GetValue().GetLong();
}/*
long GetLongValue(const ZCStringData& AR_CStringName, long& ARRL_Long)*/
ZCStringData& GetCStringValue(const ZCStringData& AR_CStringName, ZCStringData& ARR_CStringValue)
{
ZCEnvVarNode* VP_CEnvVarNode=mo_CEnvVarSet.FindKey(AR_CStringName);
if(VP_CEnvVarNode==0) return ARR_CStringValue;
return ARR_CStringValue=VP_CEnvVarNode->GetData().GetValue();
}/*
ZCStringData& GetCStringValue(const ZCStringData& AR_CStringName, ZCStringData& ARR_CStringValue)*/
ZCStringData GetCStringValue(const ZCStringData& AR_CStringName)
{
ZCStringData VO_ValueCStr; return GetCStringValue(AR_CStringName, RR(VO_ValueCStr));
}/*
ZCStringData GetCStringValue(const ZCStringData& AR_CStringName)*/
ZCStringData* GetCStringValuePtr(const ZCStringData& AR_CStringName)
{
ZCEnvVarNode* VP_CEnvVarNode =
mo_CEnvVarSet.FindKey(AR_CStringName);
if(VP_CEnvVarNode==0) return 0;
return const_cast<ZCStringData*>(
&VP_CEnvVarNode->GetData().GetValue());
}/*
ZCStringData* GetCStringValuePtr(const ZCStringData& AR_CStringName)*/
const ZCStringData* GetCStringValuePtr(const ZCStringData& AR_CStringName) const
{
ZCEnvVarNode* VP_CEnvVarNode =
mo_CEnvVarSet.FindKey(AR_CStringName);
if(VP_CEnvVarNode==0) return 0;
return &VP_CEnvVarNode->GetData().GetValue();
}/*
const ZCStringData* GetCStringValuePtr(const ZCStringData& AR_CStringName) const*/
bool AddCEnvVar(const ZCEnvVar& AR_CEnvVar)
{
return mo_CEnvVarSet.AddData(AR_CEnvVar);
}/*
bool AddCEnvVar(const ZCEnvVar& AR_CEnvVar)*/
bool AddCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)
{
return mo_CEnvVarSet.AddData(ZCEnvVar(AR_NameCStr, AR_ValueCStr));
}/*
bool AddCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)*/
bool AddCEnvVarLong(const ZCStringData& AR_NameCStr, long AL_LongValue)
{
return mo_CEnvVarSet.AddData(ZCEnvVar(AR_NameCStr, ZCStringData(AL_LongValue)));
}/*
bool AddCEnvVarLong(const ZCStringData& AR_NameCStr, long AL_LongValue)*/
bool CutCEnvVar(const ZCStringData& AR_NameCStr)
{
return mo_CEnvVarSet.template DeleteKey<const ZCStringData&>(AR_NameCStr);
}/*
bool CutCEnvVar(const ZCStringData& AR_NameCStr)*/
bool AddEditCEnvVar(const ZCEnvVar& AR_CEnvVar) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>.
{
CutCEnvVar(AR_CEnvVar.GetName()); return mo_CEnvVarSet.AddData(AR_CEnvVar);
}/*
bool AddEditCEnvVar(const ZCEnvVar& AR_CEnvVar)*/
bool AddEditCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)
{
CutCEnvVar(AR_NameCStr); return mo_CEnvVarSet.AddData(ZCEnvVar(AR_NameCStr, AR_ValueCStr));
}/*
bool AddEditCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)*/
bool EditCEnvVar(const ZCEnvVar& AR_CEnvVar) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
{
if(CutCEnvVar(AR_CEnvVar.GetName())) return mo_CEnvVarSet.AddData(AR_CEnvVar); return false;
}/*
bool EditCEnvVar(const ZCEnvVar& AR_CEnvVar)*/
bool EditCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)
{
if(CutCEnvVar(AR_NameCStr))
return mo_CEnvVarSet.AddData(ZCEnvVar(AR_NameCStr, AR_ValueCStr));
return false;
}/*
bool EditCEnvVar(const ZCStringData& AR_NameCStr, const ZCStringData& AR_ValueCStr)*/
void Serialize(ZCStringData& ARR_SerialCStr, TypePfOnMeetCEnvVar APF_OnMeetCEnvVar)
{
mo_CEnvVarSet.template IterInOrder<TypePfOnMeetCEnvVar, ZCStringData&>
(
APF_OnMeetCEnvVar, RR(ARR_SerialCStr)
);
//////////////////////////////////////////////////////////////////////
}/*
void Serialize(ZCStringData& ARR_SerialCStr, TypePfOnMeetCEnvVar APF_OnMeetCEnvVar)*/
void Serialize(ZCStringData& ARR_SerialCStr) /////////////////////////////
{
mo_CEnvVarSet.template IterInOrder<TypePfOnMeetCEnvVar, ZCStringData&>
(
OnMeetCEnvVar, RR(ARR_SerialCStr)
);
//////////////////////////////////////////////////////////////////////
}/*
void Serialize(ZCStringData& ARR_SerialCStr)*/
void Serialize()
{
Serialize( RR(this->mo_CStringBuff="") );
}/*
void Serialize()*/
template<typename TFunctor> void IterEnvSet(TFunctor AO_Functor)
{
mo_CEnvVarSet.template IterInOrder<TFunctor>(AO_Functor);
}/*
template<typename TFunctor> void IterEnvSet(TFunctor AO_Functor)*/
void IterEnvSet()
{
IterEnvSet(&ShowEnvVar); // for debug
}/*
void IterEnvSet()*/
public:
};/*
template< typename TStringData, ##########################
typename TTypeEnvVarSet =
ZNsType::ZtCTypeEnvVarSet<TStringData>
>
class ZtCLoadSimUrlConfig ################################*/
template< typename TStringData=ZNsMain::ZtCStringBase<char>
>
class ZtCLoadXmlInfo /*####################################*/
{
public :
typedef TStringData ZCStringData;
typedef typename ZCStringData::TypeLength TypeLength;
typedef ZNsMain::ZNsType::ZtCTypeXmlInfo< ///////////
ZCStringData
/*/////////*/ > ZCTypeXmlInfo; //////////////////////
typedef ZNsMain::ZtCXmlInfo<ZCTypeXmlInfo> ZCXmlInfo;
typedef ZNsMain::ZNsView::ZtCViewLoadXmlOfXmlInfo<
ZCXmlInfo
/*/////////*/ > ZCViewLoadXml; //////////////////////
typedef ZNsMain::ZtCLoadXml<ZCStringData> ZCLoadXml;
/*public :*/
private:
ZCViewLoadXml m_oCViewLoad;
ZCLoadXml m_oCLoadXml ;
public :
ZCLoadXml& GetCLoadXml(){return m_oCLoadXml ;}
ZCXmlInfo& GetCXmlInfo(){return m_oCViewLoad.GetCXmlInfo();}
ZNsMain::ZERunEx Exec(const char* APC_XmlData, TypeLength AI_Length)
{
m_oCViewLoad.clear();
m_oCLoadXml .clear(); return m_oCLoadXml.
ExecAll(RR(m_oCViewLoad), APC_XmlData, AI_Length);
}/*
ZNsMain::ZERunEx Exec(const char* APC_XmlData, TypeLength AI_Length)*/
ZNsMain::ZERunEx Exec(const ZCStringData& ArgrXmlData)
{
return Exec(ArgrXmlData.data(), ArgrXmlData.size());
}/*
ZNsMain::ZERunEx Exec(const ZCStringData& ArgrXmlData)*/
template<typename TMainChars>
ZNsMain::ZERunEx Exec(const TMainChars& AR_CMainChars)
{
return Exec(AR_CMainChars.data(), AR_CMainChars.size());
}/*
template<typename TMainChars>
ZNsMain::ZERunEx Exec(const TMainChars& AR_CMainChars)*/
public :
};/*
template< typename TStringData=ZNsMain::ZtCStringBase<char>
>
class ZtCLoadXmlInfo ######################################*/
}/*
namespace ZNsCGI*/
}/*
namespace ZNsMain */
#endif //__ZNSMAIN__ZMAIN_CGI_H__

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

38
ZCppMain/ZMainXhtml.H Normal file
View File

@ -0,0 +1,38 @@

#ifndef __ZCPPMAIIN__ZMAINXHTML_H__
#define __ZCPPMAIIN__ZMAINXHTML_H__
namespace ZNsMain
{
template<typename TStringData> TStringData& ZftConvertXhtml(TStringData& ARR_CString)
{
/* 데이타를 그대로 클라이언트에 전송하면
HTML 태그와 혼동될 수 있는데 이를 방지하기 위해
적절히 인코딩한다.
*/
return ARR_CString.
Replace("&" ,"&amp;" ). Replace("<" ,"&lt;" ).
Replace(">" ,"&gt;" ). Replace(" " ,"&nbsp;" ).
Replace("\n","<br />" );
}/*
template<typename TStringData> static TStringData& ConvertXhtml(TStringData& ARR_CString) */
template<typename TStringData> TStringData& ZftConvertXhtmlAtt(TStringData& ARR_CString)
{
// X(H)TML 의 속성에 올 수 있는 값으로 인코딩한다.
return ARR_CString.
Replace("&" ,"&amp;" ). Replace("<" ,"&lt;" ).
Replace(">" ,"&gt;" ). Replace("\"","&quot;" ).
Replace("\r","&#xA;" ). Replace("\n","&#xD;" );
}/*
template<typename TStringData> TStringData& ZftConvertXhtmlAtt(TStringData& ARR_CString) */
}/*
namespace ZNsMain*/
#endif // __ZCPPMAIIN__ZMAINXHTML_H__

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -21,7 +21,7 @@ namespace ZNsMain
class ZtCLoadDataBlock; ///////////////////
namespace ZNsIFace
namespace ZNsInterface
{
template<typename TStringData> class ZtCChildLoadDataBlock
@ -88,7 +88,7 @@ namespace ZNsMain
template<typename TStringData> class ZtCChildLoadDataBlock */
}/*
namespace ZNsIFace*/
namespace ZNsInterface*/
/* 찾은 2 개 문자열 사이에 있는 문자열 블럭에 대하여 특정한 처리를 해준다.
@ -133,7 +133,7 @@ namespace ZNsMain
}/*
if(mb_DoFindStart==true)*/
return GetChildObj().ExecBlockOut(APC_Data, AL_Length);
return GetChildObj.ExecBlockOut(APC_Data, AL_Length);
}/*
_NP_ ZERun OnMeetNormal(const TypeChar* APC_Data, TypeLength AL_Length)*/
@ -343,8 +343,9 @@ namespace ZNsMain
template<typename THelpType> ZERun LoadData(
const TypeChar* APC_Data, TypeLength AL_Length, THelpType AO_CHelpType)
{
typedef ZNsMain::ZtCCheckRef<THelpType> ZCCheckRef;
typedef typename ZCCheckRef::TypeData TypeObject;
typedef ZNsMain::
ZtCCheckRef<THelpType> ZCCheckRef;
typedef ZCCheckRef::TypeData TypeObject;
bool VB_IsOK =false ;
ZTypLength VL_StartPos=0 ;
@ -619,7 +620,7 @@ namespace ZNsMain
{
if(mb_DoFindStart==false)
{
VB_IsOK = ZCMainChars::FindPosReady
VB_IsOK=ZCMainChars::FindPosReady
<ZtCExamReadyExec&, char, TStringData>
(
*this
@ -633,11 +634,11 @@ namespace ZNsMain
);
//////////////////////////////////////////
if(VB_IsOK) mb_DoFindStart= true;
if(VB_IsOK==true) mb_DoFindStart=true;
}
else // mb_DoFindStart==true
{
VB_IsOK = ZCMainChars::FindPosReady
VB_IsOK=ZCMainChars::FindPosReady
<ZtCExamReadyExec&, char, TStringData>
(
*this
@ -651,11 +652,11 @@ namespace ZNsMain
);
//////////////////////////////////////////
if(VB_IsOK) mb_DoFindStart= false;
if(VB_IsOK==true) mb_DoFindStart=false;
}/*
else // mb_DoFindStart==true*/
}
while(VB_IsOK);
while(VB_IsOK==true);
}/*
void LoadData(const char* APC_Data, ZTypLength AL_Length)*/
@ -688,7 +689,7 @@ namespace ZNsMain
);
/////////////////////////////////////////////////////
if(VB_IsOK) mb_DoFindStart=true;
if(VB_IsOK==true) mb_DoFindStart=true;
}
else // mb_DoFindStart==true
{
@ -707,11 +708,11 @@ namespace ZNsMain
);
//////////////////////////////////////////////
if(VB_IsOK) mb_DoFindStart=false;
if(VB_IsOK==true) mb_DoFindStart=false;
}/*
else // mb_DoFindStart==true */
}
while(VB_IsOK);
while(VB_IsOK==true);
}/*
template<typename THelpType> void LoadData(
const char* APC_Data, ZTypLength AL_Length, THelpType AO_CHelpType) */
@ -966,7 +967,7 @@ namespace ZNsMain
namespace ZNsIFace
namespace ZNsInterface
{
template<typename TStringData> class ZtCParentLoadDataBlockArr
@ -1036,7 +1037,7 @@ namespace ZNsMain
template<typename TStringData> class ZtCParentLoadDataBlockArr */
}/*
namespace ZNsIFace*/
namespace ZNsInterface*/
/*///////////////////////////////////////////////////////////////////////////////
@ -1450,13 +1451,13 @@ namespace ZNsMain
namespace ZNsType*/
template< typename TDerive, ////////////////////
template< typename TDerive,
typename TStringData
>
class ZtCLoadDataBlockOne; ///////////////////////
class ZtCLoadDataBlockOne;
namespace ZNsIFace
namespace ZNsInterface
{
template<typename TStringData> class ZtCChildLoadDataBlockOne
@ -1540,7 +1541,7 @@ namespace ZNsMain
template<typename TStringData> class ZtCChildLoadDataBlockOne */
}/*
namespace ZNsIFace*/
namespace ZNsInterface*/
/* ZtCLoadDataBlockArr<> 클래스 템플릿에서 한 개의

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -15,13 +15,13 @@ namespace ZNsMain
■ 이 AVL tree 는 각 노드가 트리 구조를 이루며, 동시에 이중 원형 연결리스트를 이루고 있다.
자료를 기본적으로 오름차순 정렬한다.
TType 자료형에는 <,>,== 연산이 가능해야 한다.
■ Type 자료형에는 <,>,== 연산이 가능해야 한다.
■ 어떤 클래스에 비교연산자를 정의할 때 bool operator>(const CStringHash& rhs) const 와 같
이 하면 인수에도 const, 멤버함수에도 const 를 잊지 말 것.
■ 접미어 Key 가 붙어있는 멤버 함수는 TType 보다는 크기가 작은 어떤 자료형이다. 삽입, 삭제
시에 메모리를 절약하기 위해서 사용한다. TType 자료형과 Key 자료형 사이에는 <,>,==,= 의 연
■ 접미어 Key 가 붙어있는 멤버 함수는 Type 보다는 크기가 작은 어떤 자료형이다. 삽입, 삭제
시에 메모리를 절약하기 위해서 사용한다. Type 자료형과 Key 자료형 사이에는 <,>,==,= 의 연
산이 가능해야 한다.
■ multi set 으로 활용하는 코드는 MainAVL.H 파일의 주석에 예시하였다. typename TNodeBase 를
@ -30,19 +30,19 @@ namespace ZNsMain
/////////////////////////////////////////////////////////////////////////////////////////*/
template< typename TType ,
typename TTypArg = const TType& ,
typename TTypBase = ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg> ,
typename TNodeBase = ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg> ,
typename TAlloc = ZNsMain::ZCAllocator ,
typename TSize = ZNsMain::ZTypLong ,
typename TCompare = ZNsMain::ZtCCompare<TTypArg, TTypArg, false>,
typename TMoveObj = ZNsMain::ZtCMoveObj<TType , TTypArg, true >
template< typename Type ,
typename TTypArg =const Type& ,
typename TTypBase =ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg> ,
typename TNodeBase =ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg> ,
typename TAlloc =ZNsMain::ZCAllocator ,
typename TSize =ZNsMain::ZTypLong ,
typename TCompare =ZNsMain::ZNsFunc::ZtCCompare<TTypArg, TTypArg, false>,
typename TMoveObj =ZNsMain::ZNsFunc::ZtCMoveObj<TTypArg, TTypArg, true >
>
class ZtCObjAVL : public TTypBase ///////////////////////////////////////////////////////
{
public:
typedef TType TypeData ;
typedef Type TypeData ;
typedef TTypArg TypeArg ;
typedef TTypBase TypeBase ;
typedef TNodeBase TypeNodeBase;
@ -64,7 +64,7 @@ namespace ZNsMain
ZCNode* mp_RighNode; /* 오른쪽 노드 */
ZCNode* mp_HighNode; /* 상위 노드 */
TType mo_Data ;
Type mo_Type ;
int mi_Balance ;
/* 오른쪽 노드에 삽입될 때마다 mi_Balance 는 1 씩 증가하고
@ -224,16 +224,15 @@ namespace ZNsMain
}/*
bool IsFullNode() const*/
typename ZtCRef<TypeArg>::TypeConst GetData() const
TTypArg GetData() const
{
return mo_Data;
return mo_Type;
}/*
typename ZtCRef<TypeArg>::TypeConst GetData() const*/
TTypArg GetData() const*/
bool operator==(TypeArg AR_Type) const{return mo_Data==AR_Type;}
bool operator> (TypeArg AR_Type) const{return mo_Data> AR_Type;}
bool operator< (TypeArg AR_Type) const{return mo_Data< AR_Type;}
bool operator==(TTypArg AR_Type) const{return mo_Type==AR_Type;}
bool operator> (TTypArg AR_Type) const{return mo_Type> AR_Type;}
bool operator< (TTypArg AR_Type) const{return mo_Type< AR_Type;}
template<typename TFunctor> static void IterInOrder (ZCNode* AP_Node, TFunctor AO_Functor)
{
@ -241,7 +240,7 @@ namespace ZNsMain
{
ZCNode::template IterInOrder<TFunctor>(AP_Node->mp_LeftNode, AO_Functor);
{
ZNsMain::ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)(AP_Node->mo_Data);
ZNsMain::ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)(AP_Node->mo_Type);
}
ZCNode::template IterInOrder<TFunctor>(AP_Node->mp_RighNode, AO_Functor);
}/*
@ -253,7 +252,7 @@ namespace ZNsMain
{
if(AP_Node!=0)
{
ZNsMain::ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)(AP_Node->mo_Data);
ZNsMain::ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)(AP_Node->mo_Type);
ZCNode::template IterPreOrder<TFunctor>(AP_Node->mp_LeftNode, AO_Functor);
ZCNode::template IterPreOrder<TFunctor>(AP_Node->mp_RighNode, AO_Functor);
@ -269,7 +268,7 @@ namespace ZNsMain
ZCNode::template IterPostOrder<TFunctor>(AP_Node->mp_LeftNode, AO_Functor);
ZCNode::template IterPostOrder<TFunctor>(AP_Node->mp_RighNode, AO_Functor);
ZNsMain::ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)(AP_Node->mo_Data);
ZNsMain::ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)(AP_Node->mo_Type);
}/*
if(AP_Node!=0)*/
}/*
@ -286,7 +285,7 @@ namespace ZNsMain
(AP_Node->mp_LeftNode, AO_Functor, AR_HelpObj);
{
ZNsMain::ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(AP_Node->mo_Data, AR_HelpObj);
GetObjRef(AO_Functor)(AP_Node->mo_Type, AR_HelpObj);
}
ZCNode::template IterInOrder<TFunctor, THelpObj>
(AP_Node->mp_RighNode, AO_Functor, AR_HelpObj);
@ -304,7 +303,7 @@ namespace ZNsMain
if(AP_Node!=0)
{
ZNsMain::ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(AP_Node->mo_Data, AR_HelpObj);
GetObjRef(AO_Functor)(AP_Node->mo_Type, AR_HelpObj);
ZCNode::template IterPreOrder
<TFunctor, THelpObj>(AP_Node->mp_LeftNode, AO_Functor, AR_HelpObj);
@ -329,7 +328,7 @@ namespace ZNsMain
( AP_Node->mp_RighNode, AO_Functor, AR_HelpObj );
ZNsMain::ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(AP_Node->mo_Data, AR_HelpObj);
GetObjRef(AO_Functor)(AP_Node->mo_Type, AR_HelpObj);
}/*
if(AP_Node!=0)*/
}/*
@ -839,9 +838,9 @@ namespace ZNsMain
ZCNode* VP_Temp=rhs.mp_HeadNode ;
ZCNode* VP_Tail=rhs.mp_HeadNode->mp_PrevNode;
do //////
do /**/
{
AddData(VP_Temp->mo_Data);
AddData(VP_Temp->mo_Type);
if(VP_Temp==VP_Tail) return;
@ -853,16 +852,16 @@ namespace ZNsMain
ZtCObjAVL& operator=(const ZtCObjAVL& rhs)
{
if(this==&rhs) {return *this;}
if(this==&rhs) {return ;}
DeleteAll(); if(rhs.mp_HeadNode==0){ return *this;}
DeleteAll(); if(rhs.mp_HeadNode==0){ return; }
ZCNode* VP_Temp=rhs.mp_HeadNode;
ZCNode* VP_Tail=rhs.mp_HeadNode->mp_PrevNode;
do //////
do /**/
{
AddData(VP_Temp->mo_Data);
AddData(VP_Temp->mo_Type);
if(VP_Temp==VP_Tail) return *this;
@ -987,7 +986,7 @@ namespace ZNsMain
do /**/
{
DeleteData(VP_Temp->mo_Data);
DeleteData(VP_Temp->mo_Type);
if(VP_Temp==VP_Tail) return *this;
@ -1061,11 +1060,11 @@ namespace ZNsMain
do /*#####*/
{
/* 아래 줄에서 VP_Temp->mo_Data 을 받는 인수는
복사로 받거나 const TType& 으로 받아야 한다. */
/* 아래 줄에서 VP_Temp->mo_Type 을 받는 인수는
복사로 받거나 const Type& 으로 받아야 한다. */
ZNsMain::ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(VP_Temp->mo_Data);
GetObjRef(AO_Functor)(VP_Temp->mo_Type);
if(VP_Temp==VP_Tail) return; VP_Temp=VP_Temp->mp_NextNode;
}
@ -1083,11 +1082,11 @@ namespace ZNsMain
do /*#####*/
{
/* 아래 줄에서 VP_Temp->mo_Data 을 받는 인수는
복사로 받거나 const TType& 으로 받아야 한다. */
/* 아래 줄에서 VP_Temp->mo_Type 을 받는 인수는
복사로 받거나 const Type& 으로 받아야 한다. */
ZNsMain::ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(VP_Temp->mo_Data, AO_HelpType) ;
GetObjRef(AO_Functor)(VP_Temp->mo_Type, AO_HelpType) ;
if(VP_Temp==VP_Tail) return; VP_Temp=VP_Temp->mp_NextNode;
}
@ -1107,7 +1106,7 @@ namespace ZNsMain
do /*#####*/
{
ZNsMain::ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(VP_Temp->mo_Data, AR_HelpType) ;
GetObjRef(AO_Functor)(VP_Temp->mo_Type, AR_HelpType) ;
if(VP_Temp==VP_Tail) return; VP_Temp=VP_Temp->mp_NextNode;
}
@ -1144,21 +1143,12 @@ namespace ZNsMain
{
if(mp_RootNode==0)
{
mp_RootNode = new ZCNode ;
mp_HeadNode = mp_RootNode ;
mp_RootNode=new ZCNode ;
mp_HeadNode=mp_RootNode ;
ZCNode::MakeRing(mp_HeadNode, mp_HeadNode);
mp_RootNode->mo_Type=AR_Type;
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) /////////////////////
{
TypeMoveObj::Exec(mp_RootNode->mo_Data, AR_Type);
}
else ////////////////////////////////////////////////
#endif
mp_RootNode->mo_Data=AR_Type;
++ml_NodeSize; return true;
++ml_NodeSize; return true;
}
else // mp_RootNode!=0
{
@ -1178,7 +1168,7 @@ namespace ZNsMain
ZCNode::MakeRing(mp_HeadNode, mp_HeadNode);
mp_RootNode->mo_Data=AR_Key; ++ml_NodeSize;
mp_RootNode->mo_Type=AR_Key; ++ml_NodeSize;
return mp_RootNode; /*///////////////////*/
}
@ -1207,7 +1197,7 @@ namespace ZNsMain
(void)CutNode(VP_FindNode);
VP_FindNode->mo_Data=AR_NewType;
VP_FindNode->mo_Type=AR_NewType;
// 같은 값을 가진 노드가 있어서 삽입에 실패했다면, 잘라낸 노드를 지워버린다.
@ -1238,7 +1228,7 @@ namespace ZNsMain
(void)CutNode(VP_FindNode);
VP_FindNode->mo_Data=AR_NewKey;
VP_FindNode->mo_Type=AR_NewKey;
// 같은 키 값을 가진 노드가 있어서 삽입에 실패했다면, 잘라낸 노드를 지워버린다.
@ -1315,7 +1305,7 @@ namespace ZNsMain
ZCNode* FindData(TTypArg AR_Type) const
{
/* mp_RootNode 부터 하위 노드로 순회하면서
mo_Data 를 가지는 노드를 찾는다. */
mo_Type 를 가지는 노드를 찾는다. */
return FindData(AR_Type, mp_RootNode);
}/*
@ -1325,7 +1315,7 @@ namespace ZNsMain
ZCNode* FindData(TTypArg AR_Type, ZCNode* AP_StartNode) const
{
/* AP_StartNode 부터 하위 노드로 순회하면서
mo_Data 를 가지는 노드를 찾는다. */
mo_Type 를 가지는 노드를 찾는다. */
#ifdef _DEBUG
@ -1345,17 +1335,17 @@ namespace ZNsMain
while(AP_StartNode!=0)
{
if (AP_StartNode->mo_Data == AR_Type)
if(AP_StartNode->mo_Type==AR_Type)
{
return AP_StartNode;
}
else if(AP_StartNode->mo_Data > AR_Type)
else if(AP_StartNode->mo_Type>AR_Type)
{
AP_StartNode = AP_StartNode->mp_LeftNode;
AP_StartNode=AP_StartNode->mp_LeftNode;
}
else
{
AP_StartNode = AP_StartNode->mp_RighNode;
AP_StartNode=AP_StartNode->mp_RighNode;
}/*
else*/
}/*
@ -1412,7 +1402,7 @@ namespace ZNsMain
■ AP_StartNode 부터 하위 노드로 순회하면서 AR_Key 를 가지는 노드를 찾는다.
FindData(TTypArg AR_Type,ZCNode* AP_StartNode) 같은 함수는 찾으려는 object 가
AR_Type 이 크기가 큰 object 일 수 있는데, 이를 피하기 위해 그 보다 작은 크기
의 자료형 TKey 로부터 해당 데이타를 찾는다. 물론 mo_Data 과 TKey 에 대한 비
의 자료형 TKey 로부터 해당 데이타를 찾는다. 물론 mo_Type 과 TKey 에 대한 비
교 연산이 정의되어 있어야 한다.
//////////////////////////////////////////////////////////////////////////////*/
@ -1435,9 +1425,9 @@ namespace ZNsMain
while(AP_StartNode!=0)
{
if(AP_StartNode->mo_Data==AR_Key) return AP_StartNode;
if(AP_StartNode->mo_Type==AR_Key) return AP_StartNode;
if(AP_StartNode->mo_Data>AR_Key)
if(AP_StartNode->mo_Type>AR_Key)
AP_StartNode=AP_StartNode->mp_LeftNode;
else
AP_StartNode=AP_StartNode->mp_RighNode;
@ -1459,7 +1449,7 @@ namespace ZNsMain
■ AP_StartNode 부터 하위 노드로 순회하면서 AR_Key 를 가지는 노드를 찾는다.
FindData(TTypArg AR_Type,ZCNode* AP_StartNode) 같은 함수는 찾으려는 object 가
AR_Type 이 크기가 큰 object 일 수 있는데, 이를 피하기 위해 그 보다 작은 크기
의 자료형 TKey 로부터 해당 데이타를 찾는다. 물론 mo_Data 과 TKey 에 대한 비
의 자료형 TKey 로부터 해당 데이타를 찾는다. 물론 mo_Type 과 TKey 에 대한 비
교 연산이 정의되어 있어야 한다.
//////////////////////////////////////////////////////////////////////////////*/
@ -1482,9 +1472,9 @@ namespace ZNsMain
while(AP_StartNode!=0)
{
if(AP_StartNode->mo_Data==AR_Key) return AP_StartNode;
if(AP_StartNode->mo_Type==AR_Key) return AP_StartNode;
if(AP_StartNode->mo_Data>AR_Key)
if(AP_StartNode->mo_Type>AR_Key)
AP_StartNode=AP_StartNode->mp_LeftNode;
else
AP_StartNode=AP_StartNode->mp_RighNode;
@ -1647,7 +1637,7 @@ namespace ZNsMain
if(CB_IsLess)*/
// AR_Node.mo_Data>AR_Type)
// AR_Node.mo_Type>AR_Type)
if(AR_Node.mp_LeftNode==0)
{
@ -1785,7 +1775,7 @@ namespace ZNsMain
if(CB_IsLess)*/
// AR_Node.mo_Data>AR_Type
// AR_Node.mo_Type>AR_Type
if(AR_Node.mp_LeftNode==0)
{
@ -1931,7 +1921,7 @@ namespace ZNsMain
if(CB_IsLess)*/
// AR_Node.mo_Data>AR_Type)
// AR_Node.mo_Type>AR_Type)
if(AR_Node.mp_LeftNode==0)
{
@ -2012,10 +2002,10 @@ namespace ZNsMain
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0)
TypeMoveObj::Exec(VP_NewNode->mo_Data, AR_Type);
TypeMoveObj::Exec(VP_NewNode->mo_Type, AR_Type);
else
#endif
VP_NewNode->mo_Data=AR_Type;
VP_NewNode->mo_Type=AR_Type;
return JoinBefore(AP_StdNode, VP_NewNode);
}/*
@ -2024,9 +2014,14 @@ namespace ZNsMain
template<typename TKey>
inline ZCNode* JoinBeforeKey(ZCNode* AP_StdNode, TKey AR_Key)
{
ZCNode* VP_NewNode = new ZCNode;
ZCNode* VP_NewNode=new ZCNode;
VP_NewNode->mo_Data = AR_Key ;
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0)
TypeMoveObj::Exec(VP_NewNode->mo_Type, AR_Key);
else
#endif
VP_NewNode->mo_Type=AR_Key;
return JoinBefore(AP_StdNode, VP_NewNode);
}/*
@ -2065,10 +2060,10 @@ namespace ZNsMain
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0)
TypeMoveObj::Exec(VP_NewNode->mo_Data, AR_Type);
TypeMoveObj::Exec(VP_NewNode->mo_Type, AR_Type);
else
#endif
VP_NewNode->mo_Data=AR_Type;
VP_NewNode->mo_Type=AR_Type;
return JoinAfter(AP_StdNode, VP_NewNode);
}/*
@ -2077,9 +2072,14 @@ namespace ZNsMain
template<typename TKey>
inline ZCNode* JoinAfterKey(ZCNode* AP_StdNode, TKey AR_Key)
{
ZCNode* VP_NewNode = new ZCNode;
ZCNode* VP_NewNode=new ZCNode;
VP_NewNode->mo_Data= AR_Key ;
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0)
TypeMoveObj::Exec(VP_NewNode->mo_Type, AR_Key);
else
#endif
VP_NewNode->mo_Type=AR_Key;
return JoinAfter(AP_StdNode, VP_NewNode);
}/*
@ -2362,21 +2362,65 @@ namespace ZNsMain
}/*
else // AP_Node->mi_Balance==-1*/
}/*
ZCNode* Balance(ZCNode* AP_Node, int AI_AddState)*/
ZCNode* Balance(ZCNode* AP_Node,int AI_AddState)*/
private:
};/*
template< typename TType ,
typename TTypArg = const TType& ,
typename TTypBase = ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg> ,
typename TNodeBase = ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg> ,
typename TAlloc = ZNsMain::ZCAllocator ,
typename TSize = ZNsMain::ZTypLong ,
typename TCompare = ZNsMain::ZtCCompare<TTypArg, TTypArg, false>,
typename TMoveObj = ZNsMain::ZtCMoveObj<TType , TTypArg, true >
template< typename Type ,
typename TTypArg =const Type& ,
typename TTypBase =ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg> ,
typename TNodeBase =ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg> ,
typename TAlloc =ZNsMain::ZCAllocator ,
typename TSize =ZNsMain::ZTypLong ,
typename TCompare =ZNsMain::ZNsFunc::ZtCCompare<TTypArg, TTypArg, false>,
typename TMoveObj =ZNsMain::ZNsFunc::ZtCMoveObj<TTypArg, TTypArg, true >
>
class ZtCObjAVL /////////////////////////////////////////////////////////////////////*/
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamAVL
{
public:
static void ShowDataInNode(int AI_Data)
{
cout<<"* Node Data : "<<AI_Data<<endl;
}/*
static void ShowDataInNode(int AI_Data)*/
static int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)
{
using namespace std ;
using namespace ZNsMain;
ZtCObjAVL<int, int> VO_CObjAVL;
VO_CObjAVL.AddData(10);
VO_CObjAVL.AddData(20);
VO_CObjAVL.AddData(30);
VO_CObjAVL.AddData(40);
VO_CObjAVL.AddData(9 );
cout<<"# In Order" <<endl; VO_CObjAVL.IterInOrder (&ShowDataInNode);
cout<<"# Post Order"<<endl; VO_CObjAVL.IterPostOrder(&ShowDataInNode);
cout<<"# Pre Order" <<endl; VO_CObjAVL.IterPreOrder (&ShowDataInNode);
return 0;
}/*
static int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamAVL*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain */
@ -2422,32 +2466,31 @@ namespace ZNsMain
using ZNsMain::ZtCObjAVL;
namespace ZNsTmplParam
{
template< typename TType ,
typename TTypArg =const TType& ,
typename TCompare =ZNsMain::ZtCCompare<TTypArg, TTypArg, true>,
typename TTypBase =ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg>,
typename TNodeBase =ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg>,
typename TAlloc =ZNsMain::ZCAllocator ,
typename TSize =long ,
typename TMoveObj =ZNsMain::ZtCMoveObj<TType, TTypArg, false>
template< typename Type ,
typename TTypArg =const Type& ,
typename TCompare =ZNsMain::ZNsFunc ::ZtCCompare<TTypArg, TTypArg, true>,
typename TTypBase =ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg> ,
typename TNodeBase =ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg> ,
typename TAlloc =ZNsMain::ZCAllocator ,
typename TSize =long ,
typename TMoveObj =ZNsMain::ZNsFunc::ZtCMoveObj<TTypArg, TTypArg, false>
>
class ZtCParamObjAVL_Compare //////////////////////////////////////////////////////////
{
public: typedef ZNsMain::ZtCObjAVL<
TType, TTypArg, TTypBase, TNodeBase, TAlloc, TSize, TCompare, TMoveObj> TypeData;
Type, TTypArg, TTypBase, TNodeBase, TAlloc, TSize, TCompare, TMoveObj> TypeData;
};/*
template< typename TType ,
typename TTypArg =const TType& ,
typename TCompare =ZNsMain::ZtCCompare<TTypArg, TTypArg, true>,
typename TTypBase =ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg>,
typename TNodeBase =ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg>,
typename TAlloc =ZNsMain::ZCAllocator ,
typename TSize =long ,
typename TMoveObj =ZNsMain::ZtCMoveObj<TType, TTypArg, false>
template< typename Type ,
typename TTypArg =const Type& ,
typename TCompare =ZNsMain::ZNsFunc ::ZtCCompare<TTypArg, TTypArg, true>,
typename TTypBase =ZNsMain::ZNsIFace::ZtCAVL_BASE <TTypArg> ,
typename TNodeBase =ZNsMain::ZNsIFace::ZtCAVL_NodeBase<TTypArg> ,
typename TAlloc =ZNsMain::ZCAllocator ,
typename TSize =long ,
typename TMoveObj =ZNsMain::ZNsFunc::ZtCMoveObj<TTypArg, TTypArg, false>
>
class ZtCParamObjAVL_Compare ////////////////////////////////////////////////////////*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -66,42 +66,42 @@ namespace ZNsMain
<typename TTypFuncIsMore, typename TTypFuncIsLess>
static void QuickSort
(
TTypFuncIsMore APF_IsMore ,
TTypFuncIsLess APF_IsLess ,
ZCLink* APA_LinkPtrArr[],
TypeSize AL_HeadIndex ,
TypeSize AL_TailIndex
TTypFuncIsMore APF_IsMore ,
TTypFuncIsLess APF_IsLess ,
ZCLink* APA_LinkPtrArr[],
TypeSize AL_FirstIndex ,
TypeSize AL_LastIndex
)
/*##################################################*/
{
if(AL_HeadIndex<AL_TailIndex)
if(AL_FirstIndex<AL_LastIndex)
{
TypeSize i = AL_HeadIndex ;
TypeSize j = AL_TailIndex+1 ;
TypeSize i=AL_FirstIndex ;
TypeSize j=AL_LastIndex+1 ;
ZCLink* VP_PivotLinkPtr = APA_LinkPtrArr[i];
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
do //////
{
while(AL_TailIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()) );
while(AL_HeadIndex <j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()) );
while(AL_LastIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()));
while(AL_FirstIndex<j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()));
if(i<j) SwapLinkPtr( APA_LinkPtrArr[i], APA_LinkPtrArr[j] );
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
}
while(i<j);
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex], APA_LinkPtrArr[j]);
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
않아서 좋다.
*/
APA_LinkPtrArr[AL_HeadIndex] = APA_LinkPtrArr[j];
APA_LinkPtrArr[j ] = VP_PivotLinkPtr ;
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_HeadIndex, j-1 );
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_TailIndex);
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_FirstIndex, j-1 );
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_LastIndex);
}/*
if(AL_HeadIndex<AL_TailIndex)*/
if(AL_FirstIndex<AL_LastIndex)*/
}/*
template
<typename TTypFuncIsMore, typename TTypFuncIsLess>
@ -110,91 +110,91 @@ namespace ZNsMain
TTypFuncIsMore APF_IsMore ,
TTypFuncIsLess APF_IsLess ,
ZCLink* APA_LinkPtrArr[],
TypeSize AL_HeadIndex ,
TypeSize AL_TailIndex
TypeSize AL_FirstIndex ,
TypeSize AL_LastIndex
)
####################################################*/
###########################################################*/
static void QuickSortAsc
(
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
)
/*####################*/
{
if(AL_HeadIndex<AL_TailIndex)
if(AL_FirstIndex<AL_LastIndex)
{
TypeSize i=AL_HeadIndex ;
TypeSize j=AL_TailIndex+1 ;
TypeSize i=AL_FirstIndex ;
TypeSize j=AL_LastIndex+1 ;
ZCLink* VP_PivotLinkPtr = APA_LinkPtrArr[i];
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
do ////
{
while(AL_TailIndex >i && APA_LinkPtrArr[++i]->GetData() < VP_PivotLinkPtr->GetData());
while(AL_HeadIndex <j && APA_LinkPtrArr[--j]->GetData() > VP_PivotLinkPtr->GetData());
while(AL_LastIndex >i && APA_LinkPtrArr[++i]->GetData() < VP_PivotLinkPtr->GetData());
while(AL_FirstIndex<j && APA_LinkPtrArr[--j]->GetData() > VP_PivotLinkPtr->GetData());
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
}
while(i<j);
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex], APA_LinkPtrArr[j]);
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지 않아서 좋다.
*/
APA_LinkPtrArr[AL_HeadIndex] = APA_LinkPtrArr[j] ;
APA_LinkPtrArr[j ] = VP_PivotLinkPtr ;
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지 않아서 좋다.*/
QuickSortAsc(APA_LinkPtrArr, AL_HeadIndex, j-1 );
QuickSortAsc(APA_LinkPtrArr, j+1, AL_TailIndex);
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
QuickSortAsc(APA_LinkPtrArr, AL_FirstIndex, j-1 );
QuickSortAsc(APA_LinkPtrArr, j+1, AL_LastIndex);
}/*
if(AL_HeadIndex<AL_TailIndex)*/
if(AL_FirstIndex<AL_LastIndex)*/
}/*
static void QuickSortAsc
(
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
)
/*####################*/
static void QuickSortDesc
(
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
)
/*#####################*/
{
if(AL_HeadIndex<AL_TailIndex)
if(AL_FirstIndex<AL_LastIndex)
{
TypeSize i= AL_HeadIndex ;
TypeSize j= AL_TailIndex+1;
TypeSize i=AL_FirstIndex ;
TypeSize j=AL_LastIndex+1;
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
do //////
{
while(AL_TailIndex >i && APA_LinkPtrArr[++i]->GetData() > VP_PivotLinkPtr->GetData());
while(AL_HeadIndex <j && APA_LinkPtrArr[--j]->GetData() < VP_PivotLinkPtr->GetData());
while(AL_LastIndex >i && APA_LinkPtrArr[++i]->GetData() > VP_PivotLinkPtr->GetData());
while(AL_FirstIndex<j && APA_LinkPtrArr[--j]->GetData() < VP_PivotLinkPtr->GetData());
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
}
while(i<j);
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex], APA_LinkPtrArr[j]);
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
않아서 좋다.
*/
APA_LinkPtrArr[AL_HeadIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
QuickSortDesc(APA_LinkPtrArr, AL_HeadIndex, j-1 );
QuickSortDesc(APA_LinkPtrArr, j+1, AL_TailIndex);
QuickSortDesc(APA_LinkPtrArr, AL_FirstIndex, j-1);
QuickSortDesc(APA_LinkPtrArr, j+1, AL_LastIndex);
}/*
if(AL_HeadIndex<AL_TailIndex)*/
if(AL_FirstIndex<AL_LastIndex)*/
}/*
static void QuickSortDesc
(
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
)
/*#####################*/
@ -239,7 +239,7 @@ namespace ZNsMain
}/*
//////////////////////////*/
ZCLink::MakeRing
ZCLink::MakeCircle
(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
ARR_CObjList.mp_HeadLink = VPP_LinkPtrArr[0];
@ -261,7 +261,7 @@ namespace ZNsMain
{
if(ARR_CObjList.GetSize()<=1) return;
TypeSize VL_SortSize = ARR_CObjList.GetSize() ;
TypeSize VL_SortSize = ARR_CObjList.GetSize() ;
ZCLink** VPP_LinkPtrArr= new ZCLink*[VL_SortSize];
if(VPP_LinkPtrArr==0)
@ -278,8 +278,8 @@ namespace ZNsMain
for(; i<VL_SortSize; ++i)
{
VPP_LinkPtrArr[i]= VP_TempLink;
VP_TempLink = VP_TempLink->GetNextPtr();
VPP_LinkPtrArr[i]=VP_TempLink;
VP_TempLink =VP_TempLink->GetNextPtr();
}/*
///////////////////////*/
@ -290,9 +290,9 @@ namespace ZNsMain
{
ZCLink::JoinLink(VPP_LinkPtrArr[i-1], VPP_LinkPtrArr[i]);
}/*
for(i=1; i<VL_SortSize; ++i)*/
//////////////////////////*/
ZCLink::MakeRing
ZCLink::MakeCircle
(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
ARR_CObjList.mp_HeadLink = VPP_LinkPtrArr[0];
@ -457,9 +457,9 @@ namespace ZNsMain
ARR_AddList.JoinBefore ////////////////////
(
ARR_CutList.CutLink(VP_TempLink, 1)
, VP_LhsTemp
, VL_LhsTempPos
ARR_CutList.CutLink(VP_TempLink,1),
VP_LhsTemp,
VL_LhsTempPos
);
///////////////////////////////////////////
@ -729,39 +729,39 @@ namespace ZNsMain
TTypFuncIsMore APF_IsMore ,
TTypFuncIsLess APF_IsLess ,
ZCLink* APA_LinkPtrArr[],
TypeSize AL_HeadIndex ,
TypeSize AL_TailIndex
TypeSize AL_FirstIndex ,
TypeSize AL_LastIndex
)
/*##################################################*/
{
if(AL_HeadIndex<AL_TailIndex)
if(AL_FirstIndex<AL_LastIndex)
{
TypeSize i=AL_HeadIndex ;
TypeSize j=AL_TailIndex+1 ;
TypeSize i=AL_FirstIndex ;
TypeSize j=AL_LastIndex+1 ;
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
do //////
{
while(AL_TailIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()));
while(AL_HeadIndex <j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()));
while(AL_LastIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()));
while(AL_FirstIndex<j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()));
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
}
while(i<j);
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex],APA_LinkPtrArr[j]);
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex],APA_LinkPtrArr[j]);
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
않아서 좋다.
*/
APA_LinkPtrArr[AL_HeadIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_HeadIndex, j-1 );
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_TailIndex);
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_FirstIndex, j-1 );
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_LastIndex);
}/*
if(AL_HeadIndex<AL_TailIndex)*/
if(AL_FirstIndex<AL_LastIndex)*/
}/*
template
<typename TTypFuncIsMore, typename TTypFuncIsLess>
@ -770,8 +770,8 @@ namespace ZNsMain
TTypFuncIsMore APF_IsMore ,
TTypFuncIsLess APF_IsLess ,
ZCLink* APA_LinkPtrArr[],
TypeSize AL_HeadIndex ,
TypeSize AL_TailIndex
TypeSize AL_FirstIndex ,
TypeSize AL_LastIndex
)
/*##################################################*/
@ -812,17 +812,16 @@ namespace ZNsMain
}
/////////////////////////
QuickSort
(APF_IsMore, APF_IsLess, VPP_LinkPtrArr, 0, VL_SortSize-1);
QuickSort(APF_IsMore, APF_IsLess, VPP_LinkPtrArr, 0, VL_SortSize-1);
for(i=1; i<VL_SortSize; ++i) // VL_SortSize-1 번 순환
{
ZCLink::JoinLink(VPP_LinkPtrArr[i-1], VPP_LinkPtrArr[i]);
}
/*++++++++++++++++++++++++*/
////////////////////////////
#if(_CODE_OLD_) // 아래 코드만 빠진다.
ZCLink::MakeRing(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
ZCLink::MakeCircle(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
#else
ARR_CObjList.mp_HeadLink=VPP_LinkPtrArr[0] ;
ARR_CObjList.mp_TailLink=VPP_LinkPtrArr[VL_SortSize-1];

File diff suppressed because it is too large Load Diff

View File

@ -1,657 +0,0 @@

#ifndef __ZCPPMAIIN_ZTCSTRINGSTD_H__
#define __ZCPPMAIIN_ZTCSTRINGSTD_H__
#include<string>
#include "ZCppMain/ZtCMainChars.H"
namespace ZNsMain
{
template<typename TTypString> class ZtCStringStd;
template //////////////////////////////////////////////////////////////////
<
template<typename> class ZtCStringStd, typename TTypeBaseStr
>
/*#######################################################################*/
class ZtCCharType< ZtCStringStd<TTypeBaseStr> >
{
public:
typedef ZtCStringStd<TTypeBaseStr> TypeCStr ;
typedef typename TypeCStr::traits_type::char_type TypeChar ;
typedef typename TypeCStr::traits_type::int_type TypeInt ;
typedef typename TypeCStr::size_type TypeSize ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
static const int CI_ByteSize = sizeof(TypeChar) ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
public:
typedef TypeChar char_type ; // for stl string/wstring
typedef TypeInt int_type ; // for stl string/wstring
typedef TypeSize size_type ; // for stl string/wstring
public:
};/*
class ZtCCharType #######################################################*/
template
< typename TTypString = std::string >
class ZtCStringStd : public TTypString
{
public:
typedef ZtCStringStd TypeThis;
/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
typedef typename TTypString::traits_type::char_type TypeChar ;
typedef typename TTypString::traits_type::int_type TypeCharInt ;
typedef typename TTypString::size_type TypeLength ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
typedef ZNsChars::ZNsType::
ZtCTypeChars <TypeChar > ZCTypeChars ;
typedef ZNsChars::
ZtCMainChars<ZCTypeChars> ZCMainChars ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
typedef TypeChar* TypePChar ;
typedef const TypeChar* TypeCPChar ;
typedef TTypString TypeBase ;
typedef TTypString TypeStrStd ;
typedef TypeLength TypeSize ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
typedef ZtCChars
<TypeChar, TypeLength> ZCChars ;
typedef ZtCChars
<TypeChar, TypeLength> ZCCharView ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
ZtCStringStd(): TypeStrStd(){}
ZtCStringStd(const ZtCStringStd& rhs): TypeStrStd(rhs){}
ZtCStringStd(TypeCPChar APC_Origin, TypeLength AL_Length):
TypeStrStd(APC_Origin, AL_Length){}
ZtCStringStd(const ZCCharView& AR_View):
TypeStrStd(AR_View.data(), AR_View.size()){}
explicit ZtCStringStd(TypeCPChar APC_Origin):
TypeStrStd(APC_Origin){}
ZtCStringStd& operator=(const ZtCStringStd& rhs)
{
if(this==&rhs){ return *this; }
this->TypeStrStd::operator=(rhs); return *this;
}/*
ZtCStringStd& operator=(const ZtCStringStd& rhs)*/
ZtCStringStd& operator=(const TypeBase& rhs)
{
if(this->data()==rhs.data()){ return *this; }
this->TypeStrStd::operator=(rhs); return *this;
}/*
ZtCStringStd& operator=(const TypeBase& rhs)*/
ZtCStringStd& operator=(const ZCCharView& AR_View)
{
if(this->data()==AR_View.data()){ return *this; }
if( 1 > AR_View.size())
{ this->resize(0); return *this; }
this->resize(AR_View.size());
const int CI_CopySize =
AR_View.size() * sizeof(TypeChar) ;
::memcpy(this->data(), AR_View.data(), CI_CopySize);
return *this; /*::::::::::::::::::::::::::::::::::*/
}/*
ZtCStringStd& operator=(const ZCCharView& AR_View)*/
ZtCStringStd& operator=(ZTypInt AI_Int )
{ this->resize(0); return (*this)(AI_Int ); }
ZtCStringStd& operator=(ZTypLong AL_Long )
{ this->resize(0); return (*this)(AL_Long ); }
ZtCStringStd& operator=(ZTypLLong AL_LLong )
{ this->resize(0); return (*this)(AL_LLong ); }
ZtCStringStd& operator=(double AD_Double)
{ this->resize(0); return (*this)(AD_Double); }
template<typename TPosList> void FindPosToList /////////////
(
TPosList& ARR_CPosList, TypeCPChar APC_SearchData,
TypeLength AL_SearchLen, TypeLength AL_Offset=0
)
/*########################################################*/
{
// TPosList : ZNsMain::ZtCBaseList<TypeLength> etc
if(0 > AL_Offset) AL_Offset=0 ;
if(this->size() <= AL_Offset) return ;
if(this->size() < 1 ) return ;
TypeCPChar VPC_OriginStart = this->data();
TypeLength VL_OriginLen = this->size();
TypeLength VL_FindPos = -1 ;
TypeLength VL_OffsetNow = AL_Offset ;
while /*::::::::::::::::::::::::::::::::::::::::::::::*/
(
( VL_FindPos = ZCMainChars::FindPos
(
VPC_OriginStart, APC_SearchData,
VL_OriginLen , AL_SearchLen , VL_OffsetNow
)
) >= 0
)
/*::::::::::::::::::::::::::::::::::::::::::::::::::::*/
{
ARR_CPosList.push_back(VL_FindPos);
VL_OffsetNow = VL_FindPos + AL_SearchLen;
}
/*::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
template<typename TPosList> void FindPosToList /////////////
(
TPosList& ARR_CPosList, TypeCPChar APC_SearchData,
TypeLength AL_SearchLen, TypeLength AL_Offset=0
)
##########################################################*/
public :
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
private:
template<typename TPosList> ZtCStringStd& ReplaceByPosList ///////////////////
(
TPosList& AR_CPosList ,
TypeCPChar APC_Replace ,
TypeLength AL_Replace ,
TypeLength AL_Searched
)
/*#########################################################################*/
{
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
■ TPosList : ZNsMain::ZtCBaseList<TypeLength> etc
AL_Replace : APC_Replace 의 길이
AL_Searched : 이전에 찾은 길이
Replace() 에서 FindPosToList() 다음에 호출한다.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
if(AR_CPosList.size()<1) return *this;
TypeLength VL_PosListSize= AR_CPosList.size() ;
TypeLength VL_ThisSize = this->size() ;
TypeLength VL_NeedSize = VL_ThisSize +
(AL_Replace-AL_Searched) * VL_PosListSize ;
TypePChar VPC_ThisStart = const_cast<TypeChar*>(this->data()) ;
IterEasyID VH_IterEasyID = AR_CPosList.ItHID();
TypeLength VL_SearchedPos= 0 ;
TypeLength VL_SearchedPre= 0 ; // VL_SearchedPos 의 이전 값
TypePChar VPC_MoveStart = 0 ;
TypePChar VPC_DestStart = 0 ;
TypeLength VL_MoveStart = 0 ;
TypeLength VL_DestStart = 0 ;
TypeLength VL_MemMoveSize= 0 ;
if(AL_Replace<=AL_Searched) // 메모리 증가 불필요
{
TypePChar VPC_MoveStart = 0 ;
TypePChar VPC_DestStart = 0 ;
TypeLength VL_MoveStart = 0 ;
TypeLength VL_DestStart = 0 ;
TypeLength VL_MemMoveSize= 0 ;
TypePChar VPC_RepalcePos= 0 ;
__for1(TypeLength, i, VL_PosListSize)
{
VL_SearchedPos = AR_CPosList.ItD(VH_IterEasyID) ;
VPC_RepalcePos = VPC_ThisStart + VL_SearchedPos -
( AL_Searched-AL_Replace ) * (i-1) ;
if(VL_MoveStart>VL_DestStart)
{
VL_MemMoveSize =
VL_SearchedPos - VL_SearchedPre - AL_Searched ;
VPC_MoveStart = VPC_ThisStart + VL_MoveStart ;
VPC_DestStart = VPC_ThisStart + VL_DestStart ;
::memmove /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
(
VPC_DestStart, VPC_MoveStart, VL_MemMoveSize*sizeof(TypeChar)
);
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
if(VL_MoveStart>VL_DestStart)*/
VL_SearchedPre = VL_SearchedPos ;
VL_MoveStart = VL_SearchedPos+ AL_Searched ;
VL_DestStart = VL_SearchedPos+ AL_Searched -
( AL_Searched-AL_Replace ) * i ;
::memcpy(VPC_RepalcePos, APC_Replace, AL_Replace);
AR_CPosList.ItNext(VH_IterEasyID);
}/*
__for1(TypeLength, i, VL_PosListSize)*/
if(VL_ThisSize > VL_MoveStart)
{
::memmove /*::::::::::::::::::::::::::::::*/
(
VPC_ThisStart + VL_DestStart,
VPC_ThisStart + VL_MoveStart,
(VL_ThisSize - VL_MoveStart)*sizeof(TypeChar)
);
/*::::::::::::::::::::::::::::::::::::::::*/
}/*
if(VL_ThisSize > VL_MoveStart)*/
this->resize(VL_NeedSize); return *this;
}/*
if(AL_Replace<=AL_Searched) // 메모리 증가 불필요*/
/*======*/ VL_SearchedPre = this->size() ;
/*======*/ VH_IterEasyID = AR_CPosList.ItTID() ;
TypeLength VL_NowEleNo = VL_PosListSize ;
TypeLength VL_DiffLength = AL_Replace-AL_Searched;
this->resize(VL_NeedSize); VPC_ThisStart = this->data();
__for1(TypeLength, i, VL_PosListSize)
{
VL_SearchedPos = AR_CPosList.ItD(VH_IterEasyID) ;
VL_MemMoveSize = VL_SearchedPre - (VL_SearchedPos+AL_Searched);
if(VL_MemMoveSize>0)
{
VPC_MoveStart = VPC_ThisStart + VL_SearchedPos + AL_Searched ;
VPC_DestStart = VPC_ThisStart + VL_SearchedPos + AL_Searched + VL_DiffLength*VL_NowEleNo ;
::memmove /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
(
VPC_DestStart, VPC_MoveStart, VL_MemMoveSize*sizeof(TypeChar)
);
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
if(VL_MemMoveSize>0)*/
VPC_DestStart = VPC_ThisStart + VL_SearchedPos + VL_DiffLength*(VL_PosListSize - i) ;
::memcpy /*:::::::::::::::::::::::::::::::::::::::::::::::::*/
(
VPC_DestStart, APC_Replace, AL_Replace*sizeof(TypeChar)
);
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
VL_SearchedPre = VL_SearchedPos; --VL_NowEleNo;
AR_CPosList.ItPrev(VH_IterEasyID);
}/*
__for1(TypeLength, i, VL_PosListSize)*/
return *this;
}/*
template<typename TPosList> ZtCStringStd& ReplaceByPosList //////////////////
(
TPosList& AR_CPosList ,
TypeCPChar APC_Replace ,
TypeLength AL_Replace ,
TypeLength AL_Searched
)
###########################################################################*/
private:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
public :
ZtCStringStd& Replace /*///////////////////////////////////////////////////*/
(
TypeCPChar APC_Search, TypeCPChar APC_Replace,
TypeLength AL_Search , TypeLength AL_Replace , TypeLength AL_Offset=0
)
/*#########################################################################*/
{
if(0 > AL_Offset) AL_Offset=0 ;
if(this->size() <= AL_Offset) return *this;
if(this->size() < 1 ) return *this;
ZtCBaseList<TypeLength> VO_CPosCList; FindPosToList
(
RR(VO_CPosCList), APC_Search, AL_Search, AL_Offset
);
/*////////////////////////////////////////////////*/
return ReplaceByPosList /*::::::::::::::::::::::::::::*/
(
VO_CPosCList, APC_Replace, AL_Replace, AL_Search
);
/*::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}
/*#########################################################################*/
ZtCStringStd& Replace /*///////////////////////////////////////////////////*/
(
TypeCPChar APC_Search, TypeCPChar APC_Replace, TypeLength AL_Offset=0
)
/*#########################################################################*/
{
return Replace(APC_Search, APC_Replace, ZftLength(APC_Search), ZftLength(APC_Replace), AL_Offset);
}
/*#########################################################################*/
ZtCStringStd& operator()(ZtCStringStd& rhs)
{
if(this==&rhs) {return *this;} this->append(rhs); return *this;
}/*
ZtCStringStd& operator()(ZtCStringStd& rhs)*/
ZtCStringStd& operator()(TypeCPChar APC_Data, TypeLength AI_Length)
{
if(this->data()==APC_Data) return *this;
this->append(APC_Data, AI_Length); return *this;
}/*
ZtCStringStd& operator()(TypeCPChar APC_Data, TypeLength AI_Length)*/
ZtCStringStd& operator()(TypeCPChar APC_Data)
{
if(this->data()==APC_Data) return *this;
this->append(APC_Data); return *this;
}/*
ZtCStringStd& operator()(TypeCPChar APC_Data)*/
ZtCStringStd& operator()(TypeLength AI_Repeat, TypeChar AC_Data)
{
this->append(AI_Repeat, AC_Data); return *this;
}/*
ZtCStringStd& operator()(TypeChar AC_Data, TypeLength AI_Repeat)*/
ZtCStringStd& operator()(TypeChar AC_Data, TypeLength AI_Repeat=1)
{
this->append(AI_Repeat, AC_Data); return *this;
}/*
ZtCStringStd& operator()(TypeChar AC_Data, TypeLength AI_Repeat=1)*/
ZtCStringStd& operator()(const ZCCharView& AR_View)
{
this->append(AR_View.data(), AR_View.size()); return *this;
}/*
ZtCStringStd& operator()(const ZCCharView& AR_View)*/
ZtCStringStd& operator()(bool AB_Bool)
{
typedef typename TypeThis::TypeChar TypeChar ;
typedef typename TypeThis::TypeSize TypeSize ;
typedef ZtCBoolStr
<TypeChar, TypeSize> ZCBoolStr;
return (*this)( ZCBoolStr::GetMark(AB_Bool) );
}/*
ZtCStringStd& operator()(bool AB_Bool)*/
ZtCStringStd& operator()(int AI_IntParam)
{
const int CI_BuffSize= 21; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*+++++++*/ "%d", AI_IntParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%d", AI_IntParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(int AI_IntParam)*/
ZtCStringStd& operator()(ZTypUInt AUI_UIntParam)
{
const int CI_BuffSize= 21; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%u", AUI_UIntParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%u", AUI_UIntParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(ZTypUInt AUI_UIntParam)*/
ZtCStringStd& operator()(long AL_LongParam)
{
const int CI_BuffSize= 31; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%ld", AL_LongParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%ld", AL_LongParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(long AL_LongParam)*/
ZtCStringStd& operator()(ZTypULong AUL_ULongParam)
{
const int CI_BuffSize= 31; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%lu", AUL_ULongParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%lu", AUL_ULongParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(ZTypULong AUL_ULongParam)*/
ZtCStringStd& operator()(ZTypLLong ALL_LLongParam)
{
const int CI_BuffSize= 41; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%lld" , ALL_LLongParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%lld" , ALL_LLongParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(ZTypLLong ALL_LLongParam)*/
ZtCStringStd& operator()(ZTypULLong AULL_LLongParam)
{
const int CI_BuffSize= 41; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%llu" , AULL_LLongParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%llu" , AULL_LLongParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(ZTypULLong AULL_LLongParam)*/
ZtCStringStd& operator()(double AD_DoubleParam)
{
const int CI_BuffSize= 51; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%f", AD_DoubleParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%f", AD_DoubleParam)
);
ZNsMain::ZftTrimDecimalZero(VCA_BuffParam, RR(VI_ResultSize));
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(double AD_DoubleParam)*/
int GetInt () const{return ZNsMain::ZftAtoI (this->data());}
ZTypLong GetLong () const{return ZNsMain::ZftAtoL (this->data());}
ZTypLLong GetLongLong() const{return ZNsMain::ZftAtoLL(this->data());}
ZTypLLong GetLLong () const{return ZNsMain::ZftAtoLL(this->data());}
double GetDouble () const{return ZNsMain::ZftAtoD (this->data());}
public:
};/*
template //////////////////////////////////////////////////////////
< typename TTypString = std::string >
class ZtCStringStd
#################################################################*/
typedef ZtCStringStd<std::string > ZCStringStd ;
typedef ZtCStringStd<std::wstring> ZCStringStdW;
#define _ZCSTRINGSTD_ ZtCStringStd< TTypString >
#define _ZCSTRINGSTD_ARG_ template< typename TTypString >
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, const _ZCSTRINGSTD_& AR_DataCStr)
{ return ARR_SaveCStr(AR_DataCStr ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, const typename
_ZCSTRINGSTD_::ZCChars& AR_DataCStr )
{ return ARR_SaveCStr(AR_DataCStr ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, typename
_ZCSTRINGSTD_::TypeChar AC_Char )
{ return ARR_SaveCStr(AC_Char ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, ZTypInt AI_IntI )
{ return ARR_SaveCStr(AI_IntI ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, ZTypIntL AL_Long )
{ return ARR_SaveCStr(AL_Long ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, ZTypIntUI AUI_Int )
{ return ARR_SaveCStr(AUI_Int ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, ZTypIntUL AUL_Long )
{ return ARR_SaveCStr(AUL_Long ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, ZTypIntULL AULL_Long )
{ return ARR_SaveCStr(AULL_Long ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, double AD_Double )
{ return ARR_SaveCStr(AD_Double ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, bool AB_Bool )
{
typedef typename _ZCSTRINGSTD_::TypeChar TypeChar;
typedef typename _ZCSTRINGSTD_::TypeSize TypeSize;
typedef ZtCBoolStr<TypeChar, TypeSize> ZCBoolStr ;
return ARR_SaveCStr(ZCBoolStr::GetMark(AB_Bool)) ;
}/*
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, bool AB_Bool ) */
#undef _ZCSTRINGSTD_
#undef _ZCSTRINGSTD_ARG_
template<typename TTypString> std::ostream& operator<<
(std::ostream& AR_COStream, const ZtCStringStd<TTypString>& AR_DataCStr)
{
typedef typename ZtCStringStd
<TTypString>::TypeBase TypeBaseCStr ;
AR_COStream<< static_cast
<const TypeBaseCStr&>(AR_DataCStr);
return AR_COStream; ///////////////////////////
}/*
template<typename TTypString> std::ostream& operator<<
(std::ostream& AR_COStream, const ZtCStringStd& AR_DataCStr)*/
std::ostream& operator<<
(std::ostream& AR_COStream, const ZCStringStd& AR_DataCStr)
{
typedef ZCStringStd::TypeBase TypeBaseCStr;
AR_COStream<< static_cast
<const TypeBaseCStr&>( AR_DataCStr );
return AR_COStream; /*********************/
}/*
template<typename TTypString> std::ostream& operator<<
(std::ostream& AR_COStream, const ZtCStringStd& AR_DataCStr)*/
std::ostream& operator<<
(std::ostream& AR_COStream, const ZCStringStdW& AR_DataCStr)
{
// ascii 코드 범위에서만 출력한다.
typedef ZCStringStdW::TypeSize TypeLength ;
typedef ZCStringStdW::TypeCharInt TypeCharInt;
ZTypCCharW* VP_Data = AR_DataCStr.data();
TypeLength VI_Size = AR_DataCStr.size();
const int CI_AsciiMax = 127 ;
__for0(TypeLength, i, VI_Size)
{
TypeCharInt VI_Code = TypeCharInt(*VP_Data++);
if(VI_Code>0 && VI_Code<=CI_AsciiMax)
{ AR_COStream.put( char(VI_Code) ); }
}/*
__for0(TypeLength, i, VI_Size)*/
return AR_COStream; /*********************/
}/*
template<typename TTypString> std::ostream& operator<<
(std::ostream& AR_COStream, const ZtCStringStd& AR_DataCStr)*/
}/*
namespace ZNsMain*/
#endif //__ZCPPMAIIN_ZTCSTRINGSTD_H__

View File

@ -122,7 +122,8 @@ namespace ZNsMain
namespace ZNsType*/
template< typename TType ,
template< typename TType ,
typename TTypeInit =ZNsMain::ZtCInit<TType>,
typename TTypeTreeData=ZNsType::ZtCTypeTreeData<long>
>
class ZtCTreeData /*###########################################*/
@ -130,8 +131,9 @@ namespace ZNsMain
public:
class ZCNode1; class ZCNode2; class ZCNodeInfo;
public:
typedef TType TypeData ;
typedef TTypeTreeData TypeTreeData;
typedef TType TypeData ;
typedef TTypeInit ZCTypeInit ;
typedef TTypeTreeData ZCTypeTreeData;
public:
typedef typename TTypeTreeData::TypeSize TypeSize ;
typedef typename TTypeTreeData::template
@ -146,8 +148,7 @@ namespace ZNsMain
typedef typename ZCNodeList::iterator IterOfNode;
public:
class ZCNode1
class ZCNode1 : public ZCTypeInit
{
public :
friend class ZCNodeInfo;
@ -159,13 +160,13 @@ namespace ZNsMain
ZCNode1()
{
mp_HighNode=0;
mp_HighNode=0; this->ZCTypeInit::OnInit(mo_TypeData);
}/*
ZCNode1()*/
~ZCNode1()
{
mp_HighNode=0;
mp_HighNode=0; this->ZCTypeInit::OnFini(mo_TypeData);
}/*
~ZCNode1()*/
@ -183,7 +184,7 @@ namespace ZNsMain
ZCNode& AddSubNode()
{
ZCNode* VP_CNode=(ZCNode*)&(*mo_CNodeList.AddTailDef());
ZCNode* VP_CNode=(ZCNode*)&(**mo_CNodeList.AddTailDef());
VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode ;
}/*
@ -239,7 +240,7 @@ namespace ZNsMain
{
const bool CB_DoStop =
(
((ZCNodeList&)mo_CNodeList).ItD(VO_iter_Node).template
((ZCNodeList&)mo_CNodeList).ItD(VO_iter_Node).
IterPreOrder<TViewClass>
(AR_CViewClass, AI_StartDepth, i)
== ZNsMain::ZNsEnum::ZERun_NO
@ -264,7 +265,7 @@ namespace ZNsMain
}/*
template<typename TViewClass> ZNsMain::ZNsEnum::ZERun IterPreOrder
(TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex=0)
################################################################*/
/*##############################################################*/
template<typename TViewClass> ZNsMain::ZNsEnum::ZERun IterPostOrder
( TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex=0 )
@ -284,7 +285,7 @@ namespace ZNsMain
{
const bool CB_DoStop =
(
((ZCNodeList&)mo_CNodeList).ItD(VO_iter_Node).template
((ZCNodeList&)mo_CNodeList).ItD(VO_iter_Node).
IterPostOrder<TViewClass>(AR_CViewClass, AI_StartDepth, i)
== ZNsMain::ZNsEnum::ZERun_NO
);
@ -318,14 +319,13 @@ namespace ZNsMain
}/*
template<typename TViewClass> ZNsMain::ZNsEnum::ZERun IterPostOrder
(TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex=0)
#################################################################*/
/*###############################################################*/
public:
};/*
class ZCNode1*/
class ZCNode2
class ZCNode2 : public ZCTypeInit
{
public :
friend class ZCNodeInfo;
@ -337,12 +337,12 @@ namespace ZNsMain
ZCNode2()
{
mp_HighNode=0;
mp_HighNode=0; this->ZCTypeInit::OnInit(mo_TypeData);
}/*
ZCNode2()*/
~ZCNode2()
{
mp_HighNode=0;
mp_HighNode=0; this->ZCTypeInit::OnFini(mo_TypeData);
}/*
~ZCNode2()*/
@ -360,7 +360,7 @@ namespace ZNsMain
ZCNode& AddSubNode()
{
ZCNode* VP_CNode=(ZCNode*)&(*mo_CNodeList.AddTailDef());
ZCNode* VP_CNode=(ZCNode*)&(**mo_CNodeList.AddTailDef());
VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode ;
}/*
@ -446,19 +446,20 @@ namespace ZNsMain
template<typename TViewClass> void IterPreOrder(TViewClass& AR_CViewClass)
{
mo_RootNode.template IterPreOrder<TViewClass>(AR_CViewClass, 0, 0);
mo_RootNode.IterPreOrder<TViewClass>(AR_CViewClass, 0, 0);
}/*
template<typename TViewClass> void IterPreOrder(TViewClass& AR_CViewClass) */
template<typename TViewClass> void IterPostOrder(TViewClass& AR_CViewClass)
{
mo_RootNode.template IterPostOrder<TViewClass>(AR_CViewClass, 0, 0);
mo_RootNode.IterPostOrder<TViewClass>(AR_CViewClass, 0, 0);
}/*
template<typename TViewClass> void IterPostOrder(TViewClass& AR_CViewClass) */
public:
};/*
template< typename TType ,
template< typename TType ,
typename TTypeInit =ZNsMain::ZtCInit<TType>,
typename TTypeTreeData=ZNsType::ZtCTypeTreeData<long>
>
class ZtCTreeData #############################################*/
@ -470,7 +471,6 @@ namespace ZNsMain
■ class ZtCTreeData 예제 -- 2015-08-14 14:00
#include <iostream>
#include "ZCppMain/ZtCStringEx.H"
#include "ZCppMain/ZtCTreeData.H"
using namespace std ;
@ -636,7 +636,7 @@ namespace ZNsMain
ZCNode& AddSubNode()
{
ZCNode* VP_CNode=(ZCNode*)&(*mo_CNodeList.AddTailDef());
ZCNode* VP_CNode=(ZCNode*)&(**mo_CNodeList.AddTailDef());
VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode ;
}/*
@ -675,7 +675,7 @@ namespace ZNsMain
TypeSize VL_DataCnt= mo_CDataList .size();
TypeSize VL_NodeCnt=((ZCNodeList&)mo_CNodeList).size();
IterOfData VO_iter_Data( mo_CDataList .begin());
IterOfData VO_iter_Data( mo_CDataList.begin());
IterOfNode VO_iter_Node(((ZCNodeList&)mo_CNodeList).begin());
if(AR_CViewClass.OnDataStart(AI_StartDepth)==ZNsMain::ZNsEnum::ZERun_NO)
@ -715,7 +715,7 @@ namespace ZNsMain
const bool CB_DoStop = ///////////////////////////////
(
((ZCNodeList&)mo_CNodeList).ItD(VO_iter_Node).
template IterPreOrder<TViewClass>
IterPreOrder<TViewClass>
(AR_CViewClass, AI_StartDepth. i)
== ZNsMain::ZNsEnum::ZERun_NO
);
@ -767,7 +767,7 @@ namespace ZNsMain
const bool CB_DoStop = ////////////////////////////////
(
((ZCNodeList&)mo_CNodeList).
ItD(VO_iter_Node).template IterPostOrder<TViewClass>
ItD(VO_iter_Node).IterPostOrder<TViewClass>
(AR_CViewClass, AI_StartDepth, i)
== ZNsMain::ZNsEnum::ZERun_NO
);
@ -859,7 +859,7 @@ namespace ZNsMain
ZCNode& AddSubNode()
{
ZCNode* VP_CNode=(ZCNode*)&
( *mo_CNodeList.AddTailDef() );
( **mo_CNodeList.AddTailDef() );
VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode;
}/*
@ -936,9 +936,9 @@ namespace ZNsMain
void clear (){mo_RootNode.clear();}
template<typename TViewClass> void IterPreOrder (TViewClass AO_CViewClass)
{ mo_RootNode.template IterPreOrder<TViewClass>(AO_CViewClass, 0); }
{ mo_RootNode.IterPreOrder<TViewClass>(AO_CViewClass, 0); }
template<typename TViewClass> void IterPostOrder(TViewClass AO_CViewClass)
{ mo_RootNode.template IterPostOrder<TViewClass>(AO_CViewClass, 0); }
{ mo_RootNode.IterPostOrder<TViewClass>(AO_CViewClass, 0); }
public:
};/*

View File

@ -1,135 +0,0 @@

#include "ZCppMain/ZMainCGI.H"
using namespace std ;
using namespace ZNsMain;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExam_CLoadSimUrlConfig
{
public:
typedef ZtCStringBase<char> ZCStringBase ;
typedef ZNsCGI::ZtCLoadSimUrlConfig
<ZCStringBase> ZCLoadSimUrlConfig;
public:
static int Main(int AR_ArgCnt, char* APP_ArgVal[])
{
ZCLoadSimUrlConfig VO_CLoadSimUrlConfig ;
ZCStringBase VO_CStringBase
("Example : name1 =value1 &name2 = value2 ");
if(AR_ArgCnt>=2)
{ VO_CStringBase = APP_ArgVal[1]; }
VO_CLoadSimUrlConfig.LoadData(VO_CStringBase);
VO_CLoadSimUrlConfig.IterEnvSet();
return 0; /*::::::::::::::::::::*/
}/*
static int Main(int AR_ArgCnt, char* APP_ArgVal[])*/
public:
};/*
template<typename TDummy=void*> class ZtCExam_CLoadSimUrlConfig*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExam_CLoadSimUrlConfig<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZMainCGI_000_EnvSet.exe ZMainCGI_000_EnvSet.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZMainCGI_000_EnvSet_D.exe ZMainCGI_000_EnvSet.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZMainCGI_000_EnvSet_mw.exe ZMainCGI_000_EnvSet.cpp -I../ -lWs2_32
g++.exe -o ZMainCGI_000_EnvSet_mw_D.exe ZMainCGI_000_EnvSet.cpp -I../ -lWs2_32 -D_DEBUG
./ZMainCGI_000_EnvSet_mw.exe
./ZMainCGI_000_EnvSet_mw_D.exe
./ZMainCGI_000_EnvSet_mw.exe "name1=value1 & mid & name2= value2"
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 ZMainCGI_000_EnvSet.exe ZMainCGI_000_EnvSet.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZMainCGI_000_EnvSet_D.exe ZMainCGI_000_EnvSet.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.
■ 실행
./ZMainCGI_000_EnvSet.exe
./ZMainCGI_000_EnvSet_D.exe
./ZMainCGI_000_EnvSet.exe "name1=value1 & mid & name2= value2"
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,219 +0,0 @@

#include <iostream>
#include "ZCppMain/ZCStringStd.H"
using namespace std ;
using namespace ZNsMain;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamTuple_000
{
public:
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
ZCStringStd VO_BuffCStr("myBuff") ;
ZTypInt VI_NowCnt = 0 ;
cout<<"# __cplusplus : "<<__cplusplus<<endl;
#if defined(__CPLUSPLUS_VER__) && __CPLUSPLUS_VER__<=199800
cout<<"# Use C++ 98 Spec"<<endl;
ZtStTuple<>
myt0 = ZftMakeTuple();
ZtStTuple<int>
myt1 = ZftMakeTuple(1);
ZtStTuple<int, int>
myt2 = ZftMakeTuple(1, 34);
ZtStTuple<int, int, char>
myt3 = ZftMakeTuple(1, 34, 'C');
ZtStTuple<int, int, char, ZCStringStd&>
myt4 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr));
ZtStTuple<int, int, char, ZCStringStd&, bool>
myt5 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true);
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*>
myt6 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB");
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*, double>
myt7 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34));
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*, double, float>
myt8 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43));
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*, double, float, ZCStringStd&>
myt9 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr));
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*, double, float, ZCStringStd&, int&>
myt10= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt));
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*, double, float, ZCStringStd&, int&, long>
myt11= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), (long)20250906);
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*, double, float, ZCStringStd&, int&, long, wchar_t>
myt12= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), (long)20250906, wchar_t(0));
#else
cout<<"# Use auto keyword for ZtStTuple<> variable"<<endl;
auto myt0 = ZftMakeTuple();
auto myt1 = ZftMakeTuple(1);
auto myt2 = ZftMakeTuple(1, 34);
auto myt3 = ZftMakeTuple(1, 34, 'C');
auto myt4 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr));
auto myt5 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true);
auto myt6 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB");
auto myt7 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34));
auto myt8 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43));
auto myt9 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr));
auto myt10= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt));
auto myt11= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), (long)20250906);
auto myt12= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), (long)20250906, wchar_t(0));
#endif
myt10._10 = 1200;
myt11._10 += 1200;
// 아래 2개 출력이 같아야 한다.
cout<<myt10._10<<endl;
cout<<VI_NowCnt<<endl;
cout<<"_1 type : "<<typeid(myt12._1 ).name()<<endl;
cout<<" value: "<< myt12._1 <<endl;
cout<<"_2 type : "<<typeid(myt12._2 ).name()<<endl;
cout<<" value: "<< myt12._2 <<endl;
cout<<"_3 type : "<<typeid(myt12._3 ).name()<<endl;
cout<<" value: "<< myt12._3 <<endl;
cout<<"_4 type : "<<typeid(myt12._4 ).name()<<endl;
cout<<" value: "<< myt12._4 <<endl;
cout<<"_5 type : "<<typeid(myt12._5 ).name()<<endl;
cout<<" value: "<< myt12._5 <<endl;
cout<<"_6 type : "<<typeid(myt12._6 ).name()<<endl;
cout<<" value: "<< myt12._6 <<endl;
cout<<"_7 type : "<<typeid(myt12._7 ).name()<<endl;
cout<<" value: "<< myt12._7 <<endl;
cout<<"_8 type : "<<typeid(myt12._8 ).name()<<endl;
cout<<" value: "<< myt12._8 <<endl;
cout<<"_9 type : "<<typeid(myt12._9 ).name()<<endl;
cout<<" value: "<< myt12._9 <<endl;
cout<<"_10 type : "<<typeid(myt12._10).name()<<endl;
cout<<" value: "<< myt12._10 <<endl;
cout<<"_11 type : "<<typeid(myt12._11).name()<<endl;
cout<<" value: "<< myt12._11 <<endl;
cout<<"_12 type : "<<typeid(myt12._12).name()<<endl;
cout<<" value: "<< myt12._12 <<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamTuple_000*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamTuple_000<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZftMakeTuple_000.exe ZftMakeTuple_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZftMakeTuple_000_D.exe ZftMakeTuple_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -std=c++98 -o ZftMakeTuple_000_mw_98.exe ZftMakeTuple_000.cpp -I../ -D__CPLUSPLUS_VER__=199800
g++.exe -std=c++98 -o ZftMakeTuple_000_mw_98_D.exe ZftMakeTuple_000.cpp -I../ -D__CPLUSPLUS_VER__=199800 -D_DEBUG
g++.exe -o ZftMakeTuple_000_mw.exe ZftMakeTuple_000.cpp -I../
g++.exe -o ZftMakeTuple_000_mw_D.exe ZftMakeTuple_000.cpp -I../ -D_DEBUG
./ZftMakeTuple_000_mw.exe
./ZftMakeTuple_000_mw_D.exe
./ZftMakeTuple_000_mw_98.exe
./ZftMakeTuple_000_mw_98_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 ZftMakeTuple_000.exe ZftMakeTuple_000.cpp -I../ -lpthread
//g++ -std=c++98 -o ZftMakeTuple_000_D.exe ZftMakeTuple_000.cpp -I../ -lpthread -D_DEBUG
g++ -o ZftMakeTuple_000.exe ZftMakeTuple_000.cpp -I../
g++ -o ZftMakeTuple_000_D.exe ZftMakeTuple_000.cpp -I../ -D_DEBUG
g++ -o ZftMakeTuple_000_98.exe ZftMakeTuple_000.cpp -I../ -D__CPLUSPLUS_VER__=199800
g++ -o ZftMakeTuple_000_98_D.exe ZftMakeTuple_000.cpp -I../ -D__CPLUSPLUS_VER__=199800 -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.
■ 실행
./ZftMakeTuple_000.exe
./ZftMakeTuple_000_D.exe
./ZftMakeTuple_000_98.exe
./ZftMakeTuple_000_98_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,262 +0,0 @@

#include <iostream>
#include "ZCppMain/ZtCArray.H"
using namespace std;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamArray
{
public:
#ifndef _WIN
class CHelpObj
{
public:
CHelpObj()
{
}
CHelpObj(const CHelpObj& rhs)
{
cout<<"* CHelpObj(const CHelpObj& rhs)"<<endl;
}
public:
};
struct StFunctor
{
static void ShowElement(int ArgiValue){cout<<"#1 Value="<<ArgiValue<<endl;}
};
struct StFunctor2
{
static void ShowElement(int ArgiValue, CHelpObj)
{cout<<"#2 Value="<<ArgiValue<<", CHelpObj Addr=None"<<" With CHelpObj"<<endl;}
};
struct StFunctor3
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#3 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref"<<endl;}
};
struct StFunctor4
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#4 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj in Ptr"<<endl;}
};
struct StFunctor5
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj& AR_CHelpObj2)
{cout<<"#5 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref 2"<<endl;}
};
struct StFunctor6
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj AO_CHelpObj2)
{cout<<"#6 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Half Ref"<<endl;}
};
#endif //#ifndef _WIN
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
using namespace std ;
using namespace ZNsMain;
#if defined(__linux__) && defined(__GNUC__)
cout<<"# __GNUC__ : "<<__GNUC__<<endl;
#endif
#if defined(__cplusplus)
cout<<"# __cplusplus : "<<__cplusplus<<endl;
#endif
typedef ZtCArray<int> CArray ;
typedef CArray::IterEasy IterEasy;
CArray VO_Array;
VO_Array.AddTail(10);
VO_Array.AddTail(20);
VO_Array.AddTail(30);
VO_Array.AddTail(40);
#ifdef _WIN
class CHelpObj
{
public:
CHelpObj()
{
}
CHelpObj(const CHelpObj& rhs)
{
cout<<"* CHelpObj(const CHelpObj& rhs)"<<endl;
}
public:
}; CHelpObj VO_CHelpObj; cout<<"VO_CHelpObj Ptr : "<<&VO_CHelpObj<<endl;
struct StFunctor
{
static void ShowElement(int ArgiValue){cout<<"#1 Value="<<ArgiValue<<endl;}
};
struct StFunctor2
{
static void ShowElement(int ArgiValue, CHelpObj)
{cout<<"#2 Value="<<ArgiValue<<", CHelpObj Addr=None"<<" With CHelpObj"<<endl;}
};
struct StFunctor3
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#3 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref"<<endl;}
};
struct StFunctor4
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#4 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj in Ptr"<<endl;}
};
struct StFunctor5
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj& AR_CHelpObj2)
{cout<<"#5 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref 2"<<endl;}
};
struct StFunctor6
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj AO_CHelpObj2)
{cout<<"#6 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Half Ref"<<endl;}
};
#else // _WIN
CHelpObj VO_CHelpObj;
cout<<"VO_CHelpObj Ptr : "<<&VO_CHelpObj<<endl;
#endif //!_WIN
VO_Array.IterElement(StFunctor ::ShowElement);
VO_Array.IterElement(StFunctor2::ShowElement, VO_CHelpObj );
VO_Array.IterElement(StFunctor3::ShowElement, ZftMCR(VO_CHelpObj) );
VO_Array.IterElement(StFunctor4::ShowElement, ZftMCP(VO_CHelpObj) );
VO_Array.IterElement(StFunctor5::ShowElement, ZftMCP(VO_CHelpObj), ZftMCP(VO_CHelpObj) );
VO_Array.IterElement(StFunctor6::ShowElement, ZftMCP(VO_CHelpObj), VO_CHelpObj );
IterEasy VH_Iter = VO_Array.ItHEasy();
__for1(int, i, VO_Array.size())
{
cout<<i<<"th value="<<
VO_Array.ItD(VH_Iter)<<endl;
VO_Array.ItNext(VH_Iter);
}
///////////////////////////////
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamArray*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamArray<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCArray_000.exe ZtCArray_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCArray_000_D.exe ZtCArray_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCArray_000_mw.exe ZtCArray_000.cpp -I../
g++.exe -o ZtCArray_000_mw_D.exe ZtCArray_000.cpp -I../ -D_DEBUG
./ZtCArray_000_mw.exe
./ZtCArray_000_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 ZtCArray_000.exe ZtCArray_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCArray_000_D.exe ZtCArray_000.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.
■ 실행
./ZtCArray_000.exe
./ZtCArray_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,969 +0,0 @@

#include <iostream>
#include "ZCppMain/ZtCStringEx.H"
using namespace std ;
using namespace ZNsMain ;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamCList
{
public:
class CHelpObj
{
public:
CHelpObj()
{
cout<<"* CHelpObj()"<<endl;
}
CHelpObj(const CHelpObj& rhs)
{
cout<<"* CHelpObj(const CHelpObj& rhs)"<<endl;
}
public:
};/*
class CHelpObj*/
struct StFunctor
{
static void ShowElement(int ArgiValue){cout<<"#1 Value="<<ArgiValue<<endl;}
};
struct StFunctor2
{
static void ShowElement(int ArgiValue, CHelpObj)
{cout<<"#2 Value="<<ArgiValue<<", CHelpObj Addr=None"<<" With CHelpObj"<<endl;}
};
struct StFunctor3
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#3 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref"<<endl;}
};
struct StFunctor4
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#4 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj in Ptr"<<endl;}
};
struct StFunctor5
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj& AR_CHelpObj2)
{cout<<"#5 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref 2"<<endl;}
};
struct StFunctor6
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj AO_CHelpObj2)
{cout<<"#6 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Half Ref"<<endl;}
};
public:
typedef ZtCStringBase<char> CStringBase ;
typedef const CStringBase CStringBaseC;
/* 아래 자료형에 대해, CStringBase::Fetch() 호출 여부 실험.
ZtCBaseList<CStringBase&, CStringBase &>
ZtCBaseList<CStringBase&, CStringBaseC&>
*/
typedef ZtCBaseList
<CStringBase, CStringBase &> CStringList1 ;
typedef ZtCBaseList
<CStringBase, CStringBaseC&> CStringList2 ;
public:
class ZCBaseListEx10 : public ZtCBaseList
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx10, true>
>
{
public :
typedef ZtCBaseList ///////////////////////////////////////////////////////
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx10, true>
>
ZCBaseList; ///////////////////////////////////////////////////////////////
friend class ZtCBaseList //////////////////////////////////////////////////
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx10, true>
>;
///////////////////////////////////////////////////////////////////////////
/*****************************************************************************/
typedef typename ZCBaseList::ZCLink ZCLink ;
/*****************************************************************************/
typedef typename ZCBaseList::iterator iterator ;
typedef typename ZCBaseList::const_iterator const_iterator;
/*****************************************************************************/
public :
_VT_ ZTypLong capacity() const
{
cout<<"[ZCBaseListEx10 : capacity()]"; return 0;
}/*
_VT_ ZTypLong capacity() const*/
_VT_ ZTypLong size_free() const
{
cout<<"[ZCBaseListEx10 : size_free()]"; return 0;
}/*
_VT_ ZTypLong size_free() const*/
private:
_VT_ ZCLink* SendFreeOut() const
{
cout<<"** ZCBaseListEx10 : SendFreeOut()"<<endl;
return this->ZCBaseList::NewLink();
}/*
_VT_ ZCLink* SendFreeOut() const*/
_VT_ ZCLink* SendFreeOut(CStringBase& AO_ArgData) const
{
cout<<"** ZCBaseListEx10 : SendFreeOut(TypeArg)"<<endl;
return this->ZCBaseList::NewLink(AO_ArgData);
}/*
_VT_ ZCLink* SendFreeOut(CStringBase& AO_ArgData) const*/
_VT_ void SendFreeOut
(ZTypLong AL_NeedCnt, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) const
{
cout<<"** ZCBaseListEx10 : SendFreeOut("<<AL_NeedCnt<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLink(AL_NeedCnt, APR_HeadLink, APR_TailLink);
}
_VT_ void SendFreeOutCopy /*///////////////////////*/
(
ZCLink* AP_LinkOrgin, ZTypLong AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
) const
/////////////////////////////////////////////////////
{
cout<<"** ZCBaseListEx10 : SendFreeOut(ZCLink*, "<<AL_FarNum<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLinkCopy(AP_LinkOrgin, AL_FarNum, APR_HeadCopy, APR_TailCopy);
}
_VT_ void RecvFreeIn(ZCLink* AP_DelLink)
{
cout<<"** ZCBaseListEx10 : RecvFreeIn(AP_DelLink)"<<endl;
this->ZCBaseList::DelLink(AP_DelLink);
}/*
_VT_ void RecvFreeIn(ZCLink* AP_DelLink)*/
_VT_ void RecvFreeIn //////////////////////////////////
(
ZTypLong AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
///////////////////////////////////////////////////////
{
cout<<"** ZCBaseListEx10 : RecvFreeIn("<<AL_CutCnt<<", AP_CutHead, AP_CutTail)"<<endl;
this->ZCBaseList::DelLink(AL_CutCnt, AP_CutHead, AP_CutTail);
}
private:
};/*
class ZCBaseListEx10 : public ZtCBaseList*/
class ZCBaseListEx11 : public ZtCBaseList
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx11, false>
>
{
public :
typedef ZtCBaseList ///////////////////////////////////////////////////////
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx11, false>
>
ZCBaseList; ///////////////////////////////////////////////////////////////
friend class ZtCBaseList //////////////////////////////////////////////////
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx11, false>
>;
///////////////////////////////////////////////////////////////////////////
/*****************************************************************************/
typedef typename ZCBaseList::ZCLink ZCLink ;
/*****************************************************************************/
typedef typename ZCBaseList::iterator iterator ;
typedef typename ZCBaseList::const_iterator const_iterator;
/*****************************************************************************/
public :
_VT_ ZTypLong capacity() const
{
cout<<"[ZCBaseListEx11 : capacity()]"; return 0;
}/*
_VT_ ZTypLong capacity() const*/
_VT_ ZTypLong size_free() const
{
cout<<"[ZCBaseListEx11 : size_free()]"; return 0;
}/*
_VT_ ZTypLong size_free() const*/
private:
_VT_ ZCLink* SendFreeOut()
{
cout<<"** ZCBaseListEx11 : SendFreeOut()"<<endl;
return this->ZCBaseList::NewLink();
}/*
_VT_ ZCLink* SendFreeOut()*/
_VT_ ZCLink* SendFreeOut(CStringBase& AO_ArgData)
{
cout<<"** ZCBaseListEx11 : SendFreeOut(CStringBase&)"<<endl;
return this->ZCBaseList::NewLink(AO_ArgData);
}/*
_VT_ ZCLink* SendFreeOut(CStringBase& AO_ArgData)*/
_VT_ void SendFreeOut
(ZTypLong AL_NeedCnt, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink)
{
cout<<"** ZCBaseListEx11 : SendFreeOut("<<AL_NeedCnt<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLink(AL_NeedCnt, APR_HeadLink, APR_TailLink);
}
_VT_ void SendFreeOutCopy /*///////////////////////*/
(
ZCLink* AP_LinkOrgin, ZTypLong AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
/////////////////////////////////////////////////////
{
cout<<"** ZCBaseListEx11 : SendFreeOut(ZCLink*, "<<AL_FarNum<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLinkCopy(AP_LinkOrgin, AL_FarNum, APR_HeadCopy, APR_TailCopy);
}
_VT_ void RecvFreeIn(ZCLink* AP_DelLink)
{
cout<<"** ZCBaseListEx11 : RecvFreeIn(AP_DelLink)"<<endl;
this->ZCBaseList::DelLink(AP_DelLink);
}/*
_VT_ void RecvFreeIn(ZCLink* AP_DelLink)*/
_VT_ void RecvFreeIn //////////////////////////////////
(
ZTypLong AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
///////////////////////////////////////////////////////
{
cout<<"** ZCBaseListEx11: RecvFreeIn("<<AL_CutCnt<<", AP_CutHead, AP_CutTail)"<<endl;
this->ZCBaseList::DelLink(AL_CutCnt, AP_CutHead, AP_CutTail);
}
private:
};/*
class ZCBaseListEx11 : public ZtCBaseList*/
typedef typename ZCBaseListEx10::ZCLink ZCLink10;
typedef typename ZCBaseListEx11::ZCLink ZCLink11;
static void ShowDataInNode(const CStringBase& AR_Data, ZTypLong& ARRI_CallCnt)
{
cout<<++ARRI_CallCnt<<"* Data : "<<AR_Data<<endl;
}/*
static void ShowDataInNode(const CStringBase& AR_Data, ZTypLong& ARRI_CallCnt)*/
static void Append10(ZCLink10& AR_CLink)
{
(*AR_CLink).append("__");
}/*
static void Append10(ZCLink10& AR_CLink)*/
static void ShowNode10(ZCLink10& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node10 Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node10 Curr : " <<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node10 Prev : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode10(ZCLink10& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void ShowNode11(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node11 Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node11 Curr : " <<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node11 Prev : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode11(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void ShowNode10_2(ZCLink10& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node10_2 Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node10_2 Curr : " <<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node10_2 Prev : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode10_2(ZCLink10& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)*/
static void ShowNode11_2(ZCLink11& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node11_2 Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node11_2 Curr : " <<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node11_2 Prev : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode11_2(ZCLink11& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)*/
static void ShowNode10_3(ZCLink10& AR_CLink, ZTypLong& ARRI_CallCnt)
{
cout<<++ARRI_CallCnt<<" * Node10 Curr : " <<*(AR_CLink )<<endl;
}/*
static void ShowNode10_3(ZCLink10& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void ShowNode11_3(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)
{
cout<<++ARRI_CallCnt<<" * Node11 Curr : " <<*(AR_CLink )<<endl;
}/*
static void ShowNode11_3(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)*/
class ZCTypeView
{
public:
template<typename TTypChain> void OnMeetType()
{
cout<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TTypChain, typename TTypHelp> void OnMeetType(int& AR_CallNo)
{
cout<<"* Call No="<<++AR_CallNo<<" : "<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
};/*
class ZCTypeView*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
typedef ZtCTypeChain
<
double , ZtCTypeChain<
int , ZtCTypeChain<
wchar_t, ZtCTypeChain<
char ,
ZCEmpty > > >
> ZCTypeChain; ZCTypeView VO_ZCTypeView;
int VI_CallNo = 0;
cout<<"*** tmpl chain size = "<<ZCTypeChain::Size()<<endl;
ZftIterTypeChainTail<ZCTypeChain, ZCTypeView&>(VO_ZCTypeView);
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterHead(VO_ZCTypeView);
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterTail(VO_ZCTypeView);
ZftIterTypeChainHead<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) );
cout<<"************************************"<<endl;
ZftIterTypeChainTail<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) );
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::
IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::
IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
ZTypLong VI_CallCnt=0;
CStringBase VO_CStringBase;
CStringList1 VO_ListOfStr1 ;
CStringList2 VO_ListOfStr2 ;
VO_ListOfStr1.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
cout<<"# 1th IterElement ####" <<endl;
{
VO_ListOfStr1.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
}
/*///////////////////////////////////*/
cout<<endl;
VO_ListOfStr2.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
cout<<"# 2th IterElement ####" <<endl;
{
VO_ListOfStr2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
}
/*///////////////////////////////////*/
typedef ZtCBaseList<int> CIntList;
CHelpObj VO_CHelpObj;
CIntList VO_CIntList;
VO_CIntList.AddTail(10);
VO_CIntList.AddTail(20);
VO_CIntList.AddTail(30);
VO_CIntList.AddTail(40);
cout<<endl<<"#### Show CIntList Element ####"<<endl<<endl;
VO_CIntList.IterElement(StFunctor ::ShowElement);
VO_CIntList.IterElement(StFunctor2::ShowElement, VO_CHelpObj );
VO_CIntList.IterElement(StFunctor3::ShowElement, ZftMCR(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor4::ShowElement, ZftMCP(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor5::ShowElement, ZftMCP(VO_CHelpObj), ZftMCP(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor6::ShowElement, ZftMCP(VO_CHelpObj), VO_CHelpObj );
cout<<endl<<"#### ZCBaseListEx10 and ZCBaseListEx11 ####"<<endl<<endl;
ZCBaseListEx10 VO_ZCBaseListEx10 ;
ZCBaseListEx10 VO_ZCBaseListEx10_2;
ZCBaseListEx11 VO_ZCBaseListEx11 ;
VO_CStringBase="";
VO_ZCBaseListEx10.AddTail(VO_CStringBase("data ex 10-1"));
VO_ZCBaseListEx10.AddTail(VO_CStringBase("data ex 10-2"));
VO_ZCBaseListEx11.AddTail(VO_CStringBase("data ex 11-1"));
VO_ZCBaseListEx11.AddTail(VO_CStringBase("data ex 11-2"));
cout<<endl<<"# VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10"<<endl<<endl;
VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ;
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
VO_ZCBaseListEx10.AddTail().Fetch(VO_CStringBase("data ex 10-3"));
VO_ZCBaseListEx10.AddTail().Fetch(VO_CStringBase("data ex 10-4"));
cout<<endl<<"# VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 after VO_ZCBaseListEx10.AddTail() 2 times"<<endl<<endl;
VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ;
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# VO_ZCBaseListEx10_2.AddHead(VO_ZCBaseListEx10)"<<endl<<endl;
VO_ZCBaseListEx10_2.AddHead(VO_ZCBaseListEx10) ;
VO_ZCBaseListEx10_2.IterElemRev(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# VO_ZCBaseListEx10_2 : DeleteTail(2)"<<endl<<endl;
VO_ZCBaseListEx10_2.DeleteTail(2);
VO_ZCBaseListEx10_2.IterElemRev(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# VO_ZCBaseListEx10_2 : DeleteHead(1)"<<endl<<endl;
VO_ZCBaseListEx10_2.DeleteHead(1);
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
cout<<"# VO_ZCBaseListEx10 : capacity()="<<VO_ZCBaseListEx10 .capacity()<<endl;
cout<<"# VO_ZCBaseListEx10_2 : capacity()="<<VO_ZCBaseListEx10_2.capacity()<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10 , ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_2, ZftMCP(cout), ZftMCP(VI_CallCnt=0));
cout<<endl<<"# show VO_ZCBaseListEx10 element"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10, ZftMCP(VI_CallCnt=0));
VO_ZCBaseListEx10_2.SendOutTail
(*VO_ZCBaseListEx10_2.GetLinkPtr(2), VO_ZCBaseListEx10);
cout<<endl<<"# after VO_ZCBaseListEx10_2's 2th link to VO_ZCBaseListEx10's tail"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10 , ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_2, ZftMCP(cout), ZftMCP(VI_CallCnt=0));
VO_ZCBaseListEx10.IterElemLink(&Append10);
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
VO_ZCBaseListEx10.SendRangeOutAfter
(
*VO_ZCBaseListEx10.GetLinkPtr(2)
, *VO_ZCBaseListEx10.GetLinkPtr(3)
, 2
, VO_ZCBaseListEx10_2
, VO_ZCBaseListEx10_2.GetLinkOpt(2)
);
cout<<endl<<"# after VO_ZCBaseListEx10's 2~3th link to VO_ZCBaseListEx10_2's 2th link after"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10"<<endl;
VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10.SendRangeOutBefore(1th, 2th, 2, rhs, 1th)"<<endl;
VO_ZCBaseListEx10.SendRangeOutBefore
(
*VO_ZCBaseListEx10.GetLinkPtr(1)
, *VO_ZCBaseListEx10.GetLinkPtr(2)
, 2
, VO_ZCBaseListEx10_2
, VO_ZCBaseListEx10_2.GetLinkOpt(1)
);
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10.CopyThis(RR(VO_ZCBaseListEx10_2))"<<endl;
VO_ZCBaseListEx10.CopyThis(RR(VO_ZCBaseListEx10_2));
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkNext(1th)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkNext(VO_ZCBaseListEx10_2.HeadRef());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkNext(last)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkNext(VO_ZCBaseListEx10_2.TailRef());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkNext(last-1)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkNext(VO_ZCBaseListEx10_2.TailRef(1));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2 : Iter Rev"<<endl;
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLinkRev(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkPrev(2th)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkPrev(VO_ZCBaseListEx10_2.HeadRef(1));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkPrev(last)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkPrev(VO_ZCBaseListEx10_2.TailRef());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(1th, 4th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(), VO_ZCBaseListEx10_2.HeadRef(3) );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(2th, 1th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(1), VO_ZCBaseListEx10_2.HeadRef() );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(2th, 5th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(1), VO_ZCBaseListEx10_2.HeadRef(4) );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(4th, 5th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(3), VO_ZCBaseListEx10_2.HeadRef(4) );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(6th, 2th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(5), VO_ZCBaseListEx10_2.HeadRef(1) );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(6th, 5th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(5), VO_ZCBaseListEx10_2.HeadRef(4) );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(6th, 1th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(5), VO_ZCBaseListEx10_2.HeadRef() );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkHead(2th)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkHead( VO_ZCBaseListEx10_2.HeadRef(1));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkTail(1th)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkTail( VO_ZCBaseListEx10_2.HeadRef());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkAfter(1th, 6th)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkAfter
( VO_ZCBaseListEx10_2.HeadRef(), VO_ZCBaseListEx10_2.HeadOpt(5));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkBefore(5th, 1th)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkBefore
( VO_ZCBaseListEx10_2.HeadRef(4), VO_ZCBaseListEx10_2.HeadOpt());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkAfter(1th, 2th)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkAfter
( VO_ZCBaseListEx10_2.HeadRef(), VO_ZCBaseListEx10_2.HeadOpt(1));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeInAfter(1th~3th => 6th)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeInAfter
(
VO_ZCBaseListEx10_2.HeadRef( ),
VO_ZCBaseListEx10_2.HeadRef(2),
VO_ZCBaseListEx10_2.HeadOpt(5)
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeInBefore(4th~6th => 1th)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeInBefore
(
VO_ZCBaseListEx10_2.HeadRef(3),
VO_ZCBaseListEx10_2.HeadRef(5),
VO_ZCBaseListEx10_2.HeadOpt( )
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# VO_ZCBaseListEx10_2 for_it() show "<<endl;
__for_it(ZCBaseListEx10, VO_ZCBaseListEx10_2, VO_Iter)
{
cout<<VO_Iter.GetPos()<<" : "<<*VO_Iter<<endl;
}
cout<<endl<<"# VO_ZCBaseListEx10_2 for_it_r() show "<<endl;
__for_it_r(ZCBaseListEx10, VO_ZCBaseListEx10_2, VO_Iter)
{
cout<<VO_Iter.GetPos()<<" : "<<*VO_Iter<<endl;
}
cout<<endl<<"# VO_ZCBaseListEx10_2 for_itc() show "<<endl;
__for_itc(ZCBaseListEx10, VO_ZCBaseListEx10_2, VO_Iter)
{
cout<<VO_Iter.GetPos()<<" : "<<*VO_Iter<<endl;
}
cout<<"*****************************************************"<<endl;
_FOR_ITER_EASY_START0_C (VO_ZCBaseListEx10_2, VH_NowIter, i)
{
cout<<"# list10_2 const: "<<(i+1)<<" "<<VO_ZCBaseListEx10_2.ItD(VH_NowIter)<<endl;
}
_FOR_ITER_EASY_CLOSE0_C (VO_ZCBaseListEx10_2, VH_NowIter, i)
cout<<"*****************************************************"<<endl;
_FOR_ITER_EASY_START0_RC(VO_ZCBaseListEx10_2, VH_NowIter, i)
{
cout<<"# list10_2 rev const: "<<(i+1)<<" "<<VO_ZCBaseListEx10_2.ItD(VH_NowIter)<<endl;
}
_FOR_ITER_EASY_CLOSE0_RC(VO_ZCBaseListEx10_2, VH_NowIter, i)
cout<<"*****************************************************"<<endl;
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(1th, 3th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef( ),
VO_ZCBaseListEx10_2.HeadRef(2),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(3th, 6th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(2),
VO_ZCBaseListEx10_2.HeadRef(5),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(6th, 1th before)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(5),
VO_ZCBaseListEx10_2.HeadRef( ),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(1th, 6th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef( ),
VO_ZCBaseListEx10_2.HeadRef(5),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(2th, 3th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef(2),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(2th, 3th before)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef(2),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(2th, 1th before)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef( ),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeIn(1th, 3th, 6th after)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeIn
(
VO_ZCBaseListEx10_2.HeadRef( ),
VO_ZCBaseListEx10_2.HeadRef(2),
VO_ZCBaseListEx10_2.HeadRef(5),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeIn(5th, 6th, 1th before)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeIn
(
VO_ZCBaseListEx10_2.HeadRef(4),
VO_ZCBaseListEx10_2.HeadRef(5),
VO_ZCBaseListEx10_2.HeadRef( ),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeIn(2th, 3th, 4th after)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef(2),
VO_ZCBaseListEx10_2.HeadRef(3),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamCList*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamCList<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCBaseList_000.exe ZtCBaseList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCBaseList_000_D.exe ZtCBaseList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCBaseList_000_mw.exe ZtCBaseList_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation
g++.exe -o ZtCBaseList_000_mw_D.exe ZtCBaseList_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
./ZtCBaseList_000_mw.exe
./ZtCBaseList_000_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 ZtCBaseList_000.exe ZtCBaseList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCBaseList_000_D.exe ZtCBaseList_000.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.
■ 실행
./ZtCBaseList_000.exe
./ZtCBaseList_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,256 +0,0 @@
#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:
typedef ZNsIFaceEx::ZtCLink<string, ZCEmpty> ZCLinkCStr ;
typedef ZtCLinkList<ZCLinkCStr> ZCLinkStrList;
typedef ZCLinkStrList::ZCLinkOpt ZCStrLinkOpt ;
public:
static void ShowNode0(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Curr : "<<(AR_CLink)()<<endl;
}/*
static void ShowNode0(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void ShowNode1(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Prev : "<<(AR_CLink-1)()<<endl;
cout<<ARRI_CallCnt<<" * Node Curr : " <<(AR_CLink )()<<endl;
cout<<ARRI_CallCnt<<" * Node Next : "<<(AR_CLink+1)()<<endl;
}/*
static void ShowNode1(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void AppendEach(ZCLinkCStr& AR_CLink)
{
AR_CLink().append("_");
}/*
static void AppendEach(ZCLinkCStr& 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()()=string("123");
VO_ZCLinkStrLis1.AddTail()()=string("ABC");
VO_ZCLinkStrLis1.AddTail()()=string("xyz");
VO_ZCLinkStrLis2.AddTail()()=string("Z01");
VO_ZCLinkStrLis2.AddTail()()=string("Z02");
VO_ZCLinkStrLis2.AddTail()()=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()<<endl;
cout<<"# value by VO_StrLinkOpt() : "<<VO_StrLinkOpt() <<endl;
}/*
if(VO_StrLinkOpt.has_value())*/
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()<<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*/
}/*
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_000.exe ZtCLinkList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCLinkList_000_D.exe ZtCLinkList_000.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_000_mw.exe ZtCLinkList_000.cpp -I../ -lWs2_32
g++.exe -o ZtCLinkList_000_mw_D.exe ZtCLinkList_000.cpp -I../ -lWs2_32 -D_DEBUG
./ZtCLinkList_000_mw.exe
./ZtCLinkList_000_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_000.exe ZtCLinkList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCLinkList_000_D.exe ZtCLinkList_000.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.
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
./ZtCLinkList_000.exe
./ZtCLinkList_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,431 +0,0 @@

#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 (VO_CDataList1, VH_NowIter, i)
{
cout<<"# list1 const: "<<(i+1)<<" "<<VO_CDataList1.ItD(VH_NowIter).GetData()<<endl;
}
_FOR_ITER_EASY_CLOSE0_C (VO_CDataList1, VH_NowIter, i)
cout<<"***********************************************"<<endl;
_FOR_ITER_EASY_START0_RC(VO_CDataList1, VH_NowIter, i)
{
cout<<"# list1 rev const: "<<(i+1)<<" "<<VO_CDataList1.ItD(VH_NowIter).GetData()<<endl;
}
_FOR_ITER_EASY_CLOSE0_RC(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(VO_CStrLis20, VH_NowIter, i)
{
cout<<"# list20 const: "<<(i+1)<<" "<<VO_CStrLis20.ItD(VH_NowIter)<<endl;
}
_FOR_ITER_EASY_CLOSE0_C(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
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,268 +0,0 @@
#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:
typedef ZNsIFaceEx::ZtCLink<string, ZCEmpty> ZCLinkCStr ;
typedef ZtCLinkMoveList<ZCLinkCStr> ZCLinkStrList;
typedef ZCLinkStrList::ZCLinkOpt ZCStrLinkOpt ;
public:
static void ShowNode0(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt; cout<<ARRI_CallCnt<<" * Node Curr : "<<(AR_CLink)()<<endl;
}/*
static void ShowNode0(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void ShowNode1(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Prev : "<<(AR_CLink-1)()<<endl;
cout<<ARRI_CallCnt<<" * Node Curr : " <<(AR_CLink )()<<endl;
cout<<ARRI_CallCnt<<" * Node Next : "<<(AR_CLink+1)()<<endl;
}/*
static void ShowNode1(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void AppendEach(ZCLinkCStr& AR_CLink)
{
AR_CLink().append("_");
}/*
static void AppendEach(ZCLinkCStr& 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()()=string("123");
VO_ZCLinkStrLis1.AddTail()()=string("ABC");
VO_ZCLinkStrLis1.AddTail()()=string("xyz");
VO_ZCLinkStrLis2.AddTail()()=string("Z01");
VO_ZCLinkStrLis2.AddTail()()=string("Z02");
VO_ZCLinkStrLis2.AddTail()()=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()<<endl;
cout<<"# value by VO_StrLinkOpt() : "<<VO_StrLinkOpt() <<endl;
cout<<"# value by VO_StrLinkOpt()(): "<<VO_StrLinkOpt() <<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()<<endl;
cout<<"# value by VO_StrLinkOpt() : "<<VO_StrLinkOpt() <<endl;
cout<<"# value by VO_StrLinkOpt()(): "<<VO_StrLinkOpt()() <<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(2).value()
, VO_ZCLinkStrLis2.GetObjOpt(3).value()
, 2
, VO_ZCLinkStrLis1
, VO_ZCLinkStrLis1.GetObjOpt(1)
) ;
cout<<"# after VO_ZCLinkStrLis2.SendRangeOutBefore(VO_ZCLinkStrLis2 2th, 3th, 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.CopyThis(VO_ZCLinkStrLis1);
cout<<"# after VO_ZCLinkStrLis2.CopyThis(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;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamCLinkList*/
}/*
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 ZtCLinkMoveList_000.exe ZtCLinkMoveList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCLinkMoveList_000_D.exe ZtCLinkMoveList_000.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 ZtCLinkMoveList_000_mw.exe ZtCLinkMoveList_000.cpp -I../ -lWs2_32
g++.exe -o ZtCLinkMoveList_000_mw_D.exe ZtCLinkMoveList_000.cpp -I../ -lWs2_32 -D_DEBUG
./ZtCLinkMoveList_000_mw.exe
./ZtCLinkMoveList_000_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 ZtCLinkMoveList_000.exe ZtCLinkMoveList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCLinkMoveList_000_D.exe ZtCLinkMoveList_000.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.
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
./ZtCLinkMoveList_000.exe
./ZtCLinkMoveList_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,140 +0,0 @@
#include <string>
#include <iostream>
#include "ZCppMain/ZtCLinkList.H"
using namespace std;
namespace ZNsMain
{
namespace ZNsExam
{
class ZCLinkEx :
public ZtCLink<ZCEmpty, ZCLinkEx>
{
};
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
typedef ZtCLink<ZCEmpty, ZCEmpty> ZCLink1;
typedef ZtCLink<string , ZCEmpty> ZCLink2;
typedef ZtCLink<ZCEmpty, string > ZCLink3;
typedef ZtCLink<string , string > ZCLink4;
typedef ZCLinkEx ZCLink5;
cout<<"# ZCLink1::TypeThis -> "<<typeid(ZCLink1::TypeThis ).name()<<endl;
cout<<"# ZCLink1::TypeBase -> "<<typeid(ZCLink1::TypeBase ).name()<<endl;
cout<<"# ZCLink1::TypeChild-> "<<typeid(ZCLink1::TypeChild).name()<<endl;
cout<<"**********************************************************"<<endl;
cout<<"# ZCLink2::TypeThis -> "<<typeid(ZCLink2::TypeThis ).name()<<endl;
cout<<"# ZCLink2::TypeBase -> "<<typeid(ZCLink2::TypeBase ).name()<<endl;
cout<<"# ZCLink2::TypeChild-> "<<typeid(ZCLink2::TypeChild).name()<<endl;
cout<<"**********************************************************"<<endl;
cout<<"# ZCLink3::TypeThis -> "<<typeid(ZCLink3::TypeThis ).name()<<endl;
cout<<"# ZCLink3::TypeBase -> "<<typeid(ZCLink3::TypeBase ).name()<<endl;
cout<<"# ZCLink3::TypeChild-> "<<typeid(ZCLink3::TypeChild).name()<<endl;
cout<<"**********************************************************"<<endl;
cout<<"# ZCLink4::TypeThis -> "<<typeid(ZCLink4::TypeThis ).name()<<endl;
cout<<"# ZCLink4::TypeBase -> "<<typeid(ZCLink4::TypeBase ).name()<<endl;
cout<<"# ZCLink4::TypeChild-> "<<typeid(ZCLink4::TypeChild).name()<<endl;
cout<<"**********************************************************"<<endl;
cout<<"# ZCLink5::TypeThis -> "<<typeid(ZCLink5::TypeThis ).name()<<endl;
cout<<"# ZCLink5::TypeBase -> "<<typeid(ZCLink5::TypeBase ).name()<<endl;
cout<<"# ZCLink5::TypeChild-> "<<typeid(ZCLink5::TypeChild).name()<<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCLink_001.exe ZtCLink_001.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCLink_001_D.exe ZtCLink_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 ZtCLink_001_mw.exe ZtCLink_001.cpp -I../
g++.exe -o ZtCLink_001_mw_D.exe ZtCLink_001.cpp -I../ -D_DEBUG
./ZtCLink_001_mw.exe
./ZtCLink_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 ZtCLink_001.exe ZtCLink_001.cpp -I../
g++ -std=c++98 -o ZtCLink_001_D.exe ZtCLink_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.
■ 실행
./ZtCLink_001.exe
./ZtCLink_001_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,270 +0,0 @@

#include "ZCppMain/ZtCLoadXml.H"
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDymmy=void*> class ZtExamLoadXml
{
public:
/* 아래 Main() 함수 선언을 아래로 하면
static int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)
mingw g++ 에서 희한하게 에러다.
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# g++.exe -o ZtCLoadXml_000_mw.exe ZtCLoadXml_000.cpp -I../ -lWs2_32
ZtCLoadXml_000.cpp: In function 'int main(int, char**)':
ZtCLoadXml_000.cpp:171:42: error: invalid conversion from 'char**' to 'const char**' [-fpermissive]
171 | ZtExamLoadXml<>::Main(AI_ArgCnt, APP_ArgVal);
| ^~~~~~~~~~
| |
| char**
ZtCLoadXml_000.cpp:16:58: note: initializing argument 2 of 'static int ZNsMain::ZNsExam::ZtExamLoadXml<TDymmy>::Main(int, const char**) [with TDymmy = void*]'
16 | static int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)
| ~~~~~~~~~~~~^~~~~~~~~~~~~~
*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
typedef ZNsMain::ZtCStringBase<char> ZCStringData ;
typedef ZNsMain::ZNsViewIFace::ZNsExam::ZtCViewLoadXml<
ZCStringData
/*/////////*/ > ZCViewLoadXml; ////////////////////////
typedef ZNsMain::ZNsType::ZtCTypeXmlInfo<
ZCStringData
/*/////////*/ > ZCTypeXmlInfo; ////////////////////////
typedef ZNsMain::ZtCXmlInfo<ZCTypeXmlInfo> ZCXmlInfo;
typedef ZNsMain::ZNsView::ZtCViewLoadXmlOfXmlInfo<
ZCXmlInfo
/*/////////*/ > ZCViewLoadXmlOfXmlInfo; ///////////////
typedef ZNsMain::ZtCLoadXml<ZCStringData> ZCLoadXml;
const char* CPC_XmlData1=
"<!-- My Comment0 --><? Header ?>\n"
"<!DOCTYPE ele0[ \n"
"<!ELEMENT ele1>\n"
"<!ATTLIST prop>\n"
"]>\n"
"<ele0 prop0 = \"prop00\" /><!-- My Comment1 -->\n"
"<ele1>ele1 data</ele1> <!-- My Comment2 -> ---- --->\n"
"<ele2 >ele2 data</ele2>\n"
"<요소3 prop1= \"prop1 value\" prop2 = \"prop2 value\" >"
" <ele3_1 prop3=\"prop3 value\" prop33=\"prop33 value\" > MyData"
" </ele3_1>\n"
" <ele3_2 prop4=\"prop4 value\" prop44=\"prop44 value\" > <![CDATA[ myCDATA ]]>\n"
" </ele3_2> \n"
"</요소3"
;
const char* CPC_XmlData2=
">\n<ele4 >ele4 data\n"
"</ele4>\n"
;;;;;;;;;;;;;;;;;;;;;;;;
const char* CPC_XmlDataOfID=
"<?xml version=\"1.0\" encoding=\"euc-kr\" ?>\n"
"<!DOCTYPE data[\n"
"<!ELEMENT data ANY>\n"
"<!ENTITY nbsp " " >\n"
"<!ATTLIST data id ID #REQUIRED>\n"
"]>\n"
"<data id = \"id-set\" desc=\"Xml 로 출력되는 홈페이지의 내용 예시\">\n"
"\n"
" <data id=\"id-info-login\" login_enum=\"1\" login_msg=\"Login Already\" login_rightnum=\"515\"\n"
" login_isadmin=\"0\" login_sessno=\"\" login_memno=\"1\" login_id=\"test\" login_name=\"\"\n"
" login_icon=\"/testfile\" login_iconhtml=\"\" login_point=\"0\" login_mail=\"\" login_level=\"0\"\n"
" login_no_fc=\"0\" login_no_fbinf=\"7\" login_notecnt=\"0\" login_type=\"0\" login_lastip=\"\"\n"
" login_lastlogin=\"2008-09-28 08:29:51.904506\" login_filecnt=\"0\" login_filesum=\"0\"\n"
" login_filemax=\"0\" />\n"
"\n"
" <data id=\"id-binfo-main\" binf_cntitem=\"12\" binf_cntpage=\"10\" binf_count=\"1001\" binf_maxnum=\"501\"\n"
" binf_config=\"360943\" binf_bbit_fbinf=\"0\" binf_rn_fbinf=\"0\" binf_no_fc=\"0\" />\n"
"\n"
" <data id = \"id-binfo-var\" attcnt = \"0\" />\n"
"\n"
" <data id=\"id-binfo-top-set\" recordcnt=\"3\" fieldcnt=\"16\">\n"
" <data id=\"id-binfo-top1\" no=\"1\" b_itemnum=\"1\" b_title=\"자유게시판입니다.\" b_tstyle=\"\"\n"
" b_wdate=\"2008-09-28\" b_no=\"1\" b_depth=\"0\" b_hit=\"0\" b_commcnt=\"0\" b_filecnt=\"0\"\n"
" b_userip=\"\" m_no=\"0\" m_point=\"0\" m_nick=\"\" m_userid=\"\" m_mail=\"\"\n"
" f_icon=\"&lt;img src=&quot;/testfile&quot; class=&quot;member_img_icon&quot; /&gt;\"\n"
" />\n"
" <data id=\"id-binfo-top2\" no=\"2\" b_itemnum=\"2\" b_title=\"술탄 메메트 2세 Title=2\" b_tstyle=\"\"\n"
" b_wdate=\"2008-09-28\" b_no=\"2\" b_depth=\"0\" b_hit=\"0\" b_commcnt=\"0\" b_filecnt=\"0\" b_userip=\"\" m_no=\"0\" m_point=\"0\" m_nick=\"\" m_userid=\"\" m_mail=\"\"\n"
" f_icon=\"&lt;img src=&quot;/testfile&quot; class=&quot;member_img_icon&quot; /&gt;\"\n"
" />\n"
" <data id=\"id-binfo-top3\" no=\"3\" b_itemnum=\"1-1\" b_title=\"술탄 메메트 2세 Title=1-1\"\n"
" b_tstyle=\"\" b_wdate=\"2008-09-28\" b_no=\"3\" b_depth=\"1\" b_hit=\"0\" b_commcnt=\"0\"\n"
" b_filecnt=\"0\" b_userip=\"\" m_no=\"0\" m_point=\"0\" m_nick=\"\" m_userid=\"\" m_mail=\"\"\n"
" f_icon=\"&lt;img src=&quot;/testfile&quot; class=&quot;member_img_icon&quot; /&gt;\"\n"
" />\n"
" </data><!-- id=\"binfo-top-set\" -->\n"
" <data id=\"id-binfo-modevar\" attcnt=\"5\" b_listbackcolor1=\"#ffeeff\" b_listbackcolor2=\"#cceedd\"\n"
" b_listbackcolorcnt=\"2\" b_listlinecolor=\"black\" b_listmouseovercolor=\"#ffc0cb\" />\n"
"\n"
"</data><!-- id=\"id-set\" -->\n";
/*const char* CPC_XmlDataOfID=*/
ZCViewLoadXml VO_CViewLoadXml;
ZCLoadXml VO_CLoadXml ;
if(AI_ArgCnt<2)
{
VO_CLoadXml.Exec(VO_CViewLoadXml, CPC_XmlData1, ZNsMain::ZftLength(CPC_XmlData1));
VO_CLoadXml.Exec(VO_CViewLoadXml, CPC_XmlData2, ZNsMain::ZftLength(CPC_XmlData2));
}
else
{
for(int i=1; i<AI_ArgCnt; ++i) VO_CLoadXml.Exec
(
VO_CViewLoadXml, APP_ArgVal[i], ZNsMain::ZftLength(APP_ArgVal[i])
);
/*:::::::::::::::::::::::::::::::::::::::::::*/
return 0;
}/*
else*/
cout<<endl;
cout<<"## Show Xml Info With 'ID' Attribute. Press Enter. ##"; cin.get();
VO_CLoadXml.clear(); ZCViewLoadXmlOfXmlInfo VO_CViewLoadXmlOfXmlInfo;
ZNsMain::ZNsEnum::ZERunEx VE_ERunEx=VO_CLoadXml.ExecAll( ////////////
VO_CViewLoadXmlOfXmlInfo,
CPC_XmlDataOfID ,
ZNsMain::ZftLength(CPC_XmlDataOfID)
/*/////////*/ ); /*////////////////////////////////////////////////*/
if(VE_ERunEx!=ZNsMain::ZNsEnum::ZERunEx_OK)
{
cout<<endl<<endl<<
"■ Error !! : Line="<<VO_CLoadXml.GetLineNo()<<", "<<
"CharNo=" <<VO_CLoadXml.GetCharNo() <<", "<<
"EWaitByte="<<VO_CLoadXml.GetMSG_EWaitByte() <<", "
"Error MSG="<<VO_CViewLoadXmlOfXmlInfo.GetErrorMSG()<<endl;
return 0;
}/*
if(VE_ERunEx!=ZNsMain::ZNsEnum::ZERunEx_OK)*/
VO_CViewLoadXmlOfXmlInfo.GetCXmlInfo().IterPreOrderElementTreeStd();
cout<<endl;
cout<<"## Show Xml ID ##"<<endl;
cout<<endl;
VO_CViewLoadXmlOfXmlInfo.GetCXmlInfo().IterElementIDSetStd();
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDymmy=void*> class ZtExamLoadXml*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtExamLoadXml<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCLoadXml_000.exe ZtCLoadXml_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCLoadXml_000_D.exe ZtCLoadXml_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCLoadXml_000_mw.exe ZtCLoadXml_000.cpp -I../ -lWs2_32
g++.exe -o ZtCLoadXml_000_mw_D.exe ZtCLoadXml_000.cpp -I../ -lWs2_32 -D_DEBUG
./ZtCLoadXml_000_mw.exe
./ZtCLoadXml_000_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 ZtCLoadXml_000.exe ZtCLoadXml_000.cpp -I../
g++ -std=c++98 -o ZtCLoadXml_000_D.exe ZtCLoadXml_000.cpp -I../ -D_DEBUG
g++ -std=c++98 -o ZtCLoadXml_000_r.exe ZtCLoadXml_000.cpp -I../ -D_REENTRANT
g++ -std=c++98 -o ZtCLoadXml_000_r_D.exe ZtCLoadXml_000.cpp -I../ -D_REENTRANT -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.
■ 실행
./ZtCLoadXml_000.exe
./ZtCLoadXml_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,139 +0,0 @@

#include <iostream>
#include "ZCppMain/ZtCObjAVL.H"
using namespace std;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamAVL
{
public:
static void ShowDataInNode(int AI_Data)
{
cout<<"* Node Data : "<<AI_Data<<endl;
}/*
static void ShowDataInNode(int AI_Data)*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
using namespace std ;
using namespace ZNsMain;
ZtCObjAVL<int, int> VO_CObjAVL;
VO_CObjAVL.AddData(10);
VO_CObjAVL.AddData(20);
VO_CObjAVL.AddData(30);
VO_CObjAVL.AddData(40);
VO_CObjAVL.AddData(9 );
cout<<"# In Order" <<endl; VO_CObjAVL.IterInOrder (&ShowDataInNode);
cout<<"# Post Order"<<endl; VO_CObjAVL.IterPostOrder(&ShowDataInNode);
cout<<"# Pre Order" <<endl; VO_CObjAVL.IterPreOrder (&ShowDataInNode);
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamAVL*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamAVL<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCObjAVL_000.exe ZtCObjAVL_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCObjAVL_000_D.exe ZtCObjAVL_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCObjAVL_000_mw.exe ZtCObjAVL_000.cpp -I../
g++.exe -o ZtCObjAVL_000_mw_D.exe ZtCObjAVL_000.cpp -I../ -D_DEBUG
./ZtCObjAVL_000_mw.exe
./ZtCObjAVL_000_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 ZtCObjAVL_000.exe ZtCObjAVL_000.cpp -I../
g++ -std=c++98 -o ZtCObjAVL_000_D.exe ZtCObjAVL_000.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.
■ 실행
./ZtCObjAVL_000.exe
./ZtCObjAVL_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,529 +0,0 @@

#include <iostream>
#include "ZCppMain/ZtCObjList.H"
#include "ZCppMain/ZtCStringEx.H"
using namespace std ;
using namespace ZNsMain ;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamCObjList
{
public:
typedef ZtCStringBase<char> CStringBase ;
typedef const CStringBase CCStringBase;
/* 아래 자료형에 대해, CStringBase::Fetch() 호출 여부 실험.
ZtCObjList<CStringBase&, CCStringBase&>
ZtCObjList<CStringBase&, CCCStringBase&>
*/
typedef ZtCObjList
<CStringBase, CStringBase& > CStringList1 ;
typedef ZtCObjList
<CStringBase, CCStringBase&> CStringList2 ;
typedef CStringList1::ZCLink ZCLink1;
typedef CStringList2::ZCLink ZCLink2;
typedef CStringList1::ZCLinkOpt ZCLinkOpt1;
typedef CStringList2::ZCLinkOpt ZCLinkOpt2;
typedef CStringList1::ZCDataOpt ZCDataOpt1;
typedef CStringList2::ZCDataOpt ZCDataOpt2;
static void ShowDataInNode(const CStringBase& AR_Data)
{
cout<<"* Data : "<<AR_Data<<endl;
}/*
static void ShowDataInNode(const CStringBase& AR_Data)*/
static void ShowNode1(ZCLink1& AR_CLink)
{
cout<<"* Node Prev : "<<*(AR_CLink-1)<<endl;
cout<<"* Node Curr : "<<*(AR_CLink )<<endl;
cout<<"* Node Next : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode1(ZCLink1& AR_CLink)*/
static void ShowNode2(ZCLink2& AR_CLink)
{
cout<<"* Node Prev : "<<*(AR_CLink-1)<<endl;
cout<<"* Node Curr : "<<*(AR_CLink )<<endl;
cout<<"* Node Next : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode2(ZCLink2& AR_CLink)*/
static void Append1(ZCLink1& AR_CLink)
{
(*AR_CLink).append("__");
}/*
static void Append1(ZCLink1& AR_CLink)*/
static void ShowNode1_2(ZCLink1& AR_CLink, int& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node Curr : "<<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node Next : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode1(ZCLink1& AR_CLink, int& ARRI_CallCnt)*/
static void ShowNode2_2(ZCLink2& AR_CLink, int& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node Curr : "<<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node Next : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode2(ZCLink2& AR_CLink, int& ARRI_CallCnt)*/
static void ShowNode1_3(ZCLink1& AR_CLink, int& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Curr : "<<*(AR_CLink )<<endl;
}/*
static void ShowNode1(ZCLink1& AR_CLink, int& ARRI_CallCnt)*/
static void ShowNode2_3(ZCLink2& AR_CLink, int& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Curr : "<<*(AR_CLink )<<endl;
}/*
static void ShowNode2(ZCLink2& AR_CLink, int& ARRI_CallCnt)*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
CStringBase VO_CStringBase ;
CStringList1 VO_ListOfStr10 ;
CStringList2 VO_ListOfStr20 ;
ZCDataOpt1 VO_ZCDataOpt1 = VO_ListOfStr10.HeadOptD() ;
ZCLinkOpt1 VO_ZCLinkOpt1 = VO_ListOfStr10.TailOpt() ;
if(bool(VO_ZCDataOpt1))
cout<<"# VO_ListOfStr10's head data : " <<*VO_ZCDataOpt1<<endl;
else cout<<"# VO_ListOfStr10's head data none "<<endl;
if(bool(VO_ZCLinkOpt1))
cout<<"# VO_ListOfStr10's tail link data : " <<**VO_ZCLinkOpt1<<endl;
else cout<<"# VO_ListOfStr10's tail link data none "<<endl;
VO_ListOfStr10.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
VO_ZCDataOpt1 = VO_ListOfStr10.HeadOptD() ;
VO_ZCLinkOpt1 = VO_ListOfStr10.TailOpt() ;
if(bool(VO_ZCDataOpt1))
cout<<"# VO_ListOfStr10's head data : " <<*VO_ZCDataOpt1<<endl;
else cout<<"# VO_ListOfStr10's head data none "<<endl;
if(bool(VO_ZCLinkOpt1))
cout<<"# VO_ListOfStr10's tail link data : " <<**VO_ZCLinkOpt1<<endl;
else cout<<"# VO_ListOfStr10's tail link data none "<<endl;
cout<<"# 1th IterElement ####" <<endl;
{
VO_ListOfStr10.IterElement(&ShowDataInNode);
}
cout<<"# 1th IterElemRev ####" <<endl;
{
VO_ListOfStr10.IterElemRev(&ShowDataInNode);
}
/*///////////////////////////////////*/
cout<<endl;
VO_ListOfStr20.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
cout<<"# 2th IterElement ####" <<endl;
{
VO_ListOfStr20.IterElement(&ShowDataInNode);
}
cout<<"# 2th IterElemRev ####" <<endl;
{
VO_ListOfStr20.IterElemRev(&ShowDataInNode);
}
/*///////////////////////////////////*/
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list20 size : " <<VO_ListOfStr20.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list20 free size: " <<VO_ListOfStr20.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list20 capacity : " <<VO_ListOfStr20.capacity ()<<endl;
VO_ListOfStr10.clear(); VO_ListOfStr20.clear();
VO_ListOfStr10.GetCFreeHeap().AddHeap(3);
VO_ListOfStr20.GetCFreeHeap().AddHeap(3);
cout<<"# After clear() & AddHeap(3)"<<endl;
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list20 size : " <<VO_ListOfStr20.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list20 free size: " <<VO_ListOfStr20.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list20 capacity : " <<VO_ListOfStr20.capacity ()<<endl;
CStringList1 VO_ListOfStr11 ;
cout<<"# add 2 elements and clear in VO_ListOfStr11"<<endl;
VO_ListOfStr11.AddTail(VO_CStringBase("lsit 11 data 01"));
VO_ListOfStr11.AddTail(VO_CStringBase("lsit 11 data 02"));
VO_ListOfStr11.clear();
cout<<"# After list10 Fetch from list11"<<endl;
VO_ListOfStr10.GetCFreeHeap().Fetch( VO_ListOfStr11.GetCFreeHeap() );
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
cout<<"# After list11 Fetch 3 from list10"<<endl;
VO_ListOfStr11.GetCFreeHeap().
Fetch( VO_ListOfStr10.GetCFreeHeap(), 3);
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add1"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add2"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add3"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add4"));
cout<<"# After add 4 in list11"<<endl;
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
cout<<"# After MakeEqual() : list10 and list11"<<endl;
VO_ListOfStr10.GetCFreeHeap().MakeEqual( VO_ListOfStr11.GetCFreeHeap() );
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
cout<<"# list11 IterElemRev ####" <<endl;
{
VO_ListOfStr11.IterElemRev(&ShowDataInNode);
}/*
cout<<"# list11 IterElemRev ####" <<endl;*/
VO_ListOfStr11.RotateBack();
cout<<"# list11 IterElemRev after RotateBack"<<endl;
cout<<"# list11 IterElemRev ####" <<endl;
{
VO_ListOfStr11.IterElemRev(&ShowDataInNode);
}/*
cout<<"# list11 IterElemRev ####" <<endl;*/
VO_ListOfStr10 = VO_ListOfStr11 ;
cout<<"# list10 IterElement after list10 = list11"<<endl;
VO_ListOfStr10.IterElement(&ShowDataInNode);
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
VO_ListOfStr11.AddHead(VO_CStringBase("list11 add99"));
VO_ListOfStr10 = VO_ListOfStr11 ;
cout<<"# list10 IterElement after list11.addhead, list10 = list11"<<endl;
VO_ListOfStr10.IterElement(&ShowDataInNode);
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
int VI_CallCnt=0;
cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
cout<<"# list10 2th link to list11 tail"<<endl;
VO_ListOfStr10.SendOutTail(*VO_ListOfStr10.GetLinkPtr(2), VO_ListOfStr11);
cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
cout<<"# list10 1th link to list10 head"<<endl;
VO_ListOfStr10.SendOutHead(*VO_ListOfStr10.GetLinkPtr(1), VO_ListOfStr11);
cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.IterElemLink(&Append1);
VO_ListOfStr11.SendRangeOutAfter
(
*VO_ListOfStr11.GetLinkPtr(2)
, *VO_ListOfStr11.GetLinkPtr(3)
, 2
, RR(VO_ListOfStr10)
, VO_ListOfStr10.GetLinkOpt(2)
);
cout<<"# list11's 2th ~ 3th link to list10's 2th link after"<<endl;
cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr10.SendRangeOutBefore
(
*VO_ListOfStr10.GetLinkPtr(3)
, *VO_ListOfStr10.GetLinkPtr(4)
, 2
, RR(VO_ListOfStr11)
, VO_ListOfStr11.GetLinkOpt(1)
);
cout<<"# list10's 3th ~ 4th link to list11's 1th link before"<<endl;
cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.Rotate();
cout<<"# list11 Rotate() ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
cout<<"# list11 IterElemLinkRev() ################"<<endl;
VO_ListOfStr11.IterElemLinkRev(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ListOfStr11.MoveLinkIn
(
*VO_ListOfStr11.GetLinkPtr(1)
, *VO_ListOfStr11.GetLinkPtr(7)
, true
);
cout<<"# list11 MoveLinkIn(1th, 7th, after)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.MoveLinkIn
(
*VO_ListOfStr11.GetLinkPtr(5)
, *VO_ListOfStr11.GetLinkPtr(1)
, false
);
cout<<"# list11 MoveLinkIn(5th, 1th, before)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.MoveLinkIn
(
*VO_ListOfStr11.GetLinkPtr(6)
, *VO_ListOfStr11.GetLinkPtr(7)
, true
);
cout<<"# list11 MoveLinkIn(6th, 7th, after)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.MoveRangeIn
(
*VO_ListOfStr11.GetLinkPtr(1)
, *VO_ListOfStr11.GetLinkPtr(2)
, *VO_ListOfStr11.GetLinkPtr(7)
, true
);
cout<<"# list11 MoveRangeIn(1th, 2th, 7th, after)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
typedef CStringList1::iterator iterator1 ;
//typedef CStringList1::ZCLinkPointEx iteratorEx1;
typedef CStringList1::ZCNodePointN iteratorN1 ;
iterator1 VO_Iter1 = VO_ListOfStr11.end();
//iteratorEx1 VO_IterEx1 = VO_ListOfStr11.end();
iteratorN1 VO_IterN1(VO_Iter1);
__for_itc (CStringList1, VO_ListOfStr11, VO_NowIter)
{
cout<<"(by for_itc ) "<<VO_NowIter.GetPos()<<" : "<<*VO_NowIter<<endl;
}
__for_it_r(CStringList1, VO_ListOfStr11, VO_NowIter)
{
cout<<"(by for_it_r) "<<VO_NowIter.GetPos()<<" : "<<*VO_NowIter<<endl;
}
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamCObjList*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamCObjList<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCObjList_000.exe ZtCObjList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCObjList_000_D.exe ZtCObjList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCObjList_000_mw.exe ZtCObjList_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation -Wno-reorder -Wno-unknown-pragmas
g++.exe -o ZtCObjList_000_mw_D.exe ZtCObjList_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation -Wno-reorder -Wno-unknown-pragmas -D_DEBUG
./ZtCObjList_000_mw.exe
./ZtCObjList_000_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 ZtCObjList_000.exe ZtCObjList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -Wno-reorder
g++ -std=c++98 -o ZtCObjList_000_D.exe ZtCObjList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -Wno-reorder -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.
■ 실행
./ZtCObjList_000.exe
./ZtCObjList_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,337 +0,0 @@

#include <iostream>
#include "ZCppMain/ZtCSimList.H"
#include "ZCppMain/ZtCStringEx.H"
using namespace std ;
using namespace ZNsMain ;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamCSimList
{
public:
typedef ZtCStringBase<char> CStringBase ;
typedef const CStringBase CCStringBase;
/* 아래 자료형에 대해, CStringBase::Fetch() 호출 여부 실험.
ZtCSimList<CStringBase&, CCStringBase&>
ZtCSimList<CStringBase&, CCCStringBase&>
*/
typedef ZtCSimList
<CStringBase, CStringBase&> CStringList1 ;
typedef ZtCSimList
<CStringBase, CCStringBase&> CStringList2 ;
class CHelpObj
{
public:
int mi_CallNo;
public:
CHelpObj() : mi_CallNo(0)
{
cout<<"* CHelpObj()"<<endl;
}
CHelpObj(const CHelpObj& rhs) : mi_CallNo(0)
{
cout<<"* CHelpObj(const CHelpObj& rhs)"<<endl;
}
void operator()( CStringBase& AR_DataCStr)
{ cout<<"# CallNo="<<++mi_CallNo<<" : "<<AR_DataCStr<<endl; }
void operator()(CCStringBase& AR_DataCStr)
{ cout<<"# CallNo="<<++mi_CallNo<<" : "<<AR_DataCStr<<endl; }
public:
};/*
class CHelpObj*/
struct StFunctor
{
static void ShowElement(int ArgiValue){cout<<"#1 Value="<<ArgiValue<<endl;}
};
struct StFunctor2
{
static void ShowElement(int ArgiValue, CHelpObj)
{cout<<"#2 Value="<<ArgiValue<<", CHelpObj Addr=None"<<" With CHelpObj"<<endl;}
};
struct StFunctor3
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#3 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref"<<endl;}
};
struct StFunctor4
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#4 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj in Ptr"<<endl;}
};
struct StFunctor5
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj& AR_CHelpObj2)
{cout<<"#5 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref 2"<<endl;}
};
struct StFunctor6
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj AO_CHelpObj2)
{cout<<"#6 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Half Ref"<<endl;}
};
public:
static void ShowDataInNode(const CStringBase& AR_Data)
{
cout<<"* Data : "<<AR_Data<<endl;
}/*
static void ShowDataInNode(const CStringBase& AR_Data)*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
CStringBase VO_CStringBase;
CStringList1 VO_ListOfStr10 ;
CStringList2 VO_ListOfStr20 ;
VO_ListOfStr10.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
cout<<"# 1th IterElement ####" <<endl;
{
VO_ListOfStr10.IterElement(&ShowDataInNode);
}
/*///////////////////////////////////*/
cout<<endl;
VO_ListOfStr20.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
cout<<"# 2th IterElement ####" <<endl;
{
VO_ListOfStr20.IterElement(&ShowDataInNode);
}
/*///////////////////////////////////*/
typedef ZtCSimList<int> CIntList;
CHelpObj VO_CHelpObj;
CIntList VO_CIntList;
VO_CIntList.AddTail(10);
VO_CIntList.AddTail(20);
VO_CIntList.AddTail(30);
VO_CIntList.AddTail(40);
cout<<endl<<"#### Show CIntList Element ####"<<endl<<endl;
VO_CIntList.IterElement(StFunctor ::ShowElement);
VO_CIntList.IterElement(StFunctor2::ShowElement, VO_CHelpObj );
VO_CIntList.IterElement(StFunctor3::ShowElement, ZftMCR(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor4::ShowElement, ZftMCP(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor5::ShowElement, ZftMCP(VO_CHelpObj), ZftMCP(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor6::ShowElement, ZftMCP(VO_CHelpObj), VO_CHelpObj );
CStringList1 VO_ListOfStr11 ;
cout<<"# add 2 elements and clear in VO_ListOfStr11"<<endl;
VO_ListOfStr11.AddTail(VO_CStringBase("lsit 11 data 01"));
VO_ListOfStr11.AddTail(VO_CStringBase("lsit 11 data 02"));
VO_ListOfStr11.clear();
cout<<"# After list10 Fetch from list11"<<endl;
VO_ListOfStr10.GetCFreeHeap().Fetch( VO_ListOfStr11.GetCFreeHeap() );
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
cout<<"# After list11 Fetch 3 from list10"<<endl;
VO_ListOfStr11.GetCFreeHeap().
Fetch( VO_ListOfStr10.GetCFreeHeap(), 3);
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add1"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add2"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add3"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add4"));
cout<<"# After add 4 in list11"<<endl;
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
VO_ListOfStr11.GetCFreeHeap().AddHeap(2);
VO_ListOfStr10.GetCFreeHeap().MakeEqual( VO_ListOfStr11.GetCFreeHeap() );
cout<<"# After adding free 2 in list11 and MakeEqual() : list10 and list11"<<endl;
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
cout<<"# list11 IterElement ####" <<endl;
{
VO_ListOfStr11.IterElement(&ShowDataInNode);
}/*
cout<<"# list11 IterElement ####" <<endl;*/
cout<<"# list11 IterElement : ZftMCR(CHelpObj)" <<endl;
VO_ListOfStr11.IterElement(ZftMCR(VO_CHelpObj));
cout<<"# list11 IterElement : ZftMCP(CHelpObj)" <<endl;
VO_ListOfStr11.IterElement(ZftMCP(VO_CHelpObj));
VO_ListOfStr11 = VO_ListOfStr10 ;
cout<<"# list11 IterElement : after list11=list10" <<endl;
VO_ListOfStr11.IterElement(ZftMCP(VO_CHelpObj));
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamCSimList*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamCSimList<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCSimList_000.exe ZtCSimList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCSimList_000_D.exe ZtCSimList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCSimList_000_mw.exe ZtCSimList_000.cpp -I../ -lWs2_32
g++.exe -o ZtCSimList_000_mw_D.exe ZtCSimList_000.cpp -I../ -lWs2_32 -D_DEBUG
./ZtCSimList_000_mw.exe
./ZtCSimList_000_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 ZtCSimList_000.exe ZtCSimList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCSimList_000_D.exe ZtCSimList_000.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.
■ 실행
./ZtCSimList_000.exe
./ZtCSimList_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,308 +0,0 @@
#include <string>
#include <iostream>
#include "ZCppMain/ZtCStringEx.H"
#include "ZCppMain/ZtCStringStd.H"
using namespace std;
namespace ZNsMain
{
namespace ZNsExam
{
typedef ZtCStringStd<string> ZCStringStd ;
typedef ZtCStringStd<wstring> ZCStringStdW ;
typedef ZtCStringBase<char> ZCStringBase ;
typedef ZtCStringBase<wchar_t> ZCStringBaseW ;
typedef ZCStringBase ::ZCCharView ZCCharView ;
typedef ZCStringBaseW::ZCCharView ZCCharViewW ;
typedef ZCStringStd ::ZCCharView ZCCharViewS ;
typedef ZCStringStdW ::ZCCharView ZCCharViewSW ;
typedef ZtCCharType<ZCStringBase> ZCCharType ;
typedef ZtCCharType<ZCStringBaseW> ZCCharTypeW ;
typedef ZtCCharType<ZCStringStd > ZCCharTypeS ;
typedef ZtCCharType<ZCStringStdW> ZCCharTypeSW ;
typedef ZCCharType ::TypeChar TypeChar ;
typedef ZCCharTypeW ::TypeChar TypeCharW ;
typedef ZCCharType ::TypeInt TypeCharInt ;
typedef ZCCharTypeW ::TypeInt TypeCharIntW ;
typedef ZCCharTypeS ::TypeChar TypeCharS ;
typedef ZCCharTypeSW::TypeChar TypeCharSW ;
typedef ZCCharTypeS ::TypeInt TypeCharIntS ;
typedef ZCCharTypeSW::TypeInt TypeCharIntSW ;
const int CI_ByteSize = ZCCharType ::CI_ByteSize;
const int CI_ByteSizeW = ZCCharTypeW ::CI_ByteSize;
const int CI_ByteSizeS = ZCCharTypeS ::CI_ByteSize;
const int CI_ByteSizeSW = ZCCharTypeSW::CI_ByteSize;
template<typename TDummy=void*> class ZtCExamCStringBase_000
{
public:
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
cout<<"# TypeChar ="<<typeid(TypeChar ).name()<<endl;
cout<<"# TypeCharW ="<<typeid(TypeCharW ).name()<<endl;
cout<<"# TypeCharInt ="<<typeid(TypeCharInt ).name()<<endl;
cout<<"# TypeCharIntW ="<<typeid(TypeCharIntW ).name()<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# TypeCharS ="<<typeid(TypeCharS ).name()<<endl;
cout<<"# TypeCharSW ="<<typeid(TypeCharSW ).name()<<endl;
cout<<"# TypeCharIntS ="<<typeid(TypeCharIntS ).name()<<endl;
cout<<"# TypeCharIntSW="<<typeid(TypeCharIntSW).name()<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# CI_ByteSize ="<<CI_ByteSize <<endl;
cout<<"# CI_ByteSizeW ="<<CI_ByteSizeW <<endl;
cout<<"# CI_ByteSizeS ="<<CI_ByteSizeS <<endl;
cout<<"# CI_ByteSizeSW="<<CI_ByteSizeSW <<endl;
cout<<"*****************************************************"<<endl;
cout<<"# ZCStringBase ::TypeCharInt="<<typeid(ZCStringBase ::TypeCharInt).name()<<endl;
cout<<"# ZCStringBaseW::TypeCharInt="<<typeid(ZCStringBaseW::TypeCharInt).name()<<endl;
cout<<"# ZCStringBase ::size_type ="<<typeid(ZCStringBase ::size_type ).name()<<endl;
cout<<"# ZCStringBaseW::size_type ="<<typeid(ZCStringBaseW::size_type ).name()<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# ZCStringStd ::TypeCharInt="<<typeid(ZCStringStd ::TypeCharInt).name()<<endl;
cout<<"# ZCStringStdW ::TypeCharInt="<<typeid(ZCStringStdW ::TypeCharInt).name()<<endl;
cout<<"# ZCStringStd ::size_type ="<<typeid(ZCStringStd ::size_type ).name()<<endl;
cout<<"# ZCStringStdW ::size_type ="<<typeid(ZCStringStdW ::size_type ).name()<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# ZCStringBase ::traits_type::char_type="<<typeid(ZCStringBase ::traits_type::char_type).name()<<endl;
cout<<"# ZCStringBaseW::traits_type::char_type="<<typeid(ZCStringBaseW::traits_type::char_type).name()<<endl;
cout<<"# ZCStringBase ::traits_type::int_type ="<<typeid(ZCStringBase ::traits_type::int_type ).name()<<endl;
cout<<"# ZCStringBaseW::traits_type::int_type ="<<typeid(ZCStringBaseW::traits_type::int_type ).name()<<endl;
cout<<"# ZCStringBase ::traits_type="<<typeid(ZCStringBase ::traits_type).name()<<endl;
cout<<"# ZCStringBaseW::traits_type="<<typeid(ZCStringBaseW::traits_type).name()<<endl;
cout<<"*****************************************************"<<endl;
ZCStringBaseW VO_ZCStringBaseW;
ZCStringStdW VO_ZCStringStdW ;
cout<<"# '.' ascii code ="<<int('.')<<endl;
cout<<"*****************************************************"<<endl;
VO_ZCStringBaseW=123;
cout<<"* after VO_ZCStringBaseW=123"<<endl;
cout<<"# VO_ZCStringBaseW[0]="<<int(VO_ZCStringBaseW[0])<<endl;
cout<<"# VO_ZCStringBaseW[1]="<<int(VO_ZCStringBaseW[1])<<endl;
cout<<"# VO_ZCStringBaseW[2]="<<int(VO_ZCStringBaseW[2])<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# VO_ZCStringBaseW.GetLong()="<<VO_ZCStringBaseW.GetLong()<<endl;
cout<<"*****************************************************"<<endl;
VO_ZCStringBaseW=2.3;
cout<<"* after VO_ZCStringBaseW=2.3"<<endl;
cout<<"# VO_ZCStringBaseW[0]="<<int(VO_ZCStringBaseW[0])<<endl;
cout<<"# VO_ZCStringBaseW[1]="<<int(VO_ZCStringBaseW[1])<<endl;
cout<<"# VO_ZCStringBaseW[2]="<<int(VO_ZCStringBaseW[2])<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# VO_ZCStringBaseW.GetDouble()="<<VO_ZCStringBaseW.GetDouble()<<endl;
cout<<"*****************************************************"<<endl;
VO_ZCStringStdW=1.2;
cout<<"* after VO_ZCStringStdW=1.2"<<endl;
cout<<"# VO_ZCStringStdW [0]="<<int(VO_ZCStringStdW[0])<<endl;
cout<<"# VO_ZCStringStdW [1]="<<int(VO_ZCStringStdW[1])<<endl;
cout<<"# VO_ZCStringStdW [2]="<<int(VO_ZCStringStdW[2])<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# VO_ZCStringStdW.GetDouble()="<<VO_ZCStringStdW.GetDouble()<<endl;
cout<<"*****************************************************"<<endl;
const ZCCharView CO_ZCCharView("1234AA5678AA90abcAAss");
ZCStringBase VO_ZCStringStd(CO_ZCCharView);
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"* after VO_ZCStringStd.Replace('12', '***')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("12"), ZCCharView("***"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after VO_ZCStringStd=CO_ZCCharView"<<endl;
VO_ZCStringStd=CO_ZCCharView;
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('AA', '___')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("AA"), ZCCharView("___"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('12', '###')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("12"), ZCCharView("###"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('##', 'T')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("##"), ZCCharView("T"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('ss', '')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("ss"), ZCCharView(""));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
ZftMakeStr(VO_ZCStringStd , ZTypIntULL(1234));
ZftMakeStr(VO_ZCStringStd , ZCCharView("--"));
ZftMakeStr(VO_ZCStringStd , double(10.01));
ZftMakeStr(VO_ZCStringStd , true);
ZftMakeStr(VO_ZCStringStd , 'Z');
ZftMakeStr(VO_ZCStringStd , ZCCharView("_Z_"));
ZftMakeStr(VO_ZCStringStdW, ZTypIntULL(1234));
ZftMakeStr(VO_ZCStringStdW, ZCCharViewSW(L"--"));
ZftMakeStr(VO_ZCStringStdW, double(10.01));
ZftMakeStr(VO_ZCStringStdW, true);
ZftMakeStr(VO_ZCStringStdW, L'Z');
ZftMakeStr(VO_ZCStringStdW, ZCCharViewSW(L"_Z_"));
VO_ZCStringStdW(false);
cout<<"* after ZftMakeStr(VO_ZCStringStd, ~)"<<endl;
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after ZftMakeStr(VO_ZCStringStdW, ~)"<<endl;
cout<<"# "<<VO_ZCStringStdW<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after VO_ZCStringStd.Replace('T#', '')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("T#"), ZCCharView(""));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('Z_', 'Z@%')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("Z_"), ZCCharView("Z@%"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('true', '_TRUE_')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("true"), ZCCharView("_TRUE_"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('_', '~&')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("_"), ZCCharView("~&"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after ()(ZCCharViewW('_AZ'))"<<endl;
VO_ZCStringStd(ZCCharView("_AZ"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamCStringBase_000*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamCStringBase_000<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCStringBase_000.exe ZtCStringBase_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCStringBase_000_D.exe ZtCStringBase_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCStringBase_000_mw.exe ZtCStringBase_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation
g++.exe -o ZtCStringBase_000_mw_D.exe ZtCStringBase_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
./ZtCStringBase_000_mw.exe
./ZtCStringBase_000_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 ZtCStringBase_000.exe ZtCStringBase_000.cpp -I../
g++ -std=c++98 -o ZtCStringBase_000_D.exe ZtCStringBase_000.cpp -I../ -D_DEBUG
g++ -std=c++98 -o ZtCStringBase_000.exe ZtCStringBase_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCStringBase_000_D.exe ZtCStringBase_000.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.
■ 실행
./ZtCStringBase_000.exe
./ZtCStringBase_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,232 +0,0 @@

#ifndef _REENTRANT_EX
#define _REENTRANT_EX
#endif
#include <iostream>
#include "ZCppMain/ZCStringStd.H"
#include "ZCppMain/ZCProcess.H"
using namespace std ;
using namespace ZNsMain;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamThread
{
public:
class CThreadMy : public ZNsMain::ZtCThreadEx<CThreadMy>
{
public :
typedef ZNsMain::ZtCThreadEx<CThreadMy> TypeBase;
public :
friend class ZNsMain:: ZtCThreadEx<CThreadMy>;
private:
void Init()
{
this->TypeBase::Init(); cout<<"* Init0()"<<endl;
}
void Exec()
{
this->TypeBase::Exec(); cout<<"* Exec0()"<<endl;
}
void Fini()
{
this->TypeBase::Fini(); cout<<"* Fini0()"<<endl;
}
void Init(ZCStringStd& AR_KeyCStr)
{
this->TypeBase::template Init<ZCStringStd&>(AR_KeyCStr); cout<<"* Init1() : "<<AR_KeyCStr<<endl;
}
void Exec(ZCStringStd& AR_KeyCStr)
{
this->TypeBase::template Exec<ZCStringStd&>(AR_KeyCStr); cout<<"* Exec1() : "<<AR_KeyCStr<<endl;
}
void Fini(ZCStringStd& AR_KeyCStr)
{
this->TypeBase::template Fini<ZCStringStd&>(AR_KeyCStr); cout<<"* Fini1() : "<<AR_KeyCStr<<endl;
}
void Init(ZCStringStd& AR_KeyCStr, ZCStringStd& AR_KeyCStr2)
{
this->TypeBase::template Init
<ZCStringStd&, ZCStringStd&>(AR_KeyCStr, AR_KeyCStr2);
cout<<"* Init2() : "<<AR_KeyCStr<<", "<<AR_KeyCStr2<<endl;
}
void Exec(ZCStringStd& AR_KeyCStr, ZCStringStd& AR_KeyCStr2)
{
this->TypeBase::template Exec
<ZCStringStd&, ZCStringStd&>(AR_KeyCStr, AR_KeyCStr2);
cout<<"* Init2() : "<<AR_KeyCStr<<", "<<AR_KeyCStr2<<endl;
}
void Fini(ZCStringStd& AR_KeyCStr, ZCStringStd& AR_KeyCStr2)
{
this->TypeBase::template Fini
<ZCStringStd&, ZCStringStd&>(AR_KeyCStr, AR_KeyCStr2);
cout<<"* Init2() : "<<AR_KeyCStr<<", "<<AR_KeyCStr2<<endl;
}
void Init(ZCStringStd& AR_KeyCStr, ZCStringStd& AR_KeyCStr2, ZCStringStd& AR_KeyCStr3)
{
this->TypeBase::template Init
<ZCStringStd&, ZCStringStd&, ZCStringStd&>
( AR_KeyCStr, AR_KeyCStr2, AR_KeyCStr3 ) ;
cout<<"* Init3() : "<<AR_KeyCStr<<", "<<AR_KeyCStr2<<", "<<AR_KeyCStr3<<endl;
}
void Exec(ZCStringStd& AR_KeyCStr, ZCStringStd& AR_KeyCStr2, ZCStringStd& AR_KeyCStr3)
{
this->TypeBase::template Exec
<ZCStringStd&, ZCStringStd&, ZCStringStd&>
( AR_KeyCStr, AR_KeyCStr2, AR_KeyCStr3 ) ;
cout<<"* Init3() : "<<AR_KeyCStr<<", "<<AR_KeyCStr2<<", "<<AR_KeyCStr3<<endl;
}
void Fini(ZCStringStd& AR_KeyCStr, ZCStringStd& AR_KeyCStr2, ZCStringStd& AR_KeyCStr3)
{
this->TypeBase::template Fini
<ZCStringStd&, ZCStringStd&, ZCStringStd&>
( AR_KeyCStr, AR_KeyCStr2, AR_KeyCStr3 ) ;
cout<<"* Init3() : "<<AR_KeyCStr<<", "<<AR_KeyCStr2<<", "<<AR_KeyCStr3<<endl;
}
private:
};/*
class CThreadMy : public ZNsMain::ZtCThreadEx<CThreadMy>*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
CThreadMy VO_CThreadMy1 ;
CThreadMy VO_CThreadMy2 ;
CThreadMy VO_CThreadMy3 ;
CThreadMy VO_CThreadMy4 ;
ZCStringStd VO_ZCStringStd1("Help Data1");
ZCStringStd VO_ZCStringStd2("Help Data2");
ZCStringStd VO_ZCStringStd3("Help Data3");
VO_CThreadMy1.Make();
cout<<"# Press Enter to continue."<<endl; cin.get();
VO_CThreadMy2.Make(ZftMCP(VO_ZCStringStd1));
cout<<"# Press Enter to continue."<<endl; cin.get();
VO_CThreadMy3.Make(ZftMCP(VO_ZCStringStd1), ZftMCP(VO_ZCStringStd2));
cout<<"# Press Enter to continue."<<endl; cin.get();
VO_CThreadMy4.Make(ZftMCP(VO_ZCStringStd1), ZftMCP(VO_ZCStringStd2), ZftMCP(VO_ZCStringStd3));
cout<<"# Press Enter to continue."<<endl; cin.get();
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamThread*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamThread<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCThreadEx_000.exe ZtCThreadEx_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCThreadEx_000_D.exe ZtCThreadEx_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -std=c++98 -o ZtCThreadEx_000_mw.exe ZtCThreadEx_000.cpp -I../
g++.exe -std=c++98 -o ZtCThreadEx_000_mw_D.exe ZtCThreadEx_000.cpp -I../ -D_DEBUG
./ZtCThreadEx_000_mw.exe
./ZtCThreadEx_000_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 ZtCThreadEx_000.exe ZtCThreadEx_000.cpp -I../ -lpthread
g++ -std=c++98 -o ZtCThreadEx_000_D.exe ZtCThreadEx_000.cpp -I../ -lpthread -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.
■ 실행
./ZtCThreadEx_000.exe
./ZtCThreadEx_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,231 +0,0 @@

#ifndef _REENTRANT_EX
#define _REENTRANT_EX
#endif
#include <iostream>
#include "ZCppMain/ZCProcess.H"
using namespace std ;
using namespace ZNsMain;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamThread_001
{
public:
class ZCThreadMy : public ZNsMain::ZtCThreadEx<ZCThreadMy>
{
public :
typedef ZNsMain::ZtCThreadEx<ZCThreadMy> TypeBase;
public :
friend class ZNsMain:: ZtCThreadEx<ZCThreadMy>;
public :
static int GI_CallCnt;
private:
void Init()
{
this->TypeBase::Init(); cout<<"* Init0() : "<<++ZCThreadMy::GI_CallCnt<<endl;
}
void Exec()
{
this->TypeBase::Exec(); cout<<"* Exec0() : "<<++ZCThreadMy::GI_CallCnt<<endl;
}
void Fini()
{
this->TypeBase::Fini(); cout<<"* Fini0() : "<<++ZCThreadMy::GI_CallCnt<<endl;
}
void Init(int& ARRI_CallCnt)
{
this->TypeBase::template Init<int&>(ARRI_CallCnt); cout<<"* Init1() : "<<++ARRI_CallCnt<<endl;
}
void Exec(int& ARRI_CallCnt)
{
this->TypeBase::template Exec<int&>(ARRI_CallCnt); cout<<"* Exec1() : "<<++ARRI_CallCnt<<endl;
}
void Fini(int& ARRI_CallCnt)
{
this->TypeBase::template Fini<int&>(ARRI_CallCnt); cout<<"* Fini1() : "<<++ARRI_CallCnt<<endl;
}
void Init(int& ARRI_CallCnt, int& ARRI_CallCnt2)
{
this->TypeBase::template Init
<int&, int&>(ARRI_CallCnt, ARRI_CallCnt2);
cout<<"* Init2() : "<<++ARRI_CallCnt<<", "<<ARRI_CallCnt2<<endl;
}
void Exec(int& ARRI_CallCnt, int& ARRI_CallCnt2)
{
this->TypeBase::template Exec
<int&, int&>(ARRI_CallCnt, ARRI_CallCnt2);
cout<<"* Init2() : "<<++ARRI_CallCnt<<", "<<ARRI_CallCnt2<<endl;
}
void Fini(int& ARRI_CallCnt, int& ARRI_CallCnt2)
{
this->TypeBase::template Fini
<int&, int&>(ARRI_CallCnt, ARRI_CallCnt2);
cout<<"* Init2() : "<<++ARRI_CallCnt<<", "<<ARRI_CallCnt2<<endl;
}
void Init(int& ARRI_CallCnt, int& ARRI_CallCnt2, int& ARRI_CallCnt3)
{
this->TypeBase::template Init<int&, int&, int&>
( ARRI_CallCnt, ARRI_CallCnt2, ARRI_CallCnt3 ) ;
cout<<"* Init3() : "<<++ARRI_CallCnt<<", "<<ARRI_CallCnt2<<", "<<ARRI_CallCnt3<<endl;
}
void Exec(int& ARRI_CallCnt, int& ARRI_CallCnt2, int& ARRI_CallCnt3)
{
this->TypeBase::template Exec<int&, int&, int&>
( ARRI_CallCnt, ARRI_CallCnt2, ARRI_CallCnt3 ) ;
cout<<"* Init3() : "<<++ARRI_CallCnt<<", "<<ARRI_CallCnt2<<", "<<ARRI_CallCnt3<<endl;
}
void Fini(int& ARRI_CallCnt, int& ARRI_CallCnt2, int& ARRI_CallCnt3)
{
this->TypeBase::template Fini<int&, int&, int&>
( ARRI_CallCnt, ARRI_CallCnt2, ARRI_CallCnt3 ) ;
cout<<"* Init3() : "<<++ARRI_CallCnt<<", "<<ARRI_CallCnt2<<", "<<ARRI_CallCnt3<<endl;
}
private:
};/*
class ZCThreadMy : public ZNsMain::ZtCThreadEx<ZCThreadMy>*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
ZCThreadMy VO_CThreadMy1 ;
ZCThreadMy VO_CThreadMy2 ;
ZCThreadMy VO_CThreadMy3 ;
ZCThreadMy VO_CThreadMy4 ;
VO_CThreadMy1.Make();
cout<<"# Press Enter to continue."<<endl; cin.get();
VO_CThreadMy2.Make(ZftMCP(ZCThreadMy::GI_CallCnt));
cout<<"# Press Enter to continue."<<endl; cin.get();
VO_CThreadMy3.Make(ZftMCP(ZCThreadMy::GI_CallCnt), ZftMCP(ZCThreadMy::GI_CallCnt));
cout<<"# Press Enter to continue."<<endl; cin.get();
VO_CThreadMy4.Make(ZftMCP(ZCThreadMy::GI_CallCnt), ZftMCP(ZCThreadMy::GI_CallCnt), ZftMCP(ZCThreadMy::GI_CallCnt));
cout<<"# Press Enter to continue."<<endl; cin.get();
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamThread_001*/
template<typename TDummy> int
ZtCExamThread_001<TDummy>::ZCThreadMy::GI_CallCnt =0 ;
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamThread_001<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCThreadEx_001.exe ZtCThreadEx_001.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCThreadEx_001_D.exe ZtCThreadEx_001.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -std=c++98 -o ZtCThreadEx_001_mw.exe ZtCThreadEx_001.cpp -I../
g++.exe -std=c++98 -o ZtCThreadEx_001_mw_D.exe ZtCThreadEx_001.cpp -I../ -D_DEBUG
./ZtCThreadEx_001_mw.exe
./ZtCThreadEx_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 ZtCThreadEx_001.exe ZtCThreadEx_001.cpp -I../ -lpthread
g++ -std=c++98 -o ZtCThreadEx_001_D.exe ZtCThreadEx_001.cpp -I../ -lpthread -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.
■ 실행
./ZtCThreadEx_001.exe
./ZtCThreadEx_001_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,237 +0,0 @@

#ifndef _REENTRANT_EX
#define _REENTRANT_EX
#endif
#include <iostream>
#include "ZCppMain/ZCProcess.H"
#include "ZCppMain/ZMainHeadEx.H"
using namespace std ;
using namespace ZNsMain;
const int CI_RepeatCnt = 3 ;
const int CI_WaitMilli = 1000 ;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamThread_002
{
public:
typedef ZtCMutexCondData<> ZCMutexCondData;
public:
class ZCThreadMy : public ZNsMain::ZtCThreadEx<ZCThreadMy>
{
public :
typedef ZNsMain::ZtCThreadEx<ZCThreadMy> TypeBase;
public :
friend class ZNsMain:: ZtCThreadEx<ZCThreadMy>;
private:
void Init(ZCMutexCondData& AR_CMutexCond)
{
this->TypeBase::template Init<ZCMutexCondData&>(AR_CMutexCond);
/*@@@@@@@@@*/ AR_CMutexCond.Lock(); /*@@@@@@@@@*/
{
__for1(int, i, CI_RepeatCnt)
{
cout<<"# *** Thread Init "<<i<<endl; ZfSuspendExec(CI_WaitMilli);
}
/*::::::::::::::::::::::::*/
}
AR_CMutexCond.WakeCond();
AR_CMutexCond.WaitCond();
}/*
void Init(ZCMutexCondData& AR_CMutexCond)*/
void Exec(ZCMutexCondData& AR_CMutexCond)
{
this->TypeBase::template Exec<ZCMutexCondData&>(AR_CMutexCond);
{
__for1(int, i, CI_RepeatCnt)
{
cout<<"# >>> Thread Exec "<<i<<endl; ZfSuspendExec(CI_WaitMilli);
}
/*::::::::::::::::::::::::*/
}
AR_CMutexCond.WakeCond();
AR_CMutexCond.WaitCond();
}/*
void Exec(ZCMutexCondData& AR_CMutexCond)*/
void Fini(ZCMutexCondData& AR_CMutexCond)
{
this->TypeBase::template Fini<ZCMutexCondData&>(AR_CMutexCond);
{
__for1(int, i, CI_RepeatCnt)
{
cout<<"# *** Thread Fini "<<i<<endl; ZfSuspendExec(CI_WaitMilli);
}
/*::::::::::::::::::::::::*/
}
AR_CMutexCond.WakeCond();
/*@@@@@@@@@*/ AR_CMutexCond.UnLock(); /*@@@@@@@@@*/
}/*
void Fini(ZCMutexCondData& AR_CMutexCond)*/
private:
};/*
class ZCThreadMy : public ZNsMain::ZtCThreadEx<ZCThreadMy>*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
ZCMutexCondData VO_CMutexCond;
ZCThreadMy VO_CThreadMy ;
VO_CMutexCond.InitCond();
cout<<"- Mutex Init Cond" <<endl;
VO_CMutexCond.Lock ();
{
VO_CThreadMy.Make(ZftMCP(VO_CMutexCond));
cout<<"- Wait Thread Init"<<endl;
VO_CMutexCond.WaitCond();
{
__for1(int, i, CI_RepeatCnt)
{
cout<<"- Ack Thread Init "<<i<<endl; ZfSuspendExec(CI_WaitMilli);
}
}
VO_CMutexCond.WakeCond();
cout<<"- Wait Thread Exec"<<endl;
VO_CMutexCond.WaitCond();
{
__for1(int, i, CI_RepeatCnt)
{
cout<<"- Ack Thread Exec "<<i<<endl; ZfSuspendExec(CI_WaitMilli);
}
/*::::::::::::::::::::::::*/
}
VO_CMutexCond.WakeCond();
cout<<"- Wait Thread Fini"<<endl;
VO_CMutexCond.WaitCond();
{
__for1(int, i, CI_RepeatCnt)
{
cout<<"- Ack Thread Fini "<<i<<endl; ZfSuspendExec(CI_WaitMilli);
}
/*::::::::::::::::::::::::*/
}
}
VO_CMutexCond.UnLock();
VO_CMutexCond.FiniCond(); cout<<"- Mutex Fini Cond" <<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamThread_002*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamThread_002<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCThreadEx_002_MutexCond.exe ZtCThreadEx_002_MutexCond.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCThreadEx_002_MutexCond_D.exe ZtCThreadEx_002_MutexCond.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -std=c++98 -o ZtCThreadEx_002_MutexCond_mw.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lWs2_32
g++.exe -std=c++98 -o ZtCThreadEx_002_MutexCond_mw_D.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lWs2_32 -D_DEBUG
g++.exe -std=c++98 -o ZtCThreadEx_002_MutexCond_mw.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lWs2_32
g++.exe -std=c++98 -o ZtCThreadEx_002_MutexCond_mw_D.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lWs2_32 -D_DEBUG
./ZtCThreadEx_002_MutexCond_mw.exe
./ZtCThreadEx_002_MutexCond_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 ZtCThreadEx_002_MutexCond.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lpthread -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCThreadEx_002_MutexCond_D.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lpthread -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.
■ 실행
./ZtCThreadEx_002_MutexCond.exe
./ZtCThreadEx_002_MutexCond_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,57 +0,0 @@

#include<iostream>
using namespace std;
int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)
{
cout<<"Call Main()"<<endl; return 0;
}/*
int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*################################################################################
■ mingw 컴파일
g++ -o c++_test_000.exe c++_test_000.cpp -I../
■ linux 컴파일
g++ -o c++_test_000.exe c++_test_000.cpp -I../
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ g++ -o c++_test_000.exe c++_test_000.cpp -I../
c++_test_000.cpp: In function int main(int, char**):
c++_test_000.cpp:18:28: error: invalid conversion from char** to const char** [-fpermissive]
18 | return Main(AI_ArgCnt, APP_ArgVal);
| ^~~~~~~~~~
| |
| char**
c++_test_000.cpp:9:39: note: initializing argument 2 of int Main(int, const char**)
9 | int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)
| ~~~~~~~~~~~~^~~~~~~~~~~~~~
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# date
Mon Aug 25 01:39:11 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.
################################################################################*/

View File

@ -1,134 +0,0 @@
#include <iostream>
#include "ZCppMain/ZMainHead.H"
using namespace std;
namespace ZNsMain
{
namespace ZNsExam
{
static void ShowFunctor(int AI_Data)
{
cout<<"* Show Data : "<<AI_Data<<endl;
}/*
static void ShowFunctor(int AI_Data)*/
template<typename TFunctor> static void
CallFunctor(TFunctor AO_Functor, int AI_Data)
{
AO_Functor(AI_Data);
}/*
template<typename TFunctor> static void
CallFunctor(TFunctor AO_Functor, int AI_Data)*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
_FUNC_IN_FUNC_START_(My)(int ArgiData)
{
cout<<"# Show My() In Func : i = "<<ArgiData<<endl;
}
_FUNC_IN_FUNC_CLOSE_(My) /////////////
CallFunctor(&My::Exec, 1) ;
CallFunctor(&My::Exec, 2) ;
CallFunctor(&ShowFunctor, 10) ;
CallFunctor(&ShowFunctor, 20) ;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o c++_test_005.exe c++_test_005.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o c++_test_005_D.exe c++_test_005.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o c++_test_005_mw.exe c++_test_005.cpp -I../
g++.exe -o c++_test_005_mw_D.exe c++_test_005.cpp -I../ -D_DEBUG
./c++_test_005_mw.exe
./c++_test_005_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 c++_test_005.exe c++_test_005.cpp -I../
g++ -std=c++98 -o c++_test_005_D.exe c++_test_005.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.
■ 실행
./c++_test_005.exe
./c++_test_005_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -1,317 +0,0 @@
#include <iostream>
#include <string>
#include "ZCppMain/ZMainHead.H"
using namespace std ;
using namespace ZNsMain;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TType> class ZtCTest
{
public:
template<TType TTypeVar> class ZCTypeVar
{
public:
TType MO_TypeVar;
public:
ZCTypeVar()
{
MO_TypeVar=TTypeVar;
}
public:
};/*
template<TType TTypeVar> class ZCTypeVar*/
public:
};/*
template<typename TType> class ZtCTest*/
template<typename TType, TType TTypeVar> class ZtCTest2
{
public:
TType MO_TypeVar;
public:
ZtCTest2()
{
MO_TypeVar=TTypeVar;
}
public:
};/*
template<typename TType, TType TTypeVar> class ZtCTest2*/
class ZCTypeView
{
public:
ZCTypeView()
{
cout<<"# ZCTypeView()"<<endl;
}
ZCTypeView(const ZCTypeView& rhs)
{
cout<<"ZCTypeView(const ZCTypeView& rhs)"<<endl;
}
~ZCTypeView()
{
cout<<"# ~ZCTypeView()"<<endl;
}
template<typename TTypChain> void OnMeetType()
{
cout<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TTypChain, typename TTypHelp> void OnMeetType(TTypHelp& AR_CallNo)
{
cout<<"* Call No="<<++AR_CallNo<<" : "<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TTypChain> void OnMeetTypeVal()
{
cout<<"* Val="<<TTypChain::GetData()<<", ETypeNo="<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TTypChain, typename TTypHelp> void OnMeetTypeVal(TTypHelp& AR_CallNo)
{
cout<<"* Call No="<<++AR_CallNo<<" : Val="<<TTypChain::GetData()<<", ETypeNo="<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TObjtChain> void OnMeetData(TObjtChain& AR_NowChain)
{
cout<<"* Type No="<<AR_NowChain.GetNo()<<" : "<<AR_NowChain.GetData()<<endl;
}
template<typename TObjtChain> void OnMeetData(TObjtChain& AR_NowChain, int& ARI_CallNo)
{
cout<<"# CallNo="<<++ARI_CallNo<<" : Type No="<<AR_NowChain.GetNo()<<" : "<<AR_NowChain.GetData()<<endl;
}
};/*
class ZCTypeView*/
template<typename TType> class ZCShowType
{
public:
ZCShowType()
{
cout<<"# TType typename="<<typeid(TType).name()<<endl;
}
};
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
ZCShowType<int> myShowType1;
ZCShowType<double> myShowType2;
ZCShowType<ZTypLLong> myShowType3;
//ZCShowType<"abc"> myShowType4; //error
const int CI_Var1=10;
const int CI_Var2=20;
const int CI_Var3=30;
ZtCTest<int>::ZCTypeVar<CI_Var1> myintvar1 ;
ZtCTest2<int, CI_Var2> myintvar2 ;
ZtCTest2<ZTypLLong, CI_Var3> myintvar3 ;
cout<<myintvar1.MO_TypeVar<<endl;
cout<<myintvar2.MO_TypeVar<<endl;
cout<<myintvar3.MO_TypeVar<<endl;
typedef ZtCMiniValChain
<
char , 'a' , ZtCMiniValChain<
char , 'b' , ZtCMiniValChain<
char , 'c' , ZtCMiniValChain<
//double, 10.2 , ZtCMiniValChain< // error in linux
//string, string("123") , ZtCMiniValChain< // error
long , 10 , ZtCMiniValChain<
int , 19 ,
ZCEmpty > > > >
> ZCMiniValChain; ZCTypeView VO_ZCTypeView; int VI_CallNo = 0;
cout<<"# ZCMiniValChain.size()="<<ZCMiniValChain::size()<<endl;
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterHead(VO_ZCTypeView);
cout<<"************************************"<<endl;
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterTail(VO_ZCTypeView);
cout<<"************************************"<<endl;
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo = 0));
cout<<"************************************"<<endl;
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo = 0));
cout<<"************************************"<<endl;
typedef ZtCTypeChain
<
double , ZtCTypeChain<
int , ZtCTypeChain<
wchar_t, ZtCTypeChain<
char ,
ZCEmpty > > >
> ZCTypeChain;
cout<<"tmpl chain size = "<<ZCTypeChain::Size()<<endl;
ZftIterTypeChainTail<ZCTypeChain, ZCTypeView&>(VO_ZCTypeView);
cout<<"@** call start : ZCTypeView(rhs) **********@"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterHead(VO_ZCTypeView);
cout<<"@******************************************@"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterTail(VO_ZCTypeView);
cout<<"@*** call close : ZCTypeView(rhs) *********@"<<endl;
ZftIterTypeChainHead<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) );
cout<<"************************************"<<endl;
ZftIterTypeChainTail<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) );
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView&>::
IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView&>::
IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
cout<<"************************************"<<endl;
typedef ZtCDataRing<std::string> ZCDataRing;
ZCDataRing VO_CDataRing = string("123");
VO_CDataRing.AddTail(string("ABC"));
VO_CDataRing.AddTail(string("XYZ"));
cout<<"# VO_CDataRing Size = "<<VO_CDataRing.size()<<endl;
cout<<"# VO_CDataRing Data = "<<VO_CDataRing <<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterThis = "<<endl;
VO_CDataRing.IterThis(&ZftPrint<string>); cout<<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterHead = "<<endl;
VO_CDataRing.IterHead(&ZftPrint<string>); cout<<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterTail = "<<endl;
VO_CDataRing.IterTail(&ZftPrint<string>); cout<<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterThisRev = "<<endl;
VO_CDataRing.IterThisRev(&ZftPrint<string>); cout<<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterThisRev(HelpType char(',')) = "<<endl;
VO_CDataRing.IterThisRev(&ZftPrint<string, char>, char(',')); cout<<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterTail(HelpType char(',')) = "<<endl;
VO_CDataRing.IterTail (&ZftPrint<string, char>, char(',')); cout<<endl;
cout<<"************************************"<<endl;
typedef ZtCDataRing<ZCTypeView> ZCViewRing;
ZCViewRing VO_ZCViewRing;
VO_ZCViewRing.AddTail();
VO_ZCViewRing.AddTail();
VO_ZCViewRing.DeleteAll();
cout<<"************************************"<<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o c++_test_006.exe c++_test_006.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o c++_test_006_D.exe c++_test_006.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o c++_test_006_mw.exe c++_test_006.cpp -I../
g++.exe -o c++_test_006_mw_D.exe c++_test_006.cpp -I../ -D_DEBUG
./c++_test_006_mw.exe
./c++_test_006_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 c++_test_006.exe c++_test_006.cpp -I../
g++ -std=c++98 -o c++_test_006_D.exe c++_test_006.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.
■ 실행
./c++_test_006.exe
./c++_test_006_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/