fio: ioengine flag cleanup
[fio.git] / json.h
diff --git a/json.h b/json.h
index 081afd6c6f0b4adfe929648b0f4d5b60639d1ee1..66bb06b1f17024b6759b585dfc5d9b9afcfa0326 100644 (file)
--- a/json.h
+++ b/json.h
@@ -1,8 +1,7 @@
 #ifndef __JSON__H
 #define __JSON__H
-struct json_object;
-struct json_array;
-struct json_pair;
+
+#include "lib/output_buffer.h"
 
 #define JSON_TYPE_STRING 0
 #define JSON_TYPE_INTEGER 1
@@ -50,31 +49,132 @@ struct json_array *json_create_array(void);
 
 void json_free_object(struct json_object *obj);
 
-int json_object_add_value_type(struct json_object *obj, const char *name, int type, ...);
-#define json_object_add_value_int(obj, name, val) \
-       json_object_add_value_type((obj), name, JSON_TYPE_INTEGER, (val))
-#define json_object_add_value_float(obj, name, val) \
-       json_object_add_value_type((obj), name, JSON_TYPE_FLOAT, (val))
-#define json_object_add_value_string(obj, name, val) \
-       json_object_add_value_type((obj), name, JSON_TYPE_STRING, (val))
-#define json_object_add_value_object(obj, name, val) \
-       json_object_add_value_type((obj), name, JSON_TYPE_OBJECT, (val))
-#define json_object_add_value_array(obj, name, val) \
-       json_object_add_value_type((obj), name, JSON_TYPE_ARRAY, (val))
-int json_array_add_value_type(struct json_array *array, int type, ...);
-#define json_array_add_value_int(obj, val) \
-       json_array_add_value_type((obj), JSON_TYPE_INTEGER, (val))
-#define json_array_add_value_float(obj, val) \
-       json_array_add_value_type((obj), JSON_TYPE_FLOAT, (val))
-#define json_array_add_value_string(obj, val) \
-       json_array_add_value_type((obj), JSON_TYPE_STRING, (val))
-#define json_array_add_value_object(obj, val) \
-       json_array_add_value_type((obj), JSON_TYPE_OBJECT, (val))
-#define json_array_add_value_array(obj, val) \
-       json_array_add_value_type((obj), JSON_TYPE_ARRAY, (val))
+int json_object_add_value_type(struct json_object *obj, const char *name,
+                              const struct json_value *val);
+
+static inline int json_object_add_value_int(struct json_object *obj,
+                                           const char *name, long long val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_INTEGER,
+       };
+
+       arg.integer_number = val;
+       return json_object_add_value_type(obj, name, &arg);
+}
+
+static inline int json_object_add_value_float(struct json_object *obj,
+                                             const char *name, double val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_FLOAT,
+       };
+
+       arg.float_number = val;
+       return json_object_add_value_type(obj, name, &arg);
+}
+
+static inline int json_object_add_value_string(struct json_object *obj,
+                                              const char *name,
+                                              const char *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_STRING,
+       };
+       union {
+               const char *a;
+               char *b;
+       } string;
+
+       string.a = val ? val : "";
+       arg.string = string.b;
+       return json_object_add_value_type(obj, name, &arg);
+}
+
+static inline int json_object_add_value_object(struct json_object *obj,
+                                              const char *name,
+                                              struct json_object *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_OBJECT,
+       };
+
+       arg.object = val;
+       return json_object_add_value_type(obj, name, &arg);
+}
+
+static inline int json_object_add_value_array(struct json_object *obj,
+                                             const char *name,
+                                             struct json_array *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_ARRAY,
+       };
+
+       arg.array = val;
+       return json_object_add_value_type(obj, name, &arg);
+}
+
+int json_array_add_value_type(struct json_array *array,
+                             const struct json_value *val);
+
+static inline int json_array_add_value_int(struct json_array *obj,
+                                          long long val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_INTEGER,
+       };
+
+       arg.integer_number = val;
+       return json_array_add_value_type(obj, &arg);
+}
+
+static inline int json_array_add_value_float(struct json_array *obj,
+                                            double val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_FLOAT,
+       };
+
+       arg.float_number = val;
+       return json_array_add_value_type(obj, &arg);
+}
+
+static inline int json_array_add_value_string(struct json_array *obj,
+                                             const char *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_STRING,
+       };
+
+       arg.string = (char *)val;
+       return json_array_add_value_type(obj, &arg);
+}
+
+static inline int json_array_add_value_object(struct json_array *obj,
+                                             struct json_object *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_OBJECT,
+       };
+
+       arg.object = val;
+       return json_array_add_value_type(obj, &arg);
+}
+
+static inline int json_array_add_value_array(struct json_array *obj,
+                                            struct json_array *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_ARRAY,
+       };
+
+       arg.array = val;
+       return json_array_add_value_type(obj, &arg);
+}
 
 #define json_array_last_value_object(obj) \
        (obj->values[obj->value_cnt - 1]->object)
 
-void json_print_object(struct json_object *obj);
+void json_print_object(struct json_object *obj, struct buf_output *out);
 #endif