From 5790f3c8f728036c24999cd3c3639ddb1fed41b7 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 27 Jul 2021 12:06:44 +0200 Subject: [PATCH] Refactored string adapters: only one `IsString` and `adaptString()` --- .devcontainer/devcontainer.json | 3 +- extras/tests/Misc/StringAdapters.cpp | 33 +++++++------- src/ArduinoJson/Collection/CollectionImpl.hpp | 4 +- src/ArduinoJson/Polyfills/type_traits.hpp | 1 + .../Polyfills/type_traits/make_void.hpp | 14 ++++++ .../{ => Adapters}/ArduinoStringAdapter.hpp | 20 ++++----- .../{ => Adapters}/ConstRamStringAdapter.hpp | 19 ++++---- .../{ => Adapters}/FlashStringAdapter.hpp | 13 ++---- .../Strings/Adapters/JsonStringAdapter.hpp | 27 ++++++++++++ .../Strings/Adapters/RamStringAdapter.hpp | 29 +++++++++++++ .../SizedFlashStringAdapter.hpp | 11 ++--- .../{ => Adapters}/SizedRamStringAdapter.hpp | 12 ++---- .../{ => Adapters}/StdStringAdapter.hpp | 23 +++------- .../{ => Adapters}/StringViewAdapter.hpp | 14 ++---- src/ArduinoJson/Strings/IsString.hpp | 18 -------- src/ArduinoJson/Strings/RamStringAdapter.hpp | 43 ------------------- src/ArduinoJson/Strings/String.hpp | 25 ----------- src/ArduinoJson/Strings/StringAdapter.hpp | 32 ++++++++++++++ src/ArduinoJson/Strings/StringAdapters.hpp | 17 ++++---- src/ArduinoJson/Variant/VariantCompare.hpp | 2 +- src/ArduinoJson/Variant/VariantData.hpp | 5 ++- 21 files changed, 176 insertions(+), 189 deletions(-) create mode 100644 src/ArduinoJson/Polyfills/type_traits/make_void.hpp rename src/ArduinoJson/Strings/{ => Adapters}/ArduinoStringAdapter.hpp (73%) rename src/ArduinoJson/Strings/{ => Adapters}/ConstRamStringAdapter.hpp (71%) rename src/ArduinoJson/Strings/{ => Adapters}/FlashStringAdapter.hpp (76%) create mode 100644 src/ArduinoJson/Strings/Adapters/JsonStringAdapter.hpp create mode 100644 src/ArduinoJson/Strings/Adapters/RamStringAdapter.hpp rename src/ArduinoJson/Strings/{ => Adapters}/SizedFlashStringAdapter.hpp (74%) rename src/ArduinoJson/Strings/{ => Adapters}/SizedRamStringAdapter.hpp (72%) rename src/ArduinoJson/Strings/{ => Adapters}/StdStringAdapter.hpp (60%) rename src/ArduinoJson/Strings/{ => Adapters}/StringViewAdapter.hpp (74%) delete mode 100644 src/ArduinoJson/Strings/IsString.hpp delete mode 100644 src/ArduinoJson/Strings/RamStringAdapter.hpp create mode 100644 src/ArduinoJson/Strings/StringAdapter.hpp diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 309733b4..18e58b88 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -12,7 +12,8 @@ // Add the IDs of extensions you want installed when the container is created. "extensions": [ "ms-vscode.cmake-tools", - "ms-vscode.cpptools" + "ms-vscode.cpptools", + "xaver.clang-format" ], // Use 'forwardPorts' to make a list of ports inside the container available locally. diff --git a/extras/tests/Misc/StringAdapters.cpp b/extras/tests/Misc/StringAdapters.cpp index 7a6f652f..2f523c97 100644 --- a/extras/tests/Misc/StringAdapters.cpp +++ b/extras/tests/Misc/StringAdapters.cpp @@ -2,23 +2,22 @@ // Copyright Benoit Blanchon 2014-2021 // MIT License +#define ARDUINOJSON_ENABLE_PROGMEM 1 +#define ARDUINOJSON_ENABLE_ARDUINO_STRING 1 + #include "custom_string.hpp" #include "progmem_emulation.hpp" #include "weird_strcmp.hpp" -#include -#include -#include -#include -#include +#include #include using namespace ARDUINOJSON_NAMESPACE; -TEST_CASE("ConstRamStringAdapter") { +TEST_CASE("const char*") { SECTION("null") { - ConstRamStringAdapter adapter(NULL); + StringAdapter adapter(NULL); CHECK(adapter.compare("bravo") < 0); CHECK(adapter.compare(NULL) == 0); @@ -30,7 +29,7 @@ TEST_CASE("ConstRamStringAdapter") { } SECTION("non-null") { - ConstRamStringAdapter adapter("bravo"); + StringAdapter adapter("bravo"); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); @@ -44,9 +43,9 @@ TEST_CASE("ConstRamStringAdapter") { } } -TEST_CASE("SizedRamStringAdapter") { +TEST_CASE("const char* + size") { SECTION("null") { - SizedRamStringAdapter adapter(NULL, 10); + StringAdapter adapter(NULL, 10); CHECK(adapter.compare("bravo") < 0); CHECK(adapter.compare(NULL) == 0); @@ -58,7 +57,7 @@ TEST_CASE("SizedRamStringAdapter") { } SECTION("non-null") { - SizedRamStringAdapter adapter("bravo", 5); + StringAdapter adapter("bravo", 5); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); @@ -72,9 +71,9 @@ TEST_CASE("SizedRamStringAdapter") { } } -TEST_CASE("FlashStringAdapter") { +TEST_CASE("const __FlashStringHelper*") { SECTION("null") { - FlashStringAdapter adapter(NULL); + StringAdapter adapter(NULL); CHECK(adapter.compare("bravo") < 0); CHECK(adapter.compare(NULL) == 0); @@ -86,7 +85,7 @@ TEST_CASE("FlashStringAdapter") { } SECTION("non-null") { - FlashStringAdapter adapter = adaptString(F("bravo")); + StringAdapter adapter = adaptString(F("bravo")); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); @@ -102,7 +101,7 @@ TEST_CASE("FlashStringAdapter") { TEST_CASE("std::string") { std::string str("bravo"); - StdStringAdapter adapter = adaptString(str); + StringAdapter adapter(str); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); @@ -117,7 +116,7 @@ TEST_CASE("std::string") { TEST_CASE("Arduino String") { ::String str("bravo"); - ArduinoStringAdapter adapter = adaptString(str); + StringAdapter< ::String> adapter(str); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); @@ -132,7 +131,7 @@ TEST_CASE("Arduino String") { TEST_CASE("custom_string") { custom_string str("bravo"); - StdStringAdapter adapter = adaptString(str); + StringAdapter adapter(str); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); diff --git a/src/ArduinoJson/Collection/CollectionImpl.hpp b/src/ArduinoJson/Collection/CollectionImpl.hpp index 49a24bee..18995bc1 100644 --- a/src/ArduinoJson/Collection/CollectionImpl.hpp +++ b/src/ArduinoJson/Collection/CollectionImpl.hpp @@ -62,9 +62,9 @@ inline bool CollectionData::copyFrom(const CollectionData& src, VariantData* var; if (s->key() != 0) { if (s->ownsKey()) - var = addMember(RamStringAdapter(s->key()), pool); + var = addMember(adaptString(const_cast(s->key())), pool); else - var = addMember(ConstRamStringAdapter(s->key()), pool); + var = addMember(adaptString(s->key()), pool); } else { var = addElement(pool); } diff --git a/src/ArduinoJson/Polyfills/type_traits.hpp b/src/ArduinoJson/Polyfills/type_traits.hpp index 4a8ff4b9..24440b19 100644 --- a/src/ArduinoJson/Polyfills/type_traits.hpp +++ b/src/ArduinoJson/Polyfills/type_traits.hpp @@ -20,5 +20,6 @@ #include "type_traits/is_signed.hpp" #include "type_traits/is_unsigned.hpp" #include "type_traits/make_unsigned.hpp" +#include "type_traits/make_void.hpp" #include "type_traits/remove_const.hpp" #include "type_traits/remove_reference.hpp" diff --git a/src/ArduinoJson/Polyfills/type_traits/make_void.hpp b/src/ArduinoJson/Polyfills/type_traits/make_void.hpp new file mode 100644 index 00000000..cb2ebde5 --- /dev/null +++ b/src/ArduinoJson/Polyfills/type_traits/make_void.hpp @@ -0,0 +1,14 @@ +// ArduinoJson - https://arduinojson.org +// Copyright Benoit Blanchon 2014-2021 +// MIT License + +#pragma once + +namespace ARDUINOJSON_NAMESPACE { + +template +struct make_void { + typedef void type; +}; + +} // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/ArduinoStringAdapter.hpp b/src/ArduinoJson/Strings/Adapters/ArduinoStringAdapter.hpp similarity index 73% rename from src/ArduinoJson/Strings/ArduinoStringAdapter.hpp rename to src/ArduinoJson/Strings/Adapters/ArduinoStringAdapter.hpp index 3797d686..c79958a3 100644 --- a/src/ArduinoJson/Strings/ArduinoStringAdapter.hpp +++ b/src/ArduinoJson/Strings/Adapters/ArduinoStringAdapter.hpp @@ -7,14 +7,15 @@ #include #include -#include #include +#include namespace ARDUINOJSON_NAMESPACE { -class ArduinoStringAdapter { +template <> +class StringAdapter< ::String> { public: - ArduinoStringAdapter(const ::String& str) : _str(&str) {} + StringAdapter(const ::String& str) : _str(&str) {} void copyTo(char* p, size_t n) const { memcpy(p, _str->c_str(), n); @@ -46,13 +47,10 @@ class ArduinoStringAdapter { }; template <> -struct IsString< ::String> : true_type {}; - -template <> -struct IsString< ::StringSumHelper> : true_type {}; - -inline ArduinoStringAdapter adaptString(const ::String& str) { - return ArduinoStringAdapter(str); -} +class StringAdapter< ::StringSumHelper> : public StringAdapter< ::String> { + public: + StringAdapter< ::StringSumHelper>(const ::String& s) + : StringAdapter< ::String>(s) {} +}; } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/ConstRamStringAdapter.hpp b/src/ArduinoJson/Strings/Adapters/ConstRamStringAdapter.hpp similarity index 71% rename from src/ArduinoJson/Strings/ConstRamStringAdapter.hpp rename to src/ArduinoJson/Strings/Adapters/ConstRamStringAdapter.hpp index 92298acf..70008ece 100644 --- a/src/ArduinoJson/Strings/ConstRamStringAdapter.hpp +++ b/src/ArduinoJson/Strings/Adapters/ConstRamStringAdapter.hpp @@ -8,14 +8,15 @@ #include // strcmp #include -#include #include +#include namespace ARDUINOJSON_NAMESPACE { -class ConstRamStringAdapter { +template <> +class StringAdapter { public: - ConstRamStringAdapter(const char* str = 0) : _str(str) {} + StringAdapter(const char* str = 0) : _str(str) {} int compare(const char* other) const { return safe_strcmp(_str, other); @@ -45,14 +46,10 @@ class ConstRamStringAdapter { const char* _str; }; -template <> -struct IsString : true_type {}; - template -struct IsString : true_type {}; - -inline ConstRamStringAdapter adaptString(const char* str) { - return ConstRamStringAdapter(str); -} +class StringAdapter : public StringAdapter { + public: + StringAdapter(const char* s) : StringAdapter(s) {} +}; } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/FlashStringAdapter.hpp b/src/ArduinoJson/Strings/Adapters/FlashStringAdapter.hpp similarity index 76% rename from src/ArduinoJson/Strings/FlashStringAdapter.hpp rename to src/ArduinoJson/Strings/Adapters/FlashStringAdapter.hpp index 918a535c..3abcdf09 100644 --- a/src/ArduinoJson/Strings/FlashStringAdapter.hpp +++ b/src/ArduinoJson/Strings/Adapters/FlashStringAdapter.hpp @@ -5,14 +5,15 @@ #pragma once #include -#include #include +#include namespace ARDUINOJSON_NAMESPACE { -class FlashStringAdapter { +template <> +class StringAdapter { public: - FlashStringAdapter(const __FlashStringHelper* str) : _str(str) {} + StringAdapter(const __FlashStringHelper* str) : _str(str) {} int compare(const char* other) const { if (!other && !_str) @@ -48,10 +49,4 @@ class FlashStringAdapter { const __FlashStringHelper* _str; }; -inline FlashStringAdapter adaptString(const __FlashStringHelper* str) { - return FlashStringAdapter(str); -} - -template <> -struct IsString : true_type {}; } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/Adapters/JsonStringAdapter.hpp b/src/ArduinoJson/Strings/Adapters/JsonStringAdapter.hpp new file mode 100644 index 00000000..c34abce5 --- /dev/null +++ b/src/ArduinoJson/Strings/Adapters/JsonStringAdapter.hpp @@ -0,0 +1,27 @@ +// ArduinoJson - https://arduinojson.org +// Copyright Benoit Blanchon 2014-2021 +// MIT License + +#pragma once + +#include +#include + +namespace ARDUINOJSON_NAMESPACE { + +template <> +class StringAdapter : public StringAdapter { + public: + StringAdapter(const String& str) + : StringAdapter(str.c_str()), _isStatic(str.isStatic()) {} + + bool isStatic() const { + return _isStatic; + } + + typedef storage_policies::decide_at_runtime storage_policy; + + private: + bool _isStatic; +}; +} // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/Adapters/RamStringAdapter.hpp b/src/ArduinoJson/Strings/Adapters/RamStringAdapter.hpp new file mode 100644 index 00000000..f2b01d17 --- /dev/null +++ b/src/ArduinoJson/Strings/Adapters/RamStringAdapter.hpp @@ -0,0 +1,29 @@ +// ArduinoJson - https://arduinojson.org +// Copyright Benoit Blanchon 2014-2021 +// MIT License + +#pragma once + +#include +#include +#include + +namespace ARDUINOJSON_NAMESPACE { + +template +class StringAdapter::value>::type> + : public StringAdapter { + public: + StringAdapter(const TChar* str) + : StringAdapter(reinterpret_cast(str)) {} + + void copyTo(char* p, size_t n) const { + memcpy(p, _str, n); + } + + typedef ARDUINOJSON_NAMESPACE::storage_policies::store_by_copy storage_policy; +}; + +} // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/SizedFlashStringAdapter.hpp b/src/ArduinoJson/Strings/Adapters/SizedFlashStringAdapter.hpp similarity index 74% rename from src/ArduinoJson/Strings/SizedFlashStringAdapter.hpp rename to src/ArduinoJson/Strings/Adapters/SizedFlashStringAdapter.hpp index 1055f666..098a7831 100644 --- a/src/ArduinoJson/Strings/SizedFlashStringAdapter.hpp +++ b/src/ArduinoJson/Strings/Adapters/SizedFlashStringAdapter.hpp @@ -5,14 +5,15 @@ #pragma once #include -#include #include +#include namespace ARDUINOJSON_NAMESPACE { -class SizedFlashStringAdapter { +template <> +class StringAdapter { public: - SizedFlashStringAdapter(const __FlashStringHelper* str, size_t sz) + StringAdapter(const __FlashStringHelper* str, size_t sz) : _str(str), _size(sz) {} int compare(const char* other) const { @@ -48,8 +49,4 @@ class SizedFlashStringAdapter { size_t _size; }; -inline SizedFlashStringAdapter adaptString(const __FlashStringHelper* str, - size_t sz) { - return SizedFlashStringAdapter(str, sz); -} } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/SizedRamStringAdapter.hpp b/src/ArduinoJson/Strings/Adapters/SizedRamStringAdapter.hpp similarity index 72% rename from src/ArduinoJson/Strings/SizedRamStringAdapter.hpp rename to src/ArduinoJson/Strings/Adapters/SizedRamStringAdapter.hpp index 62460a19..315e1f7f 100644 --- a/src/ArduinoJson/Strings/SizedRamStringAdapter.hpp +++ b/src/ArduinoJson/Strings/Adapters/SizedRamStringAdapter.hpp @@ -5,16 +5,17 @@ #pragma once #include -#include #include +#include #include // strcmp namespace ARDUINOJSON_NAMESPACE { -class SizedRamStringAdapter { +template +class StringAdapter { public: - SizedRamStringAdapter(const char* str, size_t n) : _str(str), _size(n) {} + StringAdapter(const char* str, size_t n) : _str(str), _size(n) {} int compare(const char* other) const { return safe_strncmp(_str, other, _size); @@ -43,9 +44,4 @@ class SizedRamStringAdapter { size_t _size; }; -template -inline SizedRamStringAdapter adaptString(const TChar* str, size_t size) { - return SizedRamStringAdapter(reinterpret_cast(str), size); -} - } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/StdStringAdapter.hpp b/src/ArduinoJson/Strings/Adapters/StdStringAdapter.hpp similarity index 60% rename from src/ArduinoJson/Strings/StdStringAdapter.hpp rename to src/ArduinoJson/Strings/Adapters/StdStringAdapter.hpp index 3979070e..382db893 100644 --- a/src/ArduinoJson/Strings/StdStringAdapter.hpp +++ b/src/ArduinoJson/Strings/Adapters/StdStringAdapter.hpp @@ -5,17 +5,19 @@ #pragma once #include -#include #include +#include #include namespace ARDUINOJSON_NAMESPACE { -template -class StdStringAdapter { +template +class StringAdapter > { public: - StdStringAdapter(const TString& str) : _str(&str) {} + typedef std::basic_string string_type; + + StringAdapter(const string_type& str) : _str(&str) {} void copyTo(char* p, size_t n) const { memcpy(p, _str->c_str(), n); @@ -44,18 +46,7 @@ class StdStringAdapter { typedef storage_policies::store_by_copy storage_policy; private: - const TString* _str; + const string_type* _str; }; -template -struct IsString > : true_type { -}; - -template -inline StdStringAdapter > -adaptString(const std::basic_string& str) { - return StdStringAdapter >( - str); -} - } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/StringViewAdapter.hpp b/src/ArduinoJson/Strings/Adapters/StringViewAdapter.hpp similarity index 74% rename from src/ArduinoJson/Strings/StringViewAdapter.hpp rename to src/ArduinoJson/Strings/Adapters/StringViewAdapter.hpp index 4720660b..4ddfce65 100644 --- a/src/ArduinoJson/Strings/StringViewAdapter.hpp +++ b/src/ArduinoJson/Strings/Adapters/StringViewAdapter.hpp @@ -5,16 +5,17 @@ #pragma once #include -#include #include +#include #include namespace ARDUINOJSON_NAMESPACE { -class StringViewAdapter { +template <> +class StringAdapter { public: - StringViewAdapter(std::string_view str) : _str(str) {} + StringAdapter(std::string_view str) : _str(str) {} void copyTo(char* p, size_t n) const { memcpy(p, _str.data(), n); @@ -46,11 +47,4 @@ class StringViewAdapter { std::string_view _str; }; -template <> -struct IsString : true_type {}; - -inline StringViewAdapter adaptString(const std::string_view& str) { - return StringViewAdapter(str); -} - } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/IsString.hpp b/src/ArduinoJson/Strings/IsString.hpp deleted file mode 100644 index af5a91a2..00000000 --- a/src/ArduinoJson/Strings/IsString.hpp +++ /dev/null @@ -1,18 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright Benoit Blanchon 2014-2021 -// MIT License - -#pragma once - -#include - -namespace ARDUINOJSON_NAMESPACE { -template -struct IsString : false_type {}; - -template -struct IsString : IsString {}; - -template -struct IsString : IsString {}; -} // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/RamStringAdapter.hpp b/src/ArduinoJson/Strings/RamStringAdapter.hpp deleted file mode 100644 index eded6c97..00000000 --- a/src/ArduinoJson/Strings/RamStringAdapter.hpp +++ /dev/null @@ -1,43 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright Benoit Blanchon 2014-2021 -// MIT License - -#pragma once - -#include -#include -#include - -namespace ARDUINOJSON_NAMESPACE { - -class RamStringAdapter : public ConstRamStringAdapter { - public: - RamStringAdapter(const char* str) : ConstRamStringAdapter(str) {} - - void copyTo(char* p, size_t n) const { - memcpy(p, _str, n); - } - - typedef ARDUINOJSON_NAMESPACE::storage_policies::store_by_copy storage_policy; -}; - -template -inline RamStringAdapter adaptString(const TChar* str) { - return RamStringAdapter(reinterpret_cast(str)); -} - -inline RamStringAdapter adaptString(char* str) { - return RamStringAdapter(str); -} - -template -struct IsString { - static const bool value = sizeof(TChar) == 1; -}; - -template <> -struct IsString { - static const bool value = false; -}; - -} // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/String.hpp b/src/ArduinoJson/Strings/String.hpp index 4f2abdea..fff4077d 100644 --- a/src/ArduinoJson/Strings/String.hpp +++ b/src/ArduinoJson/Strings/String.hpp @@ -4,10 +4,6 @@ #pragma once -#include -#include -#include - namespace ARDUINOJSON_NAMESPACE { class String { @@ -53,25 +49,4 @@ class String { bool _isStatic; }; -class StringAdapter : public RamStringAdapter { - public: - StringAdapter(const String& str) - : RamStringAdapter(str.c_str()), _isStatic(str.isStatic()) {} - - bool isStatic() const { - return _isStatic; - } - - typedef storage_policies::decide_at_runtime storage_policy; - - private: - bool _isStatic; -}; - -template <> -struct IsString : true_type {}; - -inline StringAdapter adaptString(const String& str) { - return StringAdapter(str); -} } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/StringAdapter.hpp b/src/ArduinoJson/Strings/StringAdapter.hpp new file mode 100644 index 00000000..1d55b212 --- /dev/null +++ b/src/ArduinoJson/Strings/StringAdapter.hpp @@ -0,0 +1,32 @@ +// ArduinoJson - https://arduinojson.org +// Copyright Benoit Blanchon 2014-2021 +// MIT License + +#pragma once + +#include + +namespace ARDUINOJSON_NAMESPACE { + +template +class StringAdapter; + +template +inline StringAdapter adaptString(const T& str) { + return StringAdapter(str); +} + +template +inline StringAdapter adaptString(const T& str, size_t sz) { + return StringAdapter(str, sz); +} + +template +struct IsString : false_type {}; + +template +struct IsString< + T, typename make_void::storage_policy>::type> + : true_type {}; + +} // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Strings/StringAdapters.hpp b/src/ArduinoJson/Strings/StringAdapters.hpp index 1de86bcd..ba763a67 100644 --- a/src/ArduinoJson/Strings/StringAdapters.hpp +++ b/src/ArduinoJson/Strings/StringAdapters.hpp @@ -4,23 +4,24 @@ #pragma once -#include -#include -#include +#include +#include +#include +#include #if ARDUINOJSON_ENABLE_STD_STRING -# include +# include #endif #if ARDUINOJSON_ENABLE_STRING_VIEW -# include +# include #endif #if ARDUINOJSON_ENABLE_ARDUINO_STRING -# include +# include #endif #if ARDUINOJSON_ENABLE_PROGMEM -# include -# include +# include +# include #endif diff --git a/src/ArduinoJson/Variant/VariantCompare.hpp b/src/ArduinoJson/Variant/VariantCompare.hpp index 025ef90a..4e0471a6 100644 --- a/src/ArduinoJson/Variant/VariantCompare.hpp +++ b/src/ArduinoJson/Variant/VariantCompare.hpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include namespace ARDUINOJSON_NAMESPACE { diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index fd54a94c..388b7e25 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include // VariantData can't have a constructor (to be a POD), so we have no way to fix @@ -103,7 +103,8 @@ class VariantData { case VALUE_IS_OBJECT: return toObject().copyFrom(src._content.asCollection, pool); case VALUE_IS_OWNED_STRING: - return setString(RamStringAdapter(src._content.asString), pool); + return setString(adaptString(const_cast(src._content.asString)), + pool); case VALUE_IS_OWNED_RAW: return setOwnedRaw( serialized(src._content.asRaw.data, src._content.asRaw.size), pool);