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 70 #define RAPIDJSON_MAJOR_VERSION 1 71 #define RAPIDJSON_MINOR_VERSION 1 72 #define RAPIDJSON_PATCH_VERSION 0 73 #define RAPIDJSON_VERSION_STRING \ 74 RAPIDJSON_STRINGIFY(RAPIDJSON_MAJOR_VERSION.RAPIDJSON_MINOR_VERSION.RAPIDJSON_PATCH_VERSION) 112 #ifndef RAPIDJSON_NAMESPACE 113 #define RAPIDJSON_NAMESPACE rapidjson 115 #ifndef RAPIDJSON_NAMESPACE_BEGIN 116 #define RAPIDJSON_NAMESPACE_BEGIN namespace RAPIDJSON_NAMESPACE { 118 #ifndef RAPIDJSON_NAMESPACE_END 119 #define RAPIDJSON_NAMESPACE_END } 125 #ifndef RAPIDJSON_HAS_STDSTRING 126 #ifdef RAPIDJSON_DOXYGEN_RUNNING 127 #define RAPIDJSON_HAS_STDSTRING 1 // force generation of documentation 129 #define RAPIDJSON_HAS_STDSTRING 0 // no std::string support by default 141 #endif // !defined(RAPIDJSON_HAS_STDSTRING) 143 #if RAPIDJSON_HAS_STDSTRING 145 #endif // RAPIDJSON_HAS_STDSTRING 160 #ifndef RAPIDJSON_NO_INT64DEFINE 161 #if defined(_MSC_VER) && (_MSC_VER < 1800) // Visual Studio 2013 168 #include <inttypes.h> 170 #ifdef RAPIDJSON_DOXYGEN_RUNNING 172 #define RAPIDJSON_NO_INT64DEFINE 174 #endif // RAPIDJSON_NO_INT64TYPEDEF 179 #ifndef RAPIDJSON_FORCEINLINE 180 #if defined(_MSC_VER) && defined(NDEBUG) 182 #define RAPIDJSON_FORCEINLINE __forceinline 183 #elif defined(__GNUC__) && __GNUC__ >= 4 && defined(NDEBUG) 184 #define RAPIDJSON_FORCEINLINE __attribute__((always_inline)) 186 #define RAPIDJSON_FORCEINLINE 188 #endif // RAPIDJSON_FORCEINLINE 193 #define RAPIDJSON_LITTLEENDIAN 0 194 #define RAPIDJSON_BIGENDIAN 1 209 #ifndef RAPIDJSON_ENDIAN 211 # ifdef __BYTE_ORDER__ 212 # if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 213 # define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN 214 # elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 215 # define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN 217 # error Unknown machine endianess detected. User needs to define RAPIDJSON_ENDIAN. 218 # endif // __BYTE_ORDER__ 220 # elif defined(__GLIBC__) 222 # if (__BYTE_ORDER == __LITTLE_ENDIAN) 223 # define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN 224 # elif (__BYTE_ORDER == __BIG_ENDIAN) 225 # define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN 227 # error Unknown machine endianess detected. User needs to define RAPIDJSON_ENDIAN. 230 # elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) 231 # define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN 232 # elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) 233 # define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN 235 # elif defined(__sparc) || defined(__sparc__) || defined(_POWER) || defined(__powerpc__) || defined(__ppc__) || defined(__hpux) || defined(__hppa) || defined(_MIPSEB) || defined(_POWER) || defined(__s390__) 236 # define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN 237 # 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__) 238 # define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN 239 # elif defined(_MSC_VER) && defined(_M_ARM) 240 # define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN 241 # elif defined(RAPIDJSON_DOXYGEN_RUNNING) 242 # define RAPIDJSON_ENDIAN 244 # error Unknown machine endianess detected. User needs to define RAPIDJSON_ENDIAN. 246 #endif // RAPIDJSON_ENDIAN 252 #ifndef RAPIDJSON_64BIT 253 #if defined(__LP64__) || (defined(__x86_64__) && defined(__ILP32__)) || defined(_WIN64) || defined(__EMSCRIPTEN__) 254 #define RAPIDJSON_64BIT 1 256 #define RAPIDJSON_64BIT 0 258 #endif // RAPIDJSON_64BIT 271 #ifndef RAPIDJSON_ALIGN 272 #if RAPIDJSON_64BIT == 1 273 #define RAPIDJSON_ALIGN(x) (((x) + static_cast<uint64_t>(7u)) & ~static_cast<uint64_t>(7u)) 275 #define RAPIDJSON_ALIGN(x) (((x) + 3u) & ~3u) 288 #ifndef RAPIDJSON_UINT64_C2 289 #define RAPIDJSON_UINT64_C2(high32, low32) ((static_cast<uint64_t>(high32) << 32) | static_cast<uint64_t>(low32)) 303 #ifndef RAPIDJSON_48BITPOINTER_OPTIMIZATION 304 #if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) 305 #define RAPIDJSON_48BITPOINTER_OPTIMIZATION 1 307 #define RAPIDJSON_48BITPOINTER_OPTIMIZATION 0 309 #endif // RAPIDJSON_48BITPOINTER_OPTIMIZATION 311 #if RAPIDJSON_48BITPOINTER_OPTIMIZATION == 1 312 #if RAPIDJSON_64BIT != 1 313 #error RAPIDJSON_48BITPOINTER_OPTIMIZATION can only be set to 1 when RAPIDJSON_64BIT=1 315 #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)))) 316 #define RAPIDJSON_GETPOINTER(type, p) (reinterpret_cast<type *>(reinterpret_cast<uintptr_t>(p) & static_cast<uintptr_t>(RAPIDJSON_UINT64_C2(0x0000FFFF, 0xFFFFFFFF)))) 318 #define RAPIDJSON_SETPOINTER(type, p, x) (p = (x)) 319 #define RAPIDJSON_GETPOINTER(type, p) (p) 347 #if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42) \ 348 || defined(RAPIDJSON_DOXYGEN_RUNNING) 349 #define RAPIDJSON_SIMD 355 #ifndef RAPIDJSON_NO_SIZETYPEDEFINE 371 #ifdef RAPIDJSON_DOXYGEN_RUNNING 372 #define RAPIDJSON_NO_SIZETYPEDEFINE 400 #ifndef RAPIDJSON_ASSERT 402 #define RAPIDJSON_ASSERT(x) assert(x) 403 #endif // RAPIDJSON_ASSERT 409 #ifndef RAPIDJSON_STATIC_ASSERT 414 template <
bool x>
struct STATIC_ASSERTION_FAILURE;
415 template <>
struct STATIC_ASSERTION_FAILURE<
true> {
enum {
value = 1 }; };
416 template<
int x>
struct StaticAssertTest {};
419 #define RAPIDJSON_JOIN(X, Y) RAPIDJSON_DO_JOIN(X, Y) 420 #define RAPIDJSON_DO_JOIN(X, Y) RAPIDJSON_DO_JOIN2(X, Y) 421 #define RAPIDJSON_DO_JOIN2(X, Y) X##Y 423 #if defined(__GNUC__) 424 #define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused)) 426 #define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE 437 #define RAPIDJSON_STATIC_ASSERT(x) \ 438 typedef ::RAPIDJSON_NAMESPACE::StaticAssertTest< \ 439 sizeof(::RAPIDJSON_NAMESPACE::STATIC_ASSERTION_FAILURE<bool(x) >)> \ 440 RAPIDJSON_JOIN(StaticAssertTypedef, __LINE__) RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE 451 #ifndef RAPIDJSON_LIKELY 452 #if defined(__GNUC__) || defined(__clang__) 453 #define RAPIDJSON_LIKELY(x) __builtin_expect(!!(x), 1) 455 #define RAPIDJSON_LIKELY(x) (x) 464 #ifndef RAPIDJSON_UNLIKELY 465 #if defined(__GNUC__) || defined(__clang__) 466 #define RAPIDJSON_UNLIKELY(x) __builtin_expect(!!(x), 0) 468 #define RAPIDJSON_UNLIKELY(x) (x) 477 #define RAPIDJSON_MULTILINEMACRO_BEGIN do { 478 #define RAPIDJSON_MULTILINEMACRO_END \ 482 #define RAPIDJSON_VERSION_CODE(x,y,z) \ 483 (((x)*100000) + ((y)*100) + (z)) 488 #if defined(__GNUC__) 489 #define RAPIDJSON_GNUC \ 490 RAPIDJSON_VERSION_CODE(__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__) 493 #if defined(__clang__) || (defined(RAPIDJSON_GNUC) && RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,2,0)) 495 #define RAPIDJSON_PRAGMA(x) _Pragma(RAPIDJSON_STRINGIFY(x)) 496 #define RAPIDJSON_DIAG_PRAGMA(x) RAPIDJSON_PRAGMA(GCC diagnostic x) 497 #define RAPIDJSON_DIAG_OFF(x) \ 498 RAPIDJSON_DIAG_PRAGMA(ignored RAPIDJSON_STRINGIFY(RAPIDJSON_JOIN(-W,x))) 501 #if defined(__clang__) || (defined(RAPIDJSON_GNUC) && RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) 502 #define RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_PRAGMA(push) 503 #define RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_PRAGMA(pop) 504 #else // GCC >= 4.2, < 4.6 505 #define RAPIDJSON_DIAG_PUSH 506 #define RAPIDJSON_DIAG_POP 509 #elif defined(_MSC_VER) 512 #define RAPIDJSON_PRAGMA(x) __pragma(x) 513 #define RAPIDJSON_DIAG_PRAGMA(x) RAPIDJSON_PRAGMA(warning(x)) 515 #define RAPIDJSON_DIAG_OFF(x) RAPIDJSON_DIAG_PRAGMA(disable: x) 516 #define RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_PRAGMA(push) 517 #define RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_PRAGMA(pop) 521 #define RAPIDJSON_DIAG_OFF(x) 522 #define RAPIDJSON_DIAG_PUSH 523 #define RAPIDJSON_DIAG_POP 525 #endif // RAPIDJSON_DIAG_* 530 #ifndef RAPIDJSON_HAS_CXX11_RVALUE_REFS 531 #if defined(__clang__) 532 #if __has_feature(cxx_rvalue_references) && \ 533 (defined(_LIBCPP_VERSION) || defined(__GLIBCXX__) && __GLIBCXX__ >= 20080306) 534 #define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1 536 #define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0 538 #elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,3,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \ 539 (defined(_MSC_VER) && _MSC_VER >= 1600) 541 #define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1 543 #define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0 545 #endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS 547 #ifndef RAPIDJSON_HAS_CXX11_NOEXCEPT 548 #if defined(__clang__) 549 #define RAPIDJSON_HAS_CXX11_NOEXCEPT __has_feature(cxx_noexcept) 550 #elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) 552 #define RAPIDJSON_HAS_CXX11_NOEXCEPT 1 554 #define RAPIDJSON_HAS_CXX11_NOEXCEPT 0 557 #if RAPIDJSON_HAS_CXX11_NOEXCEPT 558 #define RAPIDJSON_NOEXCEPT noexcept 560 #define RAPIDJSON_NOEXCEPT 561 #endif // RAPIDJSON_HAS_CXX11_NOEXCEPT 564 #ifndef RAPIDJSON_HAS_CXX11_TYPETRAITS 565 #define RAPIDJSON_HAS_CXX11_TYPETRAITS 0 568 #ifndef RAPIDJSON_HAS_CXX11_RANGE_FOR 569 #if defined(__clang__) 570 #define RAPIDJSON_HAS_CXX11_RANGE_FOR __has_feature(cxx_range_for) 571 #elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,3,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \ 572 (defined(_MSC_VER) && _MSC_VER >= 1700) 573 #define RAPIDJSON_HAS_CXX11_RANGE_FOR 1 575 #define RAPIDJSON_HAS_CXX11_RANGE_FOR 0 577 #endif // RAPIDJSON_HAS_CXX11_RANGE_FOR 584 #ifndef RAPIDJSON_NEW 585 #define RAPIDJSON_NEW(x) new x 588 #ifndef RAPIDJSON_DELETE 589 #define RAPIDJSON_DELETE(x) delete x 615 #endif // RAPIDJSON_RAPIDJSON_H_ true
Definition: rapidjson.h:606
array
Definition: rapidjson.h:608
string
Definition: rapidjson.h:609
false
Definition: rapidjson.h:605
object
Definition: rapidjson.h:607
#define RAPIDJSON_NAMESPACE_END
provide custom rapidjson namespace (closing expression)
Definition: rapidjson.h:119
null
Definition: rapidjson.h:604
number
Definition: rapidjson.h:610
#define RAPIDJSON_NAMESPACE_BEGIN
provide custom rapidjson namespace (opening expression)
Definition: rapidjson.h:116
GLsizei const GLfloat * value
Definition: glext.h:6709
Type
Type of JSON value.
Definition: rapidjson.h:603
#define true
Definition: ordinals.h:82
RAPIDJSON_NAMESPACE_BEGIN typedef unsigned SizeType
Size type (for string lengths, array sizes, etc.)
Definition: rapidjson.h:380