diff options
Diffstat (limited to 'json-glib/json-object.c')
-rw-r--r-- | json-glib/json-object.c | 44 |
1 files changed, 12 insertions, 32 deletions
diff --git a/json-glib/json-object.c b/json-glib/json-object.c index aa4d517..0aa7855 100644 --- a/json-glib/json-object.c +++ b/json-glib/json-object.c @@ -7,7 +7,7 @@ /** * SECTION:json-object - * @short_description: a JSON Object type + * @short_description: a JSON object representation * * #JsonObject is a boxed type representing a JSON object data type. Each * JSON object can have zero or more members, and each member is accessed @@ -19,7 +19,7 @@ struct _JsonObject { GHashTable *members; - volatile guint ref_count; + volatile gint ref_count; }; JsonObject * @@ -32,7 +32,7 @@ json_object_new (void) object->ref_count = 1; object->members = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, - g_free); + (GDestroyNotify) json_node_free); return object; } @@ -57,21 +57,6 @@ json_object_ref (JsonObject *object) return object; } -static void -object_unset_members (gpointer key, - gpointer value, - gpointer user_data) -{ - GValue *gvalue = value; - - /* we copy the contents of the GValues, so we need to unset it - * before actually freeing them along with the hash table - */ - - if (G_VALUE_TYPE (gvalue) != 0) /* we allow unset values */ - g_value_unset (gvalue); -} - /** * json_object_unref: * @object: a #JsonObject @@ -93,7 +78,6 @@ json_object_unref (JsonObject *object) g_atomic_int_compare_and_exchange (&object->ref_count, old_ref, old_ref - 1); else { - g_hash_table_foreach (object->members, object_unset_members, NULL); g_hash_table_destroy (object->members); object->members = NULL; @@ -102,27 +86,23 @@ json_object_unref (JsonObject *object) } void -json_object_add_member (JsonObject *object, - const gchar *member_name, - const GValue *value) +json_object_add_member (JsonObject *object, + const gchar *member_name, + JsonNode *node) { - GValue *copy; - g_return_if_fail (object != NULL); g_return_if_fail (member_name != NULL); - g_return_if_fail (value != NULL); + g_return_if_fail (node != NULL); if (json_object_has_member (object, member_name)) { - g_warning ("JsonObject already has a `%s' member", member_name); + g_warning ("JsonObject already has a `%s' member of type `%s'", + member_name, + json_node_type_name (node)); return; } - copy = g_new (GValue, 1); - g_value_init (copy, G_VALUE_TYPE (value)); - g_value_copy (value, copy); - - g_hash_table_replace (object->members, g_strdup (member_name), copy); + g_hash_table_replace (object->members, g_strdup (member_name), node); } /** @@ -155,7 +135,7 @@ json_object_get_members (JsonObject *object) * Return value: a pointer to the value for the requested object * member, or %NULL */ -GValue * +JsonNode * json_object_get_member (JsonObject *object, const gchar *member_name) { |