[json-glib] reader: Add accessor for the member name



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]