From a97bcb6b2d8dfcc18e7cc0d06c6a190d65287225 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Thu, 25 May 2023 10:13:47 +0200 Subject: [PATCH] Add `VariantData::getOrAddMember()` --- src/ArduinoJson/Variant/VariantData.hpp | 13 +++++++++++++ src/ArduinoJson/Variant/VariantFunctions.hpp | 10 ++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 1e4746f2..4519c2c4 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -183,6 +183,19 @@ class VariantData { return slotData(object->get(key)); } + template + VariantData* getOrAddMember(TAdaptedString key, MemoryPool* pool) { + if (key.isNull()) + return nullptr; + auto obj = isNull() ? &toObject() : asObject(); + if (!obj) + return nullptr; + auto slot = obj->get(key); + if (slot) + return slot->data(); + return collectionAddMember(obj, key, pool); + } + bool isArray() const { return (flags_ & VALUE_IS_ARRAY) != 0; } diff --git a/src/ArduinoJson/Variant/VariantFunctions.hpp b/src/ArduinoJson/Variant/VariantFunctions.hpp index fbb0f2bb..396551b5 100644 --- a/src/ArduinoJson/Variant/VariantFunctions.hpp +++ b/src/ArduinoJson/Variant/VariantFunctions.hpp @@ -173,15 +173,9 @@ VariantData* variantGetMember(const VariantData* var, TAdaptedString key) { template VariantData* variantGetOrAddMember(VariantData* var, TAdaptedString key, MemoryPool* pool) { - if (!var || key.isNull()) + if (!var) return nullptr; - auto obj = var->isNull() ? &var->toObject() : var->asObject(); - if (!obj) - return nullptr; - auto slot = obj->get(key); - if (slot) - return slot->data(); - return collectionAddMember(obj, key, pool); + return var->getOrAddMember(key, pool); } template