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