stat: fix accumulation of latency buckets
[fio.git] / json.h
CommitLineData
cc372b17
SL
1#ifndef __JSON__H
2#define __JSON__H
a666cab8
JA
3
4#include "lib/output_buffer.h"
5
cc372b17
SL
6#define JSON_TYPE_STRING 0
7#define JSON_TYPE_INTEGER 1
8#define JSON_TYPE_FLOAT 2
9#define JSON_TYPE_OBJECT 3
10#define JSON_TYPE_ARRAY 4
11#define JSON_PARENT_TYPE_PAIR 0
12#define JSON_PARENT_TYPE_ARRAY 1
13struct json_value {
14 int type;
15 union {
ee2e5717 16 long long integer_number;
cc372b17
SL
17 double float_number;
18 char *string;
19 struct json_object *object;
20 struct json_array *array;
21 };
22 int parent_type;
23 union {
24 struct json_pair *parent_pair;
25 struct json_array *parent_array;
26 };
27};
28
29struct json_array {
30 struct json_value **values;
31 int value_cnt;
32 struct json_value *parent;
33};
34
35struct json_object {
36 struct json_pair **pairs;
37 int pair_cnt;
38 struct json_value *parent;
39};
40
41struct json_pair {
42 char *name;
43 struct json_value *value;
44 struct json_object *parent;
45};
46
47struct json_object *json_create_object(void);
48struct json_array *json_create_array(void);
49
50void json_free_object(struct json_object *obj);
51
52int json_object_add_value_type(struct json_object *obj, const char *name, int type, ...);
53#define json_object_add_value_int(obj, name, val) \
a606a802 54 json_object_add_value_type((obj), name, JSON_TYPE_INTEGER, (long long) (val))
cc372b17
SL
55#define json_object_add_value_float(obj, name, val) \
56 json_object_add_value_type((obj), name, JSON_TYPE_FLOAT, (val))
57#define json_object_add_value_string(obj, name, val) \
58 json_object_add_value_type((obj), name, JSON_TYPE_STRING, (val))
59#define json_object_add_value_object(obj, name, val) \
60 json_object_add_value_type((obj), name, JSON_TYPE_OBJECT, (val))
61#define json_object_add_value_array(obj, name, val) \
62 json_object_add_value_type((obj), name, JSON_TYPE_ARRAY, (val))
63int json_array_add_value_type(struct json_array *array, int type, ...);
64#define json_array_add_value_int(obj, val) \
65 json_array_add_value_type((obj), JSON_TYPE_INTEGER, (val))
66#define json_array_add_value_float(obj, val) \
67 json_array_add_value_type((obj), JSON_TYPE_FLOAT, (val))
68#define json_array_add_value_string(obj, val) \
69 json_array_add_value_type((obj), JSON_TYPE_STRING, (val))
70#define json_array_add_value_object(obj, val) \
71 json_array_add_value_type((obj), JSON_TYPE_OBJECT, (val))
72#define json_array_add_value_array(obj, val) \
73 json_array_add_value_type((obj), JSON_TYPE_ARRAY, (val))
74
952b05e0
CF
75#define json_array_last_value_object(obj) \
76 (obj->values[obj->value_cnt - 1]->object)
77
a666cab8 78void json_print_object(struct json_object *obj, struct buf_output *out);
cc372b17 79#endif