Przeglądaj źródła

Fixed copying from JsonObjectConst and JsonArrayConst

Benoit Blanchon 7 lat temu
rodzic
commit
11bb5e26ff

+ 2 - 0
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
 > 

+ 2 - 2
src/ArduinoJson/Array/ArrayRef.hpp

@@ -96,7 +96,7 @@ class ArrayRef : public ArrayRefBase<CollectionData>, 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<CollectionData>, 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);
   }

+ 8 - 0
src/ArduinoJson/Variant/VariantImpl.hpp

@@ -64,6 +64,10 @@ inline bool VariantRef::set(ArrayRef array) const {
   return to<ArrayRef>().copyFrom(array);
 }
 
+inline bool VariantRef::set(ArrayConstRef array) const {
+  return to<ArrayRef>().copyFrom(array);
+}
+
 inline bool VariantRef::set(const ArraySubscript& value) const {
   return set(value.as<VariantRef>());
 }
@@ -72,6 +76,10 @@ inline bool VariantRef::set(ObjectRef object) const {
   return to<ObjectRef>().copyFrom(object);
 }
 
+inline bool VariantRef::set(ObjectConstRef object) const {
+  return to<ObjectRef>().copyFrom(object);
+}
+
 template <typename TString>
 inline bool VariantRef::set(const ObjectSubscript<TString>& value) const {
   return set(value.template as<VariantRef>());

+ 2 - 0
src/ArduinoJson/Variant/VariantRef.hpp

@@ -203,8 +203,10 @@ class VariantRef : public VariantRefBase<VariantData>,
   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 <typename TString>
   FORCE_INLINE bool set(const ObjectSubscript<TString> &) const;