Added memoryUsage() to JsonArray, JsonObject, and JsonVariant

This commit is contained in:
Benoit Blanchon
2019-01-16 09:50:57 +01:00
parent 8b04046321
commit c51cc91f92
14 changed files with 165 additions and 1 deletions

View File

@ -34,6 +34,10 @@ class ArrayRefBase {
return VariantConstRef(_data ? _data->get(index) : 0);
}
FORCE_INLINE size_t memoryUsage() const {
return _data ? _data->memoryUsage() : 0;
}
FORCE_INLINE size_t size() const {
return _data ? _data->size() : 0;
}

View File

@ -55,6 +55,7 @@ class CollectionData {
void remove(VariantSlot *slot);
size_t memoryUsage() const;
size_t size() const;
private:

View File

@ -138,6 +138,15 @@ inline void CollectionData::remove(size_t index) {
remove(getSlot(index));
}
inline size_t CollectionData::memoryUsage() const {
size_t total = 0;
for (VariantSlot* s = _head; s; s = s->next()) {
total += sizeof(VariantSlot) + s->data()->memoryUsage();
if (s->ownsKey()) total += strlen(s->key()) + 1;
}
return total;
}
inline size_t CollectionData::size() const {
return slotSize(_head);
}

View File

@ -42,6 +42,10 @@ class ObjectRefBase {
return _data == 0;
}
FORCE_INLINE size_t memoryUsage() const {
return _data ? _data->memoryUsage() : 0;
}
FORCE_INLINE size_t size() const {
return _data ? _data->size() : 0;
}

View File

@ -266,6 +266,20 @@ class VariantData {
return _content.asCollection;
}
size_t memoryUsage() const {
switch (type()) {
case VALUE_IS_OWNED_STRING:
return strlen(_content.asString) + 1;
case VALUE_IS_OWNED_RAW:
return _content.asRaw.size;
case VALUE_IS_OBJECT:
case VALUE_IS_ARRAY:
return _content.asCollection.memoryUsage();
default:
return 0;
}
}
size_t size() const {
if (type() == VALUE_IS_OBJECT || type() == VALUE_IS_ARRAY)
return _content.asCollection.size();

View File

@ -95,6 +95,10 @@ class VariantRefBase {
return variantIsNull(_data);
}
FORCE_INLINE size_t memoryUsage() const {
return _data ? _data->memoryUsage() : 0;
}
size_t size() const {
return variantSize(_data);
}