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) {
auto slot = resources->allocVariant();
if (!slot)
return nullptr;
addSlot(slot);
return slot->data();
return slotData(addSlot(resources));
}
inline bool ArrayData::copyFrom(const ArrayData& src,

View File

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

View File

@ -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) {

View File

@ -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 <typename TAdaptedString>
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();
}