mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 19:36:18 +01:00
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>
This commit is contained in:
parent
5017de6567
commit
260e80f1df
24
glib/gtree.c
24
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)
|
||||
{
|
||||
|
@ -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__ */
|
||||
|
Loading…
Reference in New Issue
Block a user