Files
RepoMain/ZCppMain/ZMainHead.H

7842 lines
288 KiB
C++
Raw Normal View History


2021-02-25 16:23:13 +09:00
/*//////////////////////////////////////////////////////////////////////////////////////
unsigned . signed
'' , '' . 2008-09-14 03:24:00
2021-02-25 16:23:13 +09:00
namespace namespace namespace ZNsConst
.
namespace enum namespace enum namespace ZNsEnum
. enum ,
const char* GetMSG_enum_data_type(int AI_Enum);
const char* GetMSG_enum_data_type(enum_data_type AE_Enum);
.
--
ZNsEnum, ZNsConst namespace enum
.
-- 2010-06-13 22:37:00
namespace
namespace interface namespace ZNsIFace .
2021-02-25 16:23:13 +09:00
interface 'C' 'I' .
릿 class ZtCType
namespace ZNsType .
namespace ZNsExam . 릿
.
릿 Proxy class CProxy
namespace ZNsIProxy .(Interface Proxy) Proxy
CProxy namespace ZNsProxy .
ZNsIProxy ZNsProxy .
namespace ZNsHide
.
릿 ,
릿 , 릿 namespace
namespace ZNsTmpl .
cf) std::ZNsTmpl::FindPos();
(릿) , Decoration ,
, Decoration
namespace ZNsDeco
. Decoration Logic View , View , Logic
() .
릿 ,
,
CHelp~ . Business Logic View
CView~ .
cf) class CHelpIOCP
template main class class template
릿 instance template
public .
template ( main class
.) class friend . main class 릿
.
main class 릿 (
.) friend .
public 릿 public
No Public macro _NP_
, bool
enum std::ZNsEnum::ZERun
2021-02-25 16:23:13 +09:00
.
,
, bool
2021-02-25 16:23:13 +09:00
, enum std::ZNsEnum::EAct .
call back 'On' .
'Iter' .
cf) CDoubleList<int>::IterElement();
'Iter' 'OnEach' .
, Init, Fini
. , Init, Fini ,
.
0 InitVar
.
containter class template TypeData type .
CObjList<int>::TypeData
. int TypeData
containter 릿, 릿 ( int)
containter . (릿 )
.
type 릿
TypeData . type Type
.
cf) IN ZNsCPP::CStringSerial_T<>
typedef TTypeCh TypeData ;
typedef TStringType TypeCStringData ;
typedef TStringList TypeCStringList ;
container class template class template
TypeData . 2008-11-05 13:22:00
TString TypeCString TypeString
(?) .
typedef TString TypeCString;
typedef TString TypeString ;
2021-02-25 17:11:44 +09:00
2 . 2008-11-05 13:42:00
2021-02-25 16:23:13 +09:00
template functor . ,
InputIterator& first, InputIterator& last
. object .
for_each InputIterator .
template<class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function f)
{
while ( first!=last ) f(*first++);
return f;
}
WINDOW UNICODE 3 .
#define _MBCS
#define _UNICODE
#define UNICODE
RTTI typeinfo .
breakpoint assembly
_asm
{
int 3;
}
core file
ulimit -c unlimited
system("ulimit -c unlimited");
Visual C++ 2008 .
#define _WIN32_WINNT 0x0600
-- 2010-04-22 19:55:00
_REENTRANT_EX _REENTRANT thread-safe
, thread-safe .
-- 2011-03-13 01:04:00
//////////////////////////////////////////////////////////////////////////////////////*/
#ifndef __ZCPPMAIIN_ZMAINHEAD_H__
#define __ZCPPMAIIN_ZMAINHEAD_H__
2021-02-25 16:23:13 +09:00
#include <cstdio>
#include <cstdarg>
#include <cstdlib>
#include <cstring>
#include <string>
#include <climits>
#include <typeinfo>
#define _CODE_OLD_ 0
#define _CODE_BAD_ 0
#define _CODE_NEW_ 1
/*/////////////////////////////////////////////////////////////////
_CODE_OLD_ _CODE_NEW_ #if(0) #if(1)
.
-- 2013-07-28 16:21:00
/////////////////////////////////////////////////////////////////*/
#define _COMMENT_ 0 // 주석으로 사용하는 부분.
#if defined(_WIN32) || defined(_WIN64) || defined(_WIN128) || \
defined( WIN32) || defined( WIN64) || defined( WIN128)
#ifndef _WIN
#define _WIN
#endif
#endif/*
defined(_WIN32) || defined(_WIN64) || defined(_WIN128) || \
defined( WIN32) || defined( WIN64) || defined( WIN128) */
#if defined(_WIN64) || defined( WIN64)
#ifndef __CPU_BIT_CNT__
#define __CPU_BIT_CNT__ 64
#endif
#endif /*defined(_WIN64) || defined( WIN64) */
#if defined(_WIN128) || defined( WIN128)
#ifndef __CPU_BIT_CNT__
#define __CPU_BIT_CNT__ 128
#endif
#endif /*defined(_WIN128) || defined(WIN128) */
#if defined(_WIN)
typedef signed char int8_t ;
typedef unsigned char uint8_t ;
typedef signed short int16_t;
typedef unsigned short uint16_t;
typedef signed int int32_t;
typedef unsigned int uint32_t;
typedef signed __int64 int64_t;
typedef unsigned __int64 uint64_t;
#ifndef __VISUAL_CPP_VER__
#define __VISUAL_CPP_VER__ 200800 // 끝 2 자리는 소수점 버전
#endif//__VISUAL_CPP_VER__
#elif defined(__mips__)
typedef signed char int8_t ;
typedef unsigned char uint8_t ;
typedef signed short int16_t;
typedef unsigned short uint16_t;
typedef signed int int32_t;
typedef unsigned int uint32_t;
typedef signed long long int64_t;
typedef unsigned long long uint64_t;
#else
#include <stdint.h>
#endif
#if defined(_WIN)
#define _STRUCT_PACK_
#ifndef __STD_CALL__
#define __STD_CALL__ __stdcall
#endif
#elif defined(__unix__)
#define _STRUCT_PACK_ __attribute__((packed))
#ifndef __STD_CALL__
#define __STD_CALL__
#endif
#elif defined(__linux__)
#define _STRUCT_PACK_ __attribute__((packed))
#ifndef __STD_CALL__
#define __STD_CALL__
#endif
#else
#define _STRUCT_PACK_ __attribute__((packed))
#ifndef __STD_CALL__
#define __STD_CALL__
#endif
#endif
#ifdef _REENTRANT_EX
#ifndef _REENTRANT
#define _REENTRANT
#endif
#endif
#if defined(_REENTRANT)
#ifndef _REENTRANT_MUTEX
#define _REENTRANT_MUTEX
#endif //_REENTRANT_MUTEX
#define _REENTRANT_BOOL_ 1
#else
#define _REENTRANT_BOOL_ 0
#endif //_REENTRANT
#ifdef _WIN
#pragma warning(disable:4503)
#pragma warning(disable:4786)
#pragma warning(disable:4996)
#pragma warning(disable:4244)
#pragma warning(disable:4267)
#pragma warning(disable:4018)
#pragma warning(disable:4312)
#pragma warning(disable:4290)
#pragma warning(disable:4076)
/*/////////////////////////////////////////////////////////////////////////////
4290 : throw .
warning C4290: __declspec(nothrow) C++ .
warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
-- 2013-07-08 02:39:00
4076 : wchar_t unsigned . .
warning C4076: 'unsigned' : can not be used with type 'wchar_t'
-- 2013-07-08 02:45:00
/////////////////////////////////////////////////////////////////////////////*/
/*/////////////////////////////////////////////////////////////////////////////
WinSock2.h include , windows.h include .
WinSock2.h , MainHeader include .
TCHAR.H include _MBCS _UNICODE
TCHAR wchar_t , VC++ 6.0 char .
-- 2006-10-12 09:53:00
/////////////////////////////////////////////////////////////////////////////*/
#include <TCHAR.H>
#include <WinSock2.h>
#include <windows.h>
// 아래 pragma 코드가 이미 CNet_Win.H 에 있는데, 필요하면 아래 주석을 제거한다.
//
// #pragma comment(lib, "ws2_32")
#ifndef _T
#define _T(X) X
#endif
#if defined(__VISUAL_CPP_VER__) && __VISUAL_CPP_VER__<200000
// VC++ 6.0 에서는 아래 선언이 필요.
// VC++ 7.0 부터는 주석처리 할 것.
typedef unsigned long ULONG_PTR ;
typedef unsigned long* PULONG_PTR;
#endif //defined(__VISUAL_CPP_VER__) && __VISUAL_CPP_VER__<200000
#else // !defined(_WIN)
#include<errno.h>
#if defined(UNICODE) || defined(_UNICODE)
#define LPCTSTR const wchar_t*
#else
#define LPCTSTR const char*
#endif
#ifndef _T
#define _T(X) X
#endif
#define LONG long
#endif // !defined(_WIN)
#if defined(_REENTRANT)
#if defined(__linux__)
2021-02-25 17:11:44 +09:00
// 리눅스 Multi Thread Programming 에서 ZCObjList 라든가 여러
// 자료구조에서 쓰는 동기화 뮤텍스를 위해 pthread.h 를 포함한다.
2021-02-25 16:23:13 +09:00
#include <pthread.h>
#elif defined(__unix__)
#include <pthread.h>
#elif defined(__sun__) // In Solaris
#include <pthread.h>
#elif defined(_WIN)
//Don't inclucde
#else
#include <pthread.h>
#endif
#endif //defined(_REENTRANT)
#ifdef _DEBUG
#include<iostream>
#include<fstream>
#endif
using namespace std;
#define RR(RefReceive) RefReceive
// RR 메크로는 인수가 참조를 전달하고 다시 어떤 값으로 설정받는다는 것을 뜻함
#define _NP_
/* 템플릿의 멤버함수가 원래는 public 가 아니어야 하지만,
릿 public . No Public */
#define _VT_
// _VT_ 메크로는 주로 상속해서 사용하는 멤버함수를 의미
#define _SY_
/* 동기화(Sync) 영역에서 호출되는 함수를 의미. 따라서 이 함수안에서
object . */
#define _BETA_
/* beta 테스트 중이거나, 실제로 사용하기에는 기술적인 문제가
. (2011-04-03 21:37:00) */
#ifdef __CYGWIN__
#define atoll atol /*for Cygwin*/
#endif
#define __for0(IntType, i, LoopCount) for(IntType i=0; i< LoopCount; ++i)
#define __for1(IntType, i, LoopCount) for(IntType i=1; i<=LoopCount; ++i)
#define __forD0(i, LoopCount) for(i=0; i< LoopCount; ++i) // 정수형 선언이 미리 있는 경우. D 는 Declare.
#define __forD1(i, LoopCount) for(i=1; i<=LoopCount; ++i)
2021-02-25 16:23:13 +09:00
namespace ZNsMain
{
typedef int ZTypInt ;
typedef int ZTypIntE ; // int enum : 다른 enum 형끼리 비교할 일이 있을 때, 이 자료로 형변환한다.
2021-02-25 17:45:17 +09:00
typedef int ZTypIntEnum ;
2021-02-25 16:23:13 +09:00
typedef long ZTypIntLong ;
typedef short ZTypIntShort;
typedef int ZTypIntI ; // 정수를 가장 잘 대표할 수 있는 자료형. 필요에 따라 long 이나 short 으로 typedef 할 수도 있다.
typedef long ZTypIntL ;
typedef short ZTypIntS ;
2021-02-25 17:49:30 +09:00
typedef long ZTypLong ;
typedef short ZTypShort ;
2021-02-25 16:23:13 +09:00
typedef int8_t ZTypInt8 ;
typedef int16_t ZTypInt16 ;
typedef int32_t ZTypInt32 ;
typedef int64_t ZTypInt64 ;
typedef uint8_t ZTypUInt8 ;
typedef uint16_t ZTypUInt16 ;
typedef uint32_t ZTypUInt32 ;
typedef uint64_t ZTypUInt64 ;
typedef uint8_t ZTypIntU8 ;
typedef uint16_t ZTypIntU16 ;
typedef uint32_t ZTypIntU32 ;
typedef uint64_t ZTypIntU64 ;
#if defined(UNICODE) || defined(_UNICODE)
typedef wchar_t ZTypXCHAR ;
typedef wchar_t ZTypXChar ;
typedef wchar_t* ZTypXPChar ;
typedef const wchar_t* ZTypXCPChar ;
#else
typedef char ZTypXCHAR ;
typedef char ZTypXChar ;
typedef char* ZTypXPChar ;
typedef const char* ZTypXCPChar ;
#endif
typedef char ZTypChar ;
typedef wchar_t ZTypCharW ;
typedef const char ZTypCChar ;
typedef const wchar_t ZTypCCharW ;
typedef char* ZTypPChar ;
typedef const char* ZTypCPChar ;
typedef char* const ZTypPCChar ;
typedef const char* const ZTypCPCChar ;
typedef char* ZTypPCh ;
typedef const char* ZTypCPCh ;
typedef char* const ZTypPCCh ;
typedef const char* const ZTypCPCCh ;
typedef wchar_t* ZTypPWChar ;
typedef const wchar_t* ZTypCPWChar ;
typedef wchar_t* const ZTypPWCChar ;
typedef const wchar_t* const ZTypCPCWChar;
typedef wchar_t* ZTypPWCh ;
typedef const wchar_t* ZTypCPWCh ;
typedef wchar_t* const ZTypPWCCh ;
typedef const wchar_t* const ZTypCPCWCh ;
typedef unsigned char ZTypUChar ;
#if(0)
2021-02-25 17:11:44 +09:00
typedef unsigned wchar_t ZTypUWCha ;
2021-02-25 16:23:13 +09:00
/* VC++ 2012 에서는 여기서 4076 번 경고가 발생한다.
warning C4076: 'unsigned' : can not be used with type 'wchar_t'
Linux g++ 4.4.7 unsigned wchar_t .
*/
#endif
typedef unsigned int ZTypUInt ;
typedef unsigned short ZTypUShort ;
typedef unsigned long ZTypULong ;
2021-02-25 16:23:13 +09:00
typedef unsigned char ZTypIntUChar ;
typedef unsigned int ZTypIntUInt ;
typedef unsigned short ZTypIntUShort ;
typedef unsigned long ZTypIntULong ;
2021-02-25 16:23:13 +09:00
typedef unsigned char ZTypIntUC ;
typedef unsigned int ZTypIntUI ;
typedef unsigned short ZTypIntUS ;
typedef unsigned long ZTypIntUL ;
2021-02-25 16:23:13 +09:00
#if(defined(__CPU_BIT_CNT__) && __CPU_BIT_CNT__>=64)
#ifdef _WIN
typedef __int64 ZTypLength ; // 문자열의 길이를 나타내는 자료형.
2021-02-25 17:34:50 +09:00
// 송수신 버퍼의 크기 자료형으로도 쓰인다.
typedef unsigned __int64 ZTypULen ;
typedef unsigned __int64 ZTypULength ;
2021-02-25 16:23:13 +09:00
#else
typedef long ZTypLength ;
typedef unsigned long ZTypULen ;
typedef unsigned long ZTypULength ;
2021-02-25 16:23:13 +09:00
#endif
#else // !defined(__CPU_BIT_CNT__) || __CPU_BIT_CNT__<64
typedef long ZTypLength ;
typedef unsigned long ZTypULen ;
typedef unsigned long ZTypULength ;
2021-02-25 16:23:13 +09:00
#endif // !defined(__CPU_BIT_CNT__) || __CPU_BIT_CNT__<64
#ifdef _WIN
typedef __int64 ZTypLengthFile ; // 파일의 크기를 나타내는 자료형.
2021-02-25 16:23:13 +09:00
#else
typedef long ZTypLengthFile ; // 파일의 크기를 나타내는 자료형.
2021-02-25 16:23:13 +09:00
#endif
typedef ZTypLengthFile ZTypLengthF ;
2021-02-25 16:23:13 +09:00
2021-02-25 17:11:44 +09:00
#ifdef _WIN
typedef __int64 ZTypLongLong ;
typedef unsigned __int64 ZTypULongLong ;
2021-02-25 16:23:13 +09:00
typedef __int64 ZTypIntLLong ;
typedef unsigned __int64 ZTypIntULLong ;
2021-02-25 17:11:44 +09:00
#else
typedef long long ZTypLongLong ;
typedef unsigned long long ZTypULongLong ;
2021-02-25 16:23:13 +09:00
typedef long long ZTypIntLLong ;
typedef unsigned long long ZTypIntULLong ;
2021-02-25 17:11:44 +09:00
#endif
2021-02-25 16:23:13 +09:00
typedef ZTypLongLong ZTypLLong ;
typedef ZTypULongLong ZTypULLong ;
2021-02-25 16:23:13 +09:00
typedef ZTypLongLong ZTypIntLL ;
typedef ZTypULongLong ZTypIntULL ;
2021-02-25 16:23:13 +09:00
#ifdef _WIN64
typedef __int64 ZTypIntPtr ; // 포인터를 표현하는 정수 크기다.
typedef unsigned __int64 ZTypIntUPtr ; // 포인터를 표현하는 양의 정수 크기다.
2021-02-25 16:23:13 +09:00
#else
typedef long ZTypIntPtr ;
typedef unsigned long ZTypIntUPtr ;
2021-02-25 16:23:13 +09:00
#endif
typedef const int ZTycInt ;
typedef const int ZTycIntI ;
typedef const long ZTycLong ;
typedef const long ZTycIntL ;
typedef const short ZTycShort ;
typedef const short ZTycIntS ;
typedef const char ZTycChar ;
typedef const wchar_t ZTycCharW ;
typedef const ZTypLLong ZTycLLong ;
typedef const ZTypULLong ZTycULLong ;
typedef const ZTypIntLL ZTycIntLL ;
typedef const ZTypIntULL ZTycIntULL ;
typedef const ZTypIntPtr ZTycIntPtr ;
typedef const ZTypIntUPtr ZTycIntUPtr;
typedef const char ZTycChar ;
typedef const wchar_t ZTycWChar ;
typedef const char* ZTycPChar ;
typedef const wchar_t* ZTycPWChar ;
2021-02-25 16:23:13 +09:00
#ifdef _WIN32
typedef HANDLE ZTypeID;
#else
typedef int ZTypeID;
#endif
2021-03-04 18:02:17 +09:00
typedef class ZCIterEasy{} IterEasy, *IterEasyID ;
typedef const IterEasyID IterEasyIDc;
2021-02-25 16:23:13 +09:00
/*///////////////////////////////////////////////////////////////////////////////
typedef class CIterEasy{} *IterEasyID
CObjList<> .
, typedef typename std::CObjList<>::IterEasy IterEasy
.
-- 2013-06-02 08:44:00
CObjList.H , CHttp.H CHttp2.H ZCLink
IterEasyID ,
, .
-- 2013-06-02 12:13:00
CStringEx.H . -- 2013-06-02 09:59:00
IterEasyIDc
typedef const IterEasyID IterEasyIDc;
, IterEasyIDc type
typeid(IterEasyIDc).name()
IterEasyID name() .
2021-02-25 16:23:13 +09:00
-- 2015-11-07 21:34:00
///////////////////////////////////////////////////////////////////////////////*/
class ZCEndian
{
private:
static const unsigned int SUI_Int ;
static const unsigned char* const SPC_Char;
public :
static const bool SB_IsBig ;
static const bool SB_IsLittle ;
public :
};/*
class ZCEndian*/
const unsigned int ZCEndian::SUI_Int = 1 ;
const unsigned char* const ZCEndian::SPC_Char =
reinterpret_cast<const unsigned char*>(&ZCEndian::SUI_Int) ;
const bool ZCEndian::SB_IsBig = (int(ZCEndian::SPC_Char[0]) ==1 ) ;
const bool ZCEndian::SB_IsLittle = (int(ZCEndian::SPC_Char[0]) !=1 ) ;
2021-02-25 16:23:13 +09:00
class ZCEmpty
{
/*///////////////////////////////////////////////////////////////////////////
릿 .
릿 릿
, type ,
릿 ,
ZCEmpty .
-- 2010-05-04 02:29:00
, 릿 void . ,
, 0
. void , void 릿
.
-- 2012-09-01 17:26:00
///////////////////////////////////////////////////////////////////////////*/
};/*
class ZCEmpty*/
namespace ZNsIFace
{
// 이 이름 공간안에 interface 가 되는 class (템플릿) 가 온다.
2021-02-25 16:23:13 +09:00
}/*
namespace ZNsIFace*/
namespace ZNsIFaceEx
{
// ZNsIFace 에는 주로 interface 가 있다면,
// ZNsIFaceEx 에는 실제로 동작하는 코드가 온다.
// 따라서 여기에 오는 클래스는 주로 ZNsIFace 에 이미 있는 것이다.
// 다만, ZNsIFace 의 클래스는 주로 ZI 로 시작한다면
// ZNsIFaceEx 의 클래스는 주로 ZC 로 시작한다.
// -- 2025-09-13 01:06
}/*
namespace ZNsIFaceEx*/
2021-02-25 16:23:13 +09:00
namespace ZNsEnum
{
// ECompareResult 는 어떤 두 개의 값을 비교한 결과를 표시한다.
// ZftGetCompareCode() 나 class ZtCCompare<> 에서 사용할 것이다.
2021-02-25 16:23:13 +09:00
2021-03-04 15:36:45 +09:00
enum ZECompareResult
2021-02-25 16:23:13 +09:00
{
2021-03-04 15:36:45 +09:00
ZECompareResult_Equal= 0, // 서로 같다.
ZECompareResult_More = 1, // 왼쪽이 크다.
ZECompareResult_Less =-1 // 오른쪽이 크다.
2021-02-25 16:23:13 +09:00
};/*
2021-03-04 15:36:45 +09:00
enum ZECompareResult*/
2021-02-25 16:23:13 +09:00
}/*
namespace ZNsEnum*/
template<typename ZtpChar, typename ZtpiLength> ZTypIntE ZftGetCompareCode
(
const ZtpChar* ZApcLeft , ZtpiLength ZAiLenLeft ,
const ZtpChar* ZApcRight, ZtpiLength zAiLenRight
)
2021-03-24 10:37:45 +09:00
/*######################################################################*/
2021-02-25 16:23:13 +09:00
{
if(ZAiLenLeft<1 && zAiLenRight<1)
return ZNsEnum::ZECompareResult_Equal;
2021-02-25 16:23:13 +09:00
ZtpiLength ViLoopCnt =
(ZAiLenLeft<=zAiLenRight ? ZAiLenLeft : zAiLenRight);
2021-02-25 16:23:13 +09:00
__for0(ZtpiLength, i, ViLoopCnt)
2021-02-25 16:23:13 +09:00
{
if(ZApcLeft[i] > ZApcRight[i]) return ZNsEnum::ZECompareResult_More;
if(ZApcLeft[i] < ZApcRight[i]) return ZNsEnum::ZECompareResult_Less;
2021-02-25 16:23:13 +09:00
}/*
__for0(ZtpiLength, i, ViLoopCnt)*/
2021-02-25 16:23:13 +09:00
if(ZAiLenLeft==zAiLenRight) return ZNsEnum::ZECompareResult_Equal;
if(ZAiLenLeft> zAiLenRight) return ZNsEnum::ZECompareResult_More ;
if(ZAiLenLeft< zAiLenRight) return ZNsEnum::ZECompareResult_Less ;
2021-02-25 16:23:13 +09:00
2021-03-04 15:36:45 +09:00
return ZNsEnum::ZECompareResult_Equal;
2021-02-25 16:23:13 +09:00
}/*
template<typename ZtpChar, typename ZtpiLength> ZTypIntE ZftGetCompareCode
(
const ZtpChar* ZApcLeft , ZtpiLength ZAiLenLeft ,
const ZtpChar* ZApcRight, ZtpiLength zAiLenRight
)
/*######################################################################*/
2021-03-24 10:37:45 +09:00
/* 어떤 변수를 강제적으로 참조로 인식하게 하는 클래스. 인수를 참조로
. class ZtCCheckRef .
-- 2021-04-10 16:15
*/
template<typename TTypType> class ZtCRef
2021-03-24 10:37:45 +09:00
{
public :
typedef TTypType& TypeData ;
typedef TTypType& TypeRef ;
typedef TTypType TypeRaw ;
typedef TTypType TypeConst;
2021-03-24 10:37:45 +09:00
private:
TypeData mr_Data;
public :
ZtCRef(TypeData AR_TypeData) : mr_Data(AR_TypeData){}
2021-03-24 10:37:45 +09:00
public :
TypeData GetData(){return mr_Data;}
public :
2021-03-24 10:37:45 +09:00
};/*
template<typename TTypType> class ZtCRef*/
template<typename TTypType> class ZtCRef<TTypType&>
{
public :
typedef TTypType& TypeData ;
typedef TTypType& TypeRef ;
typedef TTypType TypeRaw ;
typedef const TTypType& TypeConst;
private:
TypeRaw& mr_Data;
public :
ZtCRef(TypeRef AR_TypeData) : mr_Data(AR_TypeData){}
public :
TypeRef GetData(){return mr_Data;}
public :
};/*
template<typename TTypType> class ZtCRef<TTypType&>*/
template<typename TTypType> class ZtCRef<const TTypType&>
{
public :
typedef const TTypType& TypeData ;
typedef const TTypType& TypeRef ;
typedef const TTypType TypeRaw ;
typedef const TTypType& TypeConst;
private:
TypeRaw& mr_Data;
public :
ZtCRef(TypeRef AR_TypeData) : mr_Data(AR_TypeData){}
public :
TypeRef GetData(){return mr_Data;}
public :
};/*
template<typename TTypType> class ZtCRef<const TTypType&>*/
template<typename TTypType> inline ZtCRef<TTypType>
ZftMakeCRef(TTypType& AR_TypeData){ return ZtCRef<TTypType> (AR_TypeData );}
template<typename TTypType> inline ZtCRef<TTypType>*
ZftMakeCPtr(TTypType& AR_TypeData){ return (ZtCRef<TTypType>*)(&AR_TypeData);}
/*////////////////////////////////////////////////////////////////////////////////
ZftMakeCPtr() AR_TypeData ZtCRef<TTypType>* .
template<typename TType> class ZtCCheckRef< ZtCRef<TType>* >
.
-- 2025-08-07 17:16
ZCppMain/ZtCArray.H IterElement() .
ZftMCR() ZftMCP() . -- 2025-08-07 17:41
////////////////////////////////////////////////////////////////////////////////*/
template<typename TTypType> inline ZtCRef<TTypType>
ZftMCR(TTypType& AR_TypeData){ return ZtCRef<TTypType> (AR_TypeData );}
template<typename TTypType> inline ZtCRef<TTypType>*
ZftMCP(TTypType& AR_TypeData){ return (ZtCRef<TTypType>*)(&AR_TypeData);}
2021-03-24 10:37:45 +09:00
/* template 인수에 ZtCRef 가 있으면, 해당 값을 참조로 인식하고
, .
ZtCArray.H .
-- 2021-04-10 16:15
*/
template<typename TType>
class ZtCCheckRef /*###############################################*/
2021-03-24 10:37:45 +09:00
{
public :
typedef TType TypeData;
typedef TType TypeRaw ;
private:
TypeData mr_Data;
public :
ZtCCheckRef(TypeData AR_TypeData) : mr_Data(AR_TypeData){}
public :
TypeData GetData(){return mr_Data;}
public :
static TypeData PassData(TypeData AO_Data){return AO_Data;}
};/*
template<typename TType>
class ZtCCheckRef #################################################*/
2021-03-24 10:37:45 +09:00
2021-03-24 10:37:45 +09:00
/* ZtCRef 전문화 */
template<typename TType>
class ZtCCheckRef< ZtCRef<TType> > /*##############################*/
2021-03-24 10:37:45 +09:00
{
public :
typedef TType& TypeData;
typedef TType TypeRaw ;
typedef ZtCRef<TType> ZCRef ;
private:
TypeData mr_Data;
public :
ZtCCheckRef(TypeData AR_TypeData) : mr_Data(AR_TypeData){}
public :
TypeData GetData(){return mr_Data;}
public :
static TypeData PassData(TypeData AO_Data){return AO_Data;}
static TypeData PassData(ZCRef& AO_Data){return AO_Data.GetData();}
};/*
template<typename TType>
class ZtCCheckRef< ZtCRef<TType> > ################################*/
2021-02-25 16:23:13 +09:00
/*///////////////////////////////////////////////////////////////////////
ZtCRef*
template<typename TTypType> inline
ZtCRef<TTypType>* ZftMakeCPtr(TTypType& AR_TypeData)
{ return (ZtCRef<TTypType>*)(&AR_TypeData); }
, , PassData()
TypeRaw* . ZtCRef<TTypType>
TypeRaw .
-- 2025-08-07 17:19
///////////////////////////////////////////////////////////////////////*/
template<typename TType>
class ZtCCheckRef< ZtCRef<TType>* > /*#############################*/
{
public :
typedef TType& TypeData;
typedef TType TypeRaw ;
typedef ZtCRef<TType> ZCRef ;
private:
TypeData mr_Data;
public :
ZtCCheckRef(TypeData AR_TypeData) : mr_Data(AR_TypeData){}
public :
TypeData GetData(){return mr_Data;}
public :
static TypeData PassData(TypeData AO_Data){return AO_Data;}
static TypeData PassData(ZCRef& AO_Data){return AO_Data.GetData();}
static TypeData PassData(ZCRef* AP_CRef)
{ return *reinterpret_cast<TypeRaw*>(AP_CRef); }
};/*
template<typename TType>
class ZtCCheckRef< ZtCRef<TType>* > ###############################*/
template<typename TType> class ZtCCheckConstRef
{
public: enum {ZEConstRef = 0};
};/*
template<typename TType> class ZtCCheckConstRef*/
template<typename TType> class ZtCCheckConstRef<const TType&>
{
public: enum {ZEConstRef = 1};
};/*
template<typename TType> class ZtCCheckConstRef<const TType&>*/
2021-02-25 16:23:13 +09:00
namespace ZNsType
{
/*/////////////////////////////////////////////////////////////////////////////////////////
( ) 릿 typename 10 릿
릿 typename 릿 typename
. typedef ZtCType .
2021-02-25 17:11:44 +09:00
ZtCTypeCRTP<> 릿 CRTP(CURIOUSLY RECURRING TEMPLATE PATTERN)
. ZtCTypeCRTP<> , ,
2021-02-25 16:23:13 +09:00
2 (CRTP , ) .
-- 2010-03-12 20:00:00
class ZtCTypeCRTP ,
class ZtCTypeCRTP2 .
2021-03-25 16:05:16 +09:00
2021-03-25 16:41:48 +09:00
, ZtCTypeCRTP
. CDerive0 , ,
CDerive0::ZtCTypeCRTP::TypeData
. .
2021-03-25 16:05:16 +09:00
-- 2021-03-25 16:01
2021-02-25 17:11:44 +09:00
TypeData .
2021-02-25 16:23:13 +09:00
-- 2011-10-18 21:51:00
/////////////////////////////////////////////////////////////////////////////////////////*/
/*#########################################################################################
2 template parameter bool TTypebUseCRTP , TTypeChild
, TTypebUseCRTP true , DEBUG TTypebUseCRTP
false .
-- 2025-09-28 08:41
#########################################################################################*/
2021-02-25 16:23:13 +09:00
template< typename TTypeChild=ZCEmpty, bool TTypebUseCRTP =false
>
2021-02-25 17:11:44 +09:00
class ZtCTypeCRTP ////////////////////////////////////////////////
2021-02-25 16:23:13 +09:00
{
public:
typedef TTypeChild TypeData;
public:
2021-03-04 15:36:45 +09:00
enum{ZEUseCRTP=(ZTypIntE)TTypebUseCRTP};
2021-02-25 16:23:13 +09:00
public:
};/*
template< typename TTypeChild=ZCEmpty, bool TTypebUseCRTP =false
>
2021-02-25 17:11:44 +09:00
class ZtCTypeCRTP //////////////////////////////////////////////*/
2021-02-25 16:23:13 +09:00
#if(_CODE_OLD_)
/*#########################################################################################
ZtCTypeCRTP2 ZtCTypeNowCRTP . -- 2025-09-28 09:25
ZtCBaseList ZtCTypeCRTP ZtCTypeNowCRTP .
#########################################################################################*/
template< typename TTypeChild = ZCEmpty , ////////////////////
typename TTypeBase = ZCEmpty ,
bool TTypebUseCRTP= false
2021-02-25 16:23:13 +09:00
>
class ZtCTypeCRTP2 ///////////////////////////////////////////////
2021-02-25 16:23:13 +09:00
{
public:
typedef TTypeChild TypeData;
typedef TTypeBase TypeBase;
public:
2021-03-04 15:36:45 +09:00
enum{ZEUseCRTP=(ZTypIntE)TTypebUseCRTP};
2021-02-25 16:23:13 +09:00
public:
}; /*
template< typename TTypeChild = ZCEmpty , ////////////////////
typename TTypeBase = ZCEmpty ,
bool TTypebUseCRTP= false
2021-02-25 16:23:13 +09:00
>
class ZtCTypeCRTP2 /////////////////////////////////////////////*/
#endif //_CODE_OLD_
2021-02-25 16:23:13 +09:00
/*//////////////////////////////////////////////////////////////////////////////////////////
2021-03-25 16:05:16 +09:00
class ZtCTypeCRTP2<> , CWorkPool.H
2021-02-25 16:23:13 +09:00
'-CCtrlAllocWork::CRTP2' .
-- 2012-09-20 09:46:00
. -- 2025-09-28 02:41
template< typename TWork ,
typename TWorkExec , // 작업(TWork)에 대하여 어떤 처리를 하는 클래스
typename TWorkArg =const TWork& ,
typename TBarrier =std::CBarrier_T<> , // 작업 쓰레드의 시작 및 종료 대기 barrier
typename TSyncWait =std::CThreadSemaphore,
typename TSyncExec =std::CDefLockEasy ,
typename TWorkList =NsCPP::CObjList<TWork,TWorkArg> , // 작업 큐 컨테이너
typename TTypeBase =NsIFace::CAllocWork_BASE_T<TWork>,
typename TFetchWork=TWorkList , // 작업 큐에서 작업을 가져오는 컨테이너.
typename TTypeCRTP =std::NsType::CTypeCRTP2_T< NsIFace::ICtrlAllocWork, NsIFace::ICtrlAllocWork >
>
class CTypeCtrlAllocWork_T //////////////////////////////////////////////////////////////////////////////////
{
public:
class CThread ;
class CBaseClass;
typedef TWork CWork ;
typedef TWorkArg CWorkArg ;
typedef TWorkExec CWorkExec ;
typedef TBarrier CBarrier ;
typedef TSyncWait CSyncWait ;
typedef TSyncExec CSyncExec ;
typedef TWorkList CWorkList ;
typedef TFetchWork CFetchWork;
typedef TTypeCRTP CTypeCRTP ;
typedef typename TWorkList::TypeAlloc CAlloc ;
typedef std::CAutoKey_T<CSyncExec> CAutoKey ;
typedef NsCPP::CObjList
<
CThread ,
const CThread&,
CAlloc
> CThreadList;
typedef typename CThreadList::CLink CThreadLink;
#define _CAllocWork_BASE_ std::CAllocWork_T< \
CWork , \
CWorkArg , \
CSyncWait , \
CSyncExec , \
CWorkList , \
CThread , \
CBaseClass , \
std::NsType::CTypeCRTP_T<CAllocWork, true> >
class CAllocWork : public _CAllocWork_BASE_
{
// some code
}
};
template<typename TTypeCtrlAllocWork>
class CCtrlAllocWork_T : protected TTypeCtrlAllocWork::CSyncKey ,
protected TTypeCtrlAllocWork::CAllocWork,
protected TTypeCtrlAllocWork::CTypeCRTP::TypeBase
{
public :
enum{EMaxThreadCnt=1}; typedef NsEnum::EThreadPoolStep EPoolStep;
public :
typedef typename TTypeCtrlAllocWork::CWork CWork ;
typedef typename TTypeCtrlAllocWork::CWorkArg CWorkArg ;
typedef typename TTypeCtrlAllocWork::CWorkExec CWorkExec ;
typedef typename TTypeCtrlAllocWork::CThread CThread ;
typedef typename TTypeCtrlAllocWork::CSyncKey CSyncKey ;
typedef typename TTypeCtrlAllocWork::CSyncExec CSyncExec ;
typedef typename TTypeCtrlAllocWork::CAutoKey CAutoKey ;
typedef typename TTypeCtrlAllocWork::CAllocWork CAllocWork ;
typedef typename TTypeCtrlAllocWork::CBaseClass CBaseClass ;
typedef typename TTypeCtrlAllocWork::CWorkList CWorkList ;
typedef typename TTypeCtrlAllocWork::CFetchWork CFetchWork ;
typedef typename TTypeCtrlAllocWork::CThreadList CThreadList;
typedef typename TTypeCtrlAllocWork::CThreadLink CThreadLink;
typedef typename TTypeCtrlAllocWork::CTypeCRTP CTypeCRTP ;
// some code
void SetCloseMark(CWork& ARR_CWork)
{
if(CTypeCRTP::EUseCRTP>0)
{
typedef typename CTypeCRTP::TypeData CCtrlAllocWorkEx;
#if(_CODE_NEW_)
static_cast<CCtrlAllocWorkEx&>(*this). // 코드-CCtrlAllocWork::CRTP2
SetCloseMarkInChild(RR(ARR_CWork)); return;
#else
((CCtrlAllocWorkEx&)(*this)). // 코드-CCtrlAllocWork::CRTP
SetCloseMarkInChild(RR(ARR_CWork)); return;
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////
-CCtrlAllocWork::CRTP2
SetCloseMarkInChild() '-CCtrlAllocWork::CRTP'
, std::NsType::CTypeCRTP2_T<> , NsT
ype::CTypeCtrlAllocWork_T<> 릿 typename TTypeCRTP , '-CCtrlAll
ocWork::CRTP2' . class CCtrlAllocWork_T<>
TTypeCtrlAllocWork::CTypeCRTP::TypeBase
. TypeBase SetCloseMarkInChild(CWork&) .
-- 2012-09-20 09:43:00
NsType::CTypeCRTP2_T<> NsType::CTypeCRTP_T<> TypeBase .
-- 2012-09-20 09:57:00
//////////////////////////////////////////////////////////////////////////////////////////////////
}
CWorkExec::SetCloseMark(RR(ARR_CWork));
}
//void SetCloseMark(CWork& ARR_CWork)
// some code
}
typedef typename CTypeCRTP::TypeData CCtrlAllocWorkEx;
CCtrlAllocWork_T , .
CTypeCRTP::TypeData NsIFace::ICtrlAllocWork .
.
-- 2025-09-28 07-27
2021-02-25 16:23:13 +09:00
//////////////////////////////////////////////////////////////////////////////////////////*/
/*#########################################################################################
2021-02-25 16:23:13 +09:00
2021-03-25 16:50:23 +09:00
class ZtCTypeCRTP<> class ,
2021-02-25 16:23:13 +09:00
class ZtCTypeNowCRTP<>
2021-03-25 16:05:16 +09:00
. CCtrlAsyncSock.H .
-- (2025-08-02 22:37) CCtrlAsyncSock.H .
2021-03-25 16:05:16 +09:00
TAsyncServ
, CMainServ TAsyncServ ,
, CMainServ0
2021-03-25 16:50:23 +09:00
.
2021-02-25 16:23:13 +09:00
typedef typename TAsyncServ::ZtCTypeCRTP ZtCTypeCRTP ;
typedef typename ZtCTypeCRTP ::TypeData CMainServ0 ;
2021-02-25 16:23:13 +09:00
typedef std::ZNsType::ZtCTypeNowCRTP<
TAsyncServ, CMainServ0>::TypeData CMainServ ;
CMainServ& VR_CMainServ=
static_cast<CMainServ&>(ArCAsyncServ);
ZtCTypeNowCRTP<> TAsyncServ , CMainServ0 ZCEmpty ,
.
.
. C++ . -- 2013-06-10 00:33:00
ZtCTypeNowCRTP template parameter bool TTypebUseCRTP . -- 2025-09-28 15:55
2021-02-25 16:23:13 +09:00
TTypeChild ZCEmpty TTypebUseCRTP false , .
public: enum{ZEUseCRTP=0};
public: typedef TTypeNow TypeData;
public: typedef TTypeNow TypeBase;
TTypeChild ZCEmpty TTypebUseCRTP false .
class ZtCTypeNowCRTP<TTypeNow, ZCEmpty, false>
3 template parameter bool TTypebUseCRTP , TTypeChild
, TTypebUseCRTP true , DEBUG TTypebUseCRTP
false .
ZtCTypeCRTP ,
. CRTP
, ZtCTypeNowCRTP .
ZtCBaseList .
-- 2025-09-28 16:13
#########################################################################################*/
template
<typename TTypeNow, typename TTypeChild, bool TTypebUseCRTP>
class ZtCTypeNowCRTP
{
public: enum{ZEUseCRTP=(ZTypIntE)TTypebUseCRTP};
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
public: typedef TTypeChild TypeData;
public: typedef TTypeNow TypeBase;
};
template
<typename TTypeNow, typename TTypeChild>
class ZtCTypeNowCRTP<TTypeNow, TTypeChild, false /*++*/ >
{
public: enum{ZEUseCRTP=0};
public: typedef TTypeNow TypeData;
public: typedef TTypeNow TypeBase;
};
template
<typename TTypeNow, bool TTypebUseCRTP>
class ZtCTypeNowCRTP<TTypeNow, ZCEmpty , TTypebUseCRTP>
{
public: enum{ZEUseCRTP=0};
public: typedef TTypeNow TypeData;
public: typedef TTypeNow TypeBase;
};
template
<typename TTypeNow>
class ZtCTypeNowCRTP<TTypeNow, ZCEmpty , false /*++*/ >
{
public: enum{ZEUseCRTP=0};
public: typedef TTypeNow TypeData;
public: typedef TTypeNow TypeBase;
};
/////////////////////////////////////////////////////////
2021-02-25 16:23:13 +09:00
2021-03-24 10:37:45 +09:00
2021-02-25 16:23:13 +09:00
namespace ZNsTmplParam
{
/*//////////////////////////////////////////////////////////////////////////
릿 ,
,
, ,
template .
CParam~ .
ZNsTmplParam ZNsType .
.
//////////////////////////////////////////////////////////////////////////*/
}/*
namespace ZNsTmplParam*/
}/*
namespace ZNsType*/
/*//////////////////////////////////////////////////////////////
릿 릿 parameter
,
. ZtCTypeData<> .
cf)
cout<<typeid(std::ZtCTypeData<ZTypIntI >::TypeData).name()<<endl;
cout<<typeid(std::ZtCTypeData<ZTypIntI*>::TypeData).name()<<endl;
cout<<typeid(std::ZtCTypeData<ZTypIntI&>::TypeData).name()<<endl;
-- 2010-01-15 00:11:00
ZtCTypeData<>::GetObjRef(~)
, ,
.
, .
() 릿 . -- 2025-09-28 22:08
--
//////////////////////////////////////////////////////////////*/
typedef void (*ZfpNone)(void*); void ZfNone(void* AP_Void=0){};
template<typename TType> class ZtCTypeData
{ public: typedef TType TypeData;
static TType& GetObjRef(TType& AR_Type){return AR_Type ;}};
template<typename TType> class ZtCTypeData<TType*>
{ public: typedef TType TypeData;
static TType& GetObjRef(TType* AP_Type){return *AP_Type;}};
template<typename TType> class ZtCTypeData<TType&>
{ public: typedef TType TypeData;
static TType& GetObjRef(TType& AR_Type){return AR_Type ;}};
template< /*########*/ > class ZtCTypeData<void* >
{ public: typedef ZfpNone TypeData;
static ZfpNone GetObjRef(void* AP_Void){return ZfNone ;}};
template<typename TType> class ZtCTypeData< ZtCRef<TType> >
{ public: typedef TType TypeData; static TType&
GetObjRef(ZtCRef<TType>& AR_CRef)
{return AR_CRef.GetData() /*//////////////*/ ;}
};
template<typename TType> class ZtCTypeData< ZtCRef<TType>* >
{ public: typedef TType TypeData; static TType&
GetObjRef(ZtCRef<TType>* AP_CRef)
{return *reinterpret_cast<TypeData*>(AP_CRef);}
};
template<typename TType> class ZtCTD
{ public: typedef TType TypeData;
static TType& GetObjRef(TType& AR_Type){return AR_Type ;}
static TType& GOR (TType& AR_Type){return AR_Type ;}};
template<typename TType> class ZtCTD<TType*>
{ public: typedef TType TypeData;
static TType& GetObjRef(TType* AP_Type){return *AP_Type;}
static TType& GOR (TType* AP_Type){return *AP_Type;}};
template<typename TType> class ZtCTD<TType&>
{ public: typedef TType TypeData;
static TType& GetObjRef(TType& AR_Type){return AR_Type ;}
static TType& GOR (TType& AR_Type){return AR_Type ;}};
template< /*########*/ > class ZtCTD<void* >
{ public: typedef ZfpNone TypeData;
static ZfpNone GetObjRef(void* AP_Void){return ZfNone ;}
static ZfpNone GOR (void* AP_Void){return ZfNone ;}};
template<typename TType> class ZtCTD< ZtCRef<TType> >
{ public: typedef TType TypeData;
static TType& GetObjRef(ZtCRef<TType>& AR_CRef){return AR_CRef.GetData() ;}
static TType& GOR (ZtCRef<TType>& AR_CRef){return AR_CRef.GetData() ;}
};
template<typename TType> class ZtCTD< ZtCRef<TType>* >
{ public: typedef TType TypeData;
static TType& GetObjRef(ZtCRef<TType>* AP_CRef)
{return *reinterpret_cast<TypeData*>(AP_CRef);}
static TType& GOR (ZtCRef<TType>* AP_CRef)
{return *reinterpret_cast<TypeData*>(AP_CRef);}
};
/*/////////////////////////////////////////////////////////////////////////////////////////////
2021-02-25 16:23:13 +09:00
template Type11 . Type10 .
-- 2015-02-16 21:20:00
2021-03-04 16:27:38 +09:00
, template 2 .
typedef ZtStTuple<int> CTupleInt1 .
typedef ZtStTuple<int, int> CTupleInt2 .
ZtStTuple<int> . -- 2021-03-04 16:27
template Type13 . Type12 . -- 2025-09-07 12:55
ZtStTuple<int> . ZftMakeTuple() . - -2025-09-05 21:01
RVO(Return Value Optimization) . -- 2025-09-06 21:23
int VariMy=0; ZtStTuple<int&> myt1 = ZftMakeTuple(ZftMCP(VariMy));
std::tuple<> -1 -- 2025-09-07 12:08
#include <tuple>
#include <iostream>
int main() {
int nownum=42;
// Creating a tuple
std::tuple<int&, std::string, double> myTuple(nownum, "Hello", 3.14);
// Accessing elements
std::cout << std::get<0>(myTuple) << "\n"; // Outputs: 42
std::cout << std::get<1>(myTuple) << "\n"; // Outputs: Hello
std::cout << std::get<2>(myTuple) << "\n"; // Outputs: 3.14
// Modifying elements
std::get<1>(myTuple) = "World";
std::cout << std::get<1>(myTuple) << "\n"; // Outputs: World
return 0;
}
std::tuple<> -2 -- 2025-09-07 12:09
#include <tuple>
#include <iostream>
std::tuple<int, double, std::string> getValues() {
return {42, 3.14, "Hello"};
}
int main() {
auto [x, y, z] = getValues(); // Structured binding (C++17)
std::cout << x << ", " << y << ", " << z << "\n"; // Outputs: 42, 3.14, Hello
return 0;
}
std::tuple<> -3 -- 2025-09-07 12:11
#include <iostream>
#include <tuple>
#include <string>
int main() {
// 기본 생성 및 값 할당
std::tuple<std::string, int, double> tpl;
std::get<0>(tpl) = "Example";
std::get<1>(tpl) = 42 ;
std::get<2>(tpl) = 3.14 ;
// make_tuple을 사용한 초기화
auto tpl2 = std::make_tuple("Hello", 100, 1.23);
// 구조적 바인딩 (C++17 이상)
auto [str, num, val] = tpl2;
std::cout << "Tuple 1: " << std::get<0>(tpl) << ", " << std::get<1>(tpl) << ", " << std::get<2>(tpl) << '\n';
std::cout << "Tuple 2: " << str << ", " << num << ", " << val << '\n';
return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////*/
2021-02-25 16:23:13 +09:00
template< typename Type1 =void*, typename Type2 =void*,
typename Type3 =void*, typename Type4 =void*,
typename Type5 =void*, typename Type6 =void*,
typename Type7 =void*, typename Type8 =void*,
typename Type9 =void*, typename Type10=void*,
typename Type11=void*, typename Type12=void*,
typename Type13=void*
2021-02-25 16:23:13 +09:00
>
struct ZtStTuple //////////////////////////////////////////////////////////////////////////////
2021-02-25 16:23:13 +09:00
{
ZtStTuple(){}
};
/*###########################################################################################*/
template<typename Type1> struct ZtStTuple<Type1>
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
2021-02-25 16:23:13 +09:00
TypeData1 _1;
ZtStTuple<Type1>(){}
ZtStTuple<Type1>(Type1 _T1) :
_1(CCheckRef1::PassData(_T1))
{}
};
/*###########################################################################################*/
template
< typename Type1, typename Type2 >
struct ZtStTuple<Type1, Type2>
2021-02-25 16:23:13 +09:00
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
2021-03-24 10:37:45 +09:00
TypeData1 _1; TypeData2 _2;
2021-03-04 16:14:44 +09:00
2021-02-25 16:23:13 +09:00
ZtStTuple<Type1, Type2>(){}
ZtStTuple<Type1, Type2>(Type1 _T1, Type2 _T2) :
_1(CCheckRef1::PassData(_T1)),
_2(CCheckRef2::PassData(_T2))
{}
};
/*###########################################################################################*/
template
< typename Type1, typename Type2, typename Type3 >
struct ZtStTuple<Type1, Type2, Type3>
2021-02-25 16:23:13 +09:00
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
2021-03-24 10:37:45 +09:00
TypeData1 _1; TypeData2 _2; TypeData3 _3;
2021-02-25 16:23:13 +09:00
ZtStTuple<Type1, Type2, Type3>(){}
ZtStTuple<Type1, Type2, Type3>
(Type1 _T1, Type2 _T2, Type3 _T3) :
_1(CCheckRef1::PassData(_T1)),
_2(CCheckRef2::PassData(_T2)),
_3(CCheckRef3::PassData(_T3))
{}
};
/*###########################################################################################*/
template
< typename Type1, typename Type2, typename Type3, typename Type4 >
struct ZtStTuple<Type1, Type2, Type3, Type4>
2021-02-25 16:23:13 +09:00
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
2021-03-24 10:37:45 +09:00
TypeData1 _1; TypeData2 _2; TypeData3 _3; TypeData4 _4;
2021-02-25 16:23:13 +09:00
ZtStTuple<Type1, Type2, Type3, Type4>(){}
ZtStTuple<Type1, Type2, Type3, Type4>
(Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4) :
_1(CCheckRef1::PassData(_T1))
, _2(CCheckRef2::PassData(_T2))
, _3(CCheckRef3::PassData(_T3))
, _4(CCheckRef4::PassData(_T4))
{}
};
/*###########################################################################################*/
template
< typename Type1, typename Type2, typename Type3,
typename Type4, typename Type5
>
struct ZtStTuple<Type1, Type2, Type3, Type4, Type5>
2021-02-25 16:23:13 +09:00
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5> CCheckRef5 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
typedef typename CCheckRef5::TypeData TypeData5 ;
2021-03-24 10:37:45 +09:00
TypeData1 _1; TypeData2 _2; TypeData3 _3; TypeData4 _4; TypeData5 _5;
2021-02-25 16:23:13 +09:00
ZtStTuple<Type1, Type2, Type3, Type4, Type5>(){}
ZtStTuple<Type1, Type2, Type3, Type4, Type5>
(Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4, Type5 _T5) :
_1(CCheckRef1::PassData(_T1))
, _2(CCheckRef2::PassData(_T2))
, _3(CCheckRef3::PassData(_T3))
, _4(CCheckRef4::PassData(_T4))
, _5(CCheckRef5::PassData(_T5))
{}
};
/*###########################################################################################*/
template
< typename Type1, typename Type2, typename Type3,
typename Type4, typename Type5, typename Type6
>
struct ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6>
2021-02-25 16:23:13 +09:00
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5> CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6> CCheckRef6 ;
2021-03-24 10:37:45 +09:00
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
typedef typename CCheckRef5::TypeData TypeData5 ;
typedef typename CCheckRef6::TypeData TypeData6 ;
TypeData1 _1; TypeData2 _2; TypeData3 _3;
TypeData4 _4; TypeData5 _5; TypeData6 _6;
2021-02-25 16:23:13 +09:00
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6>(){}
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6>
(
Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4, Type5 _T5, Type6 _T6
) :
_1(CCheckRef1::PassData(_T1))
, _2(CCheckRef2::PassData(_T2))
, _3(CCheckRef3::PassData(_T3))
, _4(CCheckRef4::PassData(_T4))
, _5(CCheckRef5::PassData(_T5))
, _6(CCheckRef6::PassData(_T6))
{}
};
/*###########################################################################################*/
template
< typename Type1, typename Type2, typename Type3,
typename Type4, typename Type5, typename Type6, typename Type7
>
struct ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7>
2021-02-25 16:23:13 +09:00
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5> CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6> CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7> CCheckRef7 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
typedef typename CCheckRef5::TypeData TypeData5 ;
typedef typename CCheckRef6::TypeData TypeData6 ;
typedef typename CCheckRef7::TypeData TypeData7 ;
TypeData1 _1; TypeData2 _2; TypeData3 _3; TypeData4 _4;
2021-03-24 10:37:45 +09:00
TypeData5 _5; TypeData6 _6; TypeData7 _7;
2021-02-25 16:23:13 +09:00
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7>(){}
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7>
(
Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4,
Type5 _T5, Type6 _T6, Type7 _T7
) :
_1(CCheckRef1::PassData(_T1))
, _2(CCheckRef2::PassData(_T2))
, _3(CCheckRef3::PassData(_T3))
, _4(CCheckRef4::PassData(_T4))
, _5(CCheckRef5::PassData(_T5))
, _6(CCheckRef6::PassData(_T6))
, _7(CCheckRef7::PassData(_T7))
{}
};
/*###########################################################################################*/
template
< typename Type1, typename Type2, typename Type3,
typename Type4, typename Type5, typename Type6,
typename Type7, typename Type8
>
struct ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8>
2021-02-25 16:23:13 +09:00
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5> CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6> CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7> CCheckRef7 ;
typedef ZNsMain::ZtCCheckRef<Type8> CCheckRef8 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
typedef typename CCheckRef5::TypeData TypeData5 ;
typedef typename CCheckRef6::TypeData TypeData6 ;
typedef typename CCheckRef7::TypeData TypeData7 ;
typedef typename CCheckRef8::TypeData TypeData8 ;
TypeData1 _1; TypeData2 _2; TypeData3 _3; TypeData4 _4;
TypeData5 _5; TypeData6 _6; TypeData7 _7; TypeData8 _8;
2021-02-25 16:23:13 +09:00
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8>(){}
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8>
(
Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4,
Type5 _T5, Type6 _T6, Type7 _T7, Type8 _T8
) :
_1(CCheckRef1::PassData(_T1))
, _2(CCheckRef2::PassData(_T2))
, _3(CCheckRef3::PassData(_T3))
, _4(CCheckRef4::PassData(_T4))
, _5(CCheckRef5::PassData(_T5))
, _6(CCheckRef6::PassData(_T6))
, _7(CCheckRef7::PassData(_T7))
, _8(CCheckRef8::PassData(_T8))
{}
};
/*###########################################################################################*/
template
< typename Type1, typename Type2, typename Type3,
typename Type4, typename Type5, typename Type6,
typename Type7, typename Type8, typename Type9
>
struct ZtStTuple
<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8, Type9>
2021-02-25 16:23:13 +09:00
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5> CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6> CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7> CCheckRef7 ;
typedef ZNsMain::ZtCCheckRef<Type8> CCheckRef8 ;
typedef ZNsMain::ZtCCheckRef<Type9> CCheckRef9 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
typedef typename CCheckRef5::TypeData TypeData5 ;
typedef typename CCheckRef6::TypeData TypeData6 ;
typedef typename CCheckRef7::TypeData TypeData7 ;
typedef typename CCheckRef8::TypeData TypeData8 ;
typedef typename CCheckRef9::TypeData TypeData9 ;
TypeData1 _1; TypeData2 _2; TypeData3 _3; TypeData4 _4;
TypeData5 _5; TypeData6 _6; TypeData7 _7; TypeData8 _8; TypeData9 _9;
2021-02-25 16:23:13 +09:00
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8, Type9>(){}
2021-03-24 10:37:45 +09:00
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8, Type9>
(
Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4,
Type5 _T5, Type6 _T6, Type7 _T7, Type8 _T8, Type9 _T9
) :
_1(CCheckRef1::PassData(_T1))
, _2(CCheckRef2::PassData(_T2))
, _3(CCheckRef3::PassData(_T3))
, _4(CCheckRef4::PassData(_T4))
, _5(CCheckRef5::PassData(_T5))
, _6(CCheckRef6::PassData(_T6))
, _7(CCheckRef7::PassData(_T7))
, _8(CCheckRef8::PassData(_T8))
, _9(CCheckRef9::PassData(_T9))
{}
};
/*###########################################################################################*/
template
< typename Type1, typename Type2, typename Type3,
typename Type4, typename Type5, typename Type6,
typename Type7, typename Type8, typename Type9, typename Type10
>
struct ZtStTuple
<
Type1, Type2, Type3, Type4, Type5,
Type6, Type7, Type8, Type9, Type10
>
2021-02-25 16:23:13 +09:00
{
typedef ZNsMain::ZtCCheckRef<Type1 > CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2 > CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3 > CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4 > CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5 > CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6 > CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7 > CCheckRef7 ;
typedef ZNsMain::ZtCCheckRef<Type8 > CCheckRef8 ;
typedef ZNsMain::ZtCCheckRef<Type9 > CCheckRef9 ;
typedef ZNsMain::ZtCCheckRef<Type10> CCheckRef10;
typedef typename CCheckRef1 ::TypeData TypeData1 ;
typedef typename CCheckRef2 ::TypeData TypeData2 ;
typedef typename CCheckRef3 ::TypeData TypeData3 ;
typedef typename CCheckRef4 ::TypeData TypeData4 ;
typedef typename CCheckRef5 ::TypeData TypeData5 ;
typedef typename CCheckRef6 ::TypeData TypeData6 ;
typedef typename CCheckRef7 ::TypeData TypeData7 ;
typedef typename CCheckRef8 ::TypeData TypeData8 ;
typedef typename CCheckRef9 ::TypeData TypeData9 ;
typedef typename CCheckRef10::TypeData TypeData10 ;
TypeData1 _1 ; TypeData2 _2 ; TypeData3 _3 ; TypeData4 _4 ;
TypeData5 _5 ; TypeData6 _6 ; TypeData7 _7 ; TypeData8 _8 ;
TypeData9 _9 ; TypeData10 _10;
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8, Type9, Type10>(){}
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8, Type9, Type10>
(
Type1 _T1, Type2 _T2 , Type3 _T3, Type4 _T4,
Type5 _T5, Type6 _T6 , Type7 _T7, Type8 _T8,
Type9 _T9, Type10 _T10
) :
_1 (CCheckRef1 ::PassData(_T1 ))
, _2 (CCheckRef2 ::PassData(_T2 ))
, _3 (CCheckRef3 ::PassData(_T3 ))
, _4 (CCheckRef4 ::PassData(_T4 ))
, _5 (CCheckRef5 ::PassData(_T5 ))
, _6 (CCheckRef6 ::PassData(_T6 ))
, _7 (CCheckRef7 ::PassData(_T7 ))
, _8 (CCheckRef8 ::PassData(_T8 ))
, _9 (CCheckRef9 ::PassData(_T9 ))
, _10(CCheckRef10::PassData(_T10))
{}
};
/*###########################################################################################*/
template
< typename Type1 , typename Type2 , typename Type3,
typename Type4 , typename Type5 , typename Type6,
typename Type7 , typename Type8 , typename Type9,
typename Type10, typename Type11
>
struct ZtStTuple
<
Type1, Type2, Type3, Type4 , Type5, Type6,
Type7, Type8, Type9, Type10, Type11
>
{
typedef ZNsMain::ZtCCheckRef<Type1 > CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2 > CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3 > CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4 > CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5 > CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6 > CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7 > CCheckRef7 ;
typedef ZNsMain::ZtCCheckRef<Type8 > CCheckRef8 ;
typedef ZNsMain::ZtCCheckRef<Type9 > CCheckRef9 ;
typedef ZNsMain::ZtCCheckRef<Type10> CCheckRef10;
typedef ZNsMain::ZtCCheckRef<Type11> CCheckRef11;
typedef typename CCheckRef1 ::TypeData TypeData1 ;
typedef typename CCheckRef2 ::TypeData TypeData2 ;
typedef typename CCheckRef3 ::TypeData TypeData3 ;
typedef typename CCheckRef4 ::TypeData TypeData4 ;
typedef typename CCheckRef5 ::TypeData TypeData5 ;
typedef typename CCheckRef6 ::TypeData TypeData6 ;
typedef typename CCheckRef7 ::TypeData TypeData7 ;
typedef typename CCheckRef8 ::TypeData TypeData8 ;
typedef typename CCheckRef9 ::TypeData TypeData9 ;
typedef typename CCheckRef10::TypeData TypeData10 ;
typedef typename CCheckRef11::TypeData TypeData11 ;
TypeData1 _1 ; TypeData2 _2 ; TypeData3 _3 ; TypeData4 _4 ;
TypeData5 _5 ; TypeData6 _6 ; TypeData7 _7 ; TypeData8 _8 ;
TypeData9 _9 ; TypeData10 _10; TypeData11 _11;
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8, Type9, Type10, Type11>(){}
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8, Type9, Type10, Type11>
(
Type1 _T1, Type2 _T2 , Type3 _T3 , Type4 _T4,
Type5 _T5, Type6 _T6 , Type7 _T7 , Type8 _T8,
Type9 _T9, Type10 _T10, Type11 _T11
) :
_1 (CCheckRef1 ::PassData(_T1 ))
, _2 (CCheckRef2 ::PassData(_T2 ))
, _3 (CCheckRef3 ::PassData(_T3 ))
, _4 (CCheckRef4 ::PassData(_T4 ))
, _5 (CCheckRef5 ::PassData(_T5 ))
, _6 (CCheckRef6 ::PassData(_T6 ))
, _7 (CCheckRef7 ::PassData(_T7 ))
, _8 (CCheckRef8 ::PassData(_T8 ))
, _9 (CCheckRef9 ::PassData(_T9 ))
, _10(CCheckRef10::PassData(_T10))
, _11(CCheckRef11::PassData(_T11))
{}
};
/*###########################################################################################*/
template
< typename Type1 , typename Type2 , typename Type3 ,
typename Type4 , typename Type5 , typename Type6 ,
typename Type7 , typename Type8 , typename Type9 ,
typename Type10, typename Type11, typename Type12
>
struct ZtStTuple
<
Type1, Type2, Type3, Type4 , Type5 , Type6 ,
Type7, Type8, Type9, Type10, Type11, Type12
>
{
typedef ZNsMain::ZtCCheckRef<Type1 > CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2 > CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3 > CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4 > CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5 > CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6 > CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7 > CCheckRef7 ;
typedef ZNsMain::ZtCCheckRef<Type8 > CCheckRef8 ;
typedef ZNsMain::ZtCCheckRef<Type9 > CCheckRef9 ;
typedef ZNsMain::ZtCCheckRef<Type10> CCheckRef10;
typedef ZNsMain::ZtCCheckRef<Type11> CCheckRef11;
typedef ZNsMain::ZtCCheckRef<Type12> CCheckRef12;
typedef typename CCheckRef1 ::TypeData TypeData1 ;
typedef typename CCheckRef2 ::TypeData TypeData2 ;
typedef typename CCheckRef3 ::TypeData TypeData3 ;
typedef typename CCheckRef4 ::TypeData TypeData4 ;
typedef typename CCheckRef5 ::TypeData TypeData5 ;
typedef typename CCheckRef6 ::TypeData TypeData6 ;
typedef typename CCheckRef7 ::TypeData TypeData7 ;
typedef typename CCheckRef8 ::TypeData TypeData8 ;
typedef typename CCheckRef9 ::TypeData TypeData9 ;
typedef typename CCheckRef10::TypeData TypeData10 ;
typedef typename CCheckRef11::TypeData TypeData11 ;
typedef typename CCheckRef12::TypeData TypeData12 ;
TypeData1 _1 ; TypeData2 _2 ; TypeData3 _3 ; TypeData4 _4 ;
TypeData5 _5 ; TypeData6 _6 ; TypeData7 _7 ; TypeData8 _8 ;
TypeData9 _9 ; TypeData10 _10; TypeData11 _11; TypeData12 _12;
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8, Type9, Type10, Type11, Type12>(){}
ZtStTuple<Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8, Type9, Type10, Type11, Type12>
(
Type1 _T1, Type2 _T2 , Type3 _T3 , Type4 _T4 ,
Type5 _T5, Type6 _T6 , Type7 _T7 , Type8 _T8 ,
Type9 _T9, Type10 _T10, Type11 _T11, Type12 _T12
) :
_1 (CCheckRef1 ::PassData(_T1 ))
, _2 (CCheckRef2 ::PassData(_T2 ))
, _3 (CCheckRef3 ::PassData(_T3 ))
, _4 (CCheckRef4 ::PassData(_T4 ))
, _5 (CCheckRef5 ::PassData(_T5 ))
, _6 (CCheckRef6 ::PassData(_T6 ))
, _7 (CCheckRef7 ::PassData(_T7 ))
, _8 (CCheckRef8 ::PassData(_T8 ))
, _9 (CCheckRef9 ::PassData(_T9 ))
, _10(CCheckRef10::PassData(_T10))
, _11(CCheckRef11::PassData(_T11))
, _12(CCheckRef12::PassData(_T12))
{}
};
/*###########################################################################################*/
2021-02-25 16:23:13 +09:00
/*/////////////////////////////////////////////////////////////////////////////////////////////
RVO(Return Value Optimization) . -- 2025-09-06 21:23
int VariMy=0; ZtStTuple<int&> myt1 = ZftMakeTuple(ZftMCP(VariMy));
/////////////////////////////////////////////////////////////////////////////////////////////*/
ZtStTuple<> ZftMakeTuple()
{
return ZtStTuple<>();
}
/*####################################################################*/
template
<typename Type1>
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<typename ZNsMain::ZtCCheckRef<Type1>::TypeData>
ZftMakeTuple(Type1 _T1)
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
return ZtStTuple<TypeData1> /*::::::::::::::::::::::::::::::::::::*/
(
CCheckRef1::PassData(_T1)
);
}
/*####################################################################*/
template
<typename Type1, typename Type2>
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<
typename ZNsMain::ZtCCheckRef<Type1>::TypeData
, typename ZNsMain::ZtCCheckRef<Type2>::TypeData
>
ZftMakeTuple(Type1 _T1, Type2 _T2)
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
return ZtStTuple<TypeData1, TypeData2> /*:::::::::::::::::::::::::*/
(
CCheckRef1::PassData(_T1)
, CCheckRef2::PassData(_T2)
);
}
/*####################################################################*/
template
<typename Type1, typename Type2, typename Type3>
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<
typename ZNsMain::ZtCCheckRef<Type1>::TypeData
, typename ZNsMain::ZtCCheckRef<Type2>::TypeData
, typename ZNsMain::ZtCCheckRef<Type3>::TypeData
>
ZftMakeTuple(Type1 _T1, Type2 _T2, Type3 _T3)
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
return ZtStTuple<TypeData1, TypeData2, TypeData3> /*::::::::::::::*/
(
CCheckRef1::PassData(_T1)
, CCheckRef2::PassData(_T2)
, CCheckRef3::PassData(_T3)
);
}
/*####################################################################*/
template
< typename Type1, typename Type2, typename Type3, typename Type4 >
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<
typename ZNsMain::ZtCCheckRef<Type1>::TypeData
, typename ZNsMain::ZtCCheckRef<Type2>::TypeData
, typename ZNsMain::ZtCCheckRef<Type3>::TypeData
, typename ZNsMain::ZtCCheckRef<Type4>::TypeData
>
ZftMakeTuple /*#######################################################*/
(
Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4
)
/*####################################################################*/
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
return ZtStTuple<TypeData1, TypeData2, TypeData3, TypeData4> /*:::*/
(
CCheckRef1::PassData(_T1)
, CCheckRef2::PassData(_T2)
, CCheckRef3::PassData(_T3)
, CCheckRef4::PassData(_T4)
);
}
/*####################################################################*/
template< typename Type1, typename Type2,
typename Type3, typename Type4, typename Type5
>
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<
typename ZNsMain::ZtCCheckRef<Type1>::TypeData
, typename ZNsMain::ZtCCheckRef<Type2>::TypeData
, typename ZNsMain::ZtCCheckRef<Type3>::TypeData
, typename ZNsMain::ZtCCheckRef<Type4>::TypeData
, typename ZNsMain::ZtCCheckRef<Type5>::TypeData
>
ZftMakeTuple /*#######################################################*/
(
Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4, Type5 _T5
)
/*####################################################################*/
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5> CCheckRef5 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
typedef typename CCheckRef5::TypeData TypeData5 ;
return ZtStTuple /*:::::::::::::::::::::::::::::::::::::::::::::::*/
<
TypeData1, TypeData2,
TypeData3, TypeData4, TypeData5
>
(
CCheckRef1::PassData(_T1)
, CCheckRef2::PassData(_T2)
, CCheckRef3::PassData(_T3)
, CCheckRef4::PassData(_T4)
, CCheckRef5::PassData(_T5)
);
}
/*####################################################################*/
template< typename Type1, typename Type2, typename Type3,
typename Type4, typename Type5, typename Type6
>
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<
typename ZNsMain::ZtCCheckRef<Type1>::TypeData
, typename ZNsMain::ZtCCheckRef<Type2>::TypeData
, typename ZNsMain::ZtCCheckRef<Type3>::TypeData
, typename ZNsMain::ZtCCheckRef<Type4>::TypeData
, typename ZNsMain::ZtCCheckRef<Type5>::TypeData
, typename ZNsMain::ZtCCheckRef<Type6>::TypeData
>
ZftMakeTuple /*#######################################################*/
(
Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4, Type5 _T5, Type6 _T6
)
/*####################################################################*/
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5> CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6> CCheckRef6 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
typedef typename CCheckRef5::TypeData TypeData5 ;
typedef typename CCheckRef6::TypeData TypeData6 ;
return ZtStTuple /*:::::::::::::::::::::::::::::::::::::::::::::::*/
<
TypeData1, TypeData2, TypeData3,
TypeData4, TypeData5, TypeData6
>
(
CCheckRef1::PassData(_T1)
, CCheckRef2::PassData(_T2)
, CCheckRef3::PassData(_T3)
, CCheckRef4::PassData(_T4)
, CCheckRef5::PassData(_T5)
, CCheckRef6::PassData(_T6)
);
}
/*####################################################################*/
template< typename Type1, typename Type2, typename Type3,
typename Type4, typename Type5, typename Type6, typename Type7
>
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<
typename ZNsMain::ZtCCheckRef<Type1>::TypeData
, typename ZNsMain::ZtCCheckRef<Type2>::TypeData
, typename ZNsMain::ZtCCheckRef<Type3>::TypeData
, typename ZNsMain::ZtCCheckRef<Type4>::TypeData
, typename ZNsMain::ZtCCheckRef<Type5>::TypeData
, typename ZNsMain::ZtCCheckRef<Type6>::TypeData
, typename ZNsMain::ZtCCheckRef<Type7>::TypeData
>
ZftMakeTuple /*#######################################################*/
(
Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4,
Type5 _T5, Type6 _T6, Type7 _T7
)
/*####################################################################*/
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5> CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6> CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7> CCheckRef7 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
typedef typename CCheckRef5::TypeData TypeData5 ;
typedef typename CCheckRef6::TypeData TypeData6 ;
typedef typename CCheckRef7::TypeData TypeData7 ;
return ZtStTuple /*:::::::::::::::::::::::::::::::::::::::::::::::*/
<
TypeData1, TypeData2, TypeData3, TypeData4,
TypeData5, TypeData6, TypeData7
>
(
CCheckRef1::PassData(_T1)
, CCheckRef2::PassData(_T2)
, CCheckRef3::PassData(_T3)
, CCheckRef4::PassData(_T4)
, CCheckRef5::PassData(_T5)
, CCheckRef6::PassData(_T6)
, CCheckRef7::PassData(_T7)
);
}
/*####################################################################*/
template< typename Type1, typename Type2, typename Type3,
typename Type4, typename Type5, typename Type6,
typename Type7, typename Type8
>
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<
typename ZNsMain::ZtCCheckRef<Type1>::TypeData
, typename ZNsMain::ZtCCheckRef<Type2>::TypeData
, typename ZNsMain::ZtCCheckRef<Type3>::TypeData
, typename ZNsMain::ZtCCheckRef<Type4>::TypeData
, typename ZNsMain::ZtCCheckRef<Type5>::TypeData
, typename ZNsMain::ZtCCheckRef<Type6>::TypeData
, typename ZNsMain::ZtCCheckRef<Type7>::TypeData
, typename ZNsMain::ZtCCheckRef<Type8>::TypeData
>
ZftMakeTuple /*#######################################################*/
(
Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4,
Type5 _T5, Type6 _T6, Type7 _T7, Type8 _T8
)
/*####################################################################*/
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5> CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6> CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7> CCheckRef7 ;
typedef ZNsMain::ZtCCheckRef<Type8> CCheckRef8 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
typedef typename CCheckRef5::TypeData TypeData5 ;
typedef typename CCheckRef6::TypeData TypeData6 ;
typedef typename CCheckRef7::TypeData TypeData7 ;
typedef typename CCheckRef8::TypeData TypeData8 ;
return ZtStTuple /*:::::::::::::::::::::::::::::::::::::::::::::::*/
<
TypeData1, TypeData2, TypeData3, TypeData4,
TypeData5, TypeData6, TypeData7, TypeData8
>
(
CCheckRef1::PassData(_T1)
, CCheckRef2::PassData(_T2)
, CCheckRef3::PassData(_T3)
, CCheckRef4::PassData(_T4)
, CCheckRef5::PassData(_T5)
, CCheckRef6::PassData(_T6)
, CCheckRef7::PassData(_T7)
, CCheckRef8::PassData(_T8)
);
}
/*####################################################################*/
template< typename Type1, typename Type2, typename Type3,
typename Type4, typename Type5, typename Type6,
typename Type7, typename Type8, typename Type9
>
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<
typename ZNsMain::ZtCCheckRef<Type1>::TypeData
, typename ZNsMain::ZtCCheckRef<Type2>::TypeData
, typename ZNsMain::ZtCCheckRef<Type3>::TypeData
, typename ZNsMain::ZtCCheckRef<Type4>::TypeData
, typename ZNsMain::ZtCCheckRef<Type5>::TypeData
, typename ZNsMain::ZtCCheckRef<Type6>::TypeData
, typename ZNsMain::ZtCCheckRef<Type7>::TypeData
, typename ZNsMain::ZtCCheckRef<Type8>::TypeData
, typename ZNsMain::ZtCCheckRef<Type9>::TypeData
>
ZftMakeTuple /*#######################################################*/
(
Type1 _T1, Type2 _T2, Type3 _T3, Type4 _T4,
Type5 _T5, Type6 _T6, Type7 _T7, Type8 _T8, Type9 _T9
)
/*####################################################################*/
{
typedef ZNsMain::ZtCCheckRef<Type1> CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2> CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3> CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4> CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5> CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6> CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7> CCheckRef7 ;
typedef ZNsMain::ZtCCheckRef<Type8> CCheckRef8 ;
typedef ZNsMain::ZtCCheckRef<Type9> CCheckRef9 ;
typedef typename CCheckRef1::TypeData TypeData1 ;
typedef typename CCheckRef2::TypeData TypeData2 ;
typedef typename CCheckRef3::TypeData TypeData3 ;
typedef typename CCheckRef4::TypeData TypeData4 ;
typedef typename CCheckRef5::TypeData TypeData5 ;
typedef typename CCheckRef6::TypeData TypeData6 ;
typedef typename CCheckRef7::TypeData TypeData7 ;
typedef typename CCheckRef8::TypeData TypeData8 ;
typedef typename CCheckRef9::TypeData TypeData9 ;
return ZtStTuple /*:::::::::::::::::::::::::::::::::::::::::::::::*/
<
TypeData1, TypeData2, TypeData3, TypeData4,
TypeData5, TypeData6, TypeData7, TypeData8, TypeData9
>
(
CCheckRef1::PassData(_T1)
, CCheckRef2::PassData(_T2)
, CCheckRef3::PassData(_T3)
, CCheckRef4::PassData(_T4)
, CCheckRef5::PassData(_T5)
, CCheckRef6::PassData(_T6)
, CCheckRef7::PassData(_T7)
, CCheckRef8::PassData(_T8)
, CCheckRef9::PassData(_T9)
);
}
/*####################################################################*/
template< typename Type1, typename Type2, typename Type3,
typename Type4, typename Type5, typename Type6,
typename Type7, typename Type8, typename Type9, typename Type10
>
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<
typename ZNsMain::ZtCCheckRef<Type1 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type2 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type3 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type4 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type5 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type6 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type7 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type8 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type9 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type10>::TypeData
>
ZftMakeTuple /*#######################################################*/
(
Type1 _T1, Type2 _T2 , Type3 _T3, Type4 _T4,
Type5 _T5, Type6 _T6 , Type7 _T7, Type8 _T8,
Type9 _T9, Type10 _T10
)
/*####################################################################*/
{
typedef ZNsMain::ZtCCheckRef<Type1 > CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2 > CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3 > CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4 > CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5 > CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6 > CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7 > CCheckRef7 ;
typedef ZNsMain::ZtCCheckRef<Type8 > CCheckRef8 ;
typedef ZNsMain::ZtCCheckRef<Type9 > CCheckRef9 ;
typedef ZNsMain::ZtCCheckRef<Type10> CCheckRef10;
typedef typename CCheckRef1 ::TypeData TypeData1 ;
typedef typename CCheckRef2 ::TypeData TypeData2 ;
typedef typename CCheckRef3 ::TypeData TypeData3 ;
typedef typename CCheckRef4 ::TypeData TypeData4 ;
typedef typename CCheckRef5 ::TypeData TypeData5 ;
typedef typename CCheckRef6 ::TypeData TypeData6 ;
typedef typename CCheckRef7 ::TypeData TypeData7 ;
typedef typename CCheckRef8 ::TypeData TypeData8 ;
typedef typename CCheckRef9 ::TypeData TypeData9 ;
typedef typename CCheckRef10::TypeData TypeData10 ;
return ZtStTuple /*:::::::::::::::::::::::::::::::::::::::::::::::*/
<
TypeData1, TypeData2, TypeData3, TypeData4,
TypeData5, TypeData6, TypeData7, TypeData8,
TypeData9, TypeData10
>
(
CCheckRef1 ::PassData(_T1 )
, CCheckRef2 ::PassData(_T2 )
, CCheckRef3 ::PassData(_T3 )
, CCheckRef4 ::PassData(_T4 )
, CCheckRef5 ::PassData(_T5 )
, CCheckRef6 ::PassData(_T6 )
, CCheckRef7 ::PassData(_T7 )
, CCheckRef8 ::PassData(_T8 )
, CCheckRef9 ::PassData(_T9 )
, CCheckRef10::PassData(_T10)
);
}
/*####################################################################*/
template< typename Type1 , typename Type2, typename Type3,
typename Type4 , typename Type5, typename Type6,
typename Type7 , typename Type8, typename Type9,
typename Type10, typename Type11
>
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<
typename ZNsMain::ZtCCheckRef<Type1 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type2 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type3 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type4 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type5 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type6 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type7 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type8 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type9 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type10>::TypeData
, typename ZNsMain::ZtCCheckRef<Type11>::TypeData
>
ZftMakeTuple /*#######################################################*/
(
Type1 _T1, Type2 _T2 , Type3 _T3 , Type4 _T4,
Type5 _T5, Type6 _T6 , Type7 _T7 , Type8 _T8,
Type9 _T9, Type10 _T10, Type11 _T11
)
/*####################################################################*/
{
typedef ZNsMain::ZtCCheckRef<Type1 > CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2 > CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3 > CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4 > CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5 > CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6 > CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7 > CCheckRef7 ;
typedef ZNsMain::ZtCCheckRef<Type8 > CCheckRef8 ;
typedef ZNsMain::ZtCCheckRef<Type9 > CCheckRef9 ;
typedef ZNsMain::ZtCCheckRef<Type10> CCheckRef10;
typedef ZNsMain::ZtCCheckRef<Type11> CCheckRef11;
typedef typename CCheckRef1 ::TypeData TypeData1 ;
typedef typename CCheckRef2 ::TypeData TypeData2 ;
typedef typename CCheckRef3 ::TypeData TypeData3 ;
typedef typename CCheckRef4 ::TypeData TypeData4 ;
typedef typename CCheckRef5 ::TypeData TypeData5 ;
typedef typename CCheckRef6 ::TypeData TypeData6 ;
typedef typename CCheckRef7 ::TypeData TypeData7 ;
typedef typename CCheckRef8 ::TypeData TypeData8 ;
typedef typename CCheckRef9 ::TypeData TypeData9 ;
typedef typename CCheckRef10::TypeData TypeData10 ;
typedef typename CCheckRef11::TypeData TypeData11 ;
return ZtStTuple /*:::::::::::::::::::::::::::::::::::::::::::::::*/
<
TypeData1, TypeData2 , TypeData3, TypeData4,
TypeData5, TypeData6 , TypeData7, TypeData8,
TypeData9, TypeData10, TypeData11
>
(
CCheckRef1 ::PassData(_T1 )
, CCheckRef2 ::PassData(_T2 )
, CCheckRef3 ::PassData(_T3 )
, CCheckRef4 ::PassData(_T4 )
, CCheckRef5 ::PassData(_T5 )
, CCheckRef6 ::PassData(_T6 )
, CCheckRef7 ::PassData(_T7 )
, CCheckRef8 ::PassData(_T8 )
, CCheckRef9 ::PassData(_T9 )
, CCheckRef10::PassData(_T10)
, CCheckRef11::PassData(_T11)
);
}
/*####################################################################*/
template< typename Type1 , typename Type2 , typename Type3,
typename Type4 , typename Type5 , typename Type6,
typename Type7 , typename Type8 , typename Type9,
typename Type10, typename Type11, typename Type12
>
ZtStTuple /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
<
typename ZNsMain::ZtCCheckRef<Type1 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type2 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type3 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type4 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type5 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type6 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type7 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type8 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type9 >::TypeData
, typename ZNsMain::ZtCCheckRef<Type10>::TypeData
, typename ZNsMain::ZtCCheckRef<Type11>::TypeData
, typename ZNsMain::ZtCCheckRef<Type12>::TypeData
>
ZftMakeTuple /*#######################################################*/
(
Type1 _T1, Type2 _T2 , Type3 _T3 , Type4 _T4 ,
Type5 _T5, Type6 _T6 , Type7 _T7 , Type8 _T8 ,
Type9 _T9, Type10 _T10, Type11 _T11, Type12 _T12
)
/*####################################################################*/
{
typedef ZNsMain::ZtCCheckRef<Type1 > CCheckRef1 ;
typedef ZNsMain::ZtCCheckRef<Type2 > CCheckRef2 ;
typedef ZNsMain::ZtCCheckRef<Type3 > CCheckRef3 ;
typedef ZNsMain::ZtCCheckRef<Type4 > CCheckRef4 ;
typedef ZNsMain::ZtCCheckRef<Type5 > CCheckRef5 ;
typedef ZNsMain::ZtCCheckRef<Type6 > CCheckRef6 ;
typedef ZNsMain::ZtCCheckRef<Type7 > CCheckRef7 ;
typedef ZNsMain::ZtCCheckRef<Type8 > CCheckRef8 ;
typedef ZNsMain::ZtCCheckRef<Type9 > CCheckRef9 ;
typedef ZNsMain::ZtCCheckRef<Type10> CCheckRef10;
typedef ZNsMain::ZtCCheckRef<Type11> CCheckRef11;
typedef ZNsMain::ZtCCheckRef<Type12> CCheckRef12;
typedef typename CCheckRef1 ::TypeData TypeData1 ;
typedef typename CCheckRef2 ::TypeData TypeData2 ;
typedef typename CCheckRef3 ::TypeData TypeData3 ;
typedef typename CCheckRef4 ::TypeData TypeData4 ;
typedef typename CCheckRef5 ::TypeData TypeData5 ;
typedef typename CCheckRef6 ::TypeData TypeData6 ;
typedef typename CCheckRef7 ::TypeData TypeData7 ;
typedef typename CCheckRef8 ::TypeData TypeData8 ;
typedef typename CCheckRef9 ::TypeData TypeData9 ;
typedef typename CCheckRef10::TypeData TypeData10 ;
typedef typename CCheckRef11::TypeData TypeData11 ;
typedef typename CCheckRef12::TypeData TypeData12 ;
return ZtStTuple /*:::::::::::::::::::::::::::::::::::::::::::::::*/
<
TypeData1, TypeData2 , TypeData3 , TypeData4,
TypeData5, TypeData6 , TypeData7 , TypeData8,
TypeData9, TypeData10, TypeData11, TypeData12
>
(
CCheckRef1 ::PassData(_T1 )
, CCheckRef2 ::PassData(_T2 )
, CCheckRef3 ::PassData(_T3 )
, CCheckRef4 ::PassData(_T4 )
, CCheckRef5 ::PassData(_T5 )
, CCheckRef6 ::PassData(_T6 )
, CCheckRef7 ::PassData(_T7 )
, CCheckRef8 ::PassData(_T8 )
, CCheckRef9 ::PassData(_T9 )
, CCheckRef10::PassData(_T10)
, CCheckRef11::PassData(_T11)
, CCheckRef12::PassData(_T12)
);
}
/*####################################################################*/
template< typename TTypeArg1,
typename TTypeArg2,
bool TTypebCompareObj=true
>
class ZtCCompare /////////////////////////
{
public:
enum {ZEUseCompareObj=(ZTypIntE)TTypebCompareObj};
public:
template<typename TTypeArg11, typename TTypeArg22>
static ZTypInt Exec(TTypeArg11 AR_TypeArg1, TTypeArg22 AR_TypeArg2)
{
#ifdef _DEBUG_CCOMPARE_EXEC
cout<<" ※※ ZtCCompare<TTypeArg1, TTypeArg2, true> is called."<<endl;
#endif //_DEBUG_CCOMPARE_EXEC
return AR_TypeArg1.Compare(AR_TypeArg2);
}/*
template<typename TTypeArg11, typename TTypeArg22>
static ZTypInt Exec(TTypeArg11 AR_TypeArg1, TTypeArg22 AR_TypeArg2) */
public:
};/*
template< typename TTypeArg1,
typename TTypeArg2,
bool TTypebCompareObj=true
>
class ZtCCompare ///////////////////////*/
template<typename TTypeArg1, typename TTypeArg2
>
class ZtCCompare<TTypeArg1, TTypeArg2, false>
{
public:
enum {ZEUseCompareObj=0};
public:
template<typename TTypeArg11, typename TTypeArg22>
static ZTypInt Exec(TTypeArg11 AR_TypeArg1, TTypeArg22 AR_TypeArg2)
{
return ZNsEnum::ZECompareResult_Equal;
}/*
template<typename TTypeArg11, typename TTypeArg22>
static ZTypInt Exec(TTypeArg1 AR_TypeArg1, TTypeArg2 AR_TypeArg2)*/
public:
};/*
template<typename TTypeArg1, typename TTypeArg2
>
class ZtCCompare<TTypeArg1, TTypeArg2, false> */
template<> class ZtCCompare<ZTypInt, ZTypInt, true>
{
public:
enum {ZEUseCompareObj=1};
public:
static ZTypInt Exec(ZTypInt AI_Int1, ZTypInt AI_Int2)
{
#ifdef _DEBUG_CCOMPARE_EXEC
cout<<" ※※ ZtCCompare<int, int, true> is called."<<endl;
#endif //_DEBUG_CCOMPARE_EXEC
return AI_Int1 - AI_Int2 ;
}/*
static ZTypInt Exec(ZTypInt AI_Int1, ZTypInt AI_Int2)*/
public:
};/*
template<> class ZtCCompare<ZTypInt, ZTypInt, true>*/
2021-02-25 16:23:13 +09:00
namespace ZNsHide
{
/* 특정 클래스 안에서만 사용되어, 사용자가 그 존재를 알 필요가 없는 클래스를 둔다. */
}/*
namespace ZNsHide*/
namespace ZNsIn
{
/*///////////////////////////////////////////////////////////////////////////////
, ,
ZNsIn~ namespace .
ZNsHide Hidden ,
. CIocp , CHelpIocp
, CHelpIocp
namespace ZNsInIOCP .
-- 2009-12-21 12:56:00
///////////////////////////////////////////////////////////////////////////////*/
}/*
namespace ZNsIn*/
namespace ZNsTmplParam
{
}/*
namespace ZNsTmplParam*/
namespace ZNsBase
{
// 가상 클래스도 아니고 인터페이스 전용의 함수도 아니면서
2021-02-25 16:23:13 +09:00
// 주로 기반 클래스로 사용되는 클래스는 여기에 둔다.
}/*
namespace ZNsBase*/
namespace ZNsSngt
{
/*////////////////////////////////////////////////////////////////////////////////////////////
singleton object object .
singleton object , CSngt .
////////////////////////////////////////////////////////////////////////////////////////////*/
}/*
namespace ZNsSngt*/
namespace ZNsSttc
{
/*/////////////////////////////////////////////////////////////////////////////
static object CSttc .
-- 2010-03-10 19:58:00
/////////////////////////////////////////////////////////////////////////////*/
}/*
namespace ZNsSttc*/
namespace ZNsReent
{
/*////////////////////////////////////////////////////////////
ZNsReent : namespace Reentrant
thread safe ,
thread safe .
////////////////////////////////////////////////////////////*/
}/*
namespace ZNsReent*/
namespace ZNsArg
{
/*////////////////////////////////////////////////////////////////
Call Back
, object
, object class
object ,
.
Call Back
.
-- 2010-01-02 22:11:00
////////////////////////////////////////////////////////////////*/
}/*
namespace ZNsArg*/
namespace ZNsDeco
{
/*////////////////////////////////////////////////////////////////
(릿) , Decoration
, ,
Decoration namespace ZNsDeco
. , Logic View , View
( ) 릿 .
-- 2010-03-10 22:04:00
////////////////////////////////////////////////////////////////*/
}/*
namespace ZNsDeco*/
namespace ZNsView
{
/*//////////////////////////////////////////////////////////////////////////////////
'Logic-View '( Document-View ,
'Logic-View ' ) View
. CView .
CView , namespace ZNsView View
, CView ,
.
-- 2011-09-11 13:50:00
//////////////////////////////////////////////////////////////////////////////////*/
}/*
namespace ZNsView*/
namespace ZNsViewIFace
{
/*//////////////////////////////////////////////////////////////////////////////////
'Logic-View ' View interface
.
-- 2011-09-11 13:54:00
//////////////////////////////////////////////////////////////////////////////////*/
}/*
namespace ZNsViewIFace*/
namespace ZNsCRTP
{
/*//////////////////////////////////////////////////
CRTP : CURIOUSLY RECURRING TEMPLATE PATTERN
CRTP 릿 .
-- 2010-03-12 13:51:00
//////////////////////////////////////////////////*/
}/*
namespace ZNsCRTP*/
namespace ZNsHelp
{
/*//////////////////////////////////////////////////
.
-- 2025-09-13 00:59:00
//////////////////////////////////////////////////*/
}/*
namespace ZNsHelp*/
2021-02-25 16:23:13 +09:00
namespace ZNsFunc
{
/*///////////////////////////////////////////////////////////////////////////
릿 .
ZftMoveFast<>(Type1& AR_Type1, Type2& AR_Type2)
2021-02-25 16:23:13 +09:00
RValue Reference . Move
Move ,
AR_Type2 0 .
object Move object
ZftMoveFast() 릿 .
2021-02-25 16:23:13 +09:00
func() object /
, object class , /
/ , , func()
object __Init<>(), __Fini<>()
. , __Init, __Fini 릿
.
(2025-08-20) __init() __Fini() _CODE_OLD_ .
2021-02-25 16:23:13 +09:00
-- 2009-08-15 19:57:00
///////////////////////////////////////////////////////////////////////////*/
template<typename Type1, typename Type2>
void ZftMoveFast(Type1& AR_Type1, Type2& AR_Type2)
2021-02-25 16:23:13 +09:00
{
#ifdef _DEBUG_FAST_MOVE_OBJ_
cout<<" ※※ ZftMoveFast Start : Type1="<<typeid(Type1).name()<<", Type2="<<typeid(Type2).name()<<endl;
2021-02-25 16:23:13 +09:00
#endif //_DEBUG_FAST_MOVE_OBJ_
AR_Type1 = AR_Type2 ;
2021-02-25 16:23:13 +09:00
#ifdef _DEBUG_FAST_MOVE_OBJ_
cout<<" ※※ ZftMoveFast Close : Type2="<<typeid(Type1).name()<<", Type2="<<typeid(Type2).name()<<endl;
2021-02-25 16:23:13 +09:00
#endif //_DEBUG_FAST_MOVE_OBJ_
}/*
template<typename Type1, typename Type2>
void ZftMoveFast(Type& AR_Type1, Type& AR_Type2) */
2021-02-25 16:23:13 +09:00
#if(_CODE_OLD_)
2021-02-25 16:23:13 +09:00
template<typename Type> void __Init(Type& AR_Type)
{
#ifdef _DEBUG
cout<<"void ZNsFunc::__Init<Type>(Type&), Type="<<typeid(Type).name()<<endl;
#endif //_DEBUG
}/*
template<typename Type> void __Init(Type& AR_Type)*/
template<typename Type> void __Fini(Type& AR_Type)
{
#ifdef _DEBUG
cout<<"void ZNsFunc::__Fini<Type>(Type&), Type="<<typeid(Type).name()<<endl;
#endif //_DEBUG
}/*
template<typename Type> void __Fini(Type& AR_Type)*/
#endif //(_CODE_OLD_)
2021-02-25 16:23:13 +09:00
/*///////////////////////////////////////////////////////////////////////////
CObjAVL<> object ,
1 2 ,
bool operator> (~)
bool operator==(~)
1 ( )
int ZtCCompare<>::Exec(TTypeArg1 AR_TypeArg1, TTypeArg2 AR_TypeArg2)
.
-- 2012-09-01 20:13:00
2021-03-04 15:36:45 +09:00
AR_Type1==AR_Type2 ZNsEnum::ZECompareResult_Equal ,
AR_Type1>=AR_Type2 ZNsEnum::ZECompareResult_Equal ,
AR_Type1> AR_Type2 ZNsEnum::ZECompareResult_More ,
AR_Type1<=AR_Type2 ZNsEnum::ZECompareResult_Equal ,
AR_Type1< AR_Type2 ZNsEnum::ZECompareResult_Less ,
2021-02-25 16:23:13 +09:00
2021-03-04 15:36:45 +09:00
AR_Type1>=AR_Type2 ZNsEnum::ZECompareResult_Equal ,
AR_Type1> AR_Type2 ZNsEnum::ZECompareResult_Equal ,
AR_Type1<=AR_Type2 ZNsEnum::ZECompareResult_Equal ,
AR_Type1< AR_Type2 ZNsEnum::ZECompareResult_Equal ,
2021-02-25 16:23:13 +09:00
.
-- 2012-09-01 20:20:00
template<typename Type1,typename Type2> __CompareObj(Type1, Type2)
, 릿 .
, ...
.
-- 2012-09-02 22:49:00
ZtCCompare<>::Exec(~) template , template
. template ZtCCompare<> template
TTypeArg1, TTypeArg2 .
.
-- 2012-10-09 09:14:00
///////////////////////////////////////////////////////////////////////////*/
}/*
namespace ZNsFunc*/
2021-02-25 16:23:13 +09:00
/*/////////////////////////////////////////////
2021-02-25 16:23:13 +09:00
ZtCMoveObj<> CObjAVL.H .
2021-02-25 16:23:13 +09:00
-- 2013-08-26 19:18:00
/////////////////////////////////////////////*/
2021-02-25 16:23:13 +09:00
template< typename TTypeArg1 ,
typename TTypeArg2 ,
bool TTypebMoveObj=true
>
class ZtCMoveObj /*###############################################*/
{
public:
enum {ZEUseMoveObj = (ZTypIntE)TTypebMoveObj} ;
public:
typedef typename ZNsMain::ZtCRef<TTypeArg1>::TypeRef TypeRef1;
typedef typename ZNsMain::ZtCRef<TTypeArg2>::TypeRef TypeRef2;
public:
2021-02-25 16:23:13 +09:00
static void Exec(TypeRef1 AR_TypeArg1, TypeRef2 AR_TypeArg2)
2021-02-25 16:23:13 +09:00
{
#ifdef _DEBUG_MOVEOBJ_EXEC
cout<<" ※※ ZtCMoveObj<TTypeArg1, TTypeArg2, true> is called."<<endl;
#endif //_DEBUG_MOVEOBJ_EXEC
2021-02-25 16:23:13 +09:00
ZNsFunc::ZftMoveFast(AR_TypeArg1, AR_TypeArg2);
}/*
static void Exec(TTypeArg1& AR_TypeArg1, TTypeArg2& AR_TypeArg2)*/
2021-02-25 16:23:13 +09:00
public:
};/*
template< typename TTypeArg1 ,
typename TTypeArg2 ,
bool TTypebMoveObj=true
>
class ZtCMoveObj #################################################*/
2021-02-25 16:23:13 +09:00
template /*######################################################*/
<
typename TTypeArg1, typename TTypeArg2
>
class ZtCMoveObj<TTypeArg1, TTypeArg2, false> /*//////////////////*/
{
public:
enum {ZEUseMoveObj=0};
public:
typedef typename ZNsMain::ZtCRef<TTypeArg1>::TypeRef TypeRef1;
typedef typename ZNsMain::ZtCRef<TTypeArg2>::TypeRef TypeRef2;
public:
2021-02-25 16:23:13 +09:00
static void Exec(TypeRef1 AR_TypeArg1, TypeRef2 AR_TypeArg2)
2021-02-25 16:23:13 +09:00
{
AR_TypeArg1 = AR_TypeArg2 ;
}/*
static void Exec(TypeRef1 AR_TypeArg1, TypeRef2 AR_TypeArg2)*/
2021-02-25 16:23:13 +09:00
public:
};/*
template ###########################################################
<
typename TTypeArg1, typename TTypeArg2
>
class ZtCMoveObj<TTypeArg1, TTypeArg2, false> ////////////////////*/
2021-02-25 16:23:13 +09:00
namespace ZNsTmplChain
{
/*////////////////////////////////////////////////////////////
ZtCTmplChain<> , chain
.
-- 2011-08-05 21:16:00
CMainChars.H
TTypeLength CSearchCursor_T<>::GetLengthByTmplChain(~)
.
-- 2011-08-06 23:51:00
////////////////////////////////////////////////////////////*/
template< typename TTypeNow, typename TTypeNext
>
class ZtCTmplChain //////////////////////////////
2021-02-25 16:23:13 +09:00
{
public :
typedef TTypeNow ZCObjNow ;
typedef TTypeNext ZCObjNext;
public :
2021-03-04 15:36:45 +09:00
enum{ZENextObjNo =ZCObjNext::ENextObjNo+1};
enum{ZEBoolNextObj=1 };
2021-02-25 16:23:13 +09:00
private:
TTypeNow mo_ZCObjNow ;
TTypeNext mo_ZCObjNext;
public :
ZCObjNow& GetNowObj () {return mo_ZCObjNow ;}
ZCObjNext& GetNextObj() {return mo_ZCObjNext;}
/*#####################################################*/
const ZCObjNow& GetNowObj () const{return mo_ZCObjNow ;}
const ZCObjNext& GetNextObj() const{return mo_ZCObjNext;}
public:
};/*
template< typename TTypeNow, typename TTypeNext
>
class ZtCTmplChain ////////////////////////////*/
2021-02-25 16:23:13 +09:00
template<typename TTypeNow> class ZtCTmplChain<TTypeNow, ZCEmpty>
{
public :
typedef TTypeNow ZCObjNow ;
typedef TTypeNow ZCObjNext;
public :
2021-03-04 15:36:45 +09:00
enum{ZENextObjNo =1};
enum{ZEBoolNextObj=0};
2021-02-25 16:23:13 +09:00
private:
ZCObjNow mo_ZCObjNow;
public :
ZCObjNow& GetNowObj () {return mo_ZCObjNow;}
ZCObjNext& GetNextObj() {return mo_ZCObjNow;}
/*####################################################*/
const ZCObjNow& GetNowObj () const{return mo_ZCObjNow;}
const ZCObjNext& GetNextObj() const{return mo_ZCObjNow;}
public:
};/*
template<typename TTypeNow> class ZtCTmplChain<TTypeNow, ZCEmpty> */
/*//////////////////////////////////////////////////////////////////////////////
ZtCTmplTreeChain<> , chain tree
, ZtCTmplChain<> namespace .
-- 2011-10-04 00:46:00
2 , GetNextObj2()
, GetNextObj()
. GetNextObj2()
.
-- 2011-10-04 21:01:00
CMainChars.H
TTypeLength CSearchCursor_T<>::GetLengthByTmplTreeChain(~)
.
-- 2011-10-04 00:53:00
//////////////////////////////////////////////////////////////////////////////*/
template< typename TTypeNow ,
typename TTypeNext ,
typename TTypeNext2
>
2021-03-04 15:36:45 +09:00
class ZtCTmplTreeChain /////////
2021-02-25 16:23:13 +09:00
{
public :
2021-03-04 15:36:45 +09:00
enum{ZENextObjNo =TTypeNext ::ENextObjNo +1};
enum{ZENextObjNo2 =TTypeNext2::ENextObjNo2+1};
enum{ZEBoolNextObj =1};
enum{ZEBoolNextObj2=1};
enum{ZEObjChainCnt =TTypeNext::EObjChainCnt+TTypeNext2::EObjChainCnt+2};
2021-02-25 16:23:13 +09:00
public :
typedef TTypeNow ZCObjNow ;
typedef TTypeNext ZCObjNext ;
typedef TTypeNext2 ZCObjNext2;
private:
ZCObjNow mo_ZCObjNow ;
ZCObjNext mo_ZCObjNext ;
ZCObjNext2 mo_ZCObjNext2;
public :
ZCObjNow& GetNowObj () {return mo_ZCObjNow ;}
ZCObjNext& GetNextObj () {return mo_ZCObjNext ;}
ZCObjNext2& GetNextObj2() {return mo_ZCObjNext2;}
/*########################################################*/
const ZCObjNow& GetNowObj () const{return mo_ZCObjNow ;}
const ZCObjNext& GetNextObj () const{return mo_ZCObjNext ;}
const ZCObjNext2& GetNextObj2() const{return mo_ZCObjNext2;}
public :
};/*
template< typename TTypeNow ,
typename TTypeNext ,
typename TTypeNext2
>
2021-03-04 15:36:45 +09:00
class ZtCTmplTreeChain ///////*/
2021-02-25 16:23:13 +09:00
template< typename TTypeNow, typename TTypeNext
>
class ZtCTmplTreeChain<TTypeNow, TTypeNext, ZCEmpty>
{
public :
2021-03-04 15:36:45 +09:00
enum{ZENextObjNo =TTypeNext::ENextObjNo +1};
enum{ZENextObjNo2 =0 };
enum{ZEBoolNextObj =1 };
enum{ZEBoolNextObj2=0 };
enum{ZEObjChainCnt =TTypeNext::EObjChainCnt+1};
2021-02-25 16:23:13 +09:00
public :
typedef TTypeNow ZCObjNow ;
typedef TTypeNext ZCObjNext ;
typedef TTypeNext ZCObjNext2; // interface 호환을 위해서만 존재.
private:
ZCObjNow mo_ZCObjNow ;
ZCObjNext mo_ZCObjNext;
public :
ZCObjNow& GetNowObj () {return mo_ZCObjNow ;}
ZCObjNext& GetNextObj () {return mo_ZCObjNext;}
ZCObjNext2& GetNextObj2() {return mo_ZCObjNext;} // interface 호환을 위해서만 존재.
/*#######################################################*/
const ZCObjNow& GetNowObj () const{return mo_ZCObjNow ;}
const ZCObjNext& GetNextObj () const{return mo_ZCObjNext;}
const ZCObjNext2& GetNextObj2() const{return mo_ZCObjNext;} // interface 호환을 위해서만 존재.
public :
};/*
template< typename TTypeNow, typename TTypeNext
>
class ZtCTmplTreeChain<TTypeNow, TTypeNext, ZCEmpty> */
template< typename TTypeNow, typename TTypeNext2
>
class ZtCTmplTreeChain<TTypeNow, ZCEmpty, TTypeNext2>
{
public :
2021-03-04 15:36:45 +09:00
enum{ZENextObjNo =0 };
enum{ZENextObjNo2 =TTypeNext2::ENextObjNo2 +1 };
enum{ZEBoolNextObj =0 };
enum{ZEBoolNextObj2=1 };
enum{ZEObjChainCnt =TTypeNext2::EObjChainCnt+1 };
2021-02-25 16:23:13 +09:00
public :
typedef TTypeNow ZCObjNow ;
typedef TTypeNext2 ZCObjNext ; // interface 호환을 위해서만 존재.
typedef TTypeNext2 ZCObjNext2;
private:
ZCObjNow mo_ZCObjNow ;
ZCObjNext2 mo_ZCObjNext2;
public :
ZCObjNow& GetNowObj () {return mo_ZCObjNow ;}
ZCObjNext& GetNextObj () {return mo_ZCObjNext2;} // interface 호환을 위해서만 존재.
ZCObjNext2& GetNextObj2() {return mo_ZCObjNext2;}
/*########################################################*/
const ZCObjNow& GetNowObj () const{return mo_ZCObjNow ;}
const ZCObjNext& GetNextObj () const{return mo_ZCObjNext2;} // interface 호환을 위해서만 존재.
const ZCObjNext2& GetNextObj2() const{return mo_ZCObjNext2;}
public :
};/*
template< typename TTypeNow , typename TTypeNext2
>
class ZtCTmplTreeChain<TTypeNow, ZCEmpty, TTypeNext2> */
template< typename TTypeNow ////////////////////
>
class ZtCTmplTreeChain<TTypeNow, ZCEmpty, ZCEmpty>
{
public :
2021-03-04 15:36:45 +09:00
enum{ZENextObjNo =0};
enum{ZENextObjNo2 =0};
enum{ZEBoolNextObj =0};
enum{ZEBoolNextObj2=0};
enum{ZEObjChainCnt =1};
2021-02-25 16:23:13 +09:00
public :
typedef TTypeNow ZCObjNow ;
typedef ZCObjNow ZCObjNext ; // interface 호환을 위해서만 존재.
typedef ZCObjNow ZCObjNext2; // interface 호환을 위해서만 존재.
private:
ZCObjNow mo_ZCObjNow;
public :
ZCObjNow& GetNowObj () {return mo_ZCObjNow;}
ZCObjNext& GetNextObj () {return mo_ZCObjNow;} // interface 호환을 위해서만 존재.
ZCObjNext2& GetNextObj2() {return mo_ZCObjNow;} // interface 호환을 위해서만 존재.
/*######################################################*/
const ZCObjNow& GetNowObj () const{return mo_ZCObjNow;} // interface 호환을 위해서만 존재.
const ZCObjNext& GetNextObj () const{return mo_ZCObjNow;} // interface 호환을 위해서만 존재.
const ZCObjNext2& GetNextObj2() const{return mo_ZCObjNow;} // interface 호환을 위해서만 존재.
public :
};/*
template< typename TTypeNow ////////////////////
>
class ZtCTmplTreeChain<TTypeNow, ZCEmpty, ZCEmpty>
*/
}/*
namespace ZNsTmplChain*/
/*///////////////////////////////////////////////////////////////////
,
2021-03-04 15:36:45 +09:00
bool enum ZERun .
2021-02-25 16:23:13 +09:00
2021-03-04 15:36:45 +09:00
enum ZERun ,
enum ZERunEx .
2021-02-25 16:23:13 +09:00
-- 2011-09-27 05:37:00
ZEActRun
,
, ZEActRun .
-- 2025-10-03 19:01
2021-02-25 16:23:13 +09:00
///////////////////////////////////////////////////////////////////*/
namespace ZNsEnum
{
2021-03-04 15:36:45 +09:00
enum ZERun
2021-02-25 16:23:13 +09:00
{
2021-03-04 15:36:45 +09:00
ZERun_NO, // 실행 중지
ZERun_OK // 실행 계속
2021-02-25 16:23:13 +09:00
};/*
2021-03-04 15:36:45 +09:00
enum ZERun*/
2021-02-25 16:23:13 +09:00
2021-03-04 15:36:45 +09:00
enum ZERunEx
2021-02-25 16:23:13 +09:00
{
ZERunEx_NO, // 실행 중지
ZERunEx_OK, // 실행 계속
ZERunEx_Err // 실행 에러
2021-02-25 16:23:13 +09:00
};/*
2021-03-04 15:36:45 +09:00
enum ZERun*/
2021-02-25 16:23:13 +09:00
2021-03-04 15:36:45 +09:00
enum ZEAct
2021-02-25 16:23:13 +09:00
{
2021-03-04 15:36:45 +09:00
ZEAct_NO, // (함수 등이) 어떤 조건에 맞지 않아서 아무 짓도 하지 않았다.
ZEAct_OK // (함수 등이) 어떤 조건에 맞아서 지정된 처리를 하였다.
2021-02-25 16:23:13 +09:00
};/*
2021-03-04 15:36:45 +09:00
enum ZEAct*/
2021-02-25 16:23:13 +09:00
2021-03-04 15:36:45 +09:00
enum ZEActEx
2021-02-25 16:23:13 +09:00
{
2021-03-04 15:36:45 +09:00
ZEActEx_NO, // (함수 등이) 어떤 조건에 맞지 않아서 아무 짓도 하지 않았다.
ZEActEx_OK, // (함수 등이) 어떤 조건에 맞아서 지정된 처리를 하였다.
ZEActEx_Err // (함수 등이) 수행 중에 에러가 발생하였다.
2021-02-25 16:23:13 +09:00
};/*
2021-03-04 15:36:45 +09:00
enum ZEAct*/
2021-02-25 16:23:13 +09:00
enum ZEActRun
{
ZEActRun_RunNO =0x01, // 실행 중지
ZEActRun_RunOK =0x02, // 실행 계속
ZEActRun_RunErr=0x04, // 실행 오류
ZEActRun_ActNO =0x08, // 처리 중지
ZEActRun_ActOK =0xA0, // 처리 계속
ZEActRun_ActErr=0xB0 // 처리 오류
};/*
enum ZEAct*/
2021-03-04 15:36:45 +09:00
enum ZEThrowFinally
2021-02-25 16:23:13 +09:00
{
2021-03-04 15:36:45 +09:00
ZEThrowFinally_NO,
ZEThrowFinally_OK
2021-02-25 16:23:13 +09:00
};/*
2021-03-04 15:36:45 +09:00
enum ZEThrowFinally*/
2021-02-25 16:23:13 +09:00
/*////////////////////////////////////////////////
throw ~ catch ~ finally
EThrowFinally .
////////////////////////////////////////////////*/
}/*
namespace ZNsEnum*/
using ZNsEnum::ZERun ;
using ZNsEnum::ZERun_NO ;
using ZNsEnum::ZERun_OK ;
using ZNsEnum::ZERunEx ;
using ZNsEnum::ZERunEx_NO ;
using ZNsEnum::ZERunEx_OK ;
using ZNsEnum::ZERunEx_Err;
namespace ZNsIFace
2021-02-25 16:23:13 +09:00
{
/*////////////////////////////////////////////////////////////////////////////////////
class ZIDelgtMSG C# delegate .
object object ,
object , object ZIDelgtMSG
, ZIDelgtMSG::SendMSG() ZIDelgtMSG::RecvMSG() .
COM . COM .
-- 2009-03-08 02:26:00
class ZIDelgtMSG
namespace ZNsIFace namespace ZNsIDelgt .
2021-02-25 16:23:13 +09:00
-- 2009-03-08 19:17:00
A, B, C .
ZIDelgtMSG , .
. ZIDelgtMSG , interface
.
-- 2010-03-13 22:28:00
////////////////////////////////////////////////////////////////////////////////////*/
class ZIDelgtMSG
{
public:
2021-03-04 15:36:45 +09:00
enum ZEIMsg{ZEIMsg_NO=0, ZEIMsg_OK=1};
2021-02-25 16:23:13 +09:00
public:
virtual ~ZIDelgtMSG(){}
2021-02-25 17:34:50 +09:00
virtual ZTypLLong GetTypeID() const
2021-02-25 16:23:13 +09:00
{
return 0;
}/*
2021-02-25 17:34:50 +09:00
virtual ZTypLLong GetTypeID() const*/
2021-02-25 16:23:13 +09:00
virtual const char* GetTypeName() const
{
return 0;
}/*
virtual const char* GetTypeID() const*/
2021-02-25 17:34:50 +09:00
virtual ZTypLLong GetIMSGPtrOfID(ZTypLLong AI_TypeID, ZIDelgtMSG*& APR_ZIDelgtMSG)
2021-02-25 16:23:13 +09:00
{
2021-03-04 15:36:45 +09:00
APR_ZIDelgtMSG=0; return ZEIMsg_OK;
2021-02-25 16:23:13 +09:00
}/*
2021-02-25 17:34:50 +09:00
virtual ZTypLLong GetIMSGPtrOfID(ZTypLLong AI_TypeID, ZIDelgtMSG*R APR_ZIDelgtMSG)*/
2021-02-25 16:23:13 +09:00
2021-02-25 17:27:36 +09:00
virtual ZTypIntPtr SendMSG(ZIDelgtMSG& ArZIDelgtMSG, ZTypIntI AI_MsgNo, const char* ApcMsgData, ZTypIntI AI_MsgLen, void* AP_Void=0, ...)
2021-02-25 16:23:13 +09:00
{
2021-03-04 15:36:45 +09:00
return ZEIMsg_OK;
2021-02-25 16:23:13 +09:00
}/*
2021-02-25 17:34:50 +09:00
virtual ZTypIntPtr SendMSG(ZIDelgtMSG& ArZIDelgtMSG, ZTypIntI AI_MsgNo, const char* ApcMsgData, ZTypIntI AI_MsgLen,void* AP_Void=0, ...)*/
2021-02-25 16:23:13 +09:00
2021-02-25 17:34:50 +09:00
virtual ZTypIntPtr RecvMSG(ZTypIntI AI_MsgNo, const char* ApcMsgData, ZTypLength AI_MsgLen, void* AP_Void=0, ...)
2021-02-25 16:23:13 +09:00
{
2021-03-04 15:36:45 +09:00
return ZEIMsg_OK;
2021-02-25 16:23:13 +09:00
}/*
2021-02-25 17:34:50 +09:00
virtual ZTypIntPtr RecvMSG(ZTypIntI AI_MsgNo, const char* ApcMsgData, ZTypLength AI_MsgLen, void* AP_Void=0, ...)*/
2021-02-25 16:23:13 +09:00
public:
};/*
class ZIDelgtMSG*/
}/*
namespace ZNsIFace*/
2021-02-25 16:23:13 +09:00
namespace ZNsIDelgt
{
// class ZIDelgtMSG 를 상속하여 추가 멤버함수를 가진
// 인터페이스를 구현하는 클래스일 경우에는 여기에 둔다.
}/*
namespace ZNsIDelgt*/
class ZCAllocator
{
public:
static void* operator new (size_t AL_AllocSize ){return ::malloc(AL_AllocSize);}
static void* operator new[](size_t AL_AllocSize ){return ::malloc(AL_AllocSize);}
static void* operator new (size_t AL_AllocSize, void* AP_AllocBegin){return AP_AllocBegin ;}
static void* operator new[](size_t AL_AllocSize, void* AP_AllocBegin){return AP_AllocBegin ;}
static void operator delete (void* AP_Void){if(AP_Void!=0) ::free(AP_Void);}
static void operator delete[](void* AP_Void){if(AP_Void!=0) ::free(AP_Void);}
public:
};/*
class ZCAllocator*/
/*/////////////////////////////////////////////////////////////////
class ZCAllocator
class ZtCAllocClass<> .
ZtCAllocClass<>
ZtCAllocClass<> 릿
Type .
/////////////////////////////////////////////////////////////////*/
template<typename TType> class ZtCAllocClass : public ZCAllocator
2021-02-25 16:23:13 +09:00
{
public:
TType* InitMem (size_t AL_AllocSize){return (TType*)::malloc(AL_AllocSize) ;}
TType* InitArrMem(size_t AL_AllocSize){return (TType*)::malloc(AL_AllocSize*sizeof(TType));}
public:
void FiniMem (void* AP_Void){if(AP_Void!=0) ::free(AP_Void);}
2021-02-25 16:23:13 +09:00
public:
};/*
template<typename TType> class ZtCAllocClass : public ZCAllocator*/
2021-02-25 16:23:13 +09:00
class ZCAllocClass : public ZCAllocator
{
public:
void* InitMem (size_t AL_AllocSize){return ::malloc(AL_AllocSize) ;}
void FiniMem (void* AP_Void ){if(AP_Void!=0) ::free(AP_Void);}
2021-02-25 16:23:13 +09:00
public:
};/*
class ZCAllocClass : public ZCAllocator*/
/*////////////////////////////////////////////////////////////////////////////////
,
,
.
////////////////////////////////////////////////////////////////////////////////*/
template<typename TTypeCh> class ZtCAllocMemSize
{
public:
template<typename TTypeSize> static TTypeSize
GetNewAllocSize(TTypeSize AL_NowAllocSize, TTypeSize AL_AllAllocSize )
2021-02-25 16:23:13 +09:00
{
/* AL_AllAllocSize : 해당 문자열 object 가 할당받은 문자 총갯수.
AL_NowAllocSize : AL_AllAllocSize . */
return AL_NowAllocSize<=AL_AllAllocSize ? AL_NowAllocSize : AL_NowAllocSize*2 ;
}/*
template<typenanme TTypeSize> static TTypeSize
GetNewAllocSize(TTypeSize AL_NowAllocSize, TTypeSize AL_AllAllocSize ) */
2021-02-25 16:23:13 +09:00
public:
};/*
template<typename TTypeCh> class ZtCAllocMemSize */
/*//////////////////////////////////////////////////////////////
릿 n ,
,
.
//////////////////////////////////////////////////////////////*/
template<typename TTypSize> class ZtCShortCut
{
private:
static inline TTypSize GetAbs(TTypSize AI_Param) // 인수의 절대값을 얻는다.
{
return (AI_Param<0 ? -AI_Param : AI_Param);
}/*
static inline TTypSize GetAbs(TTypSize AI_Param)*/
/*
private:*/
2021-02-25 16:23:13 +09:00
public :
2021-02-25 17:27:36 +09:00
static ZTypIntI GetAbsMinOrder(TTypSize AI_One, TTypSize AI_Two, TTypSize AI_Three)
2021-02-25 16:23:13 +09:00
{
// 세 개의 인수 중에서 절대값이 최소가 되는 수는
// 몇 번째 인지 그 순서를 반환한다.
// 맨 앞의 인수가 절대값이 최소면 1 을 반환한다.
// 두 번째 인수의 절대값이 최소면 2 를 반환한다.
// 세 번째 인수의 절대값이 최소면 3 을 반환한다.
// 이 함수는 양방향 원형 연결리스트에서 n 번째 링크를 찾는데 쓰인다.
return ( GetAbs(AI_One)<=GetAbs(AI_Two ) /******/ ?
(GetAbs(AI_One)<=GetAbs(AI_Three) ? 1 : 3) :
(GetAbs(AI_Two)<=GetAbs(AI_Three) ? 2 : 3)
/****/ );
};/*
2021-02-25 17:27:36 +09:00
static ZTypIntI GetAbsMinOrder(TTypSize AI_One,TTypSize AI_Two, TTypSize AI_Three)*/
2021-02-25 16:23:13 +09:00
public:
};/*
template<typename TTypSize> class ZtCShortCut*/
#ifdef _WIN
using ::GetLastError;
2021-02-25 16:23:13 +09:00
inline ZTypIntI ZfGetLastError(){ return ::GetLastError(); }
2021-02-25 16:23:13 +09:00
template<typename TString> static bool
ZftGetLastErrMSG(TString& ARR_BuffCStr, ZTypIntI AI_ErrNo=0)
2021-02-25 16:23:13 +09:00
{
LPVOID VP_MsgBuff=0; DWORD ViErrNo =
(AI_ErrNo==0 ? ::GetLastError() : AI_ErrNo);
2021-02-25 16:23:13 +09:00
const DWORD CI_RetCode = ::FormatMessage( ///////////////
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS ,
NULL ,
ViErrNo ,
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&VP_MsgBuff,0,NULL
/*//////////*/ ); ///////////////////////////////////////
if(CI_RetCode==0) return false;
(ARR_BuffCStr =
2021-02-25 16:23:13 +09:00
((LPCTSTR)VP_MsgBuff))(", ErrNo=")(ViErrNo);
::LocalFree(VP_MsgBuff); return true;
}/*
template<typename TString> static bool
ZftGetLastErrMSG(TString& ARR_BuffCStr, ZTypIntI AI_ErrNo=0) */
2021-02-25 16:23:13 +09:00
// defined(_WIN)
#elif defined(__unix__)
inline ZTypIntI GetLastError(){return errno ;} // for compatibility with windows
inline ZTypIntI ZfGetLastError()
2021-02-25 16:23:13 +09:00
{
return errno ; // ::error 로 하면 안된다.
}/*
inline ZTypIntI ZfGetLastError()*/
2021-02-25 16:23:13 +09:00
template<typename TString> static bool
ZftGetLastErrMSG(TString& ARR_BuffCStr, ZTypIntI AI_ErrNo=0)
2021-02-25 16:23:13 +09:00
{
if(AI_ErrNo==0)
ARR_BuffCStr = ::strerror(errno );
else ARR_BuffCStr = ::strerror(AI_ErrNo);
return true; // for compatibility with window
}/*
template<typename TString> static bool
ZftGetLastErrMSG(TString& ARR_BuffCStr, ZTypIntI AI_ErrNo=0) */
2021-02-25 16:23:13 +09:00
//#elif defined(__unix__)
#else
inline ZTypIntI ZfGetLastError(){return errno ;}
2021-02-25 16:23:13 +09:00
template<typename TString> static bool
ZftGetLastErrMSG(TString& ARR_BuffCStr, ZTypIntI AI_ErrNo=0)
2021-02-25 16:23:13 +09:00
{
if(AI_ErrNo==0)
ARR_BuffCStr = ::strerror(errno );
else ARR_BuffCStr = ::strerror(AI_ErrNo);
2021-02-25 16:23:13 +09:00
return true; // for compatibility with window
}/*
template<typename TString> static bool
ZftGetLastErrMSG(TString& ARR_BuffCStr, ZTypIntI AI_ErrNo=0) */
2021-02-25 16:23:13 +09:00
#endif
// 절대값을 가져온다.
template<typename TLong> TLong ZfABS(TLong AL_Value)
2021-02-25 16:23:13 +09:00
{
if(AL_Value<0) return -AL_Value; return AL_Value;
}/*
template<typename TLong> TLong ZfABS(TLong AL_Value) */
2021-02-25 16:23:13 +09:00
template<typename TypeInt>
TypeInt ZfAToInt(const char* ApcChar, ZTypIntI AI_Length)
2021-02-25 16:23:13 +09:00
{
if(AI_Length<1) return 0;
while(AI_Length>0 && ApcChar[AI_Length-1]==' ')
--AI_Length; // 뒤에 있는 공백을 제외.
//while
if(AI_Length<1) return 0;
ZTycChar* VPC_Char = ApcChar+AI_Length-1;
TypeInt VL_Temp = 0 ;
TypeInt VL_Result = (*VPC_Char--)-'0' ;
TypeInt VL_Multiple= 1 ;
2021-02-25 16:23:13 +09:00
while(--AI_Length>0)
{
if((VL_Temp=*VPC_Char--)<'0' || VL_Temp>'9' ) return 0;
VL_Result += (VL_Multiple*=10)*(VL_Temp-'0') ; ////////
}/*
while(--AI_Length>0)*/
return VL_Result;
}/*
template<typename TypeInt>
TypeInt ZfAToInt(const char* ApcChar, ZTypIntI AI_Length) */
2021-02-25 16:23:13 +09:00
#ifdef _WIN
inline ZTypLLong ZfAtoLL(const char* ApcChar)
2021-02-25 16:23:13 +09:00
{
if(ApcChar==0) return 0; return ::_atoi64(ApcChar);
}/*
inline ZTypLLong ZfAtoLL(const char* ApcChar)*/
2021-02-25 16:23:13 +09:00
#else // !defined(_WIN)
inline ZTypLLong ZfAtoLL(const char* ApcChar)
2021-02-25 16:23:13 +09:00
{
if(ApcChar==0) return 0; return ::atoll(ApcChar);
}/*
inline ZTypLLong ZfAtoLL(const char* ApcChar)*/
2021-02-25 16:23:13 +09:00
#endif // !defined(_WIN)
inline ZTypLLong ZfAtoLL(const char* ApcChar, ZTypIntI AI_Length)
2021-02-25 16:23:13 +09:00
{
return ZfAToInt<ZTypLLong>(ApcChar, AI_Length);
2021-02-25 16:23:13 +09:00
}/*
inline ZTypLLong ZfAtoL(const char* ApcChar, ZTypIntI AI_Length)*/
2021-02-25 16:23:13 +09:00
inline ZTypLong ZfAtoL(const char* ApcChar)
2021-02-25 16:23:13 +09:00
{
if(ApcChar==0) return 0; return ::atol(ApcChar);
2021-02-25 16:23:13 +09:00
}/*
inline ZTypLong ZfAtoL(const char* ApcChar)*/
2021-02-25 16:23:13 +09:00
inline ZTypLong ZfAtoL(const char* ApcChar, ZTypIntI AI_Length)
2021-02-25 16:23:13 +09:00
{
return ZfAToInt<ZTypLong>(ApcChar, AI_Length);
2021-02-25 16:23:13 +09:00
}/*
inline ZTypLong ZfAtoL(const char* ApcChar, ZTypIntI AI_Length)*/
2021-02-25 16:23:13 +09:00
inline ZTypIntI ZfAtoI(const char* ApcChar)
2021-02-25 16:23:13 +09:00
{
if(ApcChar==0) return 0; return ::atoi(ApcChar);
2021-02-25 16:23:13 +09:00
}/*
inline ZTypIntI ZfAtoI(const char* ApcChar)*/
2021-02-25 16:23:13 +09:00
inline ZTypIntI ZfAtoI(const char* ApcChar, ZTypIntI AI_Length)
2021-02-25 16:23:13 +09:00
{
return ZfAToInt<ZTypIntI>(ApcChar, AI_Length);
2021-02-25 16:23:13 +09:00
}/*
inline ZTypIntI ZfAtoI(const char* ApcChar, ZTypIntI AI_Length)*/
2021-02-25 16:23:13 +09:00
inline double ZfAtoD(const char* ApcChar)
2021-02-25 16:23:13 +09:00
{
return ApcChar==0 ? 0 : ::atof(ApcChar) ;
}/*
inline double ZfAtoD(const char* ApcChar)*/
inline ZTypLLong AtoLL(const char* ApcChar){return ZfAtoLL(ApcChar);}
inline ZTypLong AtoL (const char* ApcChar){return ZfAtoL (ApcChar);}
inline ZTypIntI AtoI (const char* ApcChar){return ZfAtoI (ApcChar);}
inline double AtoD (const char* ApcChar){return ZfAtoD (ApcChar);}
inline ZTypLLong AtoLL(const char* ApcChar, ZTypIntI AI_Length)
{ return ZfAToInt<ZTypLLong>(ApcChar, AI_Length); }
inline ZTypLong AtoL (const char* ApcChar, ZTypIntI AI_Length)
{ return ZfAToInt<ZTypLong >(ApcChar, AI_Length); }
inline ZTypIntI AtoI (const char* ApcChar, ZTypIntI AI_Length)
{ return ZfAToInt<ZTypIntI >(ApcChar, AI_Length); }
2021-02-25 16:23:13 +09:00
template<typename TTypeCh> inline
ZTypLength ZftGetLength(const TTypeCh* ApcChar)
2021-02-25 16:23:13 +09:00
{
2021-02-25 17:47:58 +09:00
if(ApcChar==0) return 0;
ZTypLength VL_Length=0;
2021-02-25 17:47:58 +09:00
while(*(ApcChar+VL_Length)!=_T('\0'))
++VL_Length;
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
2021-02-25 17:47:58 +09:00
return VL_Length;
2021-02-25 16:23:13 +09:00
}/*
template<typename TTypeCh> inline
ZTypLength ZftGetLength(const TTypeCh* ApcChar) */
2021-02-25 16:23:13 +09:00
template<typename TTypeSize, typename TTypeCh>
inline TTypeSize ZftGetLengthType(const TTypeCh* ApcChar)
2021-02-25 16:23:13 +09:00
{
if(ApcChar==0) return 0;
2021-02-25 17:45:17 +09:00
TTypeSize VL_Length=0 ;
2021-02-25 16:23:13 +09:00
while(*(ApcChar+VL_Length)!=_T('\0'))
++VL_Length;
2021-02-25 17:45:17 +09:00
/////////////////////////////////////
return VL_Length;
2021-02-25 16:23:13 +09:00
}/*
template<typename TTypeSize, typename TTypeCh>
inline TTypeSize ZftGetLengthType(const TTypeCh* ApcChar) */
template<typename TTypeCh>
inline ZTypLength ZftLength(const TTypeCh* ApcChar)
{
return ZftGetLength(ApcChar);
}/*
template<typename TTypeCh>
inline ZTypLength ZftLength(const TTypeCh* ApcChar) */
template<typename TTypeSize, typename TTypeCh>
inline TTypeSize ZftLengthType(const TTypeCh* ApcChar)
{
return ZftGetLengthType<TTypeSize, TTypeCh>(ApcChar);
}/*
template<typename TTypeSize, typename TTypeCh>
inline TTypeSize ZftLengthType(const TTypeCh* ApcChar) */
2021-02-25 16:23:13 +09:00
/*//////////////////////////////////////////////////////////////////////////////////////
ZftCopyChars() AL_DestSize , ZNsWin.H CRegistry
Windows Strsafe.h StringCchCopy() . mingw
Strsafe.h . StringCchCopy() .
2021-02-25 16:23:13 +09:00
HRESULT StringCchCopy(
__out LPTSTR pszDest,
__in size_t cchDest,
__in LPCTSTR pszSrc
);
This function can return one of the following values. It is strongly recommended
that you use the SUCCEEDED and FAILED macros to test the return value of this function.
Return code
S_OK : Source data was present, fully copied without truncation, and the resultant
destination buffer is null-terminated.
STRSAFE_E_INVALID_PARAMETER : The value in cchDest is either 0 or larger than STRSAFE_MAX_CCH.
STRSAFE_E_INSUFFICIENT_BUFFER : The copy operation failed due to insufficient buffer
space. The destination buffer contains a truncated, null-terminated version of the
intended result. In situations where truncation is acceptable, this may not necessarily
be seen as a failure condition.
-- 2012-08-15 07:40:00
//////////////////////////////////////////////////////////////////////////////////////*/
template<typename TTypeCh, typename TTypeSize> TTypeSize
ZftCopyChars(TTypeCh* ApcDest, TTypeSize AL_DestSize, const TTypeCh* ApcSource)
2021-02-25 16:23:13 +09:00
{
/* ApcSource must be null-terminated. AL_DestSize
must be equal to or more than strlen(ApcSource)+1.
Null ApcDest .
*/
typedef const TTypeCh TTypcCh;
2021-02-25 16:23:13 +09:00
if(ApcSource==0) return 0 ;
2021-02-25 16:23:13 +09:00
TTypeSize VL_SourceSize=0 ;
TTypeCh* VPC_Dest =ApcDest ;
TTypcCh* VPC_Source =ApcSource;
2021-02-25 16:23:13 +09:00
for(; VL_SourceSize<AL_DestSize; ++VL_SourceSize)
{
if(*ApcSource==0)
{
if(VL_SourceSize<AL_DestSize+1)
{ *VPC_Dest=0; return VL_SourceSize+1; }
2021-02-25 16:23:13 +09:00
return VL_SourceSize;
}/*
if(*ApcSource==0)*/
*VPC_Dest = *VPC_Source;
}/*
for(; VL_SourceSize<AL_DestSize; ++VL_SourceSize)*/
}/*
template<typename TTypeCh, typename TTypeSize> TTypeSize
ZftCopyChars(TTypeCh* ApcDest, TTypeSize AL_DestSize, const TTypeCh* ApcSource) */
2021-02-25 16:23:13 +09:00
/*######################################################################################
ZtCInit<>, ZCInit .
1) data OnInit() .
2) data OnFini() .
2) .
, Onfini()
.
-- 2025-09-11 11:00
container typename TType2 , container .
-- 2025-09-11 11:03
######################################################################################*/
2021-02-25 16:23:13 +09:00
template<typename TType> class ZtCInit
{
public:
enum{ZEUseInit=0};
enum{ZEUseFini=0};
2021-02-25 16:23:13 +09:00
public:
template<typename TType2>
static void OnInit(TType& AR_TypeArg, TType2& AR_TypeArg2){}
template<typename TType2>
static void OnFini(TType& AR_TypeArg, TType2& AR_TypeArg2){}
2021-02-25 16:23:13 +09:00
public:
};/*
template<typename TType> class ZtCInit*/
class ZCInit
{
public:
enum{ZEUseInit=0};
enum{ZEUseFini=0};
public:
template<typename TType, typename TType2>
static void OnInit(TType& AR_TypeArg, TType2& AR_TypeArg2){}
template<typename TType, typename TType2>
static void OnFini(TType& AR_TypeArg, TType2& AR_TypeArg2){}
2021-02-25 16:23:13 +09:00
public:
};/*
class ZCInit*/
class ZCExceptBase
2021-02-25 16:23:13 +09:00
{
public: void* operator()(){return 0;}
};/*
class ZCExceptBase*/
2021-02-25 16:23:13 +09:00
// 예외 기반 클래스를 template 로 하면 여러 기법을 사용할 수 있다.
template< typename TType, typename TypeArg=const TType&
>
class ZtCExceptBase /*/////////////////////////////////*/
2021-02-25 16:23:13 +09:00
{
protected:
TType mo_Type;
public :
ZtCExceptBase(){}
2021-02-25 16:23:13 +09:00
ZtCExceptBase(TypeArg TypeArgObj):mo_Type(TypeArgObj){}
2021-02-25 16:23:13 +09:00
TType& operator()(){return mo_Type;}
public :
};/*
template< typename TType, typename TypeArg=const TType&
>
class ZtCExceptBase ///////////////////////////////////*/
2021-02-25 16:23:13 +09:00
/*/////////////////////////////////////////////////////////////////////////////////
private .
template class class member template , class object
, ,
class class .
, CAsyncServ_H CAsyncServ_T<> ,
.
-- 2010-12-20 23:51:00
/////////////////////////////////////////////////////////////////////////////////*/
class ZCNonCopyable
2021-02-25 16:23:13 +09:00
{
private:
ZCNonCopyable(const ZCNonCopyable& rhs){}
ZCNonCopyable& operator=(const ZCNonCopyable& rhs){return *this;}
2021-02-25 16:23:13 +09:00
public :
ZCNonCopyable(){}
2021-02-25 16:23:13 +09:00
public :
};/*
class ZCNonCopyable*/
2021-02-25 16:23:13 +09:00
/*///////////////////////////////////////////////////////////////////////////
- - class
class ZCFreeAllocBase . object
.
///////////////////////////////////////////////////////////////////////////*/
class ZCFreeAllocBase
{
public:
virtual ~ZCFreeAllocBase(){}
virtual long GetHeapSize() const{return 0;}
virtual long GetMemSize () const{return 0;}
const char* GetTypeName() const
{
return typeid(*this).name();
}/*
const char* GetTypeName() const*/
virtual void DeleteAllInHeap(){}
public:
};/*
class ZCFreeAllocBase*/
namespace ZNsIFace
{
// 자료 구조에서 자유 기억 공간을 구현하는 interface
class ZIFreeHeap
{
public:
template<typename TLinkList> class ZtCBody
{
public:
typedef typename TLinkList::ZCLink ZCLink ;
typedef typename TLinkList::TypeSize TypeSize;
public:
_NP_ void RecvFreeIn(ZCLink* AP_CutLink){}
_NP_ void RecvFreeIn /////////////////////
(
TypeSize AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
{ } //////////////////////////////////////
_NP_ ZCLink* SendFreeOut(){}
_NP_ void SendFreeOut /////////////////
(
TypeSize AL_NeedCnt ,
ZCLink*& APR_NewHead,
ZCLink*& APR_NewTail
)
{ } //////////////////////////////////////
_NP_ void SendFreeOutCopy /*////////////////////////////*/
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
{ } /*//////////////////////////////////////////////////*/
_NP_ void DeleteHeap(){}
_NP_ void MakeEuqal(ZtCBody& rhs)
{
}/*
_NP_ void MakeEuqal(ZtCBody& rhs)*/
_NP_ TypeSize GetUseHeapSize() const
{
return 0;
}/*
_NP_ TypeSize GetUseHeapSize() const*/
_NP_ TypeSize GetAllHeapSize() const
{
return 0;
}/*
_NP_ TypeSize GetAllHeapSize() const*/
_NP_ TypeSize size() const
{
return GetUseHeapSize();
}/*
_NP_ TypeSize size() const*/
public:
};/*
template<typename TLinkList> class ZtCBody*/
public:
};/*
class ZIFreeHeap*/
}/*
namespace ZNsIFace*/
namespace ZNsIFaceEx
{
/*################################################################
interface
class ,
ZtCFreeHeapSngl<> ,
ZtCFreeHeapCDL <> .
,
ZtCFreeHeapSngl<>::ZCLink ZtCFreeHeapCDL<>::ZCLink
friend .
template<int>
friend class ZNsIFaceEx::ZtCFreeHeapSngl ;
################################################################*/
template<int TTypIListKind=0> class ZtCFreeHeapSngl // Single List
{
public:
template<typename TSnglList> class ZtCBody
{
public:
typedef typename TSnglList::ZCLink ZCLink ;
typedef typename TSnglList::TypeSize TypeSize;
/*:::::::::::::::::::::::::::::::::::::::::::::::::::
ZCLink non-public ,
ZCLink ZtCBody friend
, friend , ZCLink
class class
.
-- 2025-09-14 12:34
:::::::::::::::::::::::::::::::::::::::::::::::::::*/
public:
_NP_ void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}
_NP_ void RecvFreeIn ///////////////////////////////////////
(
TypeSize AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
////////////////////////////////////////////////////////////
{
ZCLink* VP_DelLink = AP_CutHead;
__for0(TypeSize, i, AL_CutCnt)
{
AP_CutHead = AP_CutHead->GetNextPtr();
delete VP_DelLink; VP_DelLink=AP_CutHead;
}/*
__for0(TypeSize, i, AL_CutCnt)*/
}
////////////////////////////////////////////////////////////
_NP_ ZCLink* SendFreeOut(){return new ZCLink;}
_NP_ void SendFreeOut ///////////////////////////////////
(
TypeSize AL_NeedCnt ,
ZCLink*& APR_HeadLink ,
ZCLink*& APR_TailLink
)
////////////////////////////////////////////////////////////
{
APR_HeadLink = new ZCLink;
ZCLink* VP_MakeLink = 0 ;
ZCLink* VP_TailLink = APR_HeadLink;
while(--AL_NeedCnt>0) // AL_NeedCnt - 1 번 순환
{
// AL_NeedCnt - 1 번 순환
VP_MakeLink = new ZCLink;
ZCLink::JoinLink
(VP_TailLink, VP_MakeLink);
VP_TailLink = VP_MakeLink ;
}/*
while(--AL_NeedCnt>0)*/
APR_TailLink = VP_TailLink;
}
////////////////////////////////////////////////////////////
_NP_ void SendFreeOutCopy /*////////////////////////////*/
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
//////////////////////////////////////////////////////////
{
// 총 AL_FarNum+1 개의 링크가 만들어짊.
ZCLink* VP_MakeLink = 0 ;
ZCLink* VP_TailLink = 0 ;
VP_TailLink = VP_MakeLink =
new ZCLink( **AP_LinkOrgin );
APR_HeadCopy = VP_MakeLink;
while(--AL_FarNum >= 0)
{
AP_LinkOrgin= AP_LinkOrgin->GetNextPtr();
VP_MakeLink = new ZCLink(**AP_LinkOrgin);
ZCLink::JoinLink
(VP_TailLink, VP_MakeLink);
VP_TailLink = VP_MakeLink ;
}/*
while(--AL_FarNum >= 0)*/
APR_TailCopy=VP_TailLink;
}/*
_NP_ void SendFreeOutCopy //////////////////////////////
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
////////////////////////////////////////////////////////*/
_NP_ void DeleteHeap(){}
_NP_ void MakeEuqal(ZtCBody& rhs)
{
}/*
_NP_ void MakeEuqal(ZtCBody& rhs)*/
_NP_ TypeSize GetUseHeapSize() const
{
return 0;
}/*
_NP_ TypeSize GetUseHeapSize() const*/
_NP_ TypeSize size() const
{
return GetUseHeapSize();
}/*
_NP_ TypeSize size() const*/
public:
};/*
template<typename TSnglList> class ZtCBody*/
public:
};/*
template<int TTypIListKind=0> class ZtCFreeHeapSngl*/
template<int TTypIListKind=0> class ZtCFreeHeapCDL // Circular Double List
{
public:
template<typename TLinkList> class ZtCBody
{
public:
typedef typename TLinkList::ZCLink ZCLink ;
typedef typename TLinkList::TypeSize TypeSize;
public:
_NP_ void RecvFreeIn(ZCLink* AP_CutLink){delete AP_CutLink;}
_NP_ void RecvFreeIn ///////////////////////////////////////
(
TypeSize AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
////////////////////////////////////////////////////////////
{
ZCLink* VP_DelLink = AP_CutHead;
__for0(TypeSize, i, AL_CutCnt)
{
AP_CutHead = AP_CutHead->GetNextPtr() ;
delete VP_DelLink; VP_DelLink=AP_CutHead;
}/*
__for0(TypeSize, i, AL_CutCnt)*/
}
////////////////////////////////////////////////////////////
_NP_ ZCLink* SendFreeOut(){return new ZCLink;}
_NP_ void SendFreeOut ///////////////////////////////////
(
TypeSize AL_NeedCnt ,
ZCLink*& APR_HeadLink ,
ZCLink*& APR_TailLink
)
////////////////////////////////////////////////////////////
{
APR_HeadLink = new ZCLink;
ZCLink* VP_MakeLink = 0 ;
ZCLink* VP_TailLink = APR_HeadLink;
while(--AL_NeedCnt>0) // AL_NeedCnt - 1 번 순환
{
// AL_NeedCnt - 1 번 순환
VP_MakeLink = new ZCLink;
ZCLink::JoinLink
(VP_TailLink, VP_MakeLink);
VP_TailLink = VP_MakeLink ;
}/*
while(--AL_NeedCnt>0)*/
APR_TailLink = VP_TailLink;
}
////////////////////////////////////////////////////////////
_NP_ void SendFreeOutCopy /*////////////////////////////*/
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
//////////////////////////////////////////////////////////
{
// 총 AL_FarNum+1 개의 링크가 만들어짊
ZCLink* VP_MakeLink = 0 ;
ZCLink* VP_TailLink = 0 ;
VP_TailLink = VP_MakeLink =
new ZCLink(**AP_LinkOrgin) ;
APR_HeadCopy = VP_MakeLink;
while(--AL_FarNum >= 0)
{
AP_LinkOrgin= AP_LinkOrgin->GetNextPtr();
VP_MakeLink = new ZCLink(**AP_LinkOrgin);
ZCLink::JoinLink
(VP_TailLink, VP_MakeLink);
VP_TailLink = VP_MakeLink;
}/*
while(--AL_FarNum >= 0)*/
APR_TailCopy=VP_TailLink;
}/*
_NP_ void SendFreeOutCopy //////////////////////////////
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
////////////////////////////////////////////////////////*/
_NP_ void DeleteHeap(){}
_NP_ void MakeEuqal(ZtCBody& rhs)
{
}/*
_NP_ void MakeEuqal(ZtCBody& rhs)*/
_NP_ TypeSize GetUseHeapSize() const
{
return 0;
}/*
_NP_ TypeSize GetUseHeapSize() const*/
_NP_ TypeSize size() const
{
return GetUseHeapSize();
}/*
TypeSize size() const*/
public:
};/*
template<typename TLinkList> class ZtCBody*/
public:
};/*
template<int TTypIListKind=0> class ZtCFreeHeapCDL*/
}/*
namespace ZNsIFaceEx*/
namespace ZNsConst
{
// cf) ZtCSimList, ZtObjList
const int CI_ListKind_Single = 10 ;
const int CI_ListKind_Double = 20 ;
}/*
namespace ZNsConst*/
2021-02-25 16:23:13 +09:00
/*//////////////////////////////////////////////////////////////////
릿 object
, object
object enum typedef
. object 릿
ZtCObjPtr<> .
2021-02-25 16:23:13 +09:00
typedef ZtCStringBase<char > CStringBase;
typedef ZtCObjPtr <CStringBase> CObjectPtr ;
2021-02-25 16:23:13 +09:00
CStringBase::TypeChar
2021-02-25 16:23:13 +09:00
CObjectPtr::TypeData::TypeChar .
2021-02-25 16:23:13 +09:00
ZtCObjPtr<>
2021-02-25 16:23:13 +09:00
ZtCTypeData<> . .
-- 2010-01-24 22:25:00
//////////////////////////////////////////////////////////////////*/
template
<typename TType, typename TTypArgu=const TType&>
class ZtCObjPtr
2021-02-25 16:23:13 +09:00
{
public :
typedef TType TypeData ;
typedef TTypArgu TypeArg ;
2021-02-25 16:23:13 +09:00
protected:
TypeData& mr_TypeData;
2021-02-25 16:23:13 +09:00
public :
ZtCObjPtr(TType& AR_CData) : mr_TypeData(AR_CData ){}
ZtCObjPtr(ZtCObjPtr& AR_Rhs ) : mr_TypeData(AR_Rhs.mr_TypeData){}
2021-02-25 16:23:13 +09:00
TypeData* operator->(){return &mr_TypeData;}
TypeData& operator* (){return mr_TypeData;}
operator TypeData& (){return mr_TypeData;}
2021-02-25 16:23:13 +09:00
ZtCObjPtr& operator=(const ZtCObjPtr& rhs)
{
if(this==&rhs) return *this;
mr_TypeData = rhs.mr_TypeData; return *this;
}/*
ZtCObjPtr& operator=(const ZtCObjPtr& rhs)*/
ZtCObjPtr& operator=(TTypArgu AO_ArguData)
{
mr_TypeData = AO_ArguData; return *this;
}/*
ZtCObjPtr& operator=(TTypArgu AO_ArguData)*/
2021-02-25 16:23:13 +09:00
public :
};/*
template<typename TType> class ZtCObjPtr */
2021-02-25 16:23:13 +09:00
/*///////////////////////////////////////////////////////////
2021-02-25 16:23:13 +09:00
object heap , .
-- 2014-07-20 04:49:00
///////////////////////////////////////////////////////////*/
2021-02-25 16:23:13 +09:00
template< typename TType, typename TAllocClass=ZCAllocClass
>
class ZtCObjNew : public TAllocClass ////////////////////////
2021-02-25 16:23:13 +09:00
{
public :
typedef TType TypeData ;
2021-02-25 16:23:13 +09:00
typedef TAllocClass ZCAllocator;
typedef TAllocClass ZCAlloClass;
2021-02-25 16:23:13 +09:00
private:
struct StTypeRefCnt
{
TType MO_TypeData;
ZTypInt MI_RefCount;
StTypeRefCnt(){MI_RefCount=0;}
};/*
struct StTypeRefCnt*/
private:
StTypeRefCnt* mp_StTypeRefCnt;
public :
ZtCObjNew()
2021-02-25 16:23:13 +09:00
{
mp_StTypeRefCnt = (StTypeRefCnt*)
this->ZCAllocator::InitMem(sizeof(StTypeRefCnt));
2021-02-25 16:23:13 +09:00
mp_StTypeRefCnt->MI_RefCount = 1 ;
new(&mp_StTypeRefCnt->MO_TypeData) TypeData;
}/*
ZtCObjNew()*/
2021-02-25 16:23:13 +09:00
ZtCObjNew(const TypeData& AR_TypeData)
2021-02-25 16:23:13 +09:00
{
mp_StTypeRefCnt = (StTypeRefCnt*)
this->ZCAllocator::InitMem(sizeof(StTypeRefCnt));
2021-02-25 16:23:13 +09:00
mp_StTypeRefCnt->MI_RefCount = 1 ;
new(&mp_StTypeRefCnt->MO_TypeData) TypeData(AR_TypeData);
}/*
ZtCObjNew(const TypeData& AR_TypeData)*/
2021-02-25 16:23:13 +09:00
template<typename TTypeArg1, typename TTypeArg2>
ZtCObjNew(TTypeArg1& ArTTypeArg1, TTypeArg2& ArTTypeArg2)
2021-02-25 16:23:13 +09:00
{
mp_StTypeRefCnt = (StTypeRefCnt*)
this->ZCAllocator::InitMem(sizeof(StTypeRefCnt));
2021-02-25 16:23:13 +09:00
mp_StTypeRefCnt->MI_RefCount = 1 ;
new(&mp_StTypeRefCnt->MO_TypeData)
TypeData(ArTTypeArg1, ArTTypeArg2);
}/*
template<typename TTypeArg1, typename TTypeArg2>
ZtCObjNew(TTypeArg1& ArTTypeArg1, TTypeArg2& ArTTypeArg2))*/
2021-02-25 16:23:13 +09:00
ZtCObjNew(const ZtCObjNew& rhs)
2021-02-25 16:23:13 +09:00
{
mp_StTypeRefCnt = rhs.mp_StTypeRefCnt ;
++mp_StTypeRefCnt->MI_RefCount ;
2021-02-25 16:23:13 +09:00
}/*
ZtCObjNew(const ZtCObjNew& rhs)*/
2021-02-25 16:23:13 +09:00
~ZtCObjNew()
2021-02-25 16:23:13 +09:00
{
if(--mp_StTypeRefCnt->MI_RefCount <= 0)
this->ZCAllocator::FiniMem(mp_StTypeRefCnt);
2021-02-25 16:23:13 +09:00
}/*
~ZtCObjNew()*/
2021-02-25 16:23:13 +09:00
ZtCObjNew& operator=(const ZtCObjNew& rhs)
2021-02-25 16:23:13 +09:00
{
if(this==&rhs || mp_StTypeRefCnt==rhs.mp_StTypeRefCnt)
{ return *this; }
/*++++++++++++++++++++++++++++++++++++++++++++++++++*/
2021-02-25 16:23:13 +09:00
mp_StTypeRefCnt->MO_TypeData =
rhs.mp_StTypeRefCnt->MO_TypeData ;
return *this; ////////////////////
2021-02-25 16:23:13 +09:00
}/*
ZtCObjNew& operator=(const ZtCObjNew& rhs)*/
2021-02-25 16:23:13 +09:00
ZtCObjNew& operator=(const TypeData& AR_TypeData)
2021-02-25 16:23:13 +09:00
{
if(&mp_StTypeRefCnt->MO_TypeData==&AR_TypeData) return *this;
mp_StTypeRefCnt->MO_TypeData = AR_TypeData; return *this;
2021-02-25 16:23:13 +09:00
}/*
ZtCObjNew& operator=(const TypeData& AR_TypeData)*/
2021-02-25 16:23:13 +09:00
TypeData& operator* (){return mp_StTypeRefCnt->MO_TypeData;}
TypeData* operator->(){return &mp_StTypeRefCnt->MO_TypeData;}
operator TypeData& (){return mp_StTypeRefCnt->MO_TypeData;}
ZTypInt GetRefCnt () const{return mp_StTypeRefCnt->MI_RefCount;}
TypeData* GetObjPtr () const{return &mp_StTypeRefCnt->MO_TypeData;}
2021-02-25 16:23:13 +09:00
public :
};/*
template< typename TType, typename TAllocClass=ZCAllocClass
>
class ZtCObjNew : public TAllocClass //////////////////////*/
2021-02-25 16:23:13 +09:00
#ifdef _DEBUG
/*/////////////////////////////////////////////////////////////////////
_REENTRANT .
_REENTRANT .
-- 2009-12-23 10:38:00
/////////////////////////////////////////////////////////////////////*/
inline void _DEBUG_REENTRANT_Check()
{
if(_REENTRANT_BOOL_<1)
{
std::fstream fileout("DEBUG.txt", std::ios::out | std::ios::app);
fileout<<"◆◆ Error! : _REENTRANT is Not Defined In Multi-Thread"<<std::endl;
fileout.close();
::exit(1);
}/*
if(_REENTRANT_BOOL_<1)*/
}/*
inline void _DEBUG_REENTRANT_Check()*/
#define _DEBUG_REENTRANT_CHECK_ _DEBUG_REENTRANT_Check();
#else // !defined(_DEBUG)
#define _DEBUG_REENTRANT_CHECK_
#endif // !defined(_DEBUG)
#if defined(_REENTRANT)
class ZCExceptSmallLock : public ZCExceptBase
2021-02-25 16:23:13 +09:00
{
private:
long ml_ErrCode;
string mo_ErrMSG ;
public :
ZCExceptSmallLock(long AL_ErrCode, const char* AP_ErrMSG)
{
ml_ErrCode=AL_ErrCode; //////////////
if(AP_ErrMSG!=0) mo_ErrMSG=AP_ErrMSG;
}/*
ZCExceptSmallLock(long AL_ErrCode, const char* AP_ErrMSG)*/
long GetErrCode() const{return ml_ErrCode;}
const string& GetErrMSG () const{return mo_ErrMSG ;}
2021-02-25 16:23:13 +09:00
public:
};/*
class ZCExceptSmallLock : public ZCExceptBase*/
2021-02-25 16:23:13 +09:00
#endif //defined(_REENTRANT)
#if defined(_REENTRANT) && defined(_WIN)
/*//////////////////////////////////////////////////////
object .
BOOL TryEnterCriticalSection(LPCRITICAL_SECTION)
.
//////////////////////////////////////////////////////*/
class ZCMutexSmallLock;
class ZCMutexSmallInit
{
private:
HANDLE mh_Mutex;
public :
/*/////////////////////////////////////////////////////////
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# g++.exe -o ZtCArray_000_mw.exe ZtCArray_000.cpp -I../
In file included from ../ZCppMain/ZtCArray.H:7,
from ZtCArray_000.cpp:4:
../ZCppMain/ZMainHead.H:3115:21: error: ISO C++17 does not allow dynamic exception specifications
3115 | void Lock() throw(ZCExceptSmallLock&)
/////////////////////////////////////////////////////////*/
void Lock() /*throw(ZCExceptSmallLock&)*/
2021-02-25 16:23:13 +09:00
{
long VL_ErrCode=0;
if((VL_ErrCode = ::WaitForSingleObject(mh_Mutex, INFINITE))==WAIT_ABANDONED)
{
throw ZCExceptSmallLock(VL_ErrCode, "ZCMutexSmallInit::Lock()");
}/*
if((VL_ErrCode = ::WaitForSingleObject(mh_Mutex, INFINITE))==WAIT_ABANDONED)*/
}/*
void Lock() /*throw(ZCExceptSmallLock&)*/
2021-02-25 16:23:13 +09:00
void UnLock()
{
::ReleaseMutex(mh_Mutex);
}/*
void UnLock()*/
ZCMutexSmallInit()
{
/* MUTEX 를 신호 상태로 만들고 이 함수를 호출한 쓰레드가 MUTEX 를 소유하지 않게
. . */
mh_Mutex = ::CreateMutex(NULL, FALSE, NULL);
}/*
ZCMutexSmallInit()*/
~ZCMutexSmallInit()
{
::CloseHandle(mh_Mutex);
}/*
~ZCMutexSmallInit()*/
public:
};/*
class ZCMutexSmallInit*/
class ZCMutexSmallLock
{
private:
ZCMutexSmallInit& mr_ZCMutexInit;
public :
ZCMutexSmallLock(ZCMutexSmallInit& ArZCMutexInit):mr_ZCMutexInit(ArZCMutexInit)
{
mr_ZCMutexInit.Lock();
}/*
ZCMutexSmallLock(ZCMutexSmallInit& ArZCMutexInit)*/
~ZCMutexSmallLock()
{
mr_ZCMutexInit.UnLock();
}/*
~ZCMutexSmallLock()*/
public:
};/*
class ZCMutexSmallLock*/
#elif defined(_REENTRANT) && defined(__unix__)
// 유닉스(특히 리눅스) 상에서 _REENTRANT 이 정의되어 있으면
// -lpthread 옵션을 잊지 말 것.
class ZCMutexSmallLock;
class ZCMutexSmallInit
{
private:
::pthread_mutex_t mo_Mutex;
public :
void Lock() throw(ZCExceptSmallLock&)
{
long VL_ErrCode=0;
if((VL_ErrCode = ::pthread_mutex_lock(&mo_Mutex))!=0)
2021-02-25 16:23:13 +09:00
{
throw ZCExceptSmallLock(VL_ErrCode, "ZCMutexSmallInit::Lock()");
}/*
if((VL_ErrCode = ::pthread_mutex_lock(&mo_Mutex))!=0)*/
2021-02-25 16:23:13 +09:00
}/*
void Lock() throw(ZCExceptSmallLock&)*/
void UnLock() throw(ZCExceptSmallLock&)
{
long VL_ErrCode=0;
if((VL_ErrCode=::pthread_mutex_unlock(&mo_Mutex))!=0)
{
throw ZCExceptSmallLock(VL_ErrCode, "ZCMutexSmallInit::UnLock()");
}/*
if((VL_ErrCode=::pthread_mutex_unlock(&mo_Mutex))!=0)*/
}/*
void UnLock() throw(ZCExceptSmallLock&)*/
ZCMutexSmallInit() throw(ZCExceptSmallLock&)
{
::pthread_mutexattr_t VO_MutexAttr;
::pthread_mutexattr_init(&VO_MutexAttr);
::pthread_mutexattr_settype(&VO_MutexAttr, PTHREAD_MUTEX_RECURSIVE);
long VL_ErrCode=0;
if((VL_ErrCode = ::pthread_mutex_init(&mo_Mutex, &VO_MutexAttr))!=0)
2021-02-25 16:23:13 +09:00
{
throw ZCExceptSmallLock(VL_ErrCode, "ZCMutexSmallInit::ZCMutexSmallInit()");
}/*
if((VL_ErrCode = ::pthread_mutex_init(&mo_Mutex, &VO_MutexAttr))!=0)*/
2021-02-25 16:23:13 +09:00
}/*
ZCMutexSmallInit() throw(ZCExceptSmallLock&)*/
~ZCMutexSmallInit() throw(ZCExceptSmallLock&)
{
long VL_ErrCode=0;
if((VL_ErrCode = ::pthread_mutex_destroy(&mo_Mutex))!=0)
2021-02-25 16:23:13 +09:00
{
throw ZCExceptSmallLock(VL_ErrCode, "ZCMutexSmallInit::~ZCMutexSmallInit()");
}/*
if((VL_ErrCode = ::pthread_mutex_destroy(&mo_Mutex))!=0)*/
2021-02-25 16:23:13 +09:00
}/*
~ZCMutexSmallInit() throw(ZCExceptSmallLock&)*/
public:
};/*
class ZCMutexSmallInit*/
class ZCMutexSmallLock
{
private:
ZCMutexSmallInit& mr_ZCMutexInit;
public :
ZCMutexSmallLock(ZCMutexSmallInit& ArZCMutexInit):mr_ZCMutexInit(ArZCMutexInit)
{
mr_ZCMutexInit.Lock();
}/*
ZCMutexSmallLock(ZCMutexSmallInit& ArZCMutexInit)*/
~ZCMutexSmallLock()
{
mr_ZCMutexInit.UnLock();
}/*
~ZCMutexSmallLock()*/
public:
};/*
class ZCMutexSmallLock*/
// defined(_REENTRANT) && defined(__unix__)
#elif defined(_REENTRANT)
// _REENTRANT 이 정의되어 있으면 -lpthread 옵션을 잊지 말 것.
class ZCMutexSmallLock;
class ZCMutexSmallInit
{
private:
::pthread_mutex_t mo_Mutex;
public :
void Lock() throw(ZCExceptSmallLock&)
{
long VL_ErrCode=0;
if((VL_ErrCode=::pthread_mutex_lock(&mo_Mutex))!=0)
{
throw ZCExceptSmallLock(VL_ErrCode, "ZCMutexSmallInit::Lock()");
}/*
if((VL_ErrCode=::pthread_mutex_lock(&mo_Mutex))!=0)*/
}/*
void Lock() throw(ZCExceptSmallLock&)*/
void UnLock() throw(ZCExceptSmallLock&)
{
long VL_ErrCode=0;
if((VL_ErrCode=::pthread_mutex_unlock(&mo_Mutex))!=0)
{
throw ZCExceptSmallLock(VL_ErrCode, "ZCMutexSmallInit::UnLock()");
}/*
if((VL_ErrCode=::pthread_mutex_unlock(&mo_Mutex))!=0)*/
}/*
void UnLock() throw(ZCExceptSmallLock&)*/
ZCMutexSmallInit() throw(ZCExceptSmallLock&)
{
::pthread_mutexattr_t VO_MutexAttr;
::pthread_mutexattr_init(&VO_MutexAttr);
::pthread_mutexattr_settype(&VO_MutexAttr, PTHREAD_MUTEX_RECURSIVE);
long VL_ErrCode=0;
if((VL_ErrCode= ::pthread_mutex_init(&mo_Mutex, &VO_MutexAttr))!=0)
2021-02-25 16:23:13 +09:00
{
throw ZCExceptSmallLock(VL_ErrCode, "ZCMutexSmallInit::ZCMutexSmallInit()");
}/*
if((VL_ErrCode= ::pthread_mutex_init(&mo_Mutex, &VO_MutexAttr))!=0)*/
2021-02-25 16:23:13 +09:00
}/*
ZCMutexSmallInit() throw(ZCExceptSmallLock&)*/
~ZCMutexSmallInit() throw(ZCExceptSmallLock&)
{
long VL_ErrCode=0;
if((VL_ErrCode= ::pthread_mutex_destroy(&mo_Mutex))!=0)
2021-02-25 16:23:13 +09:00
{
throw ZCExceptSmallLock(VL_ErrCode, "ZCMutexSmallInit::~ZCMutexSmallInit()");
}/*
if((VL_ErrCode= ::pthread_mutex_destroy(&mo_Mutex))!=0)*/
2021-02-25 16:23:13 +09:00
}/*
~ZCMutexSmallInit() throw(ZCExceptSmallLock&)*/
public:
};/*
class ZCMutexSmallInit*/
class ZCMutexSmallLock
{
private:
ZCMutexSmallInit& mr_ZCMutexInit;
public :
ZCMutexSmallLock(ZCMutexSmallInit& ArZCMutexInit):mr_ZCMutexInit(ArZCMutexInit)
{
mr_ZCMutexInit.Lock();
}/*
ZCMutexSmallLock(ZCMutexSmallInit& ArZCMutexInit)*/
~ZCMutexSmallLock()
{
mr_ZCMutexInit.UnLock();
}/*
~ZCMutexSmallLock()*/
public :
};/*
class ZCMutexSmallLock*/
#endif //defined(_REENTRANT)
#if defined(_DEBUG) && defined(_REENTRANT)
class ZCSyncLog
{
private :
typedef ZCMutexSmallInit ZCSync;
2021-02-25 16:23:13 +09:00
protected:
static ZCSync& GetCSync()
2021-02-25 16:23:13 +09:00
{
static ZCSync SO_CSyncLog; return SO_CSyncLog;
2021-02-25 16:23:13 +09:00
}/*
static ZCSync& GetCSync()*/
2021-02-25 16:23:13 +09:00
public :
ZCSyncLog (){GetCSync().Lock ();}
~ZCSyncLog(){GetCSync().UnLock();}
public :
};/*
class ZCSyncLog*/
#endif // defined(_DEBUG) && defined(_REENTRANT)
#ifdef _DEBUG
static inline void ZfWriteError(const char* ApcErrorStr)
2021-02-25 16:23:13 +09:00
{
std::fstream fileout(
"DEBUG.txt", std::ios::out | std::ios::app);
fileout<<ApcErrorStr<<std::endl;
fileout.close();
::exit(1);
}/*
static inline void ZfWriteError(const char* ApcErrorStr)*/
2021-02-25 16:23:13 +09:00
/*///////////////////////////////////////////////////////////////////
object object container .
container (DEBUG )
Stack container new
. container container new,
delete .
///////////////////////////////////////////////////////////////////*/
class ZCCheckAlloc
{
public :
class ZCAllowAlloc; friend class ZCAllowAlloc;
private:
static bool& GetAllowAllocBool()
{
static bool SB_AllowAlloc=false; return SB_AllowAlloc;
}/*
static bool& GetAllowAllocBool()*/
/*private:*/
public :
ZCCheckAlloc()
{
if(GetAllowAllocBool()==false)
{
cout<<endl<<"Warning! Unallowed Object Memory Allocation!"<<endl<<endl;
}/*
if(GetAllowAllocBool()==false)*/
}/*
ZCCheckAlloc()*/
static bool IsAllowAlloc()
{
return GetAllowAllocBool();
}/*
static bool IsAllowAlloc()*/
/*public:*/
public:
class ZCAllowAlloc
{
private:
bool mb_AllowAlready ;
/*///////////////////////////////////////////////////////
ZCAllowAlloc object
,
ZCCheckAlloc::GetAllowAllocBool()=false;
.
ZCCheckAlloc::GetAllowAllocBool() true .
--
///////////////////////////////////////////////////////*/
/*private:*/
public :
ZCAllowAlloc()
{
mb_AllowAlready=ZCCheckAlloc::GetAllowAllocBool();
ZCCheckAlloc::GetAllowAllocBool()=true; //////////
}/*
ZCAllowAlloc()*/
~ZCAllowAlloc()
{
if(mb_AllowAlready==false)
ZCCheckAlloc::GetAllowAllocBool()=false;
2021-02-25 16:23:13 +09:00
}/*
ZCAllowAlloc()*/
public:
};/*
class ZCAllowAlloc()*/
public:
};/*
class ZCCheckAlloc*/
static ZTypIntL SI_Count_DEBUG=0;
#endif //_DEBUG
namespace ZNsConst
{
#if defined(_WIN)
#define __DIR_DELIMITERS__ "\\"
#define __DIR_DELIMITER__ '\\'
ZTypCPCCh CPC_DirDelimiter="\\";
ZTypCChar CC_DirDelimiter ='\\';
ZTypCPCCh CPC_Delm ="\\";
ZTypCChar CC_Delm ='\\';
2021-02-25 16:23:13 +09:00
#else //!(defined(_WIN)
#define __DIR_DELIMITERS__ "/"
#define __DIR_DELIMITER__ '/'
ZTypCPCCh CPC_DirDelimiter="/" ;
ZTypCChar CC_DirDelimiter ='/' ;
ZTypCPCCh CPC_Delm ="/" ;
ZTypCChar CC_Delm ='/' ;
2021-02-25 16:23:13 +09:00
#endif //!(defined(_WIN)
}/*
namespace ZNsConst*/
template<typename TStringData> TStringData& ZftConvertXhtml(TStringData& ARRoCString)
{
/* 데이타를 그대로 클라이언트에 전송하면, HTML 태그와
, .
*/
return ARRoCString.
Replace("&" ,"&amp;" ). Replace("<" ,"&lt;" ).
Replace(">" ,"&gt;" ). Replace(" " ,"&nbsp;").
Replace("\n","<br />" );
}/*
template<typename TStringData> TStringData& ConvertXhtml(TStringData& ARRoCString) */
template<typename TStringData> TStringData& ZftMakeXmlAttEnc(TStringData& ARRoCStringData)
{
return ARRoCStringData.
Replace("&" , "&amp;" ).Replace("\r", "&#xA;" ).
Replace("\n", "&#xD;" ).Replace("\t", "&#x9;" ).
Replace("\"", "&quot;").Replace(">" , "&gt;" ).Replace("<", "&lt;");
}/*
template<typename TStringData> TStringData& ZftMakeXmlAttEnc(TStringData& ARRoCStringData)*/
template<typename TStringData> TStringData& ZftMakeXmlAttDec(TStringData& ARRoCStringData)
{
return ARRoCStringData.
Replace("&#xA;" ,"\r" ). Replace("&#xD;" ,"\n").
Replace("&#x9;" ,"\t" ). Replace("&quot;","\"").
Replace("&gt;" ,">" ). Replace("&lt;" ,"<" ). Replace("&amp;" ,"&" );
}/*
template<typename TStringData> TStringData& ZftMakeXmlAttDec(TStringData& ARRoCStringData)*/
template<typename TString, typename TObject>
TString& ZftMakeStr(TString& ARR_SaveCStr, TObject AO_Object)
{ return ARR_SaveCStr; }
////////////////////////////////////////////
template<> string& ZftMakeStr(string& ARR_SaveCStr, const string& AR_DataCStr)
{
ARR_SaveCStr.append(AR_DataCStr); return ARR_SaveCStr;
}/*
template<> string& ZftMakeStr(string& ARR_SaveCStr, const string& AR_DataCStr)*/
template<> string& ZftMakeStr(string& ARR_SaveCStr, long AL_Long)
{
ZTycInt CI_BuffSize = 31 ;
ZTypChar VCA_BuffParam[CI_BuffSize] ;
ZTypInt VI_ResultSize =
::sprintf(VCA_BuffParam, "%ld", AL_Long);
ARR_SaveCStr.append
(VCA_BuffParam, VI_ResultSize);
return ARR_SaveCStr;
}/*
template<> string& ZftMakeStr(string& ARR_SaveCStr, long AL_Long)*/
template<> string& ZftMakeStr(string& ARR_SaveCStr, double AD_Double)
{
ZTycInt CI_BuffSize=51 ;
ZTypChar VCA_BuffParam[CI_BuffSize];
ZTypInt VI_ResultSize = ::sprintf
(
VCA_BuffParam, "%f", AD_Double
);
/////////////////////////////
ARR_SaveCStr.append
(VCA_BuffParam, VI_ResultSize);
return ARR_SaveCStr;
}/*
template<> string& ZftMakeStr(string& ARR_SaveCStr, double AD_Double)*/
template<> string& ZftMakeStr(string& ARR_SaveCStr, bool AB_Bool)
{
if (AB_Bool)
ARR_SaveCStr.append("true" );
else ARR_SaveCStr.append("false");
return ARR_SaveCStr;
}/*
template<> string& ZftMakeStr(string& ARR_SaveCStr, bool AB_Bool)*/
// class ZtCBaseList : circular double linked list
template //////////////////////////////////////////////////////////////////
<
typename TType ,
typename TTypArgu = const TType& ,
typename TTypeAlloc = ZCAllocator ,
typename TTypSize = ZTypLong ,
typename TMoveObj = ZNsMain::
ZtCMoveObj<TType, TTypArgu, true> ,
typename TTypeCRTP = ZNsType::ZtCTypeCRTP<ZCEmpty, false>
>
class ZtCBaseList /*#####################################################*/
{
public:
class ZCLink;
public:
typedef TType TypeData ;
typedef TTypArgu TypeArg ;
typedef TTypeAlloc TypeAlloc ;
typedef TTypSize TypeSize ;
typedef TMoveObj TypeMoveObj ;
typedef ZCLink* IterEasy ; // 가장 대표적으로 쓰일 수 있는 반복자.
typedef ZCLink* iterator ;
public:
typedef ZNsType::ZtCTypeNowCRTP ///////////////////////////////////////
<
ZtCBaseList, typename TTypeCRTP::TypeData, TTypeCRTP::ZEUseCRTP
>
ZCTypeNowCRTP ; ///////////////////////////////////////////////////////
typedef typename ZCTypeNowCRTP::TypeData TypeChild;
public :
class ZCLink : public TypeAlloc
{
public :
friend class ZtCBaseList;
private:
TypeData mo_DataObjt ;
ZCLink* mp_NextLink ;
ZCLink* mp_PrevLink ;
private:
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
ZCLink* GetNextPtr() {return mp_NextLink;}
ZCLink* GetPrevPtr() {return mp_PrevLink;}
const ZCLink* GetNextPtr()const{return mp_NextLink;}
const ZCLink* GetPrevPtr()const{return mp_PrevLink;}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
private:
static void JoinLink(ZCLink* AP_PrevLink, ZCLink* AP_NextLink)
{
AP_PrevLink->mp_NextLink=AP_NextLink;
AP_NextLink->mp_PrevLink=AP_PrevLink;
}/*
static void JoinLink(ZCLink* AP_PrevLink, ZCLink* AP_NextLink)*/
static void MakeRing(ZCLink* AP_HeadLink, ZCLink* AP_TailLink)
{
AP_HeadLink->mp_PrevLink=AP_TailLink;
AP_TailLink->mp_NextLink=AP_HeadLink;
}/*
static void MakeRing(ZCLink* AP_HeadLink, ZCLink* AP_TailLink)*/
public:
ZCLink()
{
mp_NextLink = mp_PrevLink = 0;
}/*
ZCLink()*/
ZCLink(const ZCLink& rhs)
{
mo_DataObjt = rhs.mo_DataObjt ;
mp_NextLink = 0 ;
mp_PrevLink = 0 ;
}/*
ZCLink(const ZCLink& rhs)*/
ZCLink(TypeArg AR_Data)
{
mo_DataObjt = AR_Data ;
mp_NextLink = 0 ;
mp_PrevLink = 0 ;
}/*
ZCLink(const ZCLink& rhs)*/
ZCLink& operator=(const ZCLink& rhs)
{
mo_DataObjt = rhs.mo_DataObjt; return *this;
}/*
ZCLink& operator=(const ZCLink& rhs)*/
ZCLink* GetNextPrevPtr(TypeSize AL_FarNum)
{
ZCLink* VP_TmpLink=this;
if(AL_FarNum>=0)
{ while(--AL_FarNum>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
else{ while(++AL_FarNum<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
return VP_TmpLink;
}/*
ZCLink* GetNextPrevPtr(TypeSize AL_FarNum)*/
const ZCLink* GetNextPrevPtr(TypeSize AL_FarNum) const
{
ZCLink* VP_TmpLink=const_cast<ZCLink*>(this);
if(AL_FarNum>=0)
{ while(--AL_FarNum>=0) VP_TmpLink=VP_TmpLink->mp_NextLink; }
else{ while(++AL_FarNum<=0) VP_TmpLink=VP_TmpLink->mp_PrevLink; }
return VP_TmpLink;
}/*
const ZCLink* GetNextPrevPtr(TypeSize AL_FarNum) const*/
operator TypeData& (){return mo_DataObjt;}
operator TypeData (){return mo_DataObjt;}
TypeData& GetData (){return mo_DataObjt;}
TypeData& operator*(){return mo_DataObjt;}
operator const TypeData& () const{return mo_DataObjt;}
const TypeData& GetData () const{return mo_DataObjt;}
const TypeData& operator*() const{return mo_DataObjt;}
ZCLink& operator+(TypeSize AL_Distance)
{ return *GetNextPrevPtr( AL_Distance); }
ZCLink& operator-(TypeSize AL_Distance)
{ return *GetNextPrevPtr(-AL_Distance); }
const ZCLink& operator+(TypeSize AL_Distance) const
{ return *GetNextPrevPtr( AL_Distance); }
const ZCLink& operator-(TypeSize AL_Distance) const
{ return *GetNextPrevPtr(-AL_Distance); }
public:
};/*
class ZCLink*/
public :
private :
ZCLink* mp_HeadLink ;
ZCLink* mp_TailLink ;
TypeSize ml_LinkSize ;
private :
TypeChild& GetChildObj()
{
return *static_cast<TypeChild*>(this);
}/*
TypeChild& GetChildObj()*/
protected:
ZCLink* NewLink()
{
return new ZCLink;
}/*
ZCLink* NewLink()*/
ZCLink* NewLink(TypeArg AO_ArgData)
{
return new ZCLink(AO_ArgData);
}/*
ZCLink* NewLink(TypeArg AO_ArgData)*/
void NewLink ////////////////////////////////////////
(
TypeSize AL_NeedCnt ,
ZCLink*& APR_HeadLink ,
ZCLink*& APR_TailLink
)
/////////////////////////////////////////////////////
{
APR_HeadLink = new ZCLink;
ZCLink* VP_MakeLink = 0 ;
ZCLink* VP_TailLink = APR_HeadLink;
while(--AL_NeedCnt>0) // AL_NeedCnt - 1 번 순환
{
// AL_NeedCnt - 1 번 순환
VP_MakeLink = new ZCLink;
ZCLink::JoinLink
(VP_TailLink, VP_MakeLink);
VP_TailLink = VP_MakeLink ;
}/*
while(--AL_NeedCnt>0)*/
APR_TailLink = VP_TailLink;
}/*
void NewLink ////////////////////////////////////////
(
TypeSize AL_NeedCnt ,
ZCLink*& APR_HeadLink ,
ZCLink*& APR_TailLink
)
///////////////////////////////////////////////////*/
void NewLinkCopy //////////////////////////////////
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
/////////////////////////////////////////////////////
{
// 총 AL_FarNum+1 개의 링크가 만들어짊
ZCLink* VP_MakeLink = 0 ;
ZCLink* VP_TailLink = 0 ;
VP_TailLink = VP_MakeLink =
new ZCLink(**AP_LinkOrgin) ;
APR_HeadCopy = VP_MakeLink;
while(--AL_FarNum >= 0)
{
AP_LinkOrgin= AP_LinkOrgin->GetNextPtr();
VP_MakeLink = new ZCLink(**AP_LinkOrgin);
ZCLink::JoinLink
(VP_TailLink, VP_MakeLink);
VP_TailLink = VP_MakeLink;
}/*
while(--AL_FarNum >= 0)*/
APR_TailCopy=VP_TailLink;
}/*
void NewLinkCopy //////////////////////////////////
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
///////////////////////////////////////////////////*/
void DelLink(ZCLink* AP_DelLink)
{
delete AP_DelLink;
}/*
void DelLink(ZCLink* AP_DelLink)*/
void DelLink //////////////////////////////////////////
(
TypeSize AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
///////////////////////////////////////////////////////
{
ZCLink* VP_DelLink = AP_CutHead;
__for0(TypeSize, i, AL_CutCnt)
{
AP_CutHead = AP_CutHead->GetNextPtr() ;
delete VP_DelLink; VP_DelLink=AP_CutHead;
}/*
__for0(TypeSize, i, AL_CutCnt)*/
}
///////////////////////////////////////////////////////
/*protected:*/
private :
_VT_ ZCLink* SendFreeOut()
{
if(TTypeCRTP::ZEUseCRTP<1) return NewLink();
return GetChildObj().SendFreeOut();
}/*
_VT_ ZCLink* SendFreeOut()*/
_VT_ ZCLink* SendFreeOut(TypeArg AO_ArgData)
{
if(TTypeCRTP::ZEUseCRTP<1)
{ return NewLink(AO_ArgData); }
return GetChildObj().SendFreeOut(AO_ArgData);
}/*
_VT_ ZCLink* SendFreeOut(TypeArg AO_ArgData)*/
_VT_ void SendFreeOut
(TypeSize AL_NeedCnt, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink)
{
if(TTypeCRTP::ZEUseCRTP<1)
{
NewLink(AL_NeedCnt, APR_HeadLink, APR_TailLink); return;
}/*
if(TTypeCRTP::ZEUseCRTP<1)*/
return GetChildObj().SendFreeOut
(AL_NeedCnt, RR(APR_HeadLink), RR(APR_TailLink));
}/*
_VT_ void SendFreeOut
(TypeSize AL_NeedCnt, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink)
*/
_VT_ void SendFreeOutCopy /*///////////////////////*/
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
/////////////////////////////////////////////////////
{
// 총 AL_FarNum+1 개의 링크가 만들어짊
if(TTypeCRTP::ZEUseCRTP<1)
{
NewLinkCopy(AP_LinkOrgin, AL_FarNum, APR_HeadCopy, APR_TailCopy); return;
}/*
if(TTypeCRTP::ZEUseCRTP<1)*/
return GetChildObj().SendFreeOutCopy
(AP_LinkOrgin, AL_FarNum, RR(APR_HeadCopy), RR(APR_TailCopy));
}/*
_VT_ void SendFreeOutCopy /////////////////////////
(
ZCLink* AP_LinkOrgin, TypeSize AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
///////////////////////////////////////////////////*/
_VT_ void RecvFreeIn(ZCLink* AP_DelLink)
{
if(TTypeCRTP::ZEUseCRTP<1)
{ DelLink(AP_DelLink); return; }
GetChildObj().RecvFreeIn(AP_DelLink);
}/*
_VT_ void RecvFreeIn(ZCLink* AP_DelLink)*/
_VT_ void RecvFreeIn //////////////////////////////////
(
TypeSize AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
///////////////////////////////////////////////////////
{
if(TTypeCRTP::ZEUseCRTP<1)
{
DelLink
(AL_CutCnt, AP_CutHead, AP_CutTail);
return;
}/*
if(TTypeCRTP::ZEUseCRTP<1)*/
GetChildObj().RecvFreeIn(AL_CutCnt, AP_CutHead, AP_CutTail);
}/*
_VT_ void RecvFreeIn //////////////////////////////////
(
TypeSize AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
/////////////////////////////////////////////////////*/
/*private :*/
private :
ZCLink* AddTailLink(ZCLink* AP_NewLink)
{
if(ml_LinkSize<1)
{
mp_HeadLink = AP_NewLink;
mp_TailLink = AP_NewLink;
ZCLink::MakeRing
( mp_HeadLink, mp_TailLink ) ;
ml_LinkSize= 1; return AP_NewLink;
}/*
if(ml_LinkSize<1)*/
ZCLink::JoinLink(mp_TailLink, AP_NewLink) ;
ZCLink::MakeRing(mp_HeadLink, AP_NewLink) ;
mp_TailLink = AP_NewLink; ++ml_LinkSize ;
return AP_NewLink; /*::::::::::::::::::::*/
}/*
ZCLink* AddTailLink(ZCLink* AP_CLink)*/
ZCLink* AddHeadLink(ZCLink* AP_NewLink)
{
if(ml_LinkSize<1)
{
mp_HeadLink = AP_NewLink;
mp_TailLink = AP_NewLink;
ZCLink::MakeRing
( mp_HeadLink, mp_TailLink ) ;
ml_LinkSize= 1; return AP_NewLink;
}/*
if(ml_LinkSize<1)*/
ZCLink::JoinLink(AP_NewLink, mp_HeadLink) ;
ZCLink::MakeRing(AP_NewLink, mp_TailLink) ;
mp_HeadLink = AP_NewLink; ++ml_LinkSize ;
return AP_NewLink; /*::::::::::::::::::::*/
}/*
ZCLink* AddHeadLink(ZCLink* AP_CLink)*/
/*private :*/
public :
ZtCBaseList()
{
mp_HeadLink = 0 ;
mp_TailLink = 0 ;
ml_LinkSize = 0 ;
}/*
ZtCBaseList()*/
ZtCBaseList(const ZtCBaseList& rhs)
{
mp_HeadLink = 0 ;
mp_TailLink = 0 ;
ml_LinkSize = 0 ;
*this = (rhs);
}/*
ZtCBaseList(const ZtCBaseList& rhs)*/
~ZtCBaseList()
{
DeleteAll();
}/*
~ZtCBaseList()*/
ZtCBaseList& operator=(const ZtCBaseList& rhs)
{
if(this==&rhs) return *this;
if(rhs.size()<1)
{ this->DeleteAll(); return *this; }
TypeSize VL_MinusSize = this->size() - rhs.size() ;
if (VL_MinusSize>0)
{
RecvFreeIn ////////////////////////////////////////
(
VL_MinusSize,
mp_HeadLink ,
mp_HeadLink->GetNextPrevPtr(VL_MinusSize-1)
);
///////////////////////////////////////////////////
ml_LinkSize -= VL_MinusSize;
}
else if(VL_MinusSize<0)
{
ZCLink* VP_HeadLink=0;
ZCLink* VP_TailLink=0;
SendFreeOut ////////////////////////////////////////
(
-VL_MinusSize ,
RR(VP_HeadLink) ,
RR(VP_TailLink)
);
///////////////////////////////////////////////////
if(ml_LinkSize>0)
{
ZCLink::JoinLink(mp_TailLink, VP_HeadLink);
ZCLink::MakeRing(mp_HeadLink, VP_TailLink);
mp_TailLink = VP_TailLink ;
}
else
{
mp_HeadLink = VP_HeadLink ;
mp_TailLink = VP_TailLink ;
ZCLink::MakeRing(mp_HeadLink, VP_TailLink);
}/*
else*/
ml_LinkSize += (-VL_MinusSize);
}/*
else if(VL_MinusSize<0)*/
ZCLink* VP_RhsLink = rhs.mp_HeadLink ;
ZCLink* VP_LhsLink = mp_HeadLink ;
__for0(TypeSize, i, rhs.size())
{
**VP_LhsLink = **VP_RhsLink ;
VP_RhsLink = VP_RhsLink->mp_NextLink;
VP_LhsLink = VP_LhsLink->mp_NextLink;
}/*
__for0(TypeSize, i, rhs.size())*/
return *this;
}/*
ZtCBaseList& operator=(const ZtCBaseList& rhs)*/
void DeleteAll()
{
if(ml_LinkSize<1) return;
RecvFreeIn
(ml_LinkSize, mp_HeadLink, mp_TailLink);
mp_HeadLink =0 ;
mp_TailLink =0 ;
ml_LinkSize =0 ;
}/*
void DeleteAll()*/
TypeData& AddHead()
{ return **AddHeadLink(SendFreeOut()); }
TypeData& AddTail()
{ return **AddTailLink(SendFreeOut()); }
TypeData& AddHead(TypeArg AO_ArgData) /*########################*/
{
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
ZCLink* VP_NewNode = SendFreeOut(AO_ArgData);
TypeMoveObj::Exec(**VP_NewNode, AO_ArgData);
return AddHeadLink(VP_NewNode)->mo_DataObjt;
}
////////////////////////////////////////////////////
#endif
return AddHeadLink(new ZCLink(AO_ArgData))->mo_DataObjt;
}/*
TypeData& AddHead(TypeArg AO_ArgData) ##########################*/
TypeData& AddTail(TypeArg AO_ArgData) /*########################*/
{
#if(_CODE_NEW_)
if(TypeMoveObj::ZEUseMoveObj>0) ////////////////////
{
ZCLink* VP_NewNode = SendFreeOut(AO_ArgData);
TypeMoveObj::Exec(*VP_NewNode, AO_ArgData);
return AddTailLink(VP_NewNode)->mo_DataObjt;
}
////////////////////////////////////////////////////
#endif
return AddTailLink(new ZCLink(AO_ArgData))->mo_DataObjt;
}/*
TypeData& AddTail(TypeArg AO_ArgData) ##########################*/
ZtCBaseList& AddHead(ZtCBaseList& rhs)
{
if(this == &rhs ) return *this;
if(rhs.size()<1 ) return *this;
ZtCBaseList VO_TempList(rhs);
return JoinHead(VO_TempList);
}/*
ZtCBaseList& AddHead(ZtCBaseList& rhs)*/
ZtCBaseList& AddTail(ZtCBaseList& rhs)
{
if(this == &rhs ) return *this;
if(rhs.size()<1 ) return *this;
ZtCBaseList VO_TempList(rhs);
return JoinTail(VO_TempList);
}/*
ZtCBaseList& AddTail(ZtCBaseList& rhs)*/
void DeleteHead()
{
if(ml_LinkSize<1) return;
ZCLink* VP_TempLink = mp_HeadLink ;
mp_HeadLink = mp_HeadLink->mp_NextLink ;
RecvFreeIn(VP_TempLink);
if(--ml_LinkSize<1)
{
mp_HeadLink = mp_TailLink =0; return;
}/*
if(--ml_LinkSize<1)*/
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
}/*
void DeleteHead()*/
void DeleteTail()
{
if(ml_LinkSize<1) return;
ZCLink* VP_TempLink = mp_TailLink ;
mp_TailLink = mp_TailLink->mp_PrevLink ;
RecvFreeIn(VP_TempLink);
if(--ml_LinkSize<1)
{
mp_HeadLink = mp_TailLink =0; return;
}/*
if(--ml_LinkSize<1)*/
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
}/*
void DeleteTail()*/
void DeleteHead(TTypSize AL_DelSize)
{
// AL_DelSize 개의 링크를 앞 부분에서 삭제
if(ml_LinkSize<1 || AL_DelSize<1){ return; }
if(AL_DelSize > ml_LinkSize){ AL_DelSize=ml_LinkSize; }
if(AL_DelSize==ml_LinkSize)
{
RecvFreeIn
(ml_LinkSize, mp_HeadLink, mp_TailLink);
mp_HeadLink=0 ;
mp_TailLink=0 ;
ml_LinkSize=0 ;
return;
}/*
if(AL_DelSize==ml_LinkSize)*/
ZCLink* VP_NewHead =
mp_HeadLink->GetNextPrevPtr( AL_DelSize ) ;
RecvFreeIn
(AL_DelSize, mp_HeadLink, VP_NewHead->mp_PrevLink);
mp_HeadLink = VP_NewHead ;
ml_LinkSize -= AL_DelSize ;
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
}/*
void DeleteHead(TTypSize AL_DelSize)*/
void DeleteTail(TTypSize AL_DelSize)
{
if(ml_LinkSize==0 || AL_DelSize<1){ return; }
if(AL_DelSize> ml_LinkSize){ AL_DelSize=ml_LinkSize; }
if(AL_DelSize==ml_LinkSize)
{
RecvFreeIn
(ml_LinkSize, mp_HeadLink, mp_TailLink);
mp_HeadLink=0 ;
mp_TailLink=0 ;
ml_LinkSize=0 ;
return;
}/*
if(AL_DelSize==ml_LinkSize)*/
ZCLink* VP_NewTail =
mp_TailLink->GetNextPrevPtr( -AL_DelSize ) ;
RecvFreeIn
(AL_DelSize, VP_NewTail->mp_NextLink, mp_TailLink);
mp_TailLink = VP_NewTail ;
ml_LinkSize -= AL_DelSize ;
ZCLink::MakeRing(mp_HeadLink, mp_TailLink);
}/*
void DeleteTail(TTypSize AL_DelSize)*/
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLink* AP_StdLink)
{
// AP_StdLink 의 뒤에 rhs 를 삽입.
if(rhs.ml_LinkSize<1) return *this;
if(AP_StdLink==0) // 맨 앞에 삽입
{
if(ml_LinkSize<1)
{
mp_HeadLink = rhs.mp_HeadLink ;
mp_TailLink = rhs.mp_TailLink ;
ml_LinkSize = rhs.ml_LinkSize ;
}
else // ml_LinkSize>=1
{
ZCLink::JoinLink( rhs.mp_TailLink, mp_HeadLink );
ZCLink::MakeRing( rhs.mp_HeadLink, mp_TailLink );
mp_HeadLink = rhs.mp_HeadLink ;
ml_LinkSize = rhs.ml_LinkSize ;
}/*
else // ml_LinkSize>=1*/
ml_LinkSize += rhs.ml_LinkSize;
rhs.mp_HeadLink = 0 ;
rhs.mp_TailLink = 0 ;
rhs.ml_LinkSize = 0 ;
return *this;
}/*
if(AP_StdLink==0)*/
ZCLink* VP_StdNext=AP_StdLink->mp_NextLink;
ZCLink::JoinLink(AP_StdLink , rhs.mp_HeadLink );
ZCLink::JoinLink(rhs.mp_TailLink, VP_StdNext );
if(AP_StdLink==mp_TailLink)
{ mp_TailLink=rhs.mp_TailLink; }
rhs.mp_HeadLink =0 ;
rhs.mp_TailLink =0 ;
rhs.ml_LinkSize =0 ;
ml_LinkSize += rhs.ml_LinkSize; return *this;
}/*
ZtCBaseList& JoinAfter(ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLink* AP_StdLink)
{
// AP_StdLink 의 앞에 rhs 를 삽입.
if(rhs.size()<1) return *this;
if(AP_StdLink==0) // 맨 뒤에 삽입
{
if(ml_LinkSize<1)
{
mp_HeadLink = rhs.mp_HeadLink ;
mp_TailLink = rhs.mp_TailLink ;
ml_LinkSize = rhs.ml_LinkSize ;
}
else // ml_LinkSize>=1
{
ZCLink::JoinLink(mp_TailLink, rhs.mp_HeadLink );
ZCLink::MakeRing(mp_HeadLink, rhs.mp_TailLink );
mp_TailLink = rhs.mp_TailLink ;
ml_LinkSize += rhs.ml_LinkSize ;
}/*
else // ml_LinkSize>=1*/
rhs.mp_HeadLink=0;
rhs.mp_TailLink=0;
rhs.ml_LinkSize=0;
ml_LinkSize += rhs.ml_LinkSize; return *this;
}/*
if(AP_StdLink==0)*/
ZCLink* VP_StdPrev = AP_StdLink->mp_PrevLink;
ZCLink::JoinLink( VP_StdPrev , rhs.mp_HeadLink );
ZCLink::JoinLink(rhs.mp_TailLink, AP_StdLink );
if(AP_StdLink==mp_HeadLink)
{ mp_HeadLink = rhs.mp_HeadLink; }
rhs.mp_HeadLink =0 ;
rhs.mp_TailLink =0 ;
rhs.ml_LinkSize =0 ;
ml_LinkSize += rhs.ml_LinkSize; return *this;
}/*
ZtCBaseList& JoinBefore(ZtCBaseList& rhs, ZCLink* AP_StdLink)*/
ZtCBaseList& JoinHead(ZtCBaseList& rhs)
{ if(this==&rhs) return *this; return JoinAfter (rhs, 0); }
ZtCBaseList& JoinTail(ZtCBaseList& rhs)
{ if(this==&rhs) return *this; return JoinBefore(rhs, 0); }
TypeData& GetHeadData(){return mp_HeadLink->mo_DataObjt;}
TypeData& GetTailData(){return mp_TailLink->mo_DataObjt;}
const TypeData& GetHeadData() const{return mp_HeadLink->mo_DataObjt;}
const TypeData& GetTailData() const{return mp_TailLink->mo_DataObjt;}
operator TypeData&() { return AddTail() ; }
TypeSize size() const{ return ml_LinkSize; }
TypeSize GetSize() const{ return ml_LinkSize; }
_VT_ TypeSize capacity ()
{ if(TTypeCRTP::ZEUseCRTP<1) return 0;
return GetChildObj().capacity ();
}
_VT_ TypeSize size_free()
{ if(TTypeCRTP::ZEUseCRTP<1) return 0;
return GetChildObj().size_free();
}
void push_front(TypeArg AO_ArgData){AddHead(AO_ArgData);}
void push_back (TypeArg AO_ArgData){AddTail(AO_ArgData);}
void pop_front(){DeleteHead();}
void pop_back (){DeleteTail();}
TypeData& front(){return GetHeadData();}
TypeData& back (){return GetTailData();}
const TypeData& front() const{return GetHeadData();}
const TypeData& back () const{return GetTailData();}
template<typename TFunctor> void IterElement(TFunctor AO_Functor)
{
ZCLink* VP_LoopLink=mp_HeadLink;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(VP_LoopLink->mo_DataObjt);
/* 위 코드로 인해서, AO_Functor 이 함수일 때 뿐이 아니라,
operator() object
.
ZftMCP() 릿 . -- 2025-09-27 00:38
*/
VP_LoopLink = VP_LoopLink->mp_NextLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template<typename TFunctor> void IterElement(TFunctor AO_Functor) */
template<typename TFunctor, typename TTypeHelp>
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
{
/*/////////////////////////////////////////////////////////////////////////////
TTypeHelp class , ,
IterElement<myFunctor, myClass&>(myFunctor_obj, myClass_Obj);
, ZtCObjectPtr<> ,
myClass myClass_Obj; ZtCObjectPtr<myClass> myCObjPtr(myClass_Obj);
IterElement(myFunctor_obj, ZtCObjectPtr<myClass>(myClass_Obj));
. -- 2014-06-16 23:11:00
ZtCRef ZCCheckRef 릿 . -- 2021-03-11 11:00
ZftMCP() 릿 . -- 2025-09-27 01:01
/////////////////////////////////////////////////////////////////////////////*/
typedef ZNsMain::
ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZCLink* VP_LoopLink=mp_HeadLink;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
**VP_LoopLink, ZCCheckRef::PassData(AO_TypeHelp)
);
////////////////////////////////////////////
/* 위 코드로 인해서, AO_Functor 이 함수일 때 뿐이 아니라, operator()
object . */
/* ZtCRef 클래스를 사용하는 ZCCheckRef::PassData() 으로 인해, 인수를
. -- 2021-03-10 16:56 */
VP_LoopLink = VP_LoopLink->mp_NextLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template<typename TFunctor, typename TTypeHelp>
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElement
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
/*#############################################################################*/
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp1> ZCCheckRef1;
typedef ZNsMain::ZtCCheckRef<TTypeHelp2> ZCCheckRef2;
ZCLink* VP_LoopLink=mp_HeadLink;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_DataObjt
, ZCCheckRef1::PassData(AO_TypeHelp1)
, ZCCheckRef2::PassData(AO_TypeHelp2)
);
////////////////////////////////////////////
VP_LoopLink = VP_LoopLink->mp_NextLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElement
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
###############################################################################*/
template<typename TFunctor> void IterElemRev(TFunctor AO_Functor)
{
ZCLink* VP_LoopLink=mp_TailLink;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)(**VP_LoopLink);
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template<typename TFunctor> void IterElemRev(TFunctor AO_Functor) */
template<typename TFunctor, typename TTypeHelp>
void IterElemRev(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::
ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZCLink* VP_LoopLink = mp_TailLink;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
**VP_LoopLink, ZCCheckRef::PassData(AO_TypeHelp)
);
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template<typename TFunctor, typename TTypeHelp>
void IterElemRev(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElemRev
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
/*#############################################################################*/
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp1> ZCCheckRef1;
typedef ZNsMain::ZtCCheckRef<TTypeHelp2> ZCCheckRef2;
ZCLink* VP_LoopLink = mp_TailLink;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
VP_LoopLink->mo_DataObjt
, ZCCheckRef1::PassData(AO_TypeHelp1)
, ZCCheckRef2::PassData(AO_TypeHelp2)
);
VP_LoopLink = VP_LoopLink->mp_PrevLink ;
}/*
__for0(TypeSize, i, ml_Size)*/
}/*
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElemRev
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
###############################################################################*/
template<typename TFunctor> void IterElemLink(TFunctor AO_Functor)
{
ZCLink* VP_LoopLink=mp_HeadLink;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::
GetObjRef(AO_Functor)( *VP_LoopLink );
VP_LoopLink = VP_LoopLink->mp_NextLink ;
}/*
__for0(TypeSize, i, ml_LinkSize)*/
}/*
template<typename TFunctor> void IterElemLink(TFunctor AO_Functor) */
template<typename TFunctor, typename TTypeHelp>
void IterElemLink(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::
ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZCLink* VP_LoopLink=mp_HeadLink;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
*VP_LoopLink, ZCCheckRef::PassData(AO_TypeHelp)
);
////////////////////////////////////////////
VP_LoopLink = VP_LoopLink->mp_NextLink ;
}/*
__for0(TypeSize, i, ml_LinkSize)*/
}/*
template<typename TFunctor, typename TTypeHelp>
void IterElemLink(TFunctor AO_Functor, TTypeHelp AO_TypeHelp) */
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElemLink
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
/*#############################################################################*/
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp1> ZCCheckRef1;
typedef ZNsMain::ZtCCheckRef<TTypeHelp2> ZCCheckRef2;
ZCLink* VP_LoopLink=mp_HeadLink;
__for0(TypeSize, i, ml_LinkSize)
{
ZtCTypeData<TFunctor>::GetObjRef(AO_Functor)
(
*VP_LoopLink
, ZCCheckRef1::PassData(AO_TypeHelp1)
, ZCCheckRef2::PassData(AO_TypeHelp2)
);
////////////////////////////////////////////
VP_LoopLink = VP_LoopLink->mp_NextLink ;
}/*
__for0(TypeSize, i, ml_LinkSize)*/
}/*
template
< typename TFunctor , typename TTypeHelp1 , typename TTypeHelp2 >
void IterElemLink
( TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2 )
###############################################################################*/
ZCLink* GetHeadLinkPtr(){return mp_HeadLink;}
ZCLink* GetTailLinkPtr(){return mp_TailLink;}
const ZCLink* GetHeadLinkPtr() const{return mp_HeadLink;}
const ZCLink* GetTailLinkPtr() const{return mp_TailLink;}
IterEasy GetHeadIterEasy (){return GetHeadLinkPtr();}
IterEasy GetTailIterEasy (){return GetTailLinkPtr();}
IterEasyID GetHeadIterEasyID (){return (IterEasyID)GetHeadLinkPtr();}
IterEasyID GetTailIterEasyID (){return (IterEasyID)GetTailLinkPtr();}
IterEasy GetHeadIterEasy () const{return GetHeadLinkPtr();}
IterEasy GetTailIterEasy () const{return GetTailLinkPtr();}
IterEasyID GetHeadIterEasyID () const{return (IterEasyID)GetHeadLinkPtr();}
IterEasyID GetTailIterEasyID () const{return (IterEasyID)GetTailLinkPtr();}
IterEasyIDc GetHeadIterEasyIDc() const{return (IterEasyIDc)GetHeadLinkPtr();}
IterEasyIDc GetTailIterEasyIDc() const{return (IterEasyIDc)GetTailLinkPtr();}
void MoveNextIter(ZCLink*& APR_CLink ) const
{
APR_CLink=APR_CLink->GetNextPtr();
}
void MoveNextIter(IterEasyID& ARRI_IterEasyID) const
{
MoveNextIter((ZCLink*&)(ARRI_IterEasyID));
}
void MoveNextIter(const ZCLink*& APR_CLink ) const
{
APR_CLink=APR_CLink->GetNextPtr();
}
void MoveNextIter(IterEasyIDc& ARRI_IterEasyID) const
{
MoveNextIter((const ZCLink*&)(ARRI_IterEasyID));
}/*
void MoveNextIter(IterEasyIDc& ARRI_IterEasyID) const*/
void MovePrevIter(ZCLink*& APR_CLink ) const
{
APR_CLink=APR_CLink->GetPrevPtr();
}
void MovePrevIter(IterEasyID& ARRI_IterEasyID) const
{
MovePrevIter((ZCLink*&)(ARRI_IterEasyID));
}
void MovePrevIter(const ZCLink*& APR_CLink ) const
{
APR_CLink=APR_CLink->GetPrevPtr();
}
void MovePrevIter(IterEasyIDc& ARRI_IterEasyID) const
{
MovePrevIter((const ZCLink*&)(ARRI_IterEasyID));
}/*
void MovePrevIter(IterEasyIDc& ARRI_IterEasyID) const*/
TypeData& GetDataInIter(ZCLink* AP_CLink ){return **AP_CLink ;}
TypeData& GetDataInIter(IterEasyID ARRI_IterEasyID)
{ return GetDataInIter((ZCLink*)ARRI_IterEasyID); }
const TypeData& GetDataInIter(const ZCLink* AP_CLink ) const
{ return **AP_CLink ; }
const TypeData& GetDataInIter(IterEasyIDc ARRI_IterEasyID) const
{ return GetDataInIter((const ZCLink*)ARRI_IterEasyID); }
TypeData& GetDataInIter( ZCLink* AP_CLink , TypeSize AI_FarNum)
{return **(AP_CLink->GetNextPrevPtr(AI_FarNum)) ; }
TypeData& GetDataInIter( IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum)
{ return GetDataInIter((ZCLink*)ARRI_IterEasyID, AI_FarNum); }
const TypeData& GetDataInIter( const ZCLink* AP_CLink , TypeSize AI_FarNum) const
{return **(AP_CLink->GetNextPrePtr(AI_FarNum)) ; }
const TypeData& GetDataInIter( IterEasyIDc ARRI_IterEasyID, TypeSize AI_FarNum) const
{ return GetDataInIter((ZCLink*)ARRI_IterEasyID, AI_FarNum); }
IterEasy ItHEasy(){return GetHeadIterEasy ();}
IterEasy ItTEasy(){return GetTailIterEasy ();}
IterEasyID ItHID (){return GetHeadIterEasyID();}
IterEasyID ItTID (){return GetTailIterEasyID();}
IterEasyIDc ItHIDc () const{return GetHeadIterEasyIDc();}
IterEasyIDc ItTIDc () const{return GetTailIterEasyIDc();}
const IterEasy ItHEasy() const{return GetHeadIterEasy ();}
const IterEasy ItTEasy() const{return GetTailIterEasy ();}
const IterEasyID ItHID () const{return GetHeadIterEasyID ();}
const IterEasyID ItTID () const{return GetTailIterEasyID ();}
void ItNext(ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;}
void ItNext(IterEasyID& ARRI_IterEasyID) const{ItNext((ZCLink*&)(ARRI_IterEasyID));}
void ItNext(const ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetNextPtr() ;}
void ItNext(IterEasyIDc& ARRI_IterEasyID) const
{ ItNext((const ZCLink*&)(ARRI_IterEasyID)); }
void ItPrev(ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;}
void ItPrev(IterEasyID& ARRI_IterEasyID) const{ItPrev((ZCLink*&)(ARRI_IterEasyID));}
void ItPrev(const ZCLink*& APR_CLink ) const{ APR_CLink=APR_CLink->GetPrevPtr() ;}
void ItPrev(IterEasyIDc& ARRI_IterEasyID) const
{ ItPrev((const ZCLink*&)(ARRI_IterEasyID)); }
TypeData& ItD(IterEasy AP_CLink ){return GetDataInIter(AP_CLink );}
TypeData& ItD(IterEasyID ARRI_IterEasyID){return GetDataInIter(ARRI_IterEasyID);}
const TypeData& ItD(const IterEasy AP_CLink ) const{return GetDataInIter(AP_CLink );}
const TypeData& ItD(IterEasyIDc ARRI_IterEasyID ) const{return GetDataInIter(ARRI_IterEasyID);}
TypeData& ItD(IterEasy AP_CLink , TypeSize AI_FarNum){return GetDataInIter(AP_CLink , AI_FarNum);}
TypeData& ItD(IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum){return GetDataInIter(ARRI_IterEasyID, AI_FarNum);}
const TypeData& ItD(const IterEasy AP_CLink , TypeSize AI_FarNum) const{return GetDataInIter(AP_CLink , AI_FarNum);}
const TypeData& ItD(IterEasyIDc ARRI_IterEasyID , TypeSize AI_FarNum) const{return GetDataInIter(ARRI_IterEasyID, AI_FarNum);}
public :
};/*
template //////////////////////////////////////////////////////////////////
<
typename TType ,
typename TTypArgu = const TType& ,
typename TTypeAlloc = ZCAllocator ,
typename TTypSize = ZTypLong ,
typename TMoveObj = ZNsMain::
ZtCMoveObj<TType, TTypArgu, true> ,
typename TTypeCRTP = ZNsType::ZtCTypeCRTP<ZCEmpty, false>
>
class ZtCBaseList #######################################################*/
namespace ZNsChars
{
template<typename TTypeChars> class ZtCMainChars;
}/*
namespace ZNsChars*/
template< typename TTypeChar, typename TTypeLength=ZTypLength
>
class ZtCChars /**#########################################*/
{
public :
template<typename TTypeChars>
friend class ZNsChars::ZtCMainChars ;
public :
typedef TTypeChar TypeChar ;
typedef TTypeLength TypeLength ;
public:
typedef const TTypeChar TypeCharC ;
typedef const TTypeChar* TypeCharCP ;
private:
TypeChar* mp_TypeChar ;
TypeLength ml_TypeLength;
public :
ZtCChars()
{
mp_TypeChar =0;
ml_TypeLength=0;
}/*
ZtCChars()*/
ZtCChars(TypeCharC* APC_TypeChar)
{
mp_TypeChar =
const_cast<TypeChar*> (APC_TypeChar);
ml_TypeLength = ZftGetLength(mp_TypeChar );
}/*
ZtCChars(TypeCharC* APC_TypeChar)*/
ZtCChars(TypeCharC* APC_TypeChar, TypeLength AL_Length)
{
mp_TypeChar = const_cast
<TypeChar*>(APC_TypeChar) ;
ml_TypeLength= AL_Length ;
}/*
ZtCChars(TypeCharC* APC_TypeChar, TypeLength AL_Length)*/
void Init()
{
mp_TypeChar = 0;
ml_TypeLength= 0;
}/*
void Init()*/
void Init(TypeCharC* APC_TypeChar)
{
mp_TypeChar =
const_cast<TypeChar*> (APC_TypeChar);
ml_TypeLength= ZftGetLength(mp_TypeChar );
}/*
void Init(TypeCharC* APC_TypeChar)*/
void Init(TypeCharC* APC_TypeChar, TypeLength AL_Length)
{
mp_TypeChar =const_cast
<TypeChar*>(APC_TypeChar) ;
ml_TypeLength=AL_Length ;
}/*
void Init(TypeCharC* APC_TypeChar, TypeLength AL_Length)*/
void InitData(TypeCharC* APC_TypeChar)
{
mp_TypeChar=const_cast<TypeChar*>(APC_TypeChar);
}/*
void InitData(TypeCharC* APC_TypeChar)*/
void InitLength(TypeLength AL_Length)
{
ml_TypeLength=AL_Length;
}/*
void InitLength(TypeLength AL_Length)*/
TypeChar* data() {return mp_TypeChar ;}
TypeCharC* data() const{return mp_TypeChar ;}
TypeLength size() const{return ml_TypeLength;}
ZtCChars& operator+=(TypeLength AI_MovePos)
{
return MoveChar(AI_MovePos);
}/*
ZtCChars& operator+=(TypeLength AI_MovePos)*/
int operator-(const ZtCChars& rhs) const
{
// 두 문자열이 같으면 0
// 왼쪽 문자열이 크면 0 보다 큰 어떤 수
// 오른쪽 문자열이 크면 0 보다 작은 어떤 수를 반환
TypeCharC* VP_Left = mp_TypeChar;
TypeCharC* VP_Right=rhs.mp_TypeChar;
#if(_CODE_OLD_)
TypeChar VC_Minus = 0;
#else
int VI_Minus = 0; // 페이지 하단의 'char 의 int 확장에 따른 문제의 코드' 참고.
#endif
TypeLength VL_Index = 0;
TypeLength VL_Loop = /*::::::::::::::::::::::::::*/
(
ml_TypeLength <= rhs.ml_TypeLength ?
this->ml_TypeLength :
rhs. ml_TypeLength
) ;
/*::::::::::::::::::::::::::::::::::::::::::::::::*/
while(VL_Index<VL_Loop)
{
#if(_CODE_OLD_)
if((VC_Minus=*VP_Left++ - *VP_Right++)!=0)
{
return VC_Minus;
}/*
if((VC_Minus=*VP_Left++ - *VP_Right++)!=0)*/
#else
if((VI_Minus=int(*VP_Left++) - int(*VP_Right++))!=0)
{
return VI_Minus; // 페이지 하단의 'char 의 int 확장에 따른 문제의 코드' 참고.
}/*
if((VI_Minus=int(*VP_Left++) - int(*VP_Right++))!=0)*/
#endif
++VL_Index;
}/*
while(VL_Index<VL_Loop)*/
return ml_TypeLength-rhs.ml_TypeLength;
}/*
int operator-(const ZtCChars& rhs) const*/
bool operator==(const ZtCChars& rhs) const{return (*this)-rhs == 0 ;}
bool operator> (const ZtCChars& rhs) const{return (*this)-rhs > 0 ;}
bool operator< (const ZtCChars& rhs) const{return (*this)-rhs < 0 ;}
bool operator>=(const ZtCChars& rhs) const{return (*this)-rhs >= 0 ;}
bool operator<=(const ZtCChars& rhs) const{return (*this)-rhs <= 0 ;}
ZtCChars& MoveChar(TypeLength AI_MovePos)
{
mp_TypeChar += AI_MovePos ;
ml_TypeLength -= AI_MovePos ;
return *this;
}/*
ZtCChars& MoveChar(TypeLength AI_MovePos)*/
ZTypIntI GetInt(bool AB_IsBigEndian=true) const
{
ZTycIntI CI_IntByte = sizeof(ZTypIntI);
ZTycIntI CI_SearchSize =
(ml_TypeLength<CI_IntByte ? ml_TypeLength : CI_IntByte) ;
ZTypIntI VI_Result = 0 ;
ZTypIntI VI_TempInt = 1 ;
if(AB_IsBigEndian)
{
for(ZTypIntI i=CI_SearchSize-1; i>=0; --i)
{
VI_Result += (ZTypIntI)(ZTypUChar)(mp_TypeChar[i]) * VI_TempInt ;
VI_TempInt *= 256 ;
}/*
for(ZTypIntI i=CI_SearchSize-1; i>=0; --i)*/
return VI_Result;
}/*
if(AB_IsBigEndian)*/
for(ZTypIntI i=0; i<CI_SearchSize; ++i)
{
VI_Result += (ZTypIntI)(ZTypUChar)(mp_TypeChar[i]) * VI_TempInt ;
VI_TempInt*= 256 ;
}/*
for(ZTypIntI i=0; i<CI_SearchSize; ++i)*/
return VI_Result;
}/*
ZTypIntI GetInt(bool AB_IsBigEndian=true) const*/
ZTypIntL GetLong(bool AB_IsBigEndian=true) const
{
ZTycIntI CI_IntByte = sizeof(ZTypIntL);
ZTycIntI CI_SearchSize =
(ml_TypeLength<CI_IntByte ? ml_TypeLength : CI_IntByte) ;
ZTypIntL VI_Result = 0 ;
ZTypIntL VI_TempInt = 1 ;
if(AB_IsBigEndian)
{
for(ZTypIntI i=CI_SearchSize-1; i>=0; --i)
{
VI_Result += (ZTypIntI)(ZTypUChar)(mp_TypeChar[i]) * VI_TempInt ;
VI_TempInt *= 256 ;
}/*
for(ZTypIntI i=CI_SearchSize-1; i>=0; --i)*/
return VI_Result;
}/*
if(AB_IsBigEndian)*/
for(ZTypIntI i=0; i<CI_SearchSize; ++i)
{
VI_Result += (ZTypIntI)(ZTypUChar)(mp_TypeChar[i]) * VI_TempInt ;
VI_TempInt *= 256 ;
}/*
for(ZTypIntI i=0; i<CI_SearchSize; ++i)*/
return VI_Result;
}/*
ZTypIntL GetLong(bool AB_IsBigEndian=true) const*/
ZTypIntLL GetLLong(bool AB_IsBigEndian=true) const
{
ZTycIntI CI_IntByte = sizeof(ZTypIntLL);
ZTycIntI CI_SearchSize =
(ml_TypeLength<CI_IntByte ? ml_TypeLength : CI_IntByte) ;
ZTypIntLL VI_Result = 0 ;
ZTypIntLL VI_TempInt = 1 ;
if(AB_IsBigEndian)
{
for(ZTypIntI i=CI_SearchSize-1; i>=0; --i)
{
VI_Result += (ZTypIntI)(ZTypUChar)(mp_TypeChar[i]) * VI_TempInt ;
VI_TempInt *= 256 ;
}/*
for(ZTypIntI i=CI_SearchSize-1; i>=0; --i)*/
return VI_Result;
}/*
if(AB_IsBigEndian)*/
for(ZTypIntI i=0; i<CI_SearchSize; ++i)
{
VI_Result += (ZTypIntI)(ZTypUChar)(mp_TypeChar[i]) * VI_TempInt ;
VI_TempInt *= 256 ;
}/*
for(ZTypIntI i=0; i<CI_SearchSize; ++i)*/
return VI_Result;
}/*
ZTypIntLL GetLLong(bool AB_IsBigEndian=true) const*/
public:
};/*
template< typename TTypeChar, typename TTypeLength=ZTypLength
>
class ZtCChars /**#########################################*/
namespace ZNsView
{
class ZCViewLogData
{
public:
virtual void Log(const char* APC_LogData, ZTypLength AI_Length)
{
__for0(ZTypLength, i, AI_Length){cout<<APC_LogData[i];}
}/*
virtual void Log(const char* APC_LogData, ZTypLength AI_Length)*/
virtual void Log(const char* APC_LogData)
{ cout<<APC_LogData; }
virtual void Log(int AI_LogData){ cout<<AI_LogData; }
virtual void Log(long AL_LogData){ cout<<AL_LogData; }
virtual void Log(double AD_LogData){ cout<<AD_LogData; }
virtual void Log(char AC_LogData){ cout<<AC_LogData; }
virtual void Log(bool AB_LogData)
{
cout<<(AB_LogData ? "true" : "false");
}/*
virtual void Log(bool AB_LogData)*/
virtual void LogXmlAtt(const char* APC_LogData, ZTypLength AI_Length)
{
__for0(ZTypLength, i, AI_Length)
{
if(APC_LogData[i]=='&' ){cout<<"&amp;" ; continue;}
if(APC_LogData[i]=='\r'){cout<<"&#xA;" ; continue;}
if(APC_LogData[i]=='\n'){cout<<"&#xD;" ; continue;}
if(APC_LogData[i]=='\t'){cout<<"&#x9;" ; continue;}
if(APC_LogData[i]=='\"'){cout<<"&quot;"; continue;}
if(APC_LogData[i]=='>' ){cout<<"&gt;" ; continue;}
if(APC_LogData[i]=='<' ){cout<<"&lt;" ; continue;}
cout<<APC_LogData[i] ;
}/*
__for0(ZTypLength, i, AI_Length)*/
}/*
virtual void LogXmlAtt(const char* APC_LogData, ZTypLength AI_Length)*/
virtual void LogXmlAtt(const char* APC_LogData)
{
LogXmlAtt(APC_LogData, ZftLength(APC_LogData));
}/*
virtual void LogXmlAtt(const char* APC_LogData)*/
public:
};/*
class ZCViewLogData*/
}/*
namespace ZNsView*/
class ZCSngtLogData
{
public :
typedef ZNsView::ZCViewLogData ZCViewLogData;
private:
ZCViewLogData mo_ZCViewLogData;
ZCViewLogData* mp_ZCViewLogData;
private:
ZCSngtLogData() : mp_ZCViewLogData(&mo_ZCViewLogData){}
public :
static ZCSngtLogData& GetSngtObj()
{
static ZCSngtLogData SO_ZCSngtLogData; return SO_ZCSngtLogData;
}/*
static ZCSngtLogData& GetSngtObj()*/
static ZCViewLogData& GetSngtView()
{
return *GetSngtObj().mp_ZCViewLogData;
}/*
static ZCViewLogData& GetSngtView()*/
static void SetSngtView(ZCViewLogData& AR_ViewObj)
{
GetSngtObj().mp_ZCViewLogData = &AR_ViewObj ;
}/*
static void SetSngtView(ZCViewLogData& AR_ViewObj)*/
public :
static void Log(const char* APC_Log, ZTypLength AI_Length)
{
GetSngtView().Log(APC_Log, AI_Length);
}/*
static void Log(const char* APC_Log, ZTypLength AI_Length)*/
static void Log(const char* APC_LogData)
{
GetSngtView().Log( APC_LogData );
}/*
static void Log(const char* APC_LogData)*/
static void Log(int AI_LogData){ GetSngtView().Log(AI_LogData); }
static void Log(long AL_LogData){ GetSngtView().Log(AL_LogData); }
static void Log(double AD_LogData){ GetSngtView().Log(AD_LogData); }
static void Log(char AC_LogData){ GetSngtView().Log(AC_LogData); }
static void Log(bool AB_LogData){ GetSngtView().Log(AB_LogData); }
static void LogXmlAtt(const char* APC_LogData, ZTypLength AI_Length)
{
GetSngtView().LogXmlAtt(APC_LogData, AI_Length);
}/*
static void LogXmlAtt(const char* APC_LogData, ZTypLength AI_Length)*/
static void LogXmlAtt(const char* APC_LogData)
{
GetSngtView().LogXmlAtt(APC_LogData);
}/*
static void LogXmlAtt(const char* APC_LogData)*/
public :
ZCSngtLogData& operator()(const char* APC_Log, ZTypLength AI_Length)
{
ZCSngtLogData::Log(APC_Log, AI_Length); return *this;
}/*
ZCSngtLogData& operator()(const char* APC_Log, ZTypLength AI_Length)*/
ZCSngtLogData& operator()(const char* APC_LogData)
{
GetSngtView().Log( APC_LogData ); return *this;
}/*
ZCSngtLogData& operator()(const char* APC_LogData)*/
ZCSngtLogData& operator()(int AI_LogData){ GetSngtView().Log(AI_LogData); return *this; }
ZCSngtLogData& operator()(long AL_LogData){ GetSngtView().Log(AL_LogData); return *this; }
ZCSngtLogData& operator()(double AD_LogData){ GetSngtView().Log(AD_LogData); return *this; }
ZCSngtLogData& operator()(char AC_LogData){ GetSngtView().Log(AC_LogData); return *this; }
ZCSngtLogData& operator()(bool AB_LogData){ GetSngtView().Log(AB_LogData); return *this; }
ZCSngtLogData& Xa(const char* APC_LogData, ZTypLength AI_Length)
{
GetSngtView().LogXmlAtt(APC_LogData, AI_Length); return *this;
}/*
ZCSngtLogData& Xa(const char* APC_LogData, ZTypLength AI_Length)*/
ZCSngtLogData& Xa(const char* APC_LogData)
{
GetSngtView().LogXmlAtt(APC_LogData); return *this;
}/*
ZCSngtLogData& Xa(const char* APC_LogData)*/
public :
};/*
class ZCSngtLogData*/
2021-02-25 16:23:13 +09:00
}/*
namespace ZNsMain*/
2021-02-25 16:23:13 +09:00
namespace ZNsCPP
{
2021-03-04 18:02:17 +09:00
using ZNsMain::IterEasyID;
2021-02-25 16:23:13 +09:00
/* 이 이름공간에는 ZNsMain 에 있는 라이브러리 보다 좀더 thread-safe
, gerneric .
*/
namespace ZNsIFace
{
}/*
namespace ZNsIFace*/
namespace ZNsType
{
}/*
namespace ZNsType*/
namespace ZNsEnum
{
}/*
namespace ZNsEnum*/
namespace ZNsConst
{
}/*
namespace ZNsConst*/
}/*
namespace ZNsCPP */
/* 함수 안에서 함수를 정의할 필요가 있을 때, struct 를 이용하여 함수를 정의하는 매크로. -- 2015-09-06 05:20:00 */
#define _FUNC_IN_FUNC_START_(ZstClassName) struct ZstClassName{static void Exec
#define _FUNC_IN_FUNC_CLOSE_(ZstClassName) };
#define _FUNC_IN_FUNC_RETURN_START_(ZstClassName, ZTypeReturn) struct ZstClassName{static ZTypeReturn Exec
#define _FUNC_IN_FUNC_RETURN_CLOSE_(ZstClassName, ZTypeReturn) };
#define _FFS_(ZstClassName) _FUNC_IN_FUNC_START_(ZstClassName)
#define _FFC_(ZstClassName) _FUNC_IN_FUNC_CLOSE_(ZstClassName)
#define _FFE_(ZstClassName) }; // E 문자는 END 의 뜻.
#define _FFRS_(ZstClassName, ZTypeReturn) _FUNC_IN_FUNC_RETURN_START_(ZstClassName, ZTypeReturn)
#define _FFRC_(ZstClassName, ZTypeReturn) _FUNC_IN_FUNC_RETURN_CLOSE_(ZstClassName, ZTypeReturn)
#define _FFRE_(ZstClassName) };
#define _FFF_(ZstClassName) ZstClassName::Exec
/*///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_FUNC_IN_FUNC_START_ .
#include<iostream>
using namespace ZNsMain;
int main()
{
_FUNC_IN_FUNC_START_(My)
(IntI ArgiShowCnt)
{
for(int i=0; i<ArgiShowCnt; ++i) cout<<"# Show My() In Func."<<endl;
}
_FUNC_IN_FUNC_CLOSE_(My)
_FUNC_IN_FUNC_RETURN_START_(My2, Int)
(IntI ArgiShowCnt)
{
for(int i=0; i<ArgiShowCnt; ++i) cout<<"# Show My() In Func."<<endl; return ArgiShowCnt;
}
_FUNC_IN_FUNC_RETURN_CLOSE_(My2, int)
_FFS_(My3)
(IntI ArgiShowCnt)
{
for(int i=0; i<ArgiShowCnt; ++i) cout<<"# Show My() In Func."<<endl; return ArgiShowCnt;
}
_FFC_(My3)
My ::Exec(3);
My2::Exec(3);
My3::Exec(3);
return 0;
}
-- 2015-09-06 17:21:00
CNetEx.H HandleEvent . -- 2015-09-06 17:43:00
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
2021-02-25 16:23:13 +09:00
/*///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
4.1
gcc -v
.
.
$ echo 'main(){printf("hello world\n");}' | gcc -E -v -
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
gcc version 2.7.2
/usr/lib/gcc-lib/i486-box-linux/2.7.2/cpp -lang-c -v -undef
-D__GNUC__=2 -D__GNUC_MINOR__=7 -D__ELF__ -Dunix -Di386 -Dlinux
-D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__i386
-D__linux -Asystem(unix) -Asystem(posix) -Acpu(i386)
-Amachine(i386) -D__i486__ -
--
,
echo . | gcc -dM -E -
gcc -dM -E - < /dev/null
.
ex) gcc -dM -E - < /dev/null | grep 'linux'
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1
ex) echo . | gcc -dM -E - | grep 'unix'
#define __unix 1
#define __unix__ 1
#define unix 1
ymir . http://kldp.org/node/121720
-- 2011-03-03 13:21:00
OS
: #define __linux__ 1
HP : #define __hpux__ 1
sun : #define __sun__ 1
IRIX : #define __mips__ 1
TRUE64 : #define __alpha__ 1
FreeBSD: #define __FreeBSD_cc_version 800001
#define __VERSION__ "4.2.1 20070719 [FreeBSD]"
#define __FreeBSD__ 8
AIX : #define _AIX 1
#define _AIX32 1
#define _AIX41 1
#define _AIX43 1
#define _AIX51 1
#define _AIX52 1
#define _AIX53 1
-- 2011-03-12 16:17:00
, .
#ifdef __linux__
// ... funky stuff ...
#endif // __linux__
__linux__라는 . linux .
2021-02-25 16:23:13 +09:00
POSIX .
OS Shared Library PATH (2012-04-08 19:25:00)
http://cafe335.daum.net/_c21_/bbs_search_read?grpid=TzUN&fldid=DUnV&contentval=0000szzzzzzzzzzzzzzzzzzzzzzzzz&nenc=&fenc=&q=gulim.ttf&nil_profile=cafetop&nil_menu=sch_updw
AIX LIBPATH, LD_LIBRARY_PATH
OS/2 LIBPATH
Windows NT/95 PATH
Solaris/Linux LD_LIBRARY_PATH
HP/UX SHLIB_PATH, LD_LIBRARY_PATH (64 bit only)
ex) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/userJNI/lib
HP-UX Shared Library sl .
SUN일 LD_LIBRARY_PATH HP-UX SHLIB_PATH , AIX LIBPATH .
: HP에서 LD_LIBRARY_PATH 64 . sl
chatr SHLIB_PATH가 "사용 불가능" .
/opt/mqm/samp/bin/amqsput chatr .
chatr /opt/mqm/samp/bin/amqsput
SHLIB_PATH를 .
chatr +s enable /opt/mqm/samp/bin/amqsput
SHLIB_PATH /usr/lib (echo $SHLIB_PATH).
.
export SHLIB_PATH=$SHLIB_PATH:/usr/lib
SHLIB_PATH chatr +s .
IBM WebSphere MQ runmqsc
runmqsc D11LHP.QM
5724-B41 (C) Copyright IBM Corp. 1994, 2002. ALL RIGHTS RESERVED.
Starting MQSC for queue manager D11LHP.QM.
/usr/lib/dld.sl: Can't find path for shared library: libstream.2
/usr/lib/dld.sl: No such file or directory
AMQ9508: Program cannot connect to the queue manager.
No MQSC commands read.
No commands have a syntax error.
All valid MQSC commands were processed.
IBM WebSphere MQ ( 2217)
amqsput QL_D11LHP_B02KLNX.U1.I D11LHP.QM
Sample AMQSPUT0 start
target queue is QL_D11LHP_B02KLNX.U1.I
MQOPEN ended with reason code 2217
unable to open queue for output
Sample AMQSPUT0 end
--
--
'new operator' 'operator new' Programming
(2007/04/03 16:20)
http://blog.naver.com/cppis/60036113050
bugmail More Effective C++ new delete
.
2021-02-25 16:23:13 +09:00
new operator operator new
2021-02-25 16:23:13 +09:00
.
2021-02-25 16:23:13 +09:00
new operator C++ .
2021-02-25 16:23:13 +09:00
-- , , ,
-- .
2021-02-25 16:23:13 +09:00
C++ new operator . operator new
Operator .
, new operator
operator new , object .
.
operator new Overload 'operator new'
. , void* , size_t . new operator
.
2021-02-25 16:23:13 +09:00
[::] new [placement] new-type-name [new-initializer]
[::] new [placement] ( type-name ) [new-initializer]
- placement
new overload . , C++
default new는 exception throw . Overload new
NULL , Overload new .
2021-02-25 16:23:13 +09:00
struct nothrow_t {};
extern const nothrow_t nothrow;
void *operator new throw() (size_t, const nothrow_t& );
foo *fp = new (nothrow) foo;
if( !fp ) {
// Out of memory를 처리합니다.
}
- type-name
. type-name built-in user-defined .
2021-02-25 16:23:13 +09:00
- initializer
object . initializer object
. new operator default object
.
2021-02-25 16:23:13 +09:00
new Placement-new , object
. Placement-new .
2021-02-25 16:23:13 +09:00
inline void *operator new( size_t, void* p )
{
return p;
}
Automatic Variable Placement-new object
. new (Pair) delete도 .
2021-02-25 16:23:13 +09:00
'delete operator' object ,
'operator delete' .
reference
- More Effective C++
- MSDN
Placement-New Requires Heap-Allocated Buffers
The placement-new operator constructs an object on a pre-allocated buffer. The pre-allocated buffer has to be allocated
on the heap.
char *pbuff = new char[1024]; // heap allocation using plain new
Person *p = new (pbuff) Person; // placement new uses a pre-allocated buffer
You may be tempted to use a buffer allocated on the stack to avoid the need of explicitly freeing it:
char pbuff [1024]; //bad idea: stack allocation instead of heap
Person *p = new ( pbuff ) Person; //undefined behavior
However, the pre-allocated buffer must comply with certain alignment constraints required by C++. Memory allocated
on the heap is guaranteed to comply with these requirements. Stack memory, on the other hand, may not be properly aligned,
and hence using it for that purpose yields undefined behavior
-- heap
-- stack .
-- ( pbuff[1024] pbuff heap ,
-- .) 2008-10-26
http://kldp.org/node/76375
http://www.devx.com/tips/Tip/12756
.
.
2021-02-25 16:23:13 +09:00
,
. ,
,
, .
.
.
2021-02-25 16:23:13 +09:00
.
virtual CIOCP ::SendPacket(HANDLE SocketID,const char* ApcData=0,int AI_Length=0,CSendBuffList* AP_CSendBuffList=0) // 1) 번코드
virtual CIOCPEx::SendPacket(HANDLE SocketID,const char* ApcData=0,int AI_Length=0) // 2) 번코드
1)
2) .
CIOCPEx VO_CIOCPEx;
CIOCP* VP_CIOCP=&VO_CIOCPEx;
VO_CIOCPEx->SendPacket((HANDLE)100,"my",2); // 어느 함수가 호출될까.
CIOCP::SendPacket() .
-- 2009-01-03 13:09:00
const char* CPC_MySQL_Host="localhost"
const char* const CPC_MySQL_Host="localhost" .
릿 , 릿 parameter .
.
template<typename TTypeBase>
class CMy : public TTypeBase
{
public:
void Init();
void Fini();
};
릿 CMy2
clear() .
class CMy2 : public CMy<CBaseClass>
{
public:
void clear();
};
, clear() CMy<CBaseClass>
2021-02-25 16:23:13 +09:00
. CMy<CBaseClass> CBaseClass
. clear() CBaseClass
. 릿
.
릿 parameter 릿 .
CHttp.H std::ZNsCGI::ZNsThpe::ZtCTypeLoadDataQuery_T<> template clear() Override ,
. clear()
ZtCTypeLoadDataQuery_T<> ::clear()
2021-02-25 16:23:13 +09:00
std::CLoadDataBlockOne_T<>::clear()
TTypeBase . TTypeBase
clear() ZtCTypeLoadDataQuery_T<>::clear() ,
std::CLoadDataBlockOne_T<>::clear()
this->TTypeBase ::clear()
. . . clear()
TTypeBase
std::ZNsIFace::CDeriveLoadDataQuery_T<TString>
me_ESearch ESearch_Name .
me_ESearch==ESearch_Name 2
me_ESearch!=ESearch_Name ,
me_ESearch==ESearch_Name , 3
me_ESearch==ESearch_Name ...
breakpoint ... . -- 2009-01-05 10:02:00
CHttp.H 릿 .
, .
2021-02-25 16:23:13 +09:00
"가상 상속의 템플릿 구현(TIVI : Template Implementation Of Virtual Inheritance)" .
CHttp.H . ,
, object .
, object (, )
. . A/B/C/D/E
2021-02-25 16:23:13 +09:00
2021-02-25 16:23:13 +09:00
B A object
C B object
D C object
E D object .
A A object
B B object
C C object
D D object .
object . "가상 상속의 템플릿 구현" .
-- 2009-01-18 17:48:00
, "가상 상속의 템플릿 구현" , ' '
. .
. .
2021-02-25 16:23:13 +09:00
-- 2009-01-19 01:21:00
object A,B,C,D,E .
A
A ( ) B
B ( ) C
C ( ) D .
,
2021-02-25 16:23:13 +09:00
A
A ( ) B
B ( ) C
C ( ) D .
2021-02-25 16:23:13 +09:00
-- 2009-01-19 01:26:00
.
(WTM Working Thread Model)
A IOCP A-WTM
B IOCP B-WTM
C IOCP C-WTM ...
A,B C,D ,
A,B IOCP AB-WTM
C,D IOCP CD-WTM ...
--
COM(Component Object Model) .
cf) std::ZNsIFace::ZIDelgtMSG
-- 2009-03-09 20:18:00
"가상 상속의 템플릿 구현" A, B, C, D
. A, B, C, D 릿 ,
A, B, C, D E , E A, B, C, D .
.
cf) MainHead_VirtualDeriveTmpl.cpp
"가상 상속의 템플릿 구현" CURIOUSLY RECURRING TEMPLATE PATTERN .
class template A class B1, B2, B3 , class B1, B2, B3 A
. class B1, B2, B3 .
2021-02-25 16:23:13 +09:00
class B1, B2, B3 , A A2 , A2 B1, B2, B3 interface
, B1 B2 B3 interface .
ex)
1) 릿 class template A .
2) A B1, B2, B3
B1, B2, B3 A .
3) A , B1, B2, B3 object ,
.
template<typename TParent>
class A
{
public:
void UseB1(){static_cast<TParent*>(this)->GetObjB1().CallFunc();}
void UseB2(){static_cast<TParent*>(this)->GetObjB2().CallFunc();}
void UseB3(){static_cast<TParent*>(this)->GetObjB3().CallFunc();}
void UseExB1(TParent& ArCParent){static_cast<TParent*>(this)->GetObjB1().CallFunc(ArCParent);}
void UseExB2(TParent& ArCParent){static_cast<TParent*>(this)->GetObjB2().CallFunc(ArCParent);}
void UseExB3(TParent& ArCParent){static_cast<TParent*>(this)->GetObjB3().CallFunc(ArCParent);}
};
class A2 : public A<A2>
{
public:
class B1{public:void CallFunc() {cout<<"Call B1::CallFunc()"<<endl;}
2021-02-25 16:23:13 +09:00
void CallFunc(A2& ArA2){cout<<"Call B1::CallFunc(A2)"<<endl;}};
class B2{public:void CallFunc() {cout<<"Call B2::CallFunc()"<<endl;}
2021-02-25 16:23:13 +09:00
void CallFunc(A2& ArA2){cout<<"Call B2::CallFunc(A2)"<<endl;}};
class B3{public:void CallFunc() {cout<<"Call B3::CallFunc()"<<endl;}
2021-02-25 16:23:13 +09:00
void CallFunc(A2& ArA2){cout<<"Call B3::CallFunc(A2)"<<endl;}};
private:
B1 b1;
B2 b2;
B3 b3;
public:
B1 GetObjB1(){return b1;}
B2 GetObjB2(){return b2;}
B3 GetObjB3(){return b3;}
void UseExB1(){A<A2>::UseExB1(*this);}
void UseExB2(){A<A2>::UseExB2(*this);}
void UseExB3(){A<A2>::UseExB3(*this);}
};
A2 myA2;
myA2.UseB1();
myA2.UseB2();
myA2.UseB3();
myA2.UseExB1();
myA2.UseExB2();
myA2.UseExB3();
-- 2010-03-12 11:56:00
. A,B,C
IA, IB, IC , A, B, C IA, IB, IC . IA, IB, IC
2021-02-25 16:23:13 +09:00
singleton object SngtA, SngtB, SngtC , A, B, C , (
), SngtA, SngtB, SngtC .
A, B, C singleton object SngtA, SngtB, SngtC interface .
2021-02-25 16:23:13 +09:00
.
-- 2010-03-13 22:43:00
pool P1 class A, B , A,B P1 , B P1
2021-02-25 16:23:13 +09:00
P1 . / A => P1 => B . P1 B
, P1 릿 , P1 Instance
B 릿 B .
릿 CThreadEx_T<> CProxySockHttpXml.H .
-- 2009-08-09 20:23:00
( ) ,
,
. , ,
.
-- 2009-02-10 23:02:00
VC++ 2008 "도구 => 옵션 => '프로젝트 밑 솔루션' => VC++ 디렉토리"
"포함파일" "라이브러리 파일" .
"프로젝트 => 속성" .
-- 2009-02-27 10:02:00
릿 . -- 2009-02-28 04:21:00
2021-02-25 16:23:13 +09:00
C# delegate std:ZNsIFace::ZIDelgtMSG . object
, interface .
.
ZIDelgtMSG interface , COM(Component Object Model)
. C++ COM .
-- 2009-03-01 12:04:00
,
object .
(, ,
.)
1) object polling ,
object , object
.
( polling) / lock .
2) , object ,
,
, . ,
.
object
key/value map .
CKeyValueMap_T<> CKeyValMapPrgs(Sync)_T<>
.
-- 2009-03-03 07:36:00
object ,
.
-- 2009-03-05 06:20:00
, .
, #include ,
#include
.
class CKeyValueMap_T< int,std::ZNsIFace::ZIDelgtMSG*,
int,std::ZNsIFace::ZIDelgtMSG*,
/////////////////// >
. object , /
2021-02-25 16:23:13 +09:00
#include . std::ZNsIFace::ZIDelgtMSG .
-- 2009-03-06 08:59:00
Modeless Modeless , Modeless
. Modeless
2021-02-25 16:23:13 +09:00
.
-- 2009-03-08 21:28:00
릿 릿 릿 , ZtCStringEx.H ZNsMain::ZftMoveFast() ZtCStringBase<>
2021-02-25 16:23:13 +09:00
릿 .
-- 2009-09-06 07:26:00
OS
MainHead.H
MainHeadEx.H
CFileEx.H
CProcess.H
CNet.H
. .
.
. .
.
-
,
. .
, .
http://phpschool.com/gnuboard4/bbs/board.php?bo_table=talkbox&wr_id=1473843&page=1
-- 2009-04-28 09:16:00
릿 .
template<typename T> struct CShow
{
static void Show(){cout<<"## show : T="<<typeid(T).name()<<endl;}
template<typename T2> static void Show2(T2);
};
template<typename T> template<typename T2>
void CShow<T>::Show2(T2){cout<<"## show : T2="<<typeid(T2).name()<<endl;}
-- 2013-05-06
main .
echo %ERRORLEVEL%
,
echo $?
,
http://bcode.tistory.com/5
-- 2011-03-03 22:43:00
my1 my2 .
char my1[]="C++ World1";
const char* my2 ="C++ World2";
cout<<typeid(my1).name()<<endl;
cout<<typeid(my2).name()<<endl;
my1 => char [11]
my2 => char const * __ptr64
-- 2025-08-21 12:42
2021-02-25 16:23:13 +09:00
. (/ ' ' 167 page)
?
?
?
?
, ?
, Assertion ?
, ?
Exception ?
?
thread-safe ?
object thread-safe ?
Lock ?
?
, ?
?
?
API ?
, .
thread-safe ?
object thread-safe ?
Lock ?
?
class , object ?
, . .
Flow '' ?
-- 2011-04-16 15:39:00
DB ERD , ?
-- 2011-04-17 12:08:00
, typedef ,
?
-- 2011-05-09 21:10:00
.
overflow underflow .
-- 2011-05-19 09:14:00
vector , object ,
. object ( )
, .
-- 2013-06-08 15:25:00
, , .
-- 2013-06-09 18:34:00
. ''
, .
ABA , .
-- 2013-06-21 19:41:00
object , object
. , ' ' .
-- 2013-06-23 19:30:00
new[] delete[] . MainHead.H 2013-07-09 23:32:00 .
valgrind . .
-- 2013-07-09 23:44:00
new new[] . ZtCObjNew<> CArray_T<> .
2021-02-25 16:23:13 +09:00
-- 2013-07-11 01:26:00
, , ,
.
MainSSL.H 2015-03-06 22:17:00 . https://www.openssl.org 의 데이타를 가져올 때, 응
BIO object , .
.
-- 2015-03-08 21:32:00
object , object , .
CCtrlAsyncSock.H "'코드C2'에 대한 주석" . -- 2015-03-22 17:01:00
object -1 , object , flow . object
, object object
. .
-- 2013-06-23 19:25:00
' ' , / object
, object .
-- 2013-06-23 19:34:00
'char int '
int ZtCMainChars<>::Minus(TypeCharC*, TypeCharC*, TypeLength, TypeLength)
return
return VC_Minus; // VC_Minus 는 *(VP_Left-1)-*(VP_Right-1)
return int(*(VP_Left-1))-int(*(VP_Right-1));
. , char int (+) .
, LG CNS . ELDK 4.0 tool chain
, NsUtility::CLoadSimUrlConfig_T<> ,
. CLoadSimUrlConfig_T<> ns1.cppschool.com
ns2.cppschool.com . .
Hemose ,
. CObjAVL.H AddKey() cout
, '>' . ZtCMainChars<>::Minus()
! , .
. , , char int
.
-- 2011-12-29 17:35:00
g++ .
#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, char* APP_ArgVal[])
{
return Main(AI_ArgCnt, APP_ArgVal);
}
///////////////////////////////////////////
mingw
g++.exe -o g++_test_000.exe g++_test_000.cpp -I../
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# g++.exe -o g++_test_000.exe g++_test_000.cpp -I../
g++_test_000.cpp: In function 'int main(int, char**)':
g++_test_000.cpp:18:28: error: invalid conversion from 'char**' to 'const cha
r**' [-fpermissive]
18 | return Main(AI_ArgCnt, APP_ArgVal);
| ^~~~~~~~~~
| |
| char**
g++_test_000.cpp:9:39: note: initializing argument 2 of 'int Main(int, cons
t char**)'
9 | int Main(int AI_ArgCnt=0, const char* APP_ArgVal[]=0)
| ~~~~~~~~~~~~^~~~~~~~~~~~~~
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.
-1
#include<iostream>
using namespace std;
int Main(int AI_ArgCnt=0, const char* const APP_ArgVal[]=0)
{
cout<<"Call Main()"<<endl; return 0;
}
///////////////////////////////////////////////////////////
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return Main(AI_ArgCnt, APP_ArgVal);
}
///////////////////////////////////////////
-2
#include<iostream>
using namespace std;
int Main(int AI_ArgCnt=0, char* const APP_ArgVal[]=0)
{
cout<<"Call Main()"<<endl; return 0;
}
/////////////////////////////////////////////////////
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return Main(AI_ArgCnt, (const char**)APP_ArgVal);
}
///////////////////////////////////////////
-- 2025-08-25 00:56
2021-02-25 16:23:13 +09:00
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
#endif //__ZCPPMAIIN_ZMAINHEAD_H__