summaryrefslogtreecommitdiff
path: root/json-glib/json-parser.c
diff options
context:
space:
mode:
authorOle André Vadla Ravnås <oleavr@gmail.com>2017-03-14 18:27:13 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2017-03-18 18:16:28 +0000
commit0f6e3d3eddc3bdb321283998924506d9184a0a2a (patch)
treec9acd73cc443c79616513cdf5e169b988f6eff55 /json-glib/json-parser.c
parent7d79960747b286da4608f516c575004786d1928c (diff)
downloadjson-glib-0f6e3d3eddc3bdb321283998924506d9184a0a2a.tar.gz
core: Add json_parser_steal_root()
This avoids copying the root node for the parse-to-node use-case. https://bugzilla.gnome.org/show_bug.cgi?id=774688
Diffstat (limited to 'json-glib/json-parser.c')
-rw-r--r--json-glib/json-parser.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/json-glib/json-parser.c b/json-glib/json-parser.c
index dda3eeb..f2a99d9 100644
--- a/json-glib/json-parser.c
+++ b/json-glib/json-parser.c
@@ -1198,6 +1198,32 @@ json_parser_get_root (JsonParser *parser)
}
/**
+ * json_parser_steal_root:
+ * @parser: a #JsonParser
+ *
+ * Steals the top level node from the parsed JSON stream.
+ *
+ * Returns: (transfer full): the top level #JsonNode
+ *
+ * Since: 1.4
+ */
+JsonNode *
+json_parser_steal_root (JsonParser *parser)
+{
+ JsonParserPrivate *priv;
+ JsonNode *root;
+
+ g_return_val_if_fail (JSON_IS_PARSER (parser), NULL);
+
+ priv = parser->priv;
+
+ root = priv->root;
+ priv->root = NULL;
+
+ return root;
+}
+
+/**
* json_parser_get_current_line:
* @parser: a #JsonParser
*