diff --git a/src/ArduinoJson/Document/JsonDocument.hpp b/src/ArduinoJson/Document/JsonDocument.hpp index 4e3e3d98..2d260864 100644 --- a/src/ArduinoJson/Document/JsonDocument.hpp +++ b/src/ArduinoJson/Document/JsonDocument.hpp @@ -297,7 +297,7 @@ class JsonDocument : public detail::VariantOperators { // Returns a reference to the new element. // https://arduinojson.org/v6/api/jsondocument/add/ FORCE_INLINE JsonVariant add() { - return JsonVariant(&pool_, variantAddElement(&data_, &pool_)); + return JsonVariant(&pool_, data_.addElement(&pool_)); } // Appends a value to the root array. diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 675320b0..1e4746f2 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -14,6 +14,7 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE +VariantData* collectionAddElement(CollectionData* array, MemoryPool* pool); template T parseNumber(const char* s); void slotRelease(VariantSlot* slot, MemoryPool* pool); @@ -63,6 +64,11 @@ class VariantData { } } + VariantData* addElement(MemoryPool* pool) { + auto array = isNull() ? &toArray() : asArray(); + return collectionAddElement(array, pool); + } + bool asBoolean() const { switch (type()) { case VALUE_IS_BOOLEAN: diff --git a/src/ArduinoJson/Variant/VariantFunctions.hpp b/src/ArduinoJson/Variant/VariantFunctions.hpp index de70b8c9..fbb0f2bb 100644 --- a/src/ArduinoJson/Variant/VariantFunctions.hpp +++ b/src/ArduinoJson/Variant/VariantFunctions.hpp @@ -13,7 +13,6 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE bool collectionCopy(CollectionData* dst, const CollectionData* src, MemoryPool* pool); -VariantData* collectionAddElement(CollectionData* array, MemoryPool* pool); void collectionRemoveElement(CollectionData* data, size_t index, MemoryPool* pool); template @@ -129,8 +128,7 @@ inline VariantData* variantGetElement(const VariantData* var, size_t index) { inline VariantData* variantAddElement(VariantData* var, MemoryPool* pool) { if (!var) return nullptr; - auto array = var->isNull() ? &var->toArray() : var->asArray(); - return collectionAddElement(array, pool); + return var->addElement(pool); } inline NO_INLINE VariantData* variantGetOrAddElement(VariantData* var,