From 28928a2f1cbe83a2f1bf699c915daa6eca80f587 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Mon, 15 Oct 2007 10:25:09 +0100 Subject: Add API for removing nodes from arrays and objects Write and document json_object_remove_member() and json_array_remove_element() which can be used to remove a JsonNode from a JsonObject or a JsonArray respectively. This way, the JsonObject and JsonArray are API-complete and the object model can be manipulated in code. --- json-glib/json-array.c | 18 +++++++ json-glib/json-object.c | 17 +++++++ json-glib/json-types.h | 126 +++++++++++++++++++++++++----------------------- 3 files changed, 100 insertions(+), 61 deletions(-) (limited to 'json-glib') diff --git a/json-glib/json-array.c b/json-glib/json-array.c index 70b82dd..7e23621 100644 --- a/json-glib/json-array.c +++ b/json-glib/json-array.c @@ -232,3 +232,21 @@ json_array_add_element (JsonArray *array, g_ptr_array_add (array->elements, node); } + +/** + * json_array_remove_element: + * @array: a #JsonArray + * @index_: the position of the element to be removed + * + * Removes the #JsonNode inside @array at @index_ freeing its allocated + * resources. + */ +void +json_array_remove_element (JsonArray *array, + guint index_) +{ + g_return_if_fail (array != NULL); + g_return_if_fail (index_ < array->elements->len); + + json_node_free (g_ptr_array_remove_index (array->elements, index_)); +} diff --git a/json-glib/json-object.c b/json-glib/json-object.c index 8286fd8..8eb41fc 100644 --- a/json-glib/json-object.c +++ b/json-glib/json-object.c @@ -235,3 +235,20 @@ json_object_get_size (JsonObject *object) return g_hash_table_size (object->members); } + +/** + * json_object_remove_member: + * @object: a #JsonObject + * @member_name: the name of the member to remove + * + * Removes @member_name from @object, freeing its allocated resources. + */ +void +json_object_remove_member (JsonObject *object, + const gchar *member_name) +{ + g_return_if_fail (object != NULL); + g_return_if_fail (member_name != NULL); + + g_hash_table_remove (object->members, member_name); +} diff --git a/json-glib/json-types.h b/json-glib/json-types.h index a95f7fd..26086cb 100644 --- a/json-glib/json-types.h +++ b/json-glib/json-types.h @@ -89,67 +89,71 @@ struct _JsonNode JsonNode *parent; }; -JsonNode * json_node_new (JsonNodeType type); -JsonNode * json_node_copy (JsonNode *node); -void json_node_free (JsonNode *node); - -void json_node_set_object (JsonNode *node, - JsonObject *object); -void json_node_take_object (JsonNode *node, - JsonObject *object); -JsonObject * json_node_get_object (JsonNode *node); -JsonObject * json_node_dup_object (JsonNode *node); -void json_node_set_array (JsonNode *node, - JsonArray *array); -void json_node_take_array (JsonNode *node, - JsonArray *array); -JsonArray * json_node_get_array (JsonNode *node); -JsonArray * json_node_dup_array (JsonNode *node); -void json_node_set_value (JsonNode *node, - const GValue *value); -void json_node_get_value (JsonNode *node, - GValue *value); -void json_node_set_string (JsonNode *node, - const gchar *value); -G_CONST_RETURN gchar *json_node_get_string (JsonNode *node); -gchar * json_node_dup_string (JsonNode *node); -void json_node_set_int (JsonNode *node, - gint value); -gint json_node_get_int (JsonNode *node); -void json_node_set_double (JsonNode *node, - gdouble value); -gdouble json_node_get_double (JsonNode *node); -void json_node_set_boolean (JsonNode *node, - gboolean value); -gboolean json_node_get_boolean (JsonNode *node); -JsonNode * json_node_get_parent (JsonNode *node); -G_CONST_RETURN gchar *json_node_type_name (JsonNode *node); - -GType json_object_get_type (void) G_GNUC_CONST; -JsonObject * json_object_new (void); -JsonObject * json_object_ref (JsonObject *object); -void json_object_unref (JsonObject *object); -void json_object_add_member (JsonObject *object, - const gchar *member_name, - JsonNode *node); -GList * json_object_get_members (JsonObject *object); -JsonNode * json_object_get_member (JsonObject *object, - const gchar *member_name); -gboolean json_object_has_member (JsonObject *object, - const gchar *member_name); -guint json_object_get_size (JsonObject *object); - -GType json_array_get_type (void) G_GNUC_CONST; -JsonArray * json_array_new (void); -JsonArray * json_array_sized_new (guint n_elements); -JsonArray * json_array_ref (JsonArray *array); -void json_array_unref (JsonArray *array); -void json_array_add_element (JsonArray *array, - JsonNode *node); -GList * json_array_get_elements (JsonArray *array); -JsonNode * json_array_get_element (JsonArray *array, - guint index_); -guint json_array_get_length (JsonArray *array); +JsonNode * json_node_new (JsonNodeType type); +JsonNode * json_node_copy (JsonNode *node); +void json_node_free (JsonNode *node); + +void json_node_set_object (JsonNode *node, + JsonObject *object); +void json_node_take_object (JsonNode *node, + JsonObject *object); +JsonObject * json_node_get_object (JsonNode *node); +JsonObject * json_node_dup_object (JsonNode *node); +void json_node_set_array (JsonNode *node, + JsonArray *array); +void json_node_take_array (JsonNode *node, + JsonArray *array); +JsonArray * json_node_get_array (JsonNode *node); +JsonArray * json_node_dup_array (JsonNode *node); +void json_node_set_value (JsonNode *node, + const GValue *value); +void json_node_get_value (JsonNode *node, + GValue *value); +void json_node_set_string (JsonNode *node, + const gchar *value); +G_CONST_RETURN gchar *json_node_get_string (JsonNode *node); +gchar * json_node_dup_string (JsonNode *node); +void json_node_set_int (JsonNode *node, + gint value); +gint json_node_get_int (JsonNode *node); +void json_node_set_double (JsonNode *node, + gdouble value); +gdouble json_node_get_double (JsonNode *node); +void json_node_set_boolean (JsonNode *node, + gboolean value); +gboolean json_node_get_boolean (JsonNode *node); +JsonNode * json_node_get_parent (JsonNode *node); +G_CONST_RETURN gchar *json_node_type_name (JsonNode *node); + +GType json_object_get_type (void) G_GNUC_CONST; +JsonObject * json_object_new (void); +JsonObject * json_object_ref (JsonObject *object); +void json_object_unref (JsonObject *object); +void json_object_add_member (JsonObject *object, + const gchar *member_name, + JsonNode *node); +GList * json_object_get_members (JsonObject *object); +JsonNode * json_object_get_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, + const gchar *member_name); +guint json_object_get_size (JsonObject *object); + +GType json_array_get_type (void) G_GNUC_CONST; +JsonArray * json_array_new (void); +JsonArray * json_array_sized_new (guint n_elements); +JsonArray * json_array_ref (JsonArray *array); +void json_array_unref (JsonArray *array); +void json_array_add_element (JsonArray *array, + JsonNode *node); +GList * json_array_get_elements (JsonArray *array); +JsonNode * json_array_get_element (JsonArray *array, + guint index_); +void json_array_remove_element (JsonArray *array, + guint index_); +guint json_array_get_length (JsonArray *array); G_END_DECLS -- cgit v1.2.1