[json-glib] generator: Add an GString-based method
- From: Garrett Regier <gregier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [json-glib] generator: Add an GString-based method
- Date: Mon, 10 Jul 2017 14:18:53 +0000 (UTC)
commit 0c01de6d988539a3929f0ee9bbc39f1245ae0cdf
Author: Garrett Regier <garrettregier gmail com>
Date: Fri Jun 16 17:14:35 2017 -0700
generator: Add an GString-based method
This allows callers to avoid extra allocations
when dumping to a preexisting string.
https://bugzilla.gnome.org/show_bug.cgi?id=773504
doc/json-glib-sections.txt | 1 +
json-glib/json-generator.c | 41 ++++++++++++++++++++++++++++++-----------
json-glib/json-generator.h | 4 ++++
3 files changed, 35 insertions(+), 11 deletions(-)
---
diff --git a/doc/json-glib-sections.txt b/doc/json-glib-sections.txt
index 047f03e..44942c4 100644
--- a/doc/json-glib-sections.txt
+++ b/doc/json-glib-sections.txt
@@ -227,6 +227,7 @@ json_generator_get_indent_char
<SUBSECTION>
json_generator_to_file
json_generator_to_data
+json_generator_to_gstring
json_generator_to_stream
<SUBSECTION Standard>
diff --git a/json-glib/json-generator.c b/json-glib/json-generator.c
index 0afe881..346be65 100644
--- a/json-glib/json-generator.c
+++ b/json-glib/json-generator.c
@@ -478,6 +478,35 @@ json_generator_new (void)
}
/**
+ * json_generator_to_gstring:
+ * @generator: a #JsonGenerator
+ * @string: a #GString
+ *
+ * Generates a JSON data stream from @generator
+ * and appends it to @string.
+ *
+ * Return value: (transfer none): a #GString holding a JSON data stream.
+ * Use g_string_free() to free the allocated resources.
+ *
+ * Since: 1.4
+ */
+GString *
+json_generator_to_gstring (JsonGenerator *generator,
+ GString *string)
+{
+ JsonNode *root;
+
+ g_return_val_if_fail (JSON_IS_GENERATOR (generator), NULL);
+ g_return_val_if_fail (string != NULL, NULL);
+
+ root = generator->priv->root;
+ if (root != NULL)
+ dump_node (generator, string, 0, NULL, root);
+
+ return string;
+}
+
+/**
* json_generator_to_data:
* @generator: a #JsonGenerator
* @length: (out): return location for the length of the returned
@@ -493,22 +522,12 @@ gchar *
json_generator_to_data (JsonGenerator *generator,
gsize *length)
{
- JsonNode *root;
GString *string;
g_return_val_if_fail (JSON_IS_GENERATOR (generator), NULL);
- root = generator->priv->root;
- if (!root)
- {
- if (length)
- *length = 0;
-
- return NULL;
- }
-
string = g_string_new ("");
- dump_node (generator, string, 0, NULL, root);
+ json_generator_to_gstring (generator, string);
if (length)
*length = string->len;
diff --git a/json-glib/json-generator.h b/json-glib/json-generator.h
index 194495a..30a28dc 100644
--- a/json-glib/json-generator.h
+++ b/json-glib/json-generator.h
@@ -102,6 +102,10 @@ void json_generator_set_root (JsonGenerator *generator,
JSON_AVAILABLE_IN_1_0
JsonNode * json_generator_get_root (JsonGenerator *generator);
+JSON_AVAILABLE_IN_1_4
+GString *json_generator_to_gstring (JsonGenerator *generator,
+ GString *string);
+
JSON_AVAILABLE_IN_1_0
gchar * json_generator_to_data (JsonGenerator *generator,
gsize *length);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]