in include/yyjson/yyjson.c [1590:1612]
static void yyjson_mut_stat(yyjson_mut_val *val,
usize *val_sum, usize *str_sum) {
yyjson_type type = unsafe_yyjson_get_type(val);
*val_sum += 1;
if (type == YYJSON_TYPE_ARR || type == YYJSON_TYPE_OBJ) {
yyjson_mut_val *child = (yyjson_mut_val *)val->uni.ptr;
usize len = unsafe_yyjson_get_len(val), i;
len <<= (u8)(type == YYJSON_TYPE_OBJ);
*val_sum += len;
for (i = 0; i < len; i++) {
yyjson_type stype = unsafe_yyjson_get_type(child);
if (stype == YYJSON_TYPE_STR || stype == YYJSON_TYPE_RAW) {
*str_sum += unsafe_yyjson_get_len(child) + 1;
} else if (stype == YYJSON_TYPE_ARR || stype == YYJSON_TYPE_OBJ) {
yyjson_mut_stat(child, val_sum, str_sum);
*val_sum -= 1;
}
child = child->next;
}
} else if (type == YYJSON_TYPE_STR || type == YYJSON_TYPE_RAW) {
*str_sum += unsafe_yyjson_get_len(val) + 1;
}
}