CollectionData: allocate the slot in addSlot()

This commit is contained in:
Benoit Blanchon
2023-07-03 11:45:14 +02:00
parent 5ceb5d1813
commit fac5b5a7a7
4 changed files with 9 additions and 13 deletions

View File

@ -19,11 +19,7 @@ inline ArrayData::iterator ArrayData::at(size_t index) const {
} }
inline VariantData* ArrayData::addElement(ResourceManager* resources) { inline VariantData* ArrayData::addElement(ResourceManager* resources) {
auto slot = resources->allocVariant(); return slotData(addSlot(resources));
if (!slot)
return nullptr;
addSlot(slot);
return slot->data();
} }
inline bool ArrayData::copyFrom(const ArrayData& src, inline bool ArrayData::copyFrom(const ArrayData& src,

View File

@ -107,7 +107,7 @@ class CollectionData {
} }
protected: protected:
void addSlot(VariantSlot*); VariantSlot* addSlot(ResourceManager*);
private: private:
VariantSlot* getPreviousSlot(VariantSlot*) const; VariantSlot* getPreviousSlot(VariantSlot*) const;

View File

@ -27,9 +27,10 @@ inline void CollectionIterator::next() {
slot_ = slot_->next(); slot_ = slot_->next();
} }
inline void CollectionData::addSlot(VariantSlot* slot) { inline VariantSlot* CollectionData::addSlot(ResourceManager* resources) {
ARDUINOJSON_ASSERT(slot != nullptr); auto slot = resources->allocVariant();
if (!slot)
return nullptr;
if (tail_) { if (tail_) {
tail_->setNextNotNull(slot); tail_->setNextNotNull(slot);
tail_ = slot; tail_ = slot;
@ -37,6 +38,7 @@ inline void CollectionData::addSlot(VariantSlot* slot) {
head_ = slot; head_ = slot;
tail_ = slot; tail_ = slot;
} }
return slot;
} }
inline void CollectionData::clear(ResourceManager* resources) { inline void CollectionData::clear(ResourceManager* resources) {

View File

@ -12,12 +12,11 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
inline VariantData* ObjectData::addMember(StringNode* key, inline VariantData* ObjectData::addMember(StringNode* key,
ResourceManager* resources) { ResourceManager* resources) {
ARDUINOJSON_ASSERT(key != nullptr); ARDUINOJSON_ASSERT(key != nullptr);
auto slot = resources->allocVariant(); auto slot = addSlot(resources);
if (!slot) if (!slot)
return nullptr; return nullptr;
slot->setKey(key); slot->setKey(key);
addSlot(slot);
return slot->data(); return slot->data();
} }
@ -25,7 +24,7 @@ template <typename TAdaptedString>
inline VariantData* ObjectData::addMember(TAdaptedString key, inline VariantData* ObjectData::addMember(TAdaptedString key,
ResourceManager* resources) { ResourceManager* resources) {
ARDUINOJSON_ASSERT(!key.isNull()); ARDUINOJSON_ASSERT(!key.isNull());
auto slot = resources->allocVariant(); auto slot = addSlot(resources);
if (!slot) if (!slot)
return nullptr; return nullptr;
if (key.isLinked()) if (key.isLinked())
@ -36,7 +35,6 @@ inline VariantData* ObjectData::addMember(TAdaptedString key,
return nullptr; return nullptr;
slot->setKey(storedKey); slot->setKey(storedKey);
} }
addSlot(slot);
return slot->data(); return slot->data();
} }