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));
}
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 {
return (flags_ & VALUE_IS_ARRAY) != 0;
}

View File

@ -173,15 +173,9 @@ VariantData* variantGetMember(const VariantData* var, TAdaptedString key) {
template <typename TAdaptedString>
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 <typename TAdaptedString>