From 9704cedb20dd8b2c28974cb1eb14ef1740d58c38 Mon Sep 17 00:00:00 2001 From: Jordan Bayles Date: Thu, 14 Nov 2019 09:38:11 -0800 Subject: [PATCH 1/2] Issue 1100: Drop CPPTL support CPPTL support is no longer relevant to JsonCpp, and can be removed from the library. This patch removes all mentions of CPPTL, by removing all definitions and code sections conditionally compiled only when JsonCpp is used with CPPTL. Include guards are also renamed to not refer to CPPTL where appropriate. --- include/json/allocator.h | 6 +-- include/json/assertions.h | 6 +-- include/json/autolink.h | 12 ++--- include/json/config.h | 32 ------------- include/json/json_features.h | 6 +-- include/json/reader.h | 6 +-- include/json/value.h | 57 ++-------------------- src/lib_json/json_value.cpp | 74 +---------------------------- src/lib_json/json_valueiterator.inl | 4 -- src/test_lib_json/main.cpp | 3 -- 10 files changed, 21 insertions(+), 185 deletions(-) diff --git a/include/json/allocator.h b/include/json/allocator.h index d5f987e..0f5c224 100644 --- a/include/json/allocator.h +++ b/include/json/allocator.h @@ -3,8 +3,8 @@ // recognized in your jurisdiction. // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE -#ifndef CPPTL_JSON_ALLOCATOR_H_INCLUDED -#define CPPTL_JSON_ALLOCATOR_H_INCLUDED +#ifndef JSON_ALLOCATOR_H_INCLUDED +#define JSON_ALLOCATOR_H_INCLUDED #include #include @@ -86,4 +86,4 @@ bool operator!=(const SecureAllocator&, const SecureAllocator&) { #pragma pack(pop) -#endif // CPPTL_JSON_ALLOCATOR_H_INCLUDED +#endif // JSON_ALLOCATOR_H_INCLUDED diff --git a/include/json/assertions.h b/include/json/assertions.h index 20716b0..9d93238 100644 --- a/include/json/assertions.h +++ b/include/json/assertions.h @@ -3,8 +3,8 @@ // recognized in your jurisdiction. // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE -#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED -#define CPPTL_JSON_ASSERTIONS_H_INCLUDED +#ifndef JSON_ASSERTIONS_H_INCLUDED +#define JSON_ASSERTIONS_H_INCLUDED #include #include @@ -56,4 +56,4 @@ JSON_FAIL_MESSAGE(message); \ } -#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED +#endif // JSON_ASSERTIONS_H_INCLUDED diff --git a/include/json/autolink.h b/include/json/autolink.h index b2c0f00..5f04a55 100644 --- a/include/json/autolink.h +++ b/include/json/autolink.h @@ -8,16 +8,10 @@ #include "config.h" -#ifdef JSON_IN_CPPTL -#include -#endif - -#if !defined(JSON_NO_AUTOLINK) && !defined(JSON_DLL_BUILD) && \ - !defined(JSON_IN_CPPTL) -#define CPPTL_AUTOLINK_NAME "json" -#undef CPPTL_AUTOLINK_DLL +#if !defined(JSON_NO_AUTOLINK) && !defined(JSON_DLL_BUILD) +#define AUTOLINK_NAME "json" #ifdef JSON_DLL -#define CPPTL_AUTOLINK_DLL +#define AUTOLINK_DLL #endif #include "autolink.h" #endif diff --git a/include/json/config.h b/include/json/config.h index cbb5950..2b4392c 100644 --- a/include/json/config.h +++ b/include/json/config.h @@ -14,16 +14,6 @@ #include #include -/// 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 @@ -40,28 +30,6 @@ /// 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 -#elif defined(__GNUC__) || defined(__clang__) -#define JSON_API __attribute__((visibility("default"))) -#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 diff --git a/include/json/json_features.h b/include/json/json_features.h index c12d647..a5b7305 100644 --- a/include/json/json_features.h +++ b/include/json/json_features.h @@ -3,8 +3,8 @@ // recognized in your jurisdiction. // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE -#ifndef CPPTL_JSON_FEATURES_H_INCLUDED -#define CPPTL_JSON_FEATURES_H_INCLUDED +#ifndef JSON_FEATURES_H_INCLUDED +#define JSON_FEATURES_H_INCLUDED #if !defined(JSON_IS_AMALGAMATION) #include "forwards.h" @@ -64,4 +64,4 @@ public: #pragma pack(pop) -#endif // CPPTL_JSON_FEATURES_H_INCLUDED +#endif // JSON_FEATURES_H_INCLUDED diff --git a/include/json/reader.h b/include/json/reader.h index 0b38176..1540ac3 100644 --- a/include/json/reader.h +++ b/include/json/reader.h @@ -3,8 +3,8 @@ // recognized in your jurisdiction. // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE -#ifndef CPPTL_JSON_READER_H_INCLUDED -#define CPPTL_JSON_READER_H_INCLUDED +#ifndef JSON_READER_H_INCLUDED +#define JSON_READER_H_INCLUDED #if !defined(JSON_IS_AMALGAMATION) #include "json_features.h" @@ -400,4 +400,4 @@ JSON_API IStream& operator>>(IStream&, Value&); #pragma warning(pop) #endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) -#endif // CPPTL_JSON_READER_H_INCLUDED +#endif // JSON_READER_H_INCLUDED diff --git a/include/json/value.h b/include/json/value.h index bf4f9c4..0c98441 100644 --- a/include/json/value.h +++ b/include/json/value.h @@ -3,8 +3,8 @@ // recognized in your jurisdiction. // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE -#ifndef CPPTL_JSON_H_INCLUDED -#define CPPTL_JSON_H_INCLUDED +#ifndef JSON_H_INCLUDED +#define JSON_H_INCLUDED #if !defined(JSON_IS_AMALGAMATION) #include "forwards.h" @@ -23,19 +23,11 @@ #include #include +#include #include #include #include -#ifndef JSON_USE_CPPTL_SMALLMAP -#include -#else -#include -#endif -#ifdef JSON_USE_CPPTL -#include -#endif - // Disable warning C4251: : needs to have dll-interface to // be used by... #if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) @@ -120,11 +112,6 @@ enum PrecisionType { decimalPlaces ///< we set max number of digits after "." in string }; -//# ifdef JSON_USE_CPPTL -// typedef CppTL::AnyEnumerator EnumMemberNames; -// typedef CppTL::AnyEnumerator EnumValues; -//# endif - /** \brief Lightweight wrapper to tag static string. * * Value constructor and objectValue member assignment takes advantage of the @@ -287,11 +274,7 @@ private: }; public: -#ifndef JSON_USE_CPPTL_SMALLMAP typedef std::map ObjectValues; -#else - typedef CppTL::SmallMap ObjectValues; -#endif // ifndef JSON_USE_CPPTL_SMALLMAP #endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION public: @@ -340,9 +323,6 @@ public: */ Value(const StaticString& value); Value(const String& value); -#ifdef JSON_USE_CPPTL - Value(const CppTL::ConstString& value); -#endif Value(bool value); Value(const Value& other); Value(Value&& other); @@ -384,9 +364,6 @@ public: * \return false if !string. (Seg-fault if str or end are NULL.) */ bool getString(char const** begin, char const** end) const; -#ifdef JSON_USE_CPPTL - CppTL::ConstString asConstString() const; -#endif Int asInt() const; UInt asUInt() const; #if defined(JSON_HAS_INT64) @@ -498,13 +475,6 @@ public: * \endcode */ Value& operator[](const StaticString& key); -#ifdef JSON_USE_CPPTL - /// Access an object value by name, create a null member if it does not exist. - Value& operator[](const CppTL::ConstString& key); - /// Access an object value by name, returns null if there is no member with - /// that name. - const Value& operator[](const CppTL::ConstString& key) const; -#endif /// Return the member named key if it exist, defaultValue otherwise. /// \note deep copy Value get(const char* key, const Value& defaultValue) const; @@ -517,11 +487,6 @@ public: /// \note deep copy /// \param key may contain embedded nulls. Value get(const String& key, const Value& defaultValue) const; -#ifdef JSON_USE_CPPTL - /// Return the member named key if it exist, defaultValue otherwise. - /// \note deep copy - Value get(const CppTL::ConstString& key, const Value& defaultValue) const; -#endif /// Most general and efficient version of isMember()const, get()const, /// and operator[]const /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 @@ -567,10 +532,6 @@ public: bool isMember(const String& key) const; /// Same as isMember(String const& key)const bool isMember(const char* begin, const char* end) const; -#ifdef JSON_USE_CPPTL - /// Return true if the object has a member named key. - bool isMember(const CppTL::ConstString& key) const; -#endif /// \brief Return a list of the member names. /// @@ -579,11 +540,6 @@ public: /// \post if type() was nullValue, it remains nullValue Members getMemberNames() const; - //# ifdef JSON_USE_CPPTL - // EnumMemberNames enumMemberNames() const; - // EnumValues enumValues() const; - //# endif - /// \deprecated Always pass len. JSONCPP_DEPRECATED("Use setComment(String const&) instead.") void setComment(const char* comment, CommentPlacement placement) { @@ -706,11 +662,6 @@ template <> inline float Value::as() const { return asFloat(); } template <> inline const char* Value::as() const { return asCString(); } -#ifdef JSON_USE_CPPTL -template <> inline CppTL::ConstString Value::as() const { - return asConstString(); -} -#endif /** \brief Experimental and untested: represents an element of the "path" to * access a node. @@ -960,4 +911,4 @@ inline void swap(Value& a, Value& b) { a.swap(b); } #pragma warning(pop) #endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) -#endif // CPPTL_JSON_H_INCLUDED +#endif // JSON_H_INCLUDED diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp index 00d28f7..9c48ab1 100644 --- a/src/lib_json/json_value.cpp +++ b/src/lib_json/json_value.cpp @@ -8,16 +8,13 @@ #include #include #endif // if !defined(JSON_IS_AMALGAMATION) +#include #include #include +#include #include #include #include -#ifdef JSON_USE_CPPTL -#include -#endif -#include // min() -#include // size_t // Provide implementation equivalent of std::snprintf for older _MSC compilers #if defined(_MSC_VER) && _MSC_VER < 1900 @@ -419,14 +416,6 @@ Value::Value(const StaticString& value) { value_.string_ = const_cast(value.c_str()); } -#ifdef JSON_USE_CPPTL -Value::Value(const CppTL::ConstString& value) { - initBasic(stringValue, true); - value_.string_ = duplicateAndPrefixStringValue( - value, static_cast(value.length())); -} -#endif - Value::Value(bool value) { initBasic(booleanValue); value_.bool_ = value; @@ -654,15 +643,6 @@ String Value::asString() const { } } -#ifdef JSON_USE_CPPTL -CppTL::ConstString Value::asConstString() const { - unsigned len; - char const* str; - decodePrefixedString(isAllocated(), value_.string_, &len, &str); - return CppTL::ConstString(str, len); -} -#endif - Value::Int Value::asInt() const { switch (type()) { case intValue: @@ -1135,18 +1115,6 @@ Value& Value::operator[](const StaticString& key) { return resolveReference(key.c_str()); } -#ifdef JSON_USE_CPPTL -Value& Value::operator[](const CppTL::ConstString& key) { - return resolveReference(key.c_str(), key.end_c_str()); -} -Value const& Value::operator[](CppTL::ConstString const& key) const { - Value const* found = find(key.c_str(), key.end_c_str()); - if (!found) - return nullSingleton(); - return *found; -} -#endif - Value& Value::append(const Value& value) { return append(Value(value)); } Value& Value::append(Value&& value) { @@ -1240,13 +1208,6 @@ bool Value::removeIndex(ArrayIndex index, Value* removed) { return true; } -#ifdef JSON_USE_CPPTL -Value Value::get(const CppTL::ConstString& key, - const Value& defaultValue) const { - return get(key.c_str(), key.end_c_str(), defaultValue); -} -#endif - bool Value::isMember(char const* begin, char const* end) const { Value const* value = find(begin, end); return nullptr != value; @@ -1258,12 +1219,6 @@ bool Value::isMember(String const& key) const { return isMember(key.data(), key.data() + key.length()); } -#ifdef JSON_USE_CPPTL -bool Value::isMember(const CppTL::ConstString& key) const { - return isMember(key.c_str(), key.end_c_str()); -} -#endif - Value::Members Value::getMemberNames() const { JSON_ASSERT_MESSAGE( type() == nullValue || type() == objectValue, @@ -1279,31 +1234,6 @@ Value::Members Value::getMemberNames() const { } return members; } -// -//# ifdef JSON_USE_CPPTL -// EnumMemberNames -// Value::enumMemberNames() const -//{ -// if ( type() == objectValue ) -// { -// return CppTL::Enum::any( CppTL::Enum::transform( -// CppTL::Enum::keys( *(value_.map_), CppTL::Type() ), -// MemberNamesTransform() ) ); -// } -// return EnumMemberNames(); -//} -// -// -// EnumValues -// Value::enumValues() const -//{ -// if ( type() == objectValue || type() == arrayValue ) -// return CppTL::Enum::anyValues( *(value_.map_), -// CppTL::Type() ); -// return EnumValues(); -//} -// -//# endif static bool IsIntegral(double d) { double integral_part; diff --git a/src/lib_json/json_valueiterator.inl b/src/lib_json/json_valueiterator.inl index 9bd9315..d6128b8 100644 --- a/src/lib_json/json_valueiterator.inl +++ b/src/lib_json/json_valueiterator.inl @@ -30,9 +30,6 @@ void ValueIteratorBase::decrement() { --current_; } ValueIteratorBase::difference_type ValueIteratorBase::computeDistance(const SelfType& other) const { -#ifdef JSON_USE_CPPTL_SMALLMAP - return other.current_ - current_; -#else // Iterator for null value are initialized using the default // constructor, which initialize current_ to the default // std::map::iterator. As begin() and end() are two instance @@ -53,7 +50,6 @@ ValueIteratorBase::computeDistance(const SelfType& other) const { ++myDistance; } return myDistance; -#endif } bool ValueIteratorBase::isEqual(const SelfType& other) const { diff --git a/src/test_lib_json/main.cpp b/src/test_lib_json/main.cpp index f2e4d4c..d85a98b 100644 --- a/src/test_lib_json/main.cpp +++ b/src/test_lib_json/main.cpp @@ -3584,9 +3584,6 @@ JSONTEST_FIXTURE_LOCAL(MemberTemplateAs, BehavesSameAsNamedAs) { const Json::Value jstr = "hello world"; JSONTEST_ASSERT_STRING_EQUAL(jstr.as(), jstr.asCString()); JSONTEST_ASSERT_STRING_EQUAL(jstr.as(), jstr.asString()); -#ifdef JSON_USE_CPPTL - JSONTEST_ASSERT_STRING_EQUAL(js.as(), js.asConstString()); -#endif EqEval(Json::Int(64), [](const Json::Value& j) { return j.asInt(); }); EqEval(Json::UInt(64), [](const Json::Value& j) { return j.asUInt(); }); #if defined(JSON_HAS_INT64) From a481201af1d4e4b2910b4407aef31d76723e7825 Mon Sep 17 00:00:00 2001 From: Jordan Bayles Date: Thu, 14 Nov 2019 10:15:49 -0800 Subject: [PATCH 2/2] Readd some overzealously removed code --- include/json/autolink.h | 19 ------------------- include/json/config.h | 16 ++++++++++++++++ include/json/json.h | 2 +- meson.build | 1 - 4 files changed, 17 insertions(+), 21 deletions(-) delete mode 100644 include/json/autolink.h diff --git a/include/json/autolink.h b/include/json/autolink.h deleted file mode 100644 index 5f04a55..0000000 --- a/include/json/autolink.h +++ /dev/null @@ -1,19 +0,0 @@ -// 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_AUTOLINK_H_INCLUDED -#define JSON_AUTOLINK_H_INCLUDED - -#include "config.h" - -#if !defined(JSON_NO_AUTOLINK) && !defined(JSON_DLL_BUILD) -#define AUTOLINK_NAME "json" -#ifdef JSON_DLL -#define AUTOLINK_DLL -#endif -#include "autolink.h" -#endif - -#endif // JSON_AUTOLINK_H_INCLUDED diff --git a/include/json/config.h b/include/json/config.h index 2b4392c..0a3bc92 100644 --- a/include/json/config.h +++ b/include/json/config.h @@ -30,6 +30,22 @@ /// Remarks: it is automatically defined in the generated amalgamated header. // #define JSON_IS_AMALGAMATION +// Export macros for DLL visibility +#if defined(JSON_DLL_BUILD) +#if defined(_MSC_VER) || defined(__MINGW32__) +#define JSON_API __declspec(dllexport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#elif defined(__GNUC__) || defined(__clang__) +#define JSON_API __attribute__((visibility("default"))) +#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_DLL_BUILD + #if !defined(JSON_API) #define JSON_API #endif diff --git a/include/json/json.h b/include/json/json.h index f1b679a..5c776a1 100644 --- a/include/json/json.h +++ b/include/json/json.h @@ -6,7 +6,7 @@ #ifndef JSON_JSON_H_INCLUDED #define JSON_JSON_H_INCLUDED -#include "autolink.h" +#include "config.h" #include "json_features.h" #include "reader.h" #include "value.h" diff --git a/meson.build b/meson.build index 8531dce..1bc94a8 100644 --- a/meson.build +++ b/meson.build @@ -21,7 +21,6 @@ project( jsoncpp_headers = [ 'include/json/allocator.h', 'include/json/assertions.h', - 'include/json/autolink.h', 'include/json/config.h', 'include/json/json_features.h', 'include/json/forwards.h',