void
avl_init(struct avl_tree *tree, avl_tree_comp comp, bool allow_dups, void *ptr)
{
- list_init_head(&tree->list_head);
+ INIT_LIST_HEAD(&tree->list_head);
tree->root = NULL;
tree->count = 0;
tree->comp = comp;
tree->cmp_ptr = ptr;
}
+static inline struct avl_node *avl_next(struct avl_node *node)
+{
+ return list_entry(node->list.next, struct avl_node, list);
+}
+
/**
* Finds a node in an avl-tree with a certain key
* @param tree pointer to avl-tree
new->leader = true;
if (tree->root == NULL) {
- list_add_head(&tree->list_head, &new->list);
+ list_add(&new->list, &tree->list_head);
tree->root = new;
tree->count = 1;
return 0;
last = node;
while (!list_is_last(&last->list, &tree->list_head)) {
- next = list_next_element(last, list);
+ next = avl_next(last);
if (next->leader) {
break;
}
if (node->leader) {
if (tree->allow_dups
&& !list_is_last(&node->list, &tree->list_head)
- && !(next = list_next_element(node, list))->leader) {
+ && !(next = avl_next(node))->leader) {
next->leader = true;
next->balance = node->balance;
static void
avl_insert_before(struct avl_tree *tree, struct avl_node *pos_node, struct avl_node *node)
{
- list_add_before(&pos_node->list, &node->list);
+ list_add_tail(&node->list, &pos_node->list);
tree->count++;
}
static void
avl_insert_after(struct avl_tree *tree, struct avl_node *pos_node, struct avl_node *node)
{
- list_add_after(&pos_node->list, &node->list);
+ list_add(&node->list, &pos_node->list);
tree->count++;
}
static void
avl_remove(struct avl_tree *tree, struct avl_node *node)
{
- list_remove(&node->list);
+ list_del(&node->list);
tree->count--;
}