forked from bblanchon/ArduinoJson
Added memoryUsage() to JsonArray, JsonObject, and JsonVariant
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
@ -55,6 +55,7 @@ class CollectionData {
|
||||
|
||||
void remove(VariantSlot *slot);
|
||||
|
||||
size_t memoryUsage() const;
|
||||
size_t size() const;
|
||||
|
||||
private:
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user