Add PIP_HAS_RTTI
This commit is contained in:
@@ -218,7 +218,17 @@ extern char ** environ;
|
||||
# define assertm(exp, msg) assert(((void)msg, exp))
|
||||
# endif
|
||||
|
||||
# if defined(__GXX_RTTI__) || defined(__RTTI__)
|
||||
# ifndef __has_feature
|
||||
# define __has_feature(x) 0 // Default to 0 if the compiler doesn't support it
|
||||
# endif
|
||||
|
||||
# if defined(__cpp_rtti) || defined(__GXX_RTTI) || defined(_CPPRTTI) || (__has_feature(cxx_rtti))
|
||||
# define PIP_HAS_RTTI 1
|
||||
# else
|
||||
# define PIP_HAS_RTTI 0
|
||||
# endif
|
||||
|
||||
# if PIP_HAS_RTTI
|
||||
# define __PIP_TYPENAME__(T) typeid(T).name()
|
||||
# else
|
||||
# define __PIP_TYPENAME__(T) "?"
|
||||
@@ -291,17 +301,17 @@ typedef long long ssize_t;
|
||||
//! \~english Macro to declare private section, "export" is optional
|
||||
//! \~russian Макрос для объявления частной секции, "export" необязателен
|
||||
//! \~sa PRIVATE PRIVATEWB
|
||||
# define PRIVATE_DECLARATION(e) \
|
||||
struct __Private__; \
|
||||
friend struct __Private__; \
|
||||
struct e __PrivateInitializer__ { \
|
||||
__PrivateInitializer__(); \
|
||||
__PrivateInitializer__(const __PrivateInitializer__ & o); \
|
||||
~__PrivateInitializer__(); \
|
||||
__PrivateInitializer__ & operator=(const __PrivateInitializer__ & o); \
|
||||
__Private__ * p = nullptr; \
|
||||
}; \
|
||||
__PrivateInitializer__ __privateinitializer__;
|
||||
# define PRIVATE_DECLARATION(e) \
|
||||
struct __Private__; \
|
||||
friend struct __Private__; \
|
||||
struct e __PrivateInitializer__ { \
|
||||
__PrivateInitializer__(); \
|
||||
__PrivateInitializer__(const __PrivateInitializer__ & o); \
|
||||
~__PrivateInitializer__(); \
|
||||
__PrivateInitializer__ & operator=(const __PrivateInitializer__ & o); \
|
||||
__Private__ * p = nullptr; \
|
||||
}; \
|
||||
__PrivateInitializer__ __privateinitializer__;
|
||||
|
||||
//! \~english Macro to start definition of private section
|
||||
//! \~russian Макрос для начала реализации частной секции
|
||||
@@ -311,31 +321,35 @@ typedef long long ssize_t;
|
||||
//! \~russian Макрос для окончания реализации частной секции без инициализации
|
||||
//! \~sa PRIVATE_DEFINITION_END PRIVATE_DEFINITION_START PRIVATE_DEFINITION_INITIALIZE PRIVATE PRIVATEWB
|
||||
# define PRIVATE_DEFINITION_END_NO_INITIALIZE(c) \
|
||||
} \
|
||||
;
|
||||
} \
|
||||
;
|
||||
|
||||
//! \~english Macro to initialize private section
|
||||
//! \~russian Макрос для инициализации частной секции
|
||||
//! \~sa PRIVATE_DEFINITION_END PRIVATE_DEFINITION_START PRIVATE_DEFINITION_END_NO_INITIALIZE PRIVATE PRIVATEWB
|
||||
# define PRIVATE_DEFINITION_INITIALIZE(c) \
|
||||
c::__PrivateInitializer__::__PrivateInitializer__() { p = new c::__Private__(); } \
|
||||
c::__PrivateInitializer__::__PrivateInitializer__(const c::__PrivateInitializer__ &) { /*if (p) delete p;*/ \
|
||||
p = new c::__Private__(); \
|
||||
} \
|
||||
c::__PrivateInitializer__::~__PrivateInitializer__() { piDeleteSafety(p); } \
|
||||
c::__PrivateInitializer__ & c::__PrivateInitializer__::operator=(const c::__PrivateInitializer__ &) { \
|
||||
piDeleteSafety(p); \
|
||||
p = new c::__Private__(); \
|
||||
return *this; \
|
||||
}
|
||||
# define PRIVATE_DEFINITION_INITIALIZE(c) \
|
||||
c::__PrivateInitializer__::__PrivateInitializer__() { \
|
||||
p = new c::__Private__(); \
|
||||
} \
|
||||
c::__PrivateInitializer__::__PrivateInitializer__(const c::__PrivateInitializer__ &) { /*if (p) delete p;*/ \
|
||||
p = new c::__Private__(); \
|
||||
} \
|
||||
c::__PrivateInitializer__::~__PrivateInitializer__() { \
|
||||
piDeleteSafety(p); \
|
||||
} \
|
||||
c::__PrivateInitializer__ & c::__PrivateInitializer__::operator=(const c::__PrivateInitializer__ &) { \
|
||||
piDeleteSafety(p); \
|
||||
p = new c::__Private__(); \
|
||||
return *this; \
|
||||
}
|
||||
|
||||
|
||||
//! \~english Macro to end definition of private section with initialization
|
||||
//! \~russian Макрос для окончания реализации частной секции с инициализацией
|
||||
//! \~sa PRIVATE_DEFINITION_END_NO_INITIALIZE PRIVATE_DEFINITION_START PRIVATE_DEFINITION_INITIALIZE PRIVATE PRIVATEWB
|
||||
# define PRIVATE_DEFINITION_END(c) \
|
||||
PRIVATE_DEFINITION_END_NO_INITIALIZE \
|
||||
(c) PRIVATE_DEFINITION_INITIALIZE(c)
|
||||
# define PRIVATE_DEFINITION_END(c) \
|
||||
PRIVATE_DEFINITION_END_NO_INITIALIZE \
|
||||
(c) PRIVATE_DEFINITION_INITIALIZE(c)
|
||||
|
||||
//! \~english Macro to access private section by pointer
|
||||
//! \~russian Макрос для доступа к частной секции
|
||||
@@ -351,9 +365,9 @@ typedef long long ssize_t;
|
||||
|
||||
//! \~english Macro to remove class copy availability
|
||||
//! \~russian Макрос для запрета копирования класса
|
||||
#define NO_COPY_CLASS(name) \
|
||||
name(const name &) = delete; \
|
||||
name & operator=(const name &) = delete;
|
||||
#define NO_COPY_CLASS(name) \
|
||||
name(const name &) = delete; \
|
||||
name & operator=(const name &) = delete;
|
||||
|
||||
//! \~english Counter macro for unique identifier generation
|
||||
//! \~russian Макрос счетчика для генерации уникальных идентификаторов
|
||||
@@ -366,19 +380,19 @@ typedef long long ssize_t;
|
||||
//! \~russian Макрос для начала статической инициализации
|
||||
//! \~sa STATIC_INITIALIZER_END
|
||||
#define STATIC_INITIALIZER_BEGIN \
|
||||
class { \
|
||||
class _Initializer_ { \
|
||||
public: \
|
||||
_Initializer_() {
|
||||
class { \
|
||||
class _Initializer_ { \
|
||||
public: \
|
||||
_Initializer_() {
|
||||
//! \~english Macro to end static initializer
|
||||
//! \~russian Макрос для окончания статической инициализации
|
||||
//! \~sa STATIC_INITIALIZER_BEGIN
|
||||
#define STATIC_INITIALIZER_END \
|
||||
} \
|
||||
} \
|
||||
_initializer_; \
|
||||
} \
|
||||
_PIP_ADD_COUNTER(_pip_initializer_);
|
||||
} \
|
||||
} \
|
||||
_initializer_; \
|
||||
} \
|
||||
_PIP_ADD_COUNTER(_pip_initializer_);
|
||||
|
||||
|
||||
//! \~english Macro used for infinite loop
|
||||
|
||||
Reference in New Issue
Block a user