From 11bb5e26ff0e823377d9f479f916305efca96802 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Mon, 14 Jan 2019 10:47:29 +0100 Subject: [PATCH] Fixed copying from JsonObjectConst and JsonArrayConst --- CHANGELOG.md | 2 ++ src/ArduinoJson/Array/ArrayRef.hpp | 4 ++-- src/ArduinoJson/Variant/VariantImpl.hpp | 8 ++++++++ src/ArduinoJson/Variant/VariantRef.hpp | 2 ++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5a89fdb..fbad590b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ HEAD * Import functions in the ArduinoJson namespace to get clearer errors * Improved syntax highlighting in Arduino IDE * Removed default capacity of `DynamicJsonDocument` +* `JsonArray::copyFrom()` accepts `JsonArrayConst` +* `JsonVariant::set()` accepts `JsonArrayConst` and `JsonObjectConst` > ### BREAKING CHANGES > diff --git a/src/ArduinoJson/Array/ArrayRef.hpp b/src/ArduinoJson/Array/ArrayRef.hpp index 3f8a9d8f..85fc29e8 100644 --- a/src/ArduinoJson/Array/ArrayRef.hpp +++ b/src/ArduinoJson/Array/ArrayRef.hpp @@ -96,7 +96,7 @@ class ArrayRef : public ArrayRefBase, public Visitable { return add().set(value); } // Adds the specified value at the end of the array. - FORCE_INLINE bool add(ArrayRef value) const { + FORCE_INLINE bool add(ArrayConstRef value) const { return add().set(value); } // @@ -150,7 +150,7 @@ class ArrayRef : public ArrayRefBase, public Visitable { } // Copy a ArrayRef - FORCE_INLINE bool copyFrom(ArrayRef src) const { + FORCE_INLINE bool copyFrom(ArrayConstRef src) const { if (!_data || !src._data) return false; return _data->copyFrom(*src._data, _pool); } diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index e5e53d21..b61065f5 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -64,6 +64,10 @@ inline bool VariantRef::set(ArrayRef array) const { return to().copyFrom(array); } +inline bool VariantRef::set(ArrayConstRef array) const { + return to().copyFrom(array); +} + inline bool VariantRef::set(const ArraySubscript& value) const { return set(value.as()); } @@ -72,6 +76,10 @@ inline bool VariantRef::set(ObjectRef object) const { return to().copyFrom(object); } +inline bool VariantRef::set(ObjectConstRef object) const { + return to().copyFrom(object); +} + template inline bool VariantRef::set(const ObjectSubscript& value) const { return set(value.template as()); diff --git a/src/ArduinoJson/Variant/VariantRef.hpp b/src/ArduinoJson/Variant/VariantRef.hpp index c804e68a..6b8cd98b 100644 --- a/src/ArduinoJson/Variant/VariantRef.hpp +++ b/src/ArduinoJson/Variant/VariantRef.hpp @@ -203,8 +203,10 @@ class VariantRef : public VariantRefBase, bool set(VariantRef value) const; FORCE_INLINE bool set(ArrayRef array) const; + FORCE_INLINE bool set(ArrayConstRef array) const; FORCE_INLINE bool set(const ArraySubscript &) const; FORCE_INLINE bool set(ObjectRef object) const; + FORCE_INLINE bool set(ObjectConstRef object) const; template FORCE_INLINE bool set(const ObjectSubscript &) const;