15 #ifndef RAPIDJSON_RAPIDJSON_H_ 16 #define RAPIDJSON_RAPIDJSON_H_ 50 #define RAPIDJSON_STRINGIFY(x) RAPIDJSON_DO_STRINGIFY(x) 51 #define RAPIDJSON_DO_STRINGIFY(x) #x 54 #define RAPIDJSON_JOIN(X, Y) RAPIDJSON_DO_JOIN(X, Y) 55 #define RAPIDJSON_DO_JOIN(X, Y) RAPIDJSON_DO_JOIN2(X, Y) 56 #define RAPIDJSON_DO_JOIN2(X, Y) X##Y 75 #define RAPIDJSON_MAJOR_VERSION 1 76 #define RAPIDJSON_MINOR_VERSION 1 77 #define RAPIDJSON_PATCH_VERSION 0 78 #define RAPIDJSON_VERSION_STRING \ 79 RAPIDJSON_STRINGIFY(RAPIDJSON_MAJOR_VERSION.RAPIDJSON_MINOR_VERSION.RAPIDJSON_PATCH_VERSION) 117 #ifndef RAPIDJSON_NAMESPACE 118 #define RAPIDJSON_NAMESPACE rapidjson 120 #ifndef RAPIDJSON_NAMESPACE_BEGIN 121 #define RAPIDJSON_NAMESPACE_BEGIN namespace RAPIDJSON_NAMESPACE { 123 #ifndef RAPIDJSON_NAMESPACE_END 124 #define RAPIDJSON_NAMESPACE_END } 130 #ifndef RAPIDJSON_HAS_STDSTRING 131 #ifdef RAPIDJSON_DOXYGEN_RUNNING 132 #define RAPIDJSON_HAS_STDSTRING 1 // force generation of documentation 134 #define RAPIDJSON_HAS_STDSTRING 0 // no std::string support by default 146 #endif // !defined(RAPIDJSON_HAS_STDSTRING) 148 #if RAPIDJSON_HAS_STDSTRING 150 #endif // RAPIDJSON_HAS_STDSTRING 165 #ifndef RAPIDJSON_NO_INT64DEFINE 166 #if defined(_MSC_VER) && (_MSC_VER < 1800) // Visual Studio 2013 175 #ifdef RAPIDJSON_DOXYGEN_RUNNING 177 #define RAPIDJSON_NO_INT64DEFINE 179 #endif // RAPIDJSON_NO_INT64TYPEDEF 184 #ifndef RAPIDJSON_FORCEINLINE 185 #if defined(_MSC_VER) && defined(NDEBUG) 187 #define RAPIDJSON_FORCEINLINE __forceinline 188 #elif defined(__GNUC__) && __GNUC__ >= 4 && defined(NDEBUG) 189 #define RAPIDJSON_FORCEINLINE __attribute__((always_inline)) 191 #define RAPIDJSON_FORCEINLINE 193 #endif // RAPIDJSON_FORCEINLINE 198 #define RAPIDJSON_LITTLEENDIAN 0 199 #define RAPIDJSON_BIGENDIAN 1 214 #ifndef RAPIDJSON_ENDIAN 216 # ifdef __BYTE_ORDER__ 217 # if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 218 # define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN 219 # elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 220 # define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN 222 # error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN. 223 # endif // __BYTE_ORDER__ 225 # elif defined(__GLIBC__) 227 # if (__BYTE_ORDER == __LITTLE_ENDIAN) 228 # define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN 229 # elif (__BYTE_ORDER == __BIG_ENDIAN) 230 # define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN 232 # error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN. 235 # elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) 236 # define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN 237 # elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) 238 # define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN 240 # elif defined(__sparc) || defined(__sparc__) || defined(_POWER) || defined(__powerpc__) || defined(__ppc__) || defined(__hpux) || defined(__hppa) || defined(_MIPSEB) || defined(_POWER) || defined(__s390__) 241 # define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN 242 # elif defined(__i386__) || defined(__alpha__) || defined(__ia64) || defined(__ia64__) || defined(_M_IX86) || defined(_M_IA64) || defined(_M_ALPHA) || defined(__amd64) || defined(__amd64__) || defined(_M_AMD64) || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || defined(__bfin__) 243 # define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN 244 # elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_ARM64)) 245 # define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN 246 # elif defined(RAPIDJSON_DOXYGEN_RUNNING) 247 # define RAPIDJSON_ENDIAN 249 # error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN. 251 #endif // RAPIDJSON_ENDIAN 257 #ifndef RAPIDJSON_64BIT 258 #if defined(__LP64__) || (defined(__x86_64__) && defined(__ILP32__)) || defined(_WIN64) || defined(__EMSCRIPTEN__) 259 #define RAPIDJSON_64BIT 1 261 #define RAPIDJSON_64BIT 0 263 #endif // RAPIDJSON_64BIT 276 #ifndef RAPIDJSON_ALIGN 277 #if RAPIDJSON_64BIT == 1 278 #define RAPIDJSON_ALIGN(x) (((x) + static_cast<uint64_t>(7u)) & ~static_cast<uint64_t>(7u)) 280 #define RAPIDJSON_ALIGN(x) (((x) + 3u) & ~3u) 293 #ifndef RAPIDJSON_UINT64_C2 294 #define RAPIDJSON_UINT64_C2(high32, low32) ((static_cast<uint64_t>(high32) << 32) | static_cast<uint64_t>(low32)) 308 #ifndef RAPIDJSON_48BITPOINTER_OPTIMIZATION 309 #if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) 310 #define RAPIDJSON_48BITPOINTER_OPTIMIZATION 1 312 #define RAPIDJSON_48BITPOINTER_OPTIMIZATION 0 314 #endif // RAPIDJSON_48BITPOINTER_OPTIMIZATION 316 #if RAPIDJSON_48BITPOINTER_OPTIMIZATION == 1 317 #if RAPIDJSON_64BIT != 1 318 #error RAPIDJSON_48BITPOINTER_OPTIMIZATION can only be set to 1 when RAPIDJSON_64BIT=1 320 #define RAPIDJSON_SETPOINTER(type, p, x) (p = reinterpret_cast<type *>((reinterpret_cast<uintptr_t>(p) & static_cast<uintptr_t>(RAPIDJSON_UINT64_C2(0xFFFF0000, 0x00000000))) | reinterpret_cast<uintptr_t>(reinterpret_cast<const void*>(x)))) 321 #define RAPIDJSON_GETPOINTER(type, p) (reinterpret_cast<type *>(reinterpret_cast<uintptr_t>(p) & static_cast<uintptr_t>(RAPIDJSON_UINT64_C2(0x0000FFFF, 0xFFFFFFFF)))) 323 #define RAPIDJSON_SETPOINTER(type, p, x) (p = (x)) 324 #define RAPIDJSON_GETPOINTER(type, p) (p) 356 #if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42) \ 357 || defined(RAPIDJSON_NEON) || defined(RAPIDJSON_DOXYGEN_RUNNING) 358 #define RAPIDJSON_SIMD 364 #ifndef RAPIDJSON_NO_SIZETYPEDEFINE 380 #ifdef RAPIDJSON_DOXYGEN_RUNNING 381 #define RAPIDJSON_NO_SIZETYPEDEFINE 409 #ifndef RAPIDJSON_ASSERT 411 #define RAPIDJSON_ASSERT(x) assert(x) 412 #endif // RAPIDJSON_ASSERT 418 #ifndef RAPIDJSON_STATIC_ASSERT 419 #if __cplusplus >= 201103L || ( defined(_MSC_VER) && _MSC_VER >= 1800 ) 420 #define RAPIDJSON_STATIC_ASSERT(x) \ 421 static_assert(x, RAPIDJSON_STRINGIFY(x)) 423 #endif // RAPIDJSON_STATIC_ASSERT 426 #ifndef RAPIDJSON_STATIC_ASSERT 431 template <
bool x>
struct STATIC_ASSERTION_FAILURE;
432 template <>
struct STATIC_ASSERTION_FAILURE<
true> {
enum {
value = 1 }; };
433 template <
size_t x>
struct StaticAssertTest {};
436 #if defined(__GNUC__) || defined(__clang__) 437 #define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused)) 439 #define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE 450 #define RAPIDJSON_STATIC_ASSERT(x) \ 451 typedef ::RAPIDJSON_NAMESPACE::StaticAssertTest< \ 452 sizeof(::RAPIDJSON_NAMESPACE::STATIC_ASSERTION_FAILURE<bool(x) >)> \ 453 RAPIDJSON_JOIN(StaticAssertTypedef, __LINE__) RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE 454 #endif // RAPIDJSON_STATIC_ASSERT 464 #ifndef RAPIDJSON_LIKELY 465 #if defined(__GNUC__) || defined(__clang__) 466 #define RAPIDJSON_LIKELY(x) __builtin_expect(!!(x), 1) 468 #define RAPIDJSON_LIKELY(x) (x) 477 #ifndef RAPIDJSON_UNLIKELY 478 #if defined(__GNUC__) || defined(__clang__) 479 #define RAPIDJSON_UNLIKELY(x) __builtin_expect(!!(x), 0) 481 #define RAPIDJSON_UNLIKELY(x) (x) 490 #define RAPIDJSON_MULTILINEMACRO_BEGIN do { 491 #define RAPIDJSON_MULTILINEMACRO_END \ 495 #define RAPIDJSON_VERSION_CODE(x,y,z) \ 496 (((x)*100000) + ((y)*100) + (z)) 501 #if defined(__GNUC__) 502 #define RAPIDJSON_GNUC \ 503 RAPIDJSON_VERSION_CODE(__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__) 506 #if defined(__clang__) || (defined(RAPIDJSON_GNUC) && RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,2,0)) 508 #define RAPIDJSON_PRAGMA(x) _Pragma(RAPIDJSON_STRINGIFY(x)) 509 #define RAPIDJSON_DIAG_PRAGMA(x) RAPIDJSON_PRAGMA(GCC diagnostic x) 510 #define RAPIDJSON_DIAG_OFF(x) \ 511 RAPIDJSON_DIAG_PRAGMA(ignored RAPIDJSON_STRINGIFY(RAPIDJSON_JOIN(-W,x))) 514 #if defined(__clang__) || (defined(RAPIDJSON_GNUC) && RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) 515 #define RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_PRAGMA(push) 516 #define RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_PRAGMA(pop) 517 #else // GCC >= 4.2, < 4.6 518 #define RAPIDJSON_DIAG_PUSH 519 #define RAPIDJSON_DIAG_POP 522 #elif defined(_MSC_VER) 525 #define RAPIDJSON_PRAGMA(x) __pragma(x) 526 #define RAPIDJSON_DIAG_PRAGMA(x) RAPIDJSON_PRAGMA(warning(x)) 528 #define RAPIDJSON_DIAG_OFF(x) RAPIDJSON_DIAG_PRAGMA(disable: x) 529 #define RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_PRAGMA(push) 530 #define RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_PRAGMA(pop) 534 #define RAPIDJSON_DIAG_OFF(x) 535 #define RAPIDJSON_DIAG_PUSH 536 #define RAPIDJSON_DIAG_POP 538 #endif // RAPIDJSON_DIAG_* 543 #ifndef RAPIDJSON_HAS_CXX11_RVALUE_REFS 544 #if defined(__clang__) 545 #if __has_feature(cxx_rvalue_references) && \ 546 (defined(_MSC_VER) || defined(_LIBCPP_VERSION) || defined(__GLIBCXX__) && __GLIBCXX__ >= 20080306) 547 #define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1 549 #define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0 551 #elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,3,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \ 552 (defined(_MSC_VER) && _MSC_VER >= 1600) || \ 553 (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__)) 555 #define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1 557 #define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0 559 #endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS 561 #ifndef RAPIDJSON_HAS_CXX11_NOEXCEPT 562 #if defined(__clang__) 563 #define RAPIDJSON_HAS_CXX11_NOEXCEPT __has_feature(cxx_noexcept) 564 #elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \ 565 (defined(_MSC_VER) && _MSC_VER >= 1900) || \ 566 (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__)) 567 #define RAPIDJSON_HAS_CXX11_NOEXCEPT 1 569 #define RAPIDJSON_HAS_CXX11_NOEXCEPT 0 572 #if RAPIDJSON_HAS_CXX11_NOEXCEPT 573 #define RAPIDJSON_NOEXCEPT noexcept 575 #define RAPIDJSON_NOEXCEPT 576 #endif // RAPIDJSON_HAS_CXX11_NOEXCEPT 579 #ifndef RAPIDJSON_HAS_CXX11_TYPETRAITS 580 #if (defined(_MSC_VER) && _MSC_VER >= 1700) 581 #define RAPIDJSON_HAS_CXX11_TYPETRAITS 1 583 #define RAPIDJSON_HAS_CXX11_TYPETRAITS 0 587 #ifndef RAPIDJSON_HAS_CXX11_RANGE_FOR 588 #if defined(__clang__) 589 #define RAPIDJSON_HAS_CXX11_RANGE_FOR __has_feature(cxx_range_for) 590 #elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \ 591 (defined(_MSC_VER) && _MSC_VER >= 1700) || \ 592 (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__)) 593 #define RAPIDJSON_HAS_CXX11_RANGE_FOR 1 595 #define RAPIDJSON_HAS_CXX11_RANGE_FOR 0 597 #endif // RAPIDJSON_HAS_CXX11_RANGE_FOR 604 #ifndef RAPIDJSON_NEW 605 #define RAPIDJSON_NEW(TypeName) new TypeName 608 #ifndef RAPIDJSON_DELETE 609 #define RAPIDJSON_DELETE(x) delete x 635 #endif // RAPIDJSON_RAPIDJSON_H_ RAPIDJSON_NAMESPACE_BEGIN typedef unsigned SizeType
Size type (for string lengths, array sizes, etc.)
Definition: rapidjson.h:389
object
Definition: rapidjson.h:627
#define RAPIDJSON_NAMESPACE_END
provide custom rapidjson namespace (closing expression)
Definition: rapidjson.h:124
array
Definition: rapidjson.h:628
false
Definition: rapidjson.h:625
#define RAPIDJSON_NAMESPACE_BEGIN
provide custom rapidjson namespace (opening expression)
Definition: rapidjson.h:121
string
Definition: rapidjson.h:629
number
Definition: rapidjson.h:630
const GenericPointer< typename T::ValueType > T2 value
Definition: pointer.h:1225
true
Definition: rapidjson.h:626
Type
Type of JSON value.
Definition: rapidjson.h:623
#define true
Definition: stdbool.h:36
null
Definition: rapidjson.h:624