[json-glib] [node] Add JsonNode.set_parent()



commit 7b4bb80930f12a366d5e5a5eea5b398972cd4891
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Sun Sep 6 17:31:41 2009 +0100

    [node] Add JsonNode.set_parent()
    
    Add the setter for JsonNode:parent, to be used in JsonParser instead
    of directly accessing the JsonNode structure.

 doc/reference/json-glib-sections.txt |    1 +
 json-glib/json-node.c                |   18 ++++++++++++++++++
 json-glib/json-parser.c              |   14 +++++++-------
 json-glib/json-types.h               |    2 ++
 tests/test-parser.c                  |   10 ++++++++++
 5 files changed, 38 insertions(+), 7 deletions(-)
---
diff --git a/doc/reference/json-glib-sections.txt b/doc/reference/json-glib-sections.txt
index 6872eaa..86a049c 100644
--- a/doc/reference/json-glib-sections.txt
+++ b/doc/reference/json-glib-sections.txt
@@ -116,6 +116,7 @@ json_node_get_string
 json_node_dup_string
 
 <SUBSECTION>
+json_node_set_parent
 json_node_get_parent
 json_node_type_name
 json_node_get_value_type
diff --git a/json-glib/json-node.c b/json-glib/json-node.c
index e1e457a..a3562f6 100644
--- a/json-glib/json-node.c
+++ b/json-glib/json-node.c
@@ -485,6 +485,24 @@ json_node_type_name (JsonNode *node)
 }
 
 /**
+ * json_node_set_parent:
+ * @node: a #JsonNode
+ * @parent: the parent #JsonNode of @node
+ *
+ * Sets the parent #JsonNode of @node
+ *
+ * Since: 0.8
+ */
+void
+json_node_set_parent (JsonNode *node,
+                      JsonNode *parent)
+{
+  g_return_if_fail (node != NULL);
+
+  node->parent = parent;
+}
+
+/**
  * json_node_get_parent:
  * @node: a #JsonNode
  *
diff --git a/json-glib/json-parser.c b/json-glib/json-parser.c
index df892de..6772931 100644
--- a/json-glib/json-parser.c
+++ b/json-glib/json-parser.c
@@ -445,7 +445,7 @@ json_parse_array (JsonParser  *parser,
             }
 
           json_array_add_element (array, node);
-          node->parent = priv->current_node;
+          json_node_set_parent (node, priv->current_node);
 
           g_signal_emit (parser, parser_signals[ARRAY_ELEMENT], 0,
                          array,
@@ -486,7 +486,7 @@ json_parse_array (JsonParser  *parser,
             }
 
           json_array_add_element (array, node);
-          node->parent = priv->current_node;
+          json_node_set_parent (node, priv->current_node);
 
           g_signal_emit (parser, parser_signals[ARRAY_ELEMENT], 0,
                          array,
@@ -515,7 +515,7 @@ json_parse_array (JsonParser  *parser,
         }
 
       json_array_add_element (array, node);
-      node->parent = priv->current_node;
+      json_node_set_parent (node, priv->current_node);
 
       g_signal_emit (parser, parser_signals[ARRAY_ELEMENT], 0,
                      array,
@@ -622,7 +622,7 @@ json_parse_object (JsonParser *parser,
             }
 
           json_object_set_member (object, name, node);
-          node->parent = priv->current_node;
+          json_node_set_parent (node, priv->current_node);
 
           g_signal_emit (parser, parser_signals[OBJECT_MEMBER], 0,
                          object,
@@ -665,7 +665,7 @@ json_parse_object (JsonParser *parser,
             }
 
           json_object_set_member (object, name, node);
-          node->parent = priv->current_node;
+          json_node_set_parent (node, priv->current_node);
           
           g_signal_emit (parser, parser_signals[OBJECT_MEMBER], 0,
                          object,
@@ -697,8 +697,8 @@ json_parse_object (JsonParser *parser,
         }
 
       json_object_set_member (object, name, node);
-      node->parent = priv->current_node;
-          
+      json_node_set_parent (node, priv->current_node);
+
       g_signal_emit (parser, parser_signals[OBJECT_MEMBER], 0,
                      object,
                      name);
diff --git a/json-glib/json-types.h b/json-glib/json-types.h
index 49e562c..3ea885f 100644
--- a/json-glib/json-types.h
+++ b/json-glib/json-types.h
@@ -131,6 +131,8 @@ JsonNode *            json_node_copy            (JsonNode     *node);
 void                  json_node_free            (JsonNode     *node);
 JsonNodeType          json_node_get_node_type   (JsonNode     *node);
 GType                 json_node_get_value_type  (JsonNode     *node);
+void                  json_node_set_parent      (JsonNode     *node,
+                                                 JsonNode     *parent);
 JsonNode *            json_node_get_parent      (JsonNode     *node);
 G_CONST_RETURN gchar *json_node_type_name       (JsonNode     *node);
 
diff --git a/tests/test-parser.c b/tests/test-parser.c
index ac22967..460b772 100644
--- a/tests/test-parser.c
+++ b/tests/test-parser.c
@@ -154,6 +154,7 @@ test_base_value (void)
 
           root = json_parser_get_root (parser);
           g_assert (root != NULL);
+          g_assert (json_node_get_parent (root) == NULL);
 
           if (g_test_verbose ())
             g_print ("checking root node is of the desired type %s...\n",
@@ -198,6 +199,7 @@ test_empty_array (void)
         g_print ("checking root node is an array...\n");
       root = json_parser_get_root (parser);
       g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_ARRAY);
+      g_assert (json_node_get_parent (root) == NULL);
 
       array = json_node_get_array (root);
       g_assert (array != NULL);
@@ -246,6 +248,7 @@ test_simple_array (void)
             g_print ("checking root node is an array...\n");
           root = json_parser_get_root (parser);
           g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_ARRAY);
+          g_assert (json_node_get_parent (root) == NULL);
 
           array = json_node_get_array (root);
           g_assert (array != NULL);
@@ -261,6 +264,7 @@ test_simple_array (void)
                      g_type_name (test_simple_arrays[i].gtype));
           node = json_array_get_element (array, test_simple_arrays[i].element);
           g_assert (node != NULL);
+          g_assert (json_node_get_parent (node) == root);
           g_assert_cmpint (JSON_NODE_TYPE (node), ==, test_simple_arrays[i].type);
           g_assert_cmpint (json_node_get_value_type (node), ==, test_simple_arrays[i].gtype);
         }
@@ -305,6 +309,7 @@ test_nested_array (void)
             g_print ("checking root node is an array...\n");
           root = json_parser_get_root (parser);
           g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_ARRAY);
+          g_assert (json_node_get_parent (root) == NULL);
 
           array = json_node_get_array (root);
           g_assert (array != NULL);
@@ -348,7 +353,9 @@ test_empty_object (void)
       if (g_test_verbose ())
         g_print ("checking root node is an object...\n");
       root = json_parser_get_root (parser);
+      g_assert (json_node_get_parent (root) == NULL);
       g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_OBJECT);
+      g_assert (json_node_get_parent (root) == NULL);
 
       object = json_node_get_object (root);
       g_assert (object != NULL);
@@ -397,6 +404,7 @@ test_simple_object (void)
             g_print ("checking root node is an object...\n");
           root = json_parser_get_root (parser);
           g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_OBJECT);
+          g_assert (json_node_get_parent (root) == NULL);
 
           object = json_node_get_object (root);
           g_assert (object != NULL);
@@ -412,6 +420,7 @@ test_simple_object (void)
                      g_type_name (test_simple_objects[i].gtype));
           node = json_object_get_member (object, test_simple_objects[i].member);
           g_assert (node != NULL);
+          g_assert (json_node_get_parent (node) == root);
           g_assert_cmpint (JSON_NODE_TYPE (node), ==, test_simple_objects[i].type);
           g_assert_cmpint (json_node_get_value_type (node), ==, test_simple_objects[i].gtype);
         }
@@ -456,6 +465,7 @@ test_nested_object (void)
             g_print ("checking root node is an object...\n");
           root = json_parser_get_root (parser);
           g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_OBJECT);
+          g_assert (json_node_get_parent (root) == NULL);
 
           object = json_node_get_object (root);
           g_assert (object != NULL);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]