diff options
| author | Emmanuele Bassi <ebassi@openedhand.com> | 2007-11-21 20:41:42 +0000 |
|---|---|---|
| committer | Emmanuele Bassi <ebassi@openedhand.com> | 2007-11-21 20:41:42 +0000 |
| commit | cf2eceeb69ccbda4f2ff583ee7869c7fd3cda603 (patch) | |
| tree | cb53f0d635d9556b35f2fc66fd43020110baeaa8 | |
| parent | 5a4a8761af0562fbee8e1a56ce1771a20c1ad8e3 (diff) | |
| download | json-glib-cf2eceeb69ccbda4f2ff583ee7869c7fd3cda603.tar.gz | |
Add API to retrieve copies of the nodes inside objects and arrays
Getting copies of the nodes might work better for high level languages
binding the JSON-GLib API, because they can manage the lifetime of the
returned values using their own rules.
| -rw-r--r-- | json-glib/json-array.c | 29 | ||||
| -rw-r--r-- | json-glib/json-object.c | 29 | ||||
| -rw-r--r-- | json-glib/json-types.h | 4 |
3 files changed, 62 insertions, 0 deletions
diff --git a/json-glib/json-array.c b/json-glib/json-array.c index 530674a..d699bed 100644 --- a/json-glib/json-array.c +++ b/json-glib/json-array.c @@ -180,6 +180,35 @@ json_array_get_elements (JsonArray *array) } /** + * json_array_dup_element: + * @array: a #JsonArray + * @index_: the index of the element to retrieve + * + * Retrieves a copy of the #JsonNode containing the value of the + * element at @index_ inside a #JsonArray + * + * Return value: a copy of the #JsonNode at the requested index. + * Use json_node_free() when done. + * + * Since: 0.6 + */ +JsonNode * +json_array_dup_element (JsonArray *array, + guint index_) +{ + JsonNode *retval; + + g_return_val_if_fail (array != NULL, NULL); + g_return_val_if_fail (index_ < array->elements->len, NULL); + + retval = json_array_get_element (array, index_); + if (!retval) + return NULL; + + return json_node_copy (retval); +} + +/** * json_array_get_element: * @array: a #JsonArray * @index_: the index of the element to retrieve diff --git a/json-glib/json-object.c b/json-glib/json-object.c index c6eeff1..e0b4181 100644 --- a/json-glib/json-object.c +++ b/json-glib/json-object.c @@ -254,6 +254,35 @@ json_object_get_values (JsonObject *object) } /** + * json_object_dup_member: + * @object: a #JsonObject + * @member_name: the name of the JSON object member to access + * + * Retrieves a copy of the #JsonNode containing the value of @member_name + * inside a #JsonObject + * + * Return value: a copy of the node for the requested object member + * or %NULL. Use json_node_free() when done. + * + * Since: 0.6 + */ +JsonNode * +json_object_dup_member (JsonObject *object, + const gchar *member_name) +{ + JsonNode *retval; + + g_return_val_if_fail (object != NULL, NULL); + g_return_val_if_fail (member_name != NULL, NULL); + + retval = json_object_get_member (object, member_name); + if (!retval) + return NULL; + + return json_node_copy (retval); +} + +/** * json_object_get_member: * @object: a #JsonObject * @member_name: the name of the JSON object member to access diff --git a/json-glib/json-types.h b/json-glib/json-types.h index 8cc72f0..67cf454 100644 --- a/json-glib/json-types.h +++ b/json-glib/json-types.h @@ -140,6 +140,8 @@ void json_object_add_member (JsonObject *object, GList * json_object_get_members (JsonObject *object); JsonNode * json_object_get_member (JsonObject *object, const gchar *member_name); +JsonNode * json_object_dup_member (JsonObject *object, + const gchar *member_name); gboolean json_object_has_member (JsonObject *object, const gchar *member_name); void json_object_remove_member (JsonObject *object, @@ -157,6 +159,8 @@ void json_array_add_element (JsonArray *array, GList * json_array_get_elements (JsonArray *array); JsonNode * json_array_get_element (JsonArray *array, guint index_); +JsonNode * json_array_dup_element (JsonArray *array, + guint index_); void json_array_remove_element (JsonArray *array, guint index_); guint json_array_get_length (JsonArray *array); |
