1*44844408SAndroid Build Coastguard Worker // Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors 2*44844408SAndroid Build Coastguard Worker // Distributed under MIT license, or public domain if desired and 3*44844408SAndroid Build Coastguard Worker // recognized in your jurisdiction. 4*44844408SAndroid Build Coastguard Worker // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE 5*44844408SAndroid Build Coastguard Worker 6*44844408SAndroid Build Coastguard Worker #ifndef JSON_CONFIG_H_INCLUDED 7*44844408SAndroid Build Coastguard Worker #define JSON_CONFIG_H_INCLUDED 8*44844408SAndroid Build Coastguard Worker #include <cstddef> 9*44844408SAndroid Build Coastguard Worker #include <cstdint> 10*44844408SAndroid Build Coastguard Worker #include <istream> 11*44844408SAndroid Build Coastguard Worker #include <memory> 12*44844408SAndroid Build Coastguard Worker #include <ostream> 13*44844408SAndroid Build Coastguard Worker #include <sstream> 14*44844408SAndroid Build Coastguard Worker #include <string> 15*44844408SAndroid Build Coastguard Worker #include <type_traits> 16*44844408SAndroid Build Coastguard Worker 17*44844408SAndroid Build Coastguard Worker // If non-zero, the library uses exceptions to report bad input instead of C 18*44844408SAndroid Build Coastguard Worker // assertion macros. The default is to use exceptions. 19*44844408SAndroid Build Coastguard Worker #ifndef JSON_USE_EXCEPTION 20*44844408SAndroid Build Coastguard Worker #define JSON_USE_EXCEPTION 1 21*44844408SAndroid Build Coastguard Worker #endif 22*44844408SAndroid Build Coastguard Worker 23*44844408SAndroid Build Coastguard Worker // Temporary, tracked for removal with issue #982. 24*44844408SAndroid Build Coastguard Worker #ifndef JSON_USE_NULLREF 25*44844408SAndroid Build Coastguard Worker #define JSON_USE_NULLREF 1 26*44844408SAndroid Build Coastguard Worker #endif 27*44844408SAndroid Build Coastguard Worker 28*44844408SAndroid Build Coastguard Worker /// If defined, indicates that the source file is amalgamated 29*44844408SAndroid Build Coastguard Worker /// to prevent private header inclusion. 30*44844408SAndroid Build Coastguard Worker /// Remarks: it is automatically defined in the generated amalgamated header. 31*44844408SAndroid Build Coastguard Worker // #define JSON_IS_AMALGAMATION 32*44844408SAndroid Build Coastguard Worker 33*44844408SAndroid Build Coastguard Worker // Export macros for DLL visibility 34*44844408SAndroid Build Coastguard Worker #if defined(JSON_DLL_BUILD) 35*44844408SAndroid Build Coastguard Worker #if defined(_MSC_VER) || defined(__MINGW32__) 36*44844408SAndroid Build Coastguard Worker #define JSON_API __declspec(dllexport) 37*44844408SAndroid Build Coastguard Worker #define JSONCPP_DISABLE_DLL_INTERFACE_WARNING 38*44844408SAndroid Build Coastguard Worker #elif defined(__GNUC__) || defined(__clang__) 39*44844408SAndroid Build Coastguard Worker #define JSON_API __attribute__((visibility("default"))) 40*44844408SAndroid Build Coastguard Worker #endif // if defined(_MSC_VER) 41*44844408SAndroid Build Coastguard Worker 42*44844408SAndroid Build Coastguard Worker #elif defined(JSON_DLL) 43*44844408SAndroid Build Coastguard Worker #if defined(_MSC_VER) || defined(__MINGW32__) 44*44844408SAndroid Build Coastguard Worker #define JSON_API __declspec(dllimport) 45*44844408SAndroid Build Coastguard Worker #define JSONCPP_DISABLE_DLL_INTERFACE_WARNING 46*44844408SAndroid Build Coastguard Worker #endif // if defined(_MSC_VER) 47*44844408SAndroid Build Coastguard Worker #endif // ifdef JSON_DLL_BUILD 48*44844408SAndroid Build Coastguard Worker 49*44844408SAndroid Build Coastguard Worker #if !defined(JSON_API) 50*44844408SAndroid Build Coastguard Worker #define JSON_API 51*44844408SAndroid Build Coastguard Worker #endif 52*44844408SAndroid Build Coastguard Worker 53*44844408SAndroid Build Coastguard Worker #if defined(_MSC_VER) && _MSC_VER < 1800 54*44844408SAndroid Build Coastguard Worker #error \ 55*44844408SAndroid Build Coastguard Worker "ERROR: Visual Studio 12 (2013) with _MSC_VER=1800 is the oldest supported compiler with sufficient C++11 capabilities" 56*44844408SAndroid Build Coastguard Worker #endif 57*44844408SAndroid Build Coastguard Worker 58*44844408SAndroid Build Coastguard Worker #if defined(_MSC_VER) && _MSC_VER < 1900 59*44844408SAndroid Build Coastguard Worker // As recommended at 60*44844408SAndroid Build Coastguard Worker // https://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010 61*44844408SAndroid Build Coastguard Worker extern JSON_API int msvc_pre1900_c99_snprintf(char* outBuf, size_t size, 62*44844408SAndroid Build Coastguard Worker const char* format, ...); 63*44844408SAndroid Build Coastguard Worker #define jsoncpp_snprintf msvc_pre1900_c99_snprintf 64*44844408SAndroid Build Coastguard Worker #else 65*44844408SAndroid Build Coastguard Worker #define jsoncpp_snprintf std::snprintf 66*44844408SAndroid Build Coastguard Worker #endif 67*44844408SAndroid Build Coastguard Worker 68*44844408SAndroid Build Coastguard Worker // If JSON_NO_INT64 is defined, then Json only support C++ "int" type for 69*44844408SAndroid Build Coastguard Worker // integer 70*44844408SAndroid Build Coastguard Worker // Storages, and 64 bits integer support is disabled. 71*44844408SAndroid Build Coastguard Worker // #define JSON_NO_INT64 1 72*44844408SAndroid Build Coastguard Worker 73*44844408SAndroid Build Coastguard Worker // JSONCPP_OVERRIDE is maintained for backwards compatibility of external tools. 74*44844408SAndroid Build Coastguard Worker // C++11 should be used directly in JSONCPP. 75*44844408SAndroid Build Coastguard Worker #define JSONCPP_OVERRIDE override 76*44844408SAndroid Build Coastguard Worker 77*44844408SAndroid Build Coastguard Worker #ifdef __clang__ 78*44844408SAndroid Build Coastguard Worker #if __has_extension(attribute_deprecated_with_message) 79*44844408SAndroid Build Coastguard Worker #define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message))) 80*44844408SAndroid Build Coastguard Worker #endif 81*44844408SAndroid Build Coastguard Worker #elif defined(__GNUC__) // not clang (gcc comes later since clang emulates gcc) 82*44844408SAndroid Build Coastguard Worker #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) 83*44844408SAndroid Build Coastguard Worker #define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message))) 84*44844408SAndroid Build Coastguard Worker #elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) 85*44844408SAndroid Build Coastguard Worker #define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) 86*44844408SAndroid Build Coastguard Worker #endif // GNUC version 87*44844408SAndroid Build Coastguard Worker #elif defined(_MSC_VER) // MSVC (after clang because clang on Windows emulates 88*44844408SAndroid Build Coastguard Worker // MSVC) 89*44844408SAndroid Build Coastguard Worker #define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) 90*44844408SAndroid Build Coastguard Worker #endif // __clang__ || __GNUC__ || _MSC_VER 91*44844408SAndroid Build Coastguard Worker 92*44844408SAndroid Build Coastguard Worker #if !defined(JSONCPP_DEPRECATED) 93*44844408SAndroid Build Coastguard Worker #define JSONCPP_DEPRECATED(message) 94*44844408SAndroid Build Coastguard Worker #endif // if !defined(JSONCPP_DEPRECATED) 95*44844408SAndroid Build Coastguard Worker 96*44844408SAndroid Build Coastguard Worker #if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 6)) 97*44844408SAndroid Build Coastguard Worker #define JSON_USE_INT64_DOUBLE_CONVERSION 1 98*44844408SAndroid Build Coastguard Worker #endif 99*44844408SAndroid Build Coastguard Worker 100*44844408SAndroid Build Coastguard Worker #if !defined(JSON_IS_AMALGAMATION) 101*44844408SAndroid Build Coastguard Worker 102*44844408SAndroid Build Coastguard Worker #include "allocator.h" 103*44844408SAndroid Build Coastguard Worker #include "version.h" 104*44844408SAndroid Build Coastguard Worker 105*44844408SAndroid Build Coastguard Worker #endif // if !defined(JSON_IS_AMALGAMATION) 106*44844408SAndroid Build Coastguard Worker 107*44844408SAndroid Build Coastguard Worker namespace Json { 108*44844408SAndroid Build Coastguard Worker using Int = int; 109*44844408SAndroid Build Coastguard Worker using UInt = unsigned int; 110*44844408SAndroid Build Coastguard Worker #if defined(JSON_NO_INT64) 111*44844408SAndroid Build Coastguard Worker using LargestInt = int; 112*44844408SAndroid Build Coastguard Worker using LargestUInt = unsigned int; 113*44844408SAndroid Build Coastguard Worker #undef JSON_HAS_INT64 114*44844408SAndroid Build Coastguard Worker #else // if defined(JSON_NO_INT64) 115*44844408SAndroid Build Coastguard Worker // For Microsoft Visual use specific types as long long is not supported 116*44844408SAndroid Build Coastguard Worker #if defined(_MSC_VER) // Microsoft Visual Studio 117*44844408SAndroid Build Coastguard Worker using Int64 = __int64; 118*44844408SAndroid Build Coastguard Worker using UInt64 = unsigned __int64; 119*44844408SAndroid Build Coastguard Worker #else // if defined(_MSC_VER) // Other platforms, use long long 120*44844408SAndroid Build Coastguard Worker using Int64 = int64_t; 121*44844408SAndroid Build Coastguard Worker using UInt64 = uint64_t; 122*44844408SAndroid Build Coastguard Worker #endif // if defined(_MSC_VER) 123*44844408SAndroid Build Coastguard Worker using LargestInt = Int64; 124*44844408SAndroid Build Coastguard Worker using LargestUInt = UInt64; 125*44844408SAndroid Build Coastguard Worker #define JSON_HAS_INT64 126*44844408SAndroid Build Coastguard Worker #endif // if defined(JSON_NO_INT64) 127*44844408SAndroid Build Coastguard Worker 128*44844408SAndroid Build Coastguard Worker template <typename T> 129*44844408SAndroid Build Coastguard Worker using Allocator = 130*44844408SAndroid Build Coastguard Worker typename std::conditional<JSONCPP_USING_SECURE_MEMORY, SecureAllocator<T>, 131*44844408SAndroid Build Coastguard Worker std::allocator<T>>::type; 132*44844408SAndroid Build Coastguard Worker using String = std::basic_string<char, std::char_traits<char>, Allocator<char>>; 133*44844408SAndroid Build Coastguard Worker using IStringStream = 134*44844408SAndroid Build Coastguard Worker std::basic_istringstream<String::value_type, String::traits_type, 135*44844408SAndroid Build Coastguard Worker String::allocator_type>; 136*44844408SAndroid Build Coastguard Worker using OStringStream = 137*44844408SAndroid Build Coastguard Worker std::basic_ostringstream<String::value_type, String::traits_type, 138*44844408SAndroid Build Coastguard Worker String::allocator_type>; 139*44844408SAndroid Build Coastguard Worker using IStream = std::istream; 140*44844408SAndroid Build Coastguard Worker using OStream = std::ostream; 141*44844408SAndroid Build Coastguard Worker } // namespace Json 142*44844408SAndroid Build Coastguard Worker 143*44844408SAndroid Build Coastguard Worker // Legacy names (formerly macros). 144*44844408SAndroid Build Coastguard Worker using JSONCPP_STRING = Json::String; 145*44844408SAndroid Build Coastguard Worker using JSONCPP_ISTRINGSTREAM = Json::IStringStream; 146*44844408SAndroid Build Coastguard Worker using JSONCPP_OSTRINGSTREAM = Json::OStringStream; 147*44844408SAndroid Build Coastguard Worker using JSONCPP_ISTREAM = Json::IStream; 148*44844408SAndroid Build Coastguard Worker using JSONCPP_OSTREAM = Json::OStream; 149*44844408SAndroid Build Coastguard Worker 150*44844408SAndroid Build Coastguard Worker #endif // JSON_CONFIG_H_INCLUDED 151