diff --git a/extras/tests/JsonVariant/link.cpp b/extras/tests/JsonVariant/link.cpp index 2cf6ec5c..3a45ff6d 100644 --- a/extras/tests/JsonVariant/link.cpp +++ b/extras/tests/JsonVariant/link.cpp @@ -12,7 +12,7 @@ TEST_CASE("JsonVariant::link()") { SECTION("JsonVariant::link(JsonDocument&)") { doc2["hello"] = "world"; - variant.link(doc2.as()); + variant.link(doc2); CHECK(variant.as() == "{\"hello\":\"world\"}"); CHECK(variant.memoryUsage() == 0); diff --git a/extras/tests/JsonVariant/memoryUsage.cpp b/extras/tests/JsonVariant/memoryUsage.cpp index f8d47ddf..486772c8 100644 --- a/extras/tests/JsonVariant/memoryUsage.cpp +++ b/extras/tests/JsonVariant/memoryUsage.cpp @@ -42,7 +42,7 @@ TEST_CASE("JsonVariant::memoryUsage()") { SECTION("ignore size of link document") { StaticJsonDocument<128> doc2; doc2["hello"] = "world"; - var.link(doc2.as()); + var.link(doc2); CHECK(var.memoryUsage() == 0); CHECK(var.memoryUsage() == doc.memoryUsage()); } diff --git a/src/ArduinoJson/Variant/VariantContent.hpp b/src/ArduinoJson/Variant/VariantContent.hpp index 162d095d..3ede76ef 100644 --- a/src/ArduinoJson/Variant/VariantContent.hpp +++ b/src/ArduinoJson/Variant/VariantContent.hpp @@ -51,7 +51,7 @@ union VariantContent { UInt asUnsignedInteger; Integer asSignedInteger; CollectionData asCollection; - class VariantData *asPointer; + const class VariantData *asPointer; struct { const char *data; size_t size; diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 144ba46e..9b410efd 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -212,7 +212,7 @@ class VariantData { setType(VALUE_IS_NULL); } - void setPointer(VariantData *value) { + void setPointer(const VariantData *value) { setType(VALUE_IS_POINTER); _content.asPointer = value; } diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 48c45fb8..dae07c53 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -181,4 +181,9 @@ bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool, return copy != 0; } +inline void VariantRef::link(VariantConstRef var) { + if (_data) + _data->setPointer(var._data); +} + } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Variant/VariantRef.hpp b/src/ArduinoJson/Variant/VariantRef.hpp index 41b53fbb..cd78673a 100644 --- a/src/ArduinoJson/Variant/VariantRef.hpp +++ b/src/ArduinoJson/Variant/VariantRef.hpp @@ -198,10 +198,7 @@ class VariantRef : public VariantRefBase, template FORCE_INLINE VariantRef getOrAddMember(const TString &) const; - FORCE_INLINE void link(VariantRef var) { - if (_data) - _data->setPointer(var._data); - } + void link(class VariantConstRef var); FORCE_INLINE void remove(size_t index) const { if (_data)