From ab4e8547cb55bce2748d7d2d8d2431ae3fc724b2 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Thu, 25 May 2023 18:10:22 +0200 Subject: [PATCH] Add `VariantData::getOrAddElement()` --- src/ArduinoJson/Variant/VariantData.hpp | 21 ++++++++++++++++++++ src/ArduinoJson/Variant/VariantFunctions.hpp | 19 +----------------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 9508fa77..76a5ead5 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -185,6 +185,27 @@ class VariantData { return slotData(object->get(key)); } + VariantData* getOrAddElement(size_t index, MemoryPool* pool) { + auto array = isNull() ? &toArray() : asArray(); + if (!array) + return nullptr; + VariantSlot* slot = array->head(); + while (slot && index > 0) { + slot = slot->next(); + index--; + } + if (!slot) + index++; + while (index > 0) { + slot = new (pool) VariantSlot(); + if (!slot) + return nullptr; + array->add(slot); + index--; + } + return slot->data(); + } + template VariantData* getOrAddMember(TAdaptedString key, MemoryPool* pool) { if (key.isNull()) diff --git a/src/ArduinoJson/Variant/VariantFunctions.hpp b/src/ArduinoJson/Variant/VariantFunctions.hpp index 5d5faa25..cecd33e4 100644 --- a/src/ArduinoJson/Variant/VariantFunctions.hpp +++ b/src/ArduinoJson/Variant/VariantFunctions.hpp @@ -131,24 +131,7 @@ inline NO_INLINE VariantData* variantGetOrAddElement(VariantData* var, MemoryPool* pool) { if (!var) return nullptr; - auto array = var->isNull() ? &var->toArray() : var->asArray(); - if (!array) - return nullptr; - VariantSlot* slot = array->head(); - while (slot && index > 0) { - slot = slot->next(); - index--; - } - if (!slot) - index++; - while (index > 0) { - slot = new (pool) VariantSlot(); - if (!slot) - return nullptr; - array->add(slot); - index--; - } - return slot->data(); + return var->getOrAddElement(index, pool); } inline void variantRemoveElement(VariantData* var, size_t index,