[glib: 1/4] GTree: debugging improvements
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 1/4] GTree: debugging improvements
- Date: Tue, 6 Oct 2020 13:43:20 +0000 (UTC)
commit 260e80f1df51c52ced9c8c07ecf25f3b006b0be0
Author: Maciej S. Szmigiero <maciej szmigiero oracle com>
Date: Tue Aug 4 21:23:54 2020 +0200
GTree: debugging improvements
* Add a debug assert checking whether we have really removed all nodes in
g_tree_remove_all(),
* Print a "LEFT" and "RIGHT" headers before printing a particular tree
branch in g_tree_node_dump(),
* Make the whole thing actually buildable again in the debug mode by
conditionally providing g_tree_dump() declaration in glib/gtree.h.
Signed-off-by: Maciej S. Szmigiero <maciej szmigiero oracle com>
glib/gtree.c | 24 +++++++++++++++++++-----
glib/gtree.h | 9 +++++++++
2 files changed, 28 insertions(+), 5 deletions(-)
---
diff --git a/glib/gtree.c b/glib/gtree.c
index 41f2438f1..715863372 100644
--- a/glib/gtree.c
+++ b/glib/gtree.c
@@ -66,8 +66,6 @@
* To destroy a #GTree, use g_tree_destroy().
**/
-#undef G_TREE_DEBUG
-
#define MAX_GTREE_HEIGHT 40
typedef struct _GTreeNode GTreeNode;
@@ -294,11 +292,22 @@ g_tree_remove_all (GTree *tree)
tree->value_destroy_func (node->value);
g_slice_free (GTreeNode, node);
+#ifdef G_TREE_DEBUG
+ g_assert (tree->nnodes > 0);
+ tree->nnodes--;
+#endif
+
node = next;
}
+#ifdef G_TREE_DEBUG
+ g_assert (tree->nnodes == 0);
+#endif
+
tree->root = NULL;
+#ifndef G_TREE_DEBUG
tree->nnodes = 0;
+#endif
}
/**
@@ -1388,17 +1397,22 @@ g_tree_node_dump (GTreeNode *node,
g_print ("%*s%c\n", indent, "", *(char *)node->key);
if (node->left_child)
- g_tree_node_dump (node->left, indent + 2);
+ {
+ g_print ("%*sLEFT\n", indent, "");
+ g_tree_node_dump (node->left, indent + 2);
+ }
else if (node->left)
g_print ("%*s<%c\n", indent + 2, "", *(char *)node->left->key);
if (node->right_child)
- g_tree_node_dump (node->right, indent + 2);
+ {
+ g_print ("%*sRIGHT\n", indent, "");
+ g_tree_node_dump (node->right, indent + 2);
+ }
else if (node->right)
g_print ("%*s>%c\n", indent + 2, "", *(char *)node->right->key);
}
-
void
g_tree_dump (GTree *tree)
{
diff --git a/glib/gtree.h b/glib/gtree.h
index ceb148d6b..bb5c53465 100644
--- a/glib/gtree.h
+++ b/glib/gtree.h
@@ -33,6 +33,8 @@
G_BEGIN_DECLS
+#undef G_TREE_DEBUG
+
typedef struct _GTree GTree;
typedef gboolean (*GTraverseFunc) (gpointer key,
@@ -99,6 +101,13 @@ gint g_tree_height (GTree *tree);
GLIB_AVAILABLE_IN_ALL
gint g_tree_nnodes (GTree *tree);
+#ifdef G_TREE_DEBUG
+/*< private >*/
+#ifndef __GTK_DOC_IGNORE__
+void g_tree_dump (GTree *tree);
+#endif /* !__GTK_DOC_IGNORE__ */
+#endif /* G_TREE_DEBUG */
+
G_END_DECLS
#endif /* __G_TREE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]