diff options
| author | Garrett Regier <garrettregier@gmail.com> | 2017-06-16 17:14:35 -0700 |
|---|---|---|
| committer | Garrett Regier <garrettregier@gmail.com> | 2017-06-16 17:16:32 -0700 |
| commit | 0c01de6d988539a3929f0ee9bbc39f1245ae0cdf (patch) | |
| tree | 89d63c55b34944d209bfbef24c15328d6d8c10a6 | |
| parent | d78ad648942637fb9212d1d93670509d4c7f687b (diff) | |
| download | json-glib-0c01de6d988539a3929f0ee9bbc39f1245ae0cdf.tar.gz | |
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
| -rw-r--r-- | doc/json-glib-sections.txt | 1 | ||||
| -rw-r--r-- | json-glib/json-generator.c | 41 | ||||
| -rw-r--r-- | 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); |
