Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 2503 → Rev 2504

/trunk/kernel/generic/src/adt/avl.c
685,24 → 685,44
return true;
}
 
static void _avltree_walk(avltree_node_t *node, avltree_walker_t walker)
/** Walk a subtree of an AVL tree in-order and apply a supplied walker on each
* visited node.
*
* @param node Node representing the root of an AVL subtree to be
* walked.
* @param walker Walker function that will be appliad on each visited
* node.
* @param arg Argument for the walker.
*
* @return Zero if the walk should stop or non-zero otherwise.
*/
static bool _avltree_walk(avltree_node_t *node, avltree_walker_t walker,
void *arg)
{
if (node->lft)
_avltree_walk(node->lft, walker);
walker(node);
if (node->rgt)
_avltree_walk(node->rgt, walker);
if (node->lft) {
if (!_avltree_walk(node->lft, walker, arg))
return false;
}
if (!walker(node, arg))
return false;
if (node->rgt) {
if (!_avltree_walk(node->rgt, walker, arg))
return false;
}
return true;
}
 
/** Walk the AVL tree and apply the walker function on each visited node.
/** Walk the AVL tree in-order and apply the walker function on each visited
* node.
*
* @param t AVL tree to be walked.
* @param walker Walker function that will be called on each visited
* node.
* @param arg Argument for the walker.
*/
void avltree_walk(avltree_t *t, avltree_walker_t walker)
void avltree_walk(avltree_t *t, avltree_walker_t walker, void *arg)
{
_avltree_walk(t->root, walker);
_avltree_walk(t->root, walker, arg);
}
 
/** @}