summaryrefslogtreecommitdiff
path: root/json-glib/json-path.c
diff options
context:
space:
mode:
Diffstat (limited to 'json-glib/json-path.c')
-rw-r--r--json-glib/json-path.c123
1 files changed, 62 insertions, 61 deletions
diff --git a/json-glib/json-path.c b/json-glib/json-path.c
index 56a6858..f0f9fc5 100644
--- a/json-glib/json-path.c
+++ b/json-glib/json-path.c
@@ -329,6 +329,66 @@ json_path_new (void)
return g_object_new (JSON_TYPE_PATH, NULL);
}
+static void
+json_path_foreach_print (gpointer data,
+ gpointer user_data)
+{
+ PathNode *cur_node = data;
+ GString *buf = user_data;
+
+ switch (cur_node->node_type)
+ {
+ case JSON_PATH_NODE_ROOT:
+ g_string_append (buf, "<root");
+ break;
+
+ case JSON_PATH_NODE_CHILD_MEMBER:
+ g_string_append_printf (buf, "<member '%s'", cur_node->data.member_name);
+ break;
+
+ case JSON_PATH_NODE_CHILD_ELEMENT:
+ g_string_append_printf (buf, "<element '%d'", cur_node->data.element_index);
+ break;
+
+ case JSON_PATH_NODE_RECURSIVE_DESCENT:
+ g_string_append (buf, "<recursive descent");
+ break;
+
+ case JSON_PATH_NODE_WILDCARD_MEMBER:
+ g_string_append (buf, "<wildcard member");
+ break;
+
+ case JSON_PATH_NODE_WILDCARD_ELEMENT:
+ g_string_append (buf, "<wildcard element");
+ break;
+
+ case JSON_PATH_NODE_ELEMENT_SET:
+ {
+ int i;
+
+ g_string_append (buf, "<element set ");
+ for (i = 0; i < cur_node->data.set.n_indices - 1; i++)
+ g_string_append_printf (buf, "'%d', ", cur_node->data.set.indices[i]);
+
+ g_string_append_printf (buf, "'%d'", cur_node->data.set.indices[i]);
+ }
+ break;
+
+ case JSON_PATH_NODE_ELEMENT_SLICE:
+ g_string_append_printf (buf, "<slice start '%d', end '%d', step '%d'",
+ cur_node->data.slice.start,
+ cur_node->data.slice.end,
+ cur_node->data.slice.step);
+ break;
+
+ default:
+ g_string_append (buf, "<unknown node");
+ break;
+ }
+
+ g_string_append (buf, ">");
+}
+
/**
* json_path_compile:
* @path: a #JsonPath
@@ -636,73 +696,14 @@ json_path_compile (JsonPath *path,
{
GString *buf = g_string_new (NULL);
- for (l = nodes; l != NULL; l = l->next)
- {
- PathNode *cur_node = l->data;
-
- switch (cur_node->node_type)
- {
- case JSON_PATH_NODE_ROOT:
- g_string_append (buf, "<root");
- break;
-
- case JSON_PATH_NODE_CHILD_MEMBER:
- g_string_append_printf (buf, "<member '%s'", cur_node->data.member_name);
- break;
-
- case JSON_PATH_NODE_CHILD_ELEMENT:
- g_string_append_printf (buf, "<element '%d'", cur_node->data.element_index);
- break;
-
- case JSON_PATH_NODE_RECURSIVE_DESCENT:
- g_string_append (buf, "<recursive descent");
- break;
-
- case JSON_PATH_NODE_WILDCARD_MEMBER:
- g_string_append (buf, "<wildcard member");
- break;
-
- case JSON_PATH_NODE_WILDCARD_ELEMENT:
- g_string_append (buf, "<wildcard element");
- break;
-
- case JSON_PATH_NODE_ELEMENT_SET:
- {
- int i;
-
- g_string_append (buf, "<element set ");
- for (i = 0; i < cur_node->data.set.n_indices - 1; i++)
- g_string_append_printf (buf, "'%d', ", cur_node->data.set.indices[i]);
-
- g_string_append_printf (buf, "'%d'", cur_node->data.set.indices[i]);
- }
- break;
-
- case JSON_PATH_NODE_ELEMENT_SLICE:
- g_string_append_printf (buf, "<slice start '%d', end '%d', step '%d'",
- cur_node->data.slice.start,
- cur_node->data.slice.end,
- cur_node->data.slice.step);
- break;
-
- default:
- g_string_append (buf, "<unknown node");
- break;
- }
-
- if (l->next != NULL)
- g_string_append (buf, ">, ");
- else
- g_string_append (buf, ">");
- }
+ g_list_foreach (nodes, json_path_foreach_print, buf);
g_message ("[PATH] " G_STRLOC ": expression '%s' => '%s'", expression, buf->str);
g_string_free (buf, TRUE);
}
#endif /* JSON_ENABLE_DEBUG */
- if (path->nodes != NULL)
- g_list_free_full (path->nodes, path_node_free);
+ g_list_free_full (path->nodes, path_node_free);
path->nodes = nodes;
path->is_compiled = (path->nodes != NULL);