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 1 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 61extern 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 78//#ifdef __clang__ 79//#if __has_extension(attribute_deprecated_with_message) 80//#define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message))) 81//#endif 82//#elif defined(__GNUC__) // not clang (gcc comes later since clang emulates gcc) 83//#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) 84//#define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message))) 85//#elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) 86//#define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) 87//#endif // GNUC version 88//#elif defined(_MSC_VER) // MSVC (after clang because clang on Windows emulates 89// // MSVC) 90//#define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) 91//#endif // __clang__ || __GNUC__ || _MSC_VER 92 93#if !defined(JSONCPP_DEPRECATED) 94#define JSONCPP_DEPRECATED(message) 95#endif // if !defined(JSONCPP_DEPRECATED) 96 97#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 6)) 98#define JSON_USE_INT64_DOUBLE_CONVERSION 1 99#endif 100 101#if !defined(JSON_IS_AMALGAMATION) 102 103#include <json/allocator.h> 104#include <json/version.h> 105 106#endif // if !defined(JSON_IS_AMALGAMATION) 107 108namespace Json { 109using Int = int; 110using UInt = unsigned int; 111#if defined(JSON_NO_INT64) 112using LargestInt = int; 113using LargestUInt = unsigned int; 114#undef JSON_HAS_INT64 115#else // if defined(JSON_NO_INT64) 116// For Microsoft Visual use specific types as long long is not supported 117#if defined(_MSC_VER) // Microsoft Visual Studio 118using Int64 = __int64; 119using UInt64 = unsigned __int64; 120#else // if defined(_MSC_VER) // Other platforms, use long long 121using Int64 = int64_t; 122using UInt64 = uint64_t; 123#endif // if defined(_MSC_VER) 124using LargestInt = Int64; 125using LargestUInt = UInt64; 126#define JSON_HAS_INT64 127#endif // if defined(JSON_NO_INT64) 128 129template <typename T> 130using Allocator = 131 typename std::conditional<JSONCPP_USING_SECURE_MEMORY, SecureAllocator<T>, 132 std::allocator<T>>::type; 133using String = std::basic_string<char, std::char_traits<char>, Allocator<char>>; 134using IStringStream = 135 std::basic_istringstream<String::value_type, String::traits_type, 136 String::allocator_type>; 137using OStringStream = 138 std::basic_ostringstream<String::value_type, String::traits_type, 139 String::allocator_type>; 140using IStream = std::istream; 141using OStream = std::ostream; 142} // namespace Json 143 144// Legacy names (formerly macros). 145using JSONCPP_STRING = Json::String; 146using JSONCPP_ISTRINGSTREAM = Json::IStringStream; 147using JSONCPP_OSTRINGSTREAM = Json::OStringStream; 148using JSONCPP_ISTREAM = Json::IStream; 149using JSONCPP_OSTREAM = Json::OStream; 150 151#endif // JSON_CONFIG_H_INCLUDED 152