[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 09/14] Revert "qjson: Simplify by using json-outp
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v2 09/14] Revert "qjson: Simplify by using json-output-visitor" |
Date: |
Mon, 21 Dec 2015 17:31:03 -0700 |
This reverts commit 5859ad241516eed8cb9ba60889efa0ed47648b38.
The revert is here only to show the difference between two
alternatives, the final series will have just one choice of
patch 8, or of patches 10-11
---
qjson.c | 61 +++++++++++++++++++++++++++++++++++++++----------------------
1 file changed, 39 insertions(+), 22 deletions(-)
diff --git a/qjson.c b/qjson.c
index 8874bad..8c93c1b 100644
--- a/qjson.c
+++ b/qjson.c
@@ -11,86 +11,103 @@
*
*/
+#include <qapi/qmp/qstring.h>
#include <stdbool.h>
-#include <stdint.h>
+#include <glib.h>
#include <qjson.h>
#include <qemu/module.h>
#include <qom/object.h>
-#include "qapi/json-output-visitor.h"
struct QJSON {
Object obj;
- JsonOutputVisitor *jov;
- char *str;
+ QString *str;
+ bool omit_comma;
};
#define QJSON(obj) OBJECT_CHECK(QJSON, (obj), TYPE_QJSON)
+static void json_emit_element(QJSON *json, const char *name)
+{
+ /* Check whether we need to print a , before an element */
+ if (json->omit_comma) {
+ json->omit_comma = false;
+ } else {
+ qstring_append(json->str, ", ");
+ }
+
+ if (name) {
+ qstring_append_json_string(json->str, name);
+ qstring_append(json->str, " : ");
+ }
+}
+
void json_start_object(QJSON *json, const char *name)
{
- Visitor *v = json_output_get_visitor(json->jov);
- visit_start_struct(v, name, NULL, 0, &error_abort);
+ json_emit_element(json, name);
+ qstring_append(json->str, "{ ");
+ json->omit_comma = true;
}
void json_end_object(QJSON *json)
{
- Visitor *v = json_output_get_visitor(json->jov);
- visit_check_struct(v, &error_abort);
- visit_end_struct(v);
+ qstring_append(json->str, " }");
+ json->omit_comma = false;
}
void json_start_array(QJSON *json, const char *name)
{
- Visitor *v = json_output_get_visitor(json->jov);
- visit_start_list(v, name, NULL, 0, &error_abort);
+ json_emit_element(json, name);
+ qstring_append(json->str, "[ ");
+ json->omit_comma = true;
}
void json_end_array(QJSON *json)
{
- Visitor *v = json_output_get_visitor(json->jov);
- visit_end_list(v);
+ qstring_append(json->str, " ]");
+ json->omit_comma = false;
}
void json_prop_int(QJSON *json, const char *name, int64_t val)
{
- Visitor *v = json_output_get_visitor(json->jov);
- visit_type_int(v, name, &val, &error_abort);
+ json_emit_element(json, name);
+ qstring_append_format(json->str, "%" PRId64, val);
}
void json_prop_str(QJSON *json, const char *name, const char *str)
{
- Visitor *v = json_output_get_visitor(json->jov);
- visit_type_str(v, name, (char **)&str, &error_abort);
+ json_emit_element(json, name);
+ qstring_append_json_string(json->str, str);
}
const char *qjson_get_str(QJSON *json)
{
- return json->str;
+ return qstring_get_str(json->str);
}
QJSON *qjson_new(void)
{
QJSON *json = QJSON(object_new(TYPE_QJSON));
- json_start_object(json, NULL);
return json;
}
void qjson_finish(QJSON *json)
{
json_end_object(json);
- json->str = json_output_get_string(json->jov);
}
static void qjson_initfn(Object *obj)
{
QJSON *json = QJSON(obj);
- json->jov = json_output_visitor_new();
+
+ json->str = qstring_from_str("{ ");
+ json->omit_comma = true;
}
static void qjson_finalizefn(Object *obj)
{
QJSON *json = QJSON(obj);
- g_free(json->str);
+
+ qobject_decref(QOBJECT(json->str));
}
static const TypeInfo qjson_type_info = {
--
2.4.3
- Re: [Qemu-devel] [PATCH v2 06/14] qapi: Add qstring_append_format(), (continued)
- [Qemu-devel] [PATCH v2 03/14] qapi: Factor out JSON string escaping, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v2 08/14] qjson: Simplify by using json-output-visitor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v2 10/14] vmstate: use new JSON output visitor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v2 07/14] qapi: add json output visitor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v2 11/14] qjson: Remove unused file, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v2 12/14] qapi: Add qobject_to_json_pretty_prefix(), Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v2 01/14] qapi: Rename (one) qjson.h to qobject-json.h, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v2 14/14] qemu-img: Use new JSON output formatter, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v2 09/14] Revert "qjson: Simplify by using json-output-visitor",
Eric Blake <=
- [Qemu-devel] [PATCH v2 13/14] qapi: Support pretty printing in JSON output visitor, Eric Blake, 2015/12/21
- Re: [Qemu-devel] [PATCH v2 00/14] Add qapi-to-JSON output visitor, Eric Blake, 2015/12/23