1 // Copyright 2007-2010 Baptiste Lepilleur 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 <stddef.h> 9 #include <string> //typedef String 10 #include <stdint.h> //typedef int64_t, uint64_t 11 12 /// If defined, indicates that json library is embedded in CppTL library. 13 //# define JSON_IN_CPPTL 1 14 15 /// If defined, indicates that json may leverage CppTL library 16 //# define JSON_USE_CPPTL 1 17 /// If defined, indicates that cpptl vector based map should be used instead of 18 /// std::map 19 /// as Value container. 20 //# define JSON_USE_CPPTL_SMALLMAP 1 21 22 // If non-zero, the library uses exceptions to report bad input instead of C 23 // assertion macros. The default is to use exceptions. 24 #ifndef JSON_USE_EXCEPTION 25 #define JSON_USE_EXCEPTION 1 26 #endif 27 28 /// If defined, indicates that the source file is amalgated 29 /// to prevent private header inclusion. 30 /// Remarks: it is automatically defined in the generated amalgated header. 31 // #define JSON_IS_AMALGAMATION 32 33 #ifdef JSON_IN_CPPTL 34 #include <cpptl/config.h> 35 #ifndef JSON_USE_CPPTL 36 #define JSON_USE_CPPTL 1 37 #endif 38 #endif 39 40 #ifdef JSON_IN_CPPTL 41 #define JSON_API CPPTL_API 42 #elif defined(JSON_DLL_BUILD) 43 #if defined(_MSC_VER) || defined(__MINGW32__) 44 #define JSON_API __declspec(dllexport) 45 #define JSONCPP_DISABLE_DLL_INTERFACE_WARNING 46 #endif // if defined(_MSC_VER) 47 #elif defined(JSON_DLL) 48 #if defined(_MSC_VER) || defined(__MINGW32__) 49 #define JSON_API __declspec(dllimport) 50 #define JSONCPP_DISABLE_DLL_INTERFACE_WARNING 51 #endif // if defined(_MSC_VER) 52 #endif // ifdef JSON_IN_CPPTL 53 #if !defined(JSON_API) 54 #define JSON_API 55 #endif 56 57 // If JSON_NO_INT64 is defined, then Json only support C++ "int" type for 58 // integer 59 // Storages, and 64 bits integer support is disabled. 60 // #define JSON_NO_INT64 1 61 62 #if defined(_MSC_VER) // MSVC 63 # if _MSC_VER <= 1200 // MSVC 6 64 // Microsoft Visual Studio 6 only support conversion from __int64 to double 65 // (no conversion from unsigned __int64). 66 # define JSON_USE_INT64_DOUBLE_CONVERSION 1 67 // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' 68 // characters in the debug information) 69 // All projects I've ever seen with VS6 were using this globally (not bothering 70 // with pragma push/pop). 71 # pragma warning(disable : 4786) 72 # endif // MSVC 6 73 74 # if _MSC_VER >= 1500 // MSVC 2008 75 /// Indicates that the following function is deprecated. 76 # define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) 77 # endif 78 79 #endif // defined(_MSC_VER) 80 81 // In c++11 the override keyword allows you to explicity define that a function 82 // is intended to override the base-class version. This makes the code more 83 // managable and fixes a set of common hard-to-find bugs. 84 #if __cplusplus >= 201103L 85 # define JSONCPP_OVERRIDE override 86 #elif defined(_MSC_VER) && _MSC_VER > 1600 87 # define JSONCPP_OVERRIDE override 88 #else 89 # define JSONCPP_OVERRIDE 90 #endif 91 92 #ifndef JSON_HAS_RVALUE_REFERENCES 93 94 #if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 95 #define JSON_HAS_RVALUE_REFERENCES 1 96 #endif // MSVC >= 2010 97 98 #ifdef __clang__ 99 #if __has_feature(cxx_rvalue_references) 100 #define JSON_HAS_RVALUE_REFERENCES 1 101 #endif // has_feature 102 103 #elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) 104 #if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) 105 #define JSON_HAS_RVALUE_REFERENCES 1 106 #endif // GXX_EXPERIMENTAL 107 108 #endif // __clang__ || __GNUC__ 109 110 #endif // not defined JSON_HAS_RVALUE_REFERENCES 111 112 #ifndef JSON_HAS_RVALUE_REFERENCES 113 #define JSON_HAS_RVALUE_REFERENCES 0 114 #endif 115 116 #ifdef __clang__ 117 #elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) 118 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) 119 # define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) 120 # elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) 121 # define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) 122 # endif // GNUC version 123 #endif // __clang__ || __GNUC__ 124 125 #if !defined(JSONCPP_DEPRECATED) 126 #define JSONCPP_DEPRECATED(message) 127 #endif // if !defined(JSONCPP_DEPRECATED) 128 129 #if __GNUC__ >= 6 130 # define JSON_USE_INT64_DOUBLE_CONVERSION 1 131 #endif 132 133 #if !defined(JSON_IS_AMALGAMATION) 134 135 # include "version.h" 136 137 # if JSONCPP_USING_SECURE_MEMORY 138 # include "allocator.h" //typedef Allocator 139 # endif 140 141 #endif // if !defined(JSON_IS_AMALGAMATION) 142 143 namespace Json { 144 typedef int Int; 145 typedef unsigned int UInt; 146 #if defined(JSON_NO_INT64) 147 typedef int LargestInt; 148 typedef unsigned int LargestUInt; 149 #undef JSON_HAS_INT64 150 #else // if defined(JSON_NO_INT64) 151 // For Microsoft Visual use specific types as long long is not supported 152 #if defined(_MSC_VER) // Microsoft Visual Studio 153 typedef __int64 Int64; 154 typedef unsigned __int64 UInt64; 155 #else // if defined(_MSC_VER) // Other platforms, use long long 156 typedef int64_t Int64; 157 typedef uint64_t UInt64; 158 #endif // if defined(_MSC_VER) 159 typedef Int64 LargestInt; 160 typedef UInt64 LargestUInt; 161 #define JSON_HAS_INT64 162 #endif // if defined(JSON_NO_INT64) 163 #if JSONCPP_USING_SECURE_MEMORY 164 #define JSONCPP_STRING std::basic_string<char, std::char_traits<char>, Json::SecureAllocator<char> > 165 #define JSONCPP_OSTRINGSTREAM std::basic_ostringstream<char, std::char_traits<char>, Json::SecureAllocator<char> > 166 #define JSONCPP_OSTREAM std::basic_ostream<char, std::char_traits<char>> 167 #define JSONCPP_ISTRINGSTREAM std::basic_istringstream<char, std::char_traits<char>, Json::SecureAllocator<char> > 168 #define JSONCPP_ISTREAM std::istream 169 #else 170 #define JSONCPP_STRING std::string 171 #define JSONCPP_OSTRINGSTREAM std::ostringstream 172 #define JSONCPP_OSTREAM std::ostream 173 #define JSONCPP_ISTRINGSTREAM std::istringstream 174 #define JSONCPP_ISTREAM std::istream 175 #endif // if JSONCPP_USING_SECURE_MEMORY 176 } // end namespace Json 177 178 #endif // JSON_CONFIG_H_INCLUDED 179