#pragma once /** @file @brief int type definition and macros @author MITSUNARI Shigeo(@herumi) */ #if defined(_MSC_VER) && (MSC_VER <= 1500) && !defined(CYBOZU_DEFINED_INTXX) #define CYBOZU_DEFINED_INTXX typedef __int64 int64_t; typedef unsigned __int64 uint64_t; typedef unsigned int uint32_t; typedef int int32_t; typedef unsigned short uint16_t; typedef short int16_t; typedef unsigned char uint8_t; typedef signed char int8_t; #else #include #endif #ifdef _MSC_VER #ifndef CYBOZU_DEFINED_SSIZE_T #define CYBOZU_DEFINED_SSIZE_T #ifdef _WIN64 typedef int64_t ssize_t; #else typedef int32_t ssize_t; #endif #endif #else #include // for ssize_t #endif #ifndef CYBOZU_ALIGN #ifdef _MSC_VER #define CYBOZU_ALIGN(x) __declspec(align(x)) #else #define CYBOZU_ALIGN(x) __attribute__((aligned(x))) #endif #endif #ifndef CYBOZU_FORCE_INLINE #ifdef _MSC_VER #define CYBOZU_FORCE_INLINE __forceinline #else #define CYBOZU_FORCE_INLINE __attribute__((always_inline)) #endif #endif #ifndef CYBOZU_UNUSED #ifdef __GNUC__ #define CYBOZU_UNUSED __attribute__((unused)) #else #define CYBOZU_UNUSED #endif #endif #ifndef CYBOZU_ALLOCA #ifdef _MSC_VER #include #define CYBOZU_ALLOCA(x) _malloca(x) #else #define CYBOZU_ALLOCA(x) __builtin_alloca(x) #endif #endif #ifndef CYBOZU_NUM_OF_ARRAY #define CYBOZU_NUM_OF_ARRAY(x) (sizeof(x) / sizeof(*x)) #endif #ifndef CYBOZU_SNPRINTF #if defined(_MSC_VER) && (_MSC_VER < 1900) #define CYBOZU_SNPRINTF(x, len, ...) (void)_snprintf_s(x, len, len - 1, __VA_ARGS__) #else #define CYBOZU_SNPRINTF(x, len, ...) (void)snprintf(x, len, __VA_ARGS__) #endif #endif #define CYBOZU_CPP_VERSION_CPP03 0 #define CYBOZU_CPP_VERSION_TR1 1 #define CYBOZU_CPP_VERSION_CPP11 2 #define CYBOZU_CPP_VERSION_CPP14 3 #define CYBOZU_CPP_VERSION_CPP17 4 #ifdef __GNUC__ #define CYBOZU_GNUC_PREREQ(major, minor) ((__GNUC__) * 100 + (__GNUC_MINOR__) >= (major) * 100 + (minor)) #else #define CYBOZU_GNUC_PREREQ(major, minor) 0 #endif #if (__cplusplus >= 201703) #define CYBOZU_CPP_VERSION CYBOZU_CPP_VERSION_CPP17 #elif (__cplusplus >= 201402) #define CYBOZU_CPP_VERSION CYBOZU_CPP_VERSION_CPP14 #elif (__cplusplus >= 201103) || (_MSC_VER >= 1500) || defined(__GXX_EXPERIMENTAL_CXX0X__) #if defined(_MSC_VER) && (_MSC_VER <= 1600) #define CYBOZU_CPP_VERSION CYBOZU_CPP_VERSION_TR1 #else #define CYBOZU_CPP_VERSION CYBOZU_CPP_VERSION_CPP11 #endif #elif CYBOZU_GNUC_PREREQ(4, 5) || (CYBOZU_GNUC_PREREQ(4, 2) && __GLIBCXX__ >= 20070719) || defined(__INTEL_COMPILER) || (__clang_major__ >= 3) #define CYBOZU_CPP_VERSION CYBOZU_CPP_VERSION_TR1 #else #define CYBOZU_CPP_VERSION CYBOZU_CPP_VERSION_CPP03 #endif #ifdef CYBOZU_USE_BOOST #define CYBOZU_NAMESPACE_STD boost #define CYBOZU_NAMESPACE_TR1_BEGIN #define CYBOZU_NAMESPACE_TR1_END #elif (CYBOZU_CPP_VERSION == CYBOZU_CPP_VERSION_TR1) && !defined(__APPLE__) #define CYBOZU_NAMESPACE_STD std::tr1 #define CYBOZU_NAMESPACE_TR1_BEGIN namespace tr1 { #define CYBOZU_NAMESPACE_TR1_END } #else #define CYBOZU_NAMESPACE_STD std #define CYBOZU_NAMESPACE_TR1_BEGIN #define CYBOZU_NAMESPACE_TR1_END #endif #ifndef CYBOZU_OS_BIT #if defined(_WIN64) || defined(__x86_64__) || defined(__AARCH64EL__) || defined(__EMSCRIPTEN__) #define CYBOZU_OS_BIT 64 #else #define CYBOZU_OS_BIT 32 #endif #endif #ifndef CYBOZU_HOST #define CYBOZU_HOST_UNKNOWN 0 #define CYBOZU_HOST_INTEL 1 #define CYBOZU_HOST_ARM 2 #if defined(_M_IX86) || defined(_M_AMD64) || defined(__x86_64__) || defined(__i386__) #define CYBOZU_HOST CYBOZU_HOST_INTEL #elif defined(__arm__) || defined(__AARCH64EL__) #define CYBOZU_HOST CYBOZU_HOST_ARM #else #define CYBOZU_HOST CYBOZU_HOST_UNKNOWN #endif #endif #ifndef CYBOZU_ENDIAN #define CYBOZU_ENDIAN_UNKNOWN 0 #define CYBOZU_ENDIAN_LITTLE 1 #define CYBOZU_ENDIAN_BIG 2 #if (CYBOZU_HOST == CYBOZU_HOST_INTEL) #define CYBOZU_ENDIAN CYBOZU_ENDIAN_LITTLE #elif (CYBOZU_HOST == CYBOZU_HOST_ARM) && (defined(__ARM_EABI__) || defined(__AARCH64EL__)) #define CYBOZU_ENDIAN CYBOZU_ENDIAN_LITTLE #else #define CYBOZU_ENDIAN CYBOZU_ENDIAN_UNKNOWN #endif #endif #if CYBOZU_CPP_VERSION >= CYBOZU_CPP_VERSION_CPP11 #define CYBOZU_NOEXCEPT noexcept #else #define CYBOZU_NOEXCEPT throw() #endif namespace cybozu { template void disable_warning_unused_variable(const T&) { } template T cast(const S* ptr) { return static_cast(static_cast(ptr)); } template T cast(S* ptr) { return static_cast(static_cast(ptr)); } } // cybozu