Add VariantData::getOrAddMember()

This commit is contained in:
Benoit Blanchon
2023-05-25 10:13:47 +02:00
parent 2da1f2553d
commit a97bcb6b2d
2 changed files with 15 additions and 8 deletions

View File

@ -183,6 +183,19 @@ class VariantData {
return slotData(object->get(key)); return slotData(object->get(key));
} }
template <typename TAdaptedString>
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 { bool isArray() const {
return (flags_ & VALUE_IS_ARRAY) != 0; return (flags_ & VALUE_IS_ARRAY) != 0;
} }

View File

@ -173,15 +173,9 @@ VariantData* variantGetMember(const VariantData* var, TAdaptedString key) {
template <typename TAdaptedString> template <typename TAdaptedString>
VariantData* variantGetOrAddMember(VariantData* var, TAdaptedString key, VariantData* variantGetOrAddMember(VariantData* var, TAdaptedString key,
MemoryPool* pool) { MemoryPool* pool) {
if (!var || key.isNull()) if (!var)
return nullptr; return nullptr;
auto obj = var->isNull() ? &var->toObject() : var->asObject(); return var->getOrAddMember(key, pool);
if (!obj)
return nullptr;
auto slot = obj->get(key);
if (slot)
return slot->data();
return collectionAddMember(obj, key, pool);
} }
template <typename TAdaptedString> template <typename TAdaptedString>