summaryrefslogtreecommitdiff
path: root/json-glib
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@openedhand.com>2007-11-21 20:41:42 +0000
committerEmmanuele Bassi <ebassi@openedhand.com>2007-11-21 20:41:42 +0000
commitcf2eceeb69ccbda4f2ff583ee7869c7fd3cda603 (patch)
treecb53f0d635d9556b35f2fc66fd43020110baeaa8 /json-glib
parent5a4a8761af0562fbee8e1a56ce1771a20c1ad8e3 (diff)
downloadjson-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.
Diffstat (limited to 'json-glib')
-rw-r--r--json-glib/json-array.c29
-rw-r--r--json-glib/json-object.c29
-rw-r--r--json-glib/json-types.h4
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);