forked from Telodendria/Telodendria
Finish DbComputeSize()
This commit is contained in:
parent
8c36efa1d0
commit
a356403cfd
2 changed files with 69 additions and 5 deletions
71
src/Db.c
71
src/Db.c
|
@ -47,6 +47,71 @@ struct DbRef
|
||||||
char *file;
|
char *file;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static ssize_t DbComputeSize(HashMap *);
|
||||||
|
|
||||||
|
static ssize_t
|
||||||
|
DbComputeSizeOfValue(JsonValue * val)
|
||||||
|
{
|
||||||
|
MemoryInfo *a;
|
||||||
|
ssize_t total = 0;
|
||||||
|
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
char *str;
|
||||||
|
Array *arr;
|
||||||
|
} u;
|
||||||
|
|
||||||
|
if (!val)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
a = MemoryInfoGet(val);
|
||||||
|
if (a)
|
||||||
|
{
|
||||||
|
total += MemoryInfoGetSize(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (JsonValueType(val))
|
||||||
|
{
|
||||||
|
case JSON_OBJECT:
|
||||||
|
total += DbComputeSize(JsonValueAsObject(val));
|
||||||
|
break;
|
||||||
|
case JSON_ARRAY:
|
||||||
|
u.arr = JsonValueAsArray(val);
|
||||||
|
a = MemoryInfoGet(u.arr);
|
||||||
|
|
||||||
|
if (a)
|
||||||
|
{
|
||||||
|
total += MemoryInfoGetSize(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < ArraySize(u.arr); i++)
|
||||||
|
{
|
||||||
|
total += DbComputeSizeOfValue(ArrayGet(u.arr, i));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case JSON_STRING:
|
||||||
|
u.str = JsonValueAsString(val);
|
||||||
|
a = MemoryInfoGet(u.str);
|
||||||
|
if (a)
|
||||||
|
{
|
||||||
|
total += MemoryInfoGetSize(a);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case JSON_NULL:
|
||||||
|
case JSON_INTEGER:
|
||||||
|
case JSON_FLOAT:
|
||||||
|
case JSON_BOOLEAN:
|
||||||
|
default:
|
||||||
|
/* These don't use any extra heap space */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
DbComputeSize(HashMap * json)
|
DbComputeSize(HashMap * json)
|
||||||
{
|
{
|
||||||
|
@ -76,11 +141,7 @@ DbComputeSize(HashMap * json)
|
||||||
total += MemoryInfoGetSize(a);
|
total += MemoryInfoGetSize(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
a = MemoryInfoGet(val);
|
total += DbComputeSizeOfValue(val);
|
||||||
if (a)
|
|
||||||
{
|
|
||||||
total += MemoryInfoGetSize(a);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return total;
|
return total;
|
||||||
|
|
|
@ -145,6 +145,9 @@ extern Array *
|
||||||
extern JsonValue *
|
extern JsonValue *
|
||||||
JsonValueString(char *string);
|
JsonValueString(char *string);
|
||||||
|
|
||||||
|
extern char *
|
||||||
|
JsonValueAsString(JsonValue *);
|
||||||
|
|
||||||
extern JsonValue *
|
extern JsonValue *
|
||||||
JsonValueInteger(long integer);
|
JsonValueInteger(long integer);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue