rbtree: Add _gtk_rbtree_contains()

It's useful in a bunch of places, so split it out
This commit is contained in:
Benjamin Otte 2011-12-10 02:02:29 +01:00
parent 89c90ed193
commit 710a8435cc
2 changed files with 27 additions and 0 deletions

View File

@ -880,6 +880,31 @@ _gtk_rbtree_reorder (GtkRBTree *tree,
g_free (nodes);
}
/**
* _gtk_rbtree_contains:
* @tree: a tree
* @potential_child: a potential child of @tree
*
* Checks if @potential_child is a child (direct or via intermediate
* trees) of @tree.
*
* Returns: %TRUE if @potentitial_child is a child of @tree.
**/
gboolean
_gtk_rbtree_contains (GtkRBTree *tree,
GtkRBTree *potential_child)
{
g_return_val_if_fail (tree != NULL, FALSE);
g_return_val_if_fail (potential_child != NULL, FALSE);
do {
potential_child = potential_child->parent_tree;
if (potential_child == tree)
return TRUE;
} while (potential_child != NULL);
return FALSE;
}
gint
_gtk_rbtree_node_find_offset (GtkRBTree *tree,

View File

@ -117,6 +117,8 @@ gboolean _gtk_rbtree_is_nil (GtkRBNode *node);
void _gtk_rbtree_reorder (GtkRBTree *tree,
gint *new_order,
gint length);
gboolean _gtk_rbtree_contains (GtkRBTree *tree,
GtkRBTree *potential_child);
GtkRBNode *_gtk_rbtree_find_count (GtkRBTree *tree,
gint count);
void _gtk_rbtree_node_set_height (GtkRBTree *tree,