[json-glib] reader: Add accessor for the member name
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [json-glib] reader: Add accessor for the member name
- Date: Sun, 6 Feb 2011 12:23:53 +0000 (UTC)
commit 2c5f4563c54fa273ffd8dbe02b60a12c4b54b977
Author: Emmanuele Bassi <ebassi linux intel com>
Date: Sun Feb 6 12:22:49 2011 +0000
reader: Add accessor for the member name
This should allow easy access to the member name during iteration.
doc/reference/json-glib-sections.txt | 1 +
json-glib/json-glib.symbols | 1 +
json-glib/json-reader.c | 32 ++++++++++++++++++++++++++++++++
json-glib/json-reader.h | 1 +
json-glib/tests/reader-test.c | 1 +
5 files changed, 36 insertions(+), 0 deletions(-)
---
diff --git a/doc/reference/json-glib-sections.txt b/doc/reference/json-glib-sections.txt
index 9d3bacb..de2b990 100644
--- a/doc/reference/json-glib-sections.txt
+++ b/doc/reference/json-glib-sections.txt
@@ -330,6 +330,7 @@ json_reader_end_member
json_reader_is_object
json_reader_count_members
json_reader_list_members
+json_reader_get_member_name
<SUBSECTION>
json_reader_is_value
json_reader_get_value
diff --git a/json-glib/json-glib.symbols b/json-glib/json-glib.symbols
index 06d0f63..40dbe7b 100644
--- a/json-glib/json-glib.symbols
+++ b/json-glib/json-glib.symbols
@@ -142,6 +142,7 @@ json_reader_get_boolean_value
json_reader_get_double_value
json_reader_get_error
json_reader_get_int_value
+json_reader_get_member_name
json_reader_get_null_value
json_reader_get_string_value
json_reader_get_type
diff --git a/json-glib/json-reader.c b/json-glib/json-reader.c
index 8262def..a4fa14e 100644
--- a/json-glib/json-reader.c
+++ b/json-glib/json-reader.c
@@ -91,6 +91,8 @@ struct _JsonReaderPrivate
JsonNode *current_node;
JsonNode *previous_node;
+ gchar *current_member;
+
GError *error;
};
@@ -493,11 +495,13 @@ json_reader_read_element (JsonReader *reader,
index_);
priv->previous_node = priv->current_node;
+ g_free (priv->current_member);
members = json_object_get_members (object);
name = g_list_nth_data (members, index_);
priv->current_node = json_object_get_member (object, name);
+ priv->current_member = g_strdup (name);
g_list_free (members);
}
@@ -539,6 +543,9 @@ json_reader_end_element (JsonReader *reader)
else
tmp = NULL;
+ g_free (priv->current_member);
+ priv->current_member = NULL;
+
priv->current_node = priv->previous_node;
priv->previous_node = tmp;
}
@@ -639,8 +646,11 @@ json_reader_read_member (JsonReader *reader,
"object at the current position.",
member_name);
+ g_free (priv->current_member);
+
priv->previous_node = priv->current_node;
priv->current_node = json_object_get_member (object, member_name);
+ priv->current_member = g_strdup (member_name);
return TRUE;
}
@@ -673,6 +683,9 @@ json_reader_end_member (JsonReader *reader)
else
tmp = NULL;
+ g_free (priv->current_member);
+ priv->current_member = NULL;
+
priv->current_node = priv->previous_node;
priv->previous_node = tmp;
}
@@ -901,3 +914,22 @@ json_reader_get_null_value (JsonReader *reader)
return JSON_NODE_HOLDS_NULL (reader->priv->current_node);
}
+
+/**
+ * json_reader_get_member_name:
+ * @reader: a #JsonReader
+ *
+ * Retrieves the name of the current member.
+ *
+ * Return value: (transfer none): the name of the member, or %NULL
+ *
+ * Since: 0.14
+ */
+G_CONST_RETURN gchar *
+json_reader_get_member_name (JsonReader *reader)
+{
+ g_return_val_if_fail (JSON_IS_READER (reader), NULL);
+ json_reader_return_val_if_error_set (reader, NULL);
+
+ return reader->priv->current_member;
+}
diff --git a/json-glib/json-reader.h b/json-glib/json-reader.h
index d6d39fb..6cea36b 100644
--- a/json-glib/json-reader.h
+++ b/json-glib/json-reader.h
@@ -127,6 +127,7 @@ gboolean json_reader_read_member (JsonReader *reader,
void json_reader_end_member (JsonReader *reader);
gint json_reader_count_members (JsonReader *reader);
gchar ** json_reader_list_members (JsonReader *reader);
+G_CONST_RETURN gchar * json_reader_get_member_name (JsonReader *reader);
gboolean json_reader_is_value (JsonReader *reader);
JsonNode * json_reader_get_value (JsonReader *reader);
diff --git a/json-glib/tests/reader-test.c b/json-glib/tests/reader-test.c
index e92908e..c884ca3 100644
--- a/json-glib/tests/reader-test.c
+++ b/json-glib/tests/reader-test.c
@@ -59,6 +59,7 @@ test_base_object (void)
g_assert (json_reader_get_error (reader) == NULL);
g_assert (json_reader_read_element (reader, 2));
+ g_assert_cmpstr (json_reader_get_member_name (reader), ==, "blah");
g_assert (json_reader_is_value (reader));
g_assert_cmpint (json_reader_get_int_value (reader), ==, 47);
json_reader_end_element (reader);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]