// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors // Distributed under MIT license, or public domain if desired and // recognized in your jurisdiction. // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE #ifndef JSON_CONFIG_H_INCLUDED #define JSON_CONFIG_H_INCLUDED #include #include //typedef int64_t, uint64_t #include //typedef String /// If defined, indicates that json library is embedded in CppTL library. //# define JSON_IN_CPPTL 1 /// If defined, indicates that json may leverage CppTL library //# define JSON_USE_CPPTL 1 /// If defined, indicates that cpptl vector based map should be used instead of /// std::map /// as Value container. //# define JSON_USE_CPPTL_SMALLMAP 1 // If non-zero, the library uses exceptions to report bad input instead of C // assertion macros. The default is to use exceptions. #ifndef JSON_USE_EXCEPTION #define JSON_USE_EXCEPTION 1 #endif /// If defined, indicates that the source file is amalgamated /// to prevent private header inclusion. /// Remarks: it is automatically defined in the generated amalgamated header. // #define JSON_IS_AMALGAMATION #ifdef JSON_IN_CPPTL #include #ifndef JSON_USE_CPPTL #define JSON_USE_CPPTL 1 #endif #endif #ifdef JSON_IN_CPPTL #define JSON_API CPPTL_API #elif defined(JSON_DLL_BUILD) #if defined(_MSC_VER) || defined(__MINGW32__) #define JSON_API __declspec(dllexport) #define JSONCPP_DISABLE_DLL_INTERFACE_WARNING #endif // if defined(_MSC_VER) #elif defined(JSON_DLL) #if defined(_MSC_VER) || defined(__MINGW32__) #define JSON_API __declspec(dllimport) #define JSONCPP_DISABLE_DLL_INTERFACE_WARNING #endif // if defined(_MSC_VER) #endif // ifdef JSON_IN_CPPTL #if !defined(JSON_API) #define JSON_API #endif // If JSON_NO_INT64 is defined, then Json only support C++ "int" type for // integer // Storages, and 64 bits integer support is disabled. // #define JSON_NO_INT64 1 #if defined(_MSC_VER) // MSVC #if _MSC_VER <= 1200 // MSVC 6 // Microsoft Visual Studio 6 only support conversion from __int64 to double // (no conversion from unsigned __int64). #define JSON_USE_INT64_DOUBLE_CONVERSION 1 // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' // characters in the debug information) // All projects I've ever seen with VS6 were using this globally (not bothering // with pragma push/pop). #pragma warning(disable : 4786) #endif // MSVC 6 #if _MSC_VER >= 1500 // MSVC 2008 /// Indicates that the following function is deprecated. #define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) #endif #endif // defined(_MSC_VER) // In c++11 the override keyword allows you to explicitly define that a function // is intended to override the base-class version. This makes the code more // manageable and fixes a set of common hard-to-find bugs. #if __cplusplus >= 201103L #define JSONCPP_OVERRIDE override #define JSONCPP_NOEXCEPT noexcept #define JSONCPP_OP_EXPLICIT explicit #elif defined(_MSC_VER) && _MSC_VER > 1600 && _MSC_VER < 1900 #define JSONCPP_OVERRIDE override #define JSONCPP_NOEXCEPT throw() #if _MSC_VER >= 1800 // MSVC 2013 #define JSONCPP_OP_EXPLICIT explicit #else #define JSONCPP_OP_EXPLICIT #endif #elif defined(_MSC_VER) && _MSC_VER >= 1900 #define JSONCPP_OVERRIDE override #define JSONCPP_NOEXCEPT noexcept #define JSONCPP_OP_EXPLICIT explicit #else #define JSONCPP_OVERRIDE #define JSONCPP_NOEXCEPT throw() #define JSONCPP_OP_EXPLICIT #endif #ifndef JSON_HAS_RVALUE_REFERENCES #if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 #define JSON_HAS_RVALUE_REFERENCES 1 #endif // MSVC >= 2010 #ifdef __clang__ #if __has_feature(cxx_rvalue_references) #define JSON_HAS_RVALUE_REFERENCES 1 #endif // has_feature #elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) #if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) #define JSON_HAS_RVALUE_REFERENCES 1 #endif // GXX_EXPERIMENTAL #endif // __clang__ || __GNUC__ #endif // not defined JSON_HAS_RVALUE_REFERENCES #ifndef JSON_HAS_RVALUE_REFERENCES #define JSON_HAS_RVALUE_REFERENCES 0 #endif #ifdef __clang__ #if __has_extension(attribute_deprecated_with_message) #define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message))) #endif #elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) #define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message))) #elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) #define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) #endif // GNUC version #endif // __clang__ || __GNUC__ #if !defined(JSONCPP_DEPRECATED) #define JSONCPP_DEPRECATED(message) #endif // if !defined(JSONCPP_DEPRECATED) #if __GNUC__ >= 6 #define JSON_USE_INT64_DOUBLE_CONVERSION 1 #endif #if !defined(JSON_IS_AMALGAMATION) #include "version.h" #if JSONCPP_USING_SECURE_MEMORY #include "allocator.h" //typedef Allocator #endif #endif // if !defined(JSON_IS_AMALGAMATION) namespace Json { typedef int Int; typedef unsigned int UInt; #if defined(JSON_NO_INT64) typedef int LargestInt; typedef unsigned int LargestUInt; #undef JSON_HAS_INT64 #else // if defined(JSON_NO_INT64) // For Microsoft Visual use specific types as long long is not supported #if defined(_MSC_VER) // Microsoft Visual Studio typedef __int64 Int64; typedef unsigned __int64 UInt64; #else // if defined(_MSC_VER) // Other platforms, use long long typedef int64_t Int64; typedef uint64_t UInt64; #endif // if defined(_MSC_VER) typedef Int64 LargestInt; typedef UInt64 LargestUInt; #define JSON_HAS_INT64 #endif // if defined(JSON_NO_INT64) #if JSONCPP_USING_SECURE_MEMORY #define JSONCPP_STRING \ std::basic_string, Json::SecureAllocator > #define JSONCPP_OSTRINGSTREAM \ std::basic_ostringstream, \ Json::SecureAllocator > #define JSONCPP_OSTREAM std::basic_ostream > #define JSONCPP_ISTRINGSTREAM \ std::basic_istringstream, \ Json::SecureAllocator > #define JSONCPP_ISTREAM std::istream #else #define JSONCPP_STRING std::string #define JSONCPP_OSTRINGSTREAM std::ostringstream #define JSONCPP_OSTREAM std::ostream #define JSONCPP_ISTRINGSTREAM std::istringstream #define JSONCPP_ISTREAM std::istream #endif // if JSONCPP_USING_SECURE_MEMORY } // end namespace Json #endif // JSON_CONFIG_H_INCLUDED