From fac5b5a7a7f9029ebf63f76eabc58bebb0825bf8 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Mon, 3 Jul 2023 11:45:14 +0200 Subject: [PATCH] CollectionData: allocate the slot in `addSlot()` --- src/ArduinoJson/Array/ArrayImpl.hpp | 6 +----- src/ArduinoJson/Collection/CollectionData.hpp | 2 +- src/ArduinoJson/Collection/CollectionImpl.hpp | 8 +++++--- src/ArduinoJson/Object/ObjectImpl.hpp | 6 ++---- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/ArduinoJson/Array/ArrayImpl.hpp b/src/ArduinoJson/Array/ArrayImpl.hpp index 6c3d6b24..c1cf14f3 100644 --- a/src/ArduinoJson/Array/ArrayImpl.hpp +++ b/src/ArduinoJson/Array/ArrayImpl.hpp @@ -19,11 +19,7 @@ inline ArrayData::iterator ArrayData::at(size_t index) const { } inline VariantData* ArrayData::addElement(ResourceManager* resources) { - auto slot = resources->allocVariant(); - if (!slot) - return nullptr; - addSlot(slot); - return slot->data(); + return slotData(addSlot(resources)); } inline bool ArrayData::copyFrom(const ArrayData& src, diff --git a/src/ArduinoJson/Collection/CollectionData.hpp b/src/ArduinoJson/Collection/CollectionData.hpp index 5d63b2b9..a61eeebf 100644 --- a/src/ArduinoJson/Collection/CollectionData.hpp +++ b/src/ArduinoJson/Collection/CollectionData.hpp @@ -107,7 +107,7 @@ class CollectionData { } protected: - void addSlot(VariantSlot*); + VariantSlot* addSlot(ResourceManager*); private: VariantSlot* getPreviousSlot(VariantSlot*) const; diff --git a/src/ArduinoJson/Collection/CollectionImpl.hpp b/src/ArduinoJson/Collection/CollectionImpl.hpp index bbc201a9..f54feb2f 100644 --- a/src/ArduinoJson/Collection/CollectionImpl.hpp +++ b/src/ArduinoJson/Collection/CollectionImpl.hpp @@ -27,9 +27,10 @@ inline void CollectionIterator::next() { slot_ = slot_->next(); } -inline void CollectionData::addSlot(VariantSlot* slot) { - ARDUINOJSON_ASSERT(slot != nullptr); - +inline VariantSlot* CollectionData::addSlot(ResourceManager* resources) { + auto slot = resources->allocVariant(); + if (!slot) + return nullptr; if (tail_) { tail_->setNextNotNull(slot); tail_ = slot; @@ -37,6 +38,7 @@ inline void CollectionData::addSlot(VariantSlot* slot) { head_ = slot; tail_ = slot; } + return slot; } inline void CollectionData::clear(ResourceManager* resources) { diff --git a/src/ArduinoJson/Object/ObjectImpl.hpp b/src/ArduinoJson/Object/ObjectImpl.hpp index bc20494d..51d5a851 100644 --- a/src/ArduinoJson/Object/ObjectImpl.hpp +++ b/src/ArduinoJson/Object/ObjectImpl.hpp @@ -12,12 +12,11 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE inline VariantData* ObjectData::addMember(StringNode* key, ResourceManager* resources) { ARDUINOJSON_ASSERT(key != nullptr); - auto slot = resources->allocVariant(); + auto slot = addSlot(resources); if (!slot) return nullptr; slot->setKey(key); - addSlot(slot); return slot->data(); } @@ -25,7 +24,7 @@ template inline VariantData* ObjectData::addMember(TAdaptedString key, ResourceManager* resources) { ARDUINOJSON_ASSERT(!key.isNull()); - auto slot = resources->allocVariant(); + auto slot = addSlot(resources); if (!slot) return nullptr; if (key.isLinked()) @@ -36,7 +35,6 @@ inline VariantData* ObjectData::addMember(TAdaptedString key, return nullptr; slot->setKey(storedKey); } - addSlot(slot); return slot->data(); }