X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=lib%2Favl_tree.c;h=8bb06cbf02fb82983ee14b9cedd529c0d9a4a79c;hb=0e6856b1379e278aa5ed116d0911851339a6064c;hp=65df7b79f946a0e5c7a07631714b6187cb8467a0;hpb=e449d94caef963809d417f16497f6f978e10d731;p=tinc diff --git a/lib/avl_tree.c b/lib/avl_tree.c index 65df7b79..8bb06cbf 100644 --- a/lib/avl_tree.c +++ b/lib/avl_tree.c @@ -1,9 +1,9 @@ /* avl_tree.c -- avl_ tree and linked list convenience Copyright (C) 1998 Michael H. Buselli - 2000-2003 Ivo Timmermans , - 2000-2003 Guus Sliepen - 2000-2003 Wessel Dankers + 2000-2005 Ivo Timmermans, + 2000-2006 Guus Sliepen + 2000-2005 Wessel Dankers This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,15 +21,13 @@ Original AVL tree library by Michael H. Buselli . - Modified 2000-11-28 by Wessel Dankers to use counts + Modified 2000-11-28 by Wessel Dankers to use counts instead of depths, to add the ->next and ->prev and to generally obfuscate the code. Mail me if you found a bug. Cleaned up and incorporated some of the ideas from the red-black tree - library for inclusion into tinc (http://tinc.nl.linux.org/) by - Guus Sliepen . - - $Id: avl_tree.c,v 1.1.2.16 2003/07/17 15:06:25 guus Exp $ + library for inclusion into tinc (http://www.tinc-vpn.org/) by + Guus Sliepen . */ #include "system.h" @@ -52,7 +50,7 @@ #endif #ifndef AVL_DEPTH -static int lg(unsigned int u) __attribute__ ((const)); +static int lg(unsigned int u) __attribute__ ((__const__)); static int lg(unsigned int u) { @@ -90,7 +88,7 @@ static int lg(unsigned int u) /* Internal helper functions */ -static int avl_check_balance(avl_node_t *node) +static int avl_check_balance(const avl_node_t *node) { #ifdef AVL_DEPTH int d; @@ -280,7 +278,7 @@ void avl_free_tree(avl_tree_t *tree) avl_node_t *avl_alloc_node(void) { - return (avl_node_t *)xmalloc_and_zero(sizeof(avl_node_t)); + return xmalloc_and_zero(sizeof(avl_node_t)); } void avl_free_node(avl_tree_t *tree, avl_node_t *node) @@ -656,7 +654,7 @@ void avl_delete_tree(avl_tree_t *tree) { avl_node_t *node, *next; - for(node = tree->root; node; node = next) { + for(node = tree->head; node; node = next) { next = node->next; avl_free_node(tree, node); } @@ -666,7 +664,7 @@ void avl_delete_tree(avl_tree_t *tree) /* Tree walking */ -void avl_foreach(avl_tree_t *tree, avl_action_t action) +void avl_foreach(const avl_tree_t *tree, avl_action_t action) { avl_node_t *node, *next; @@ -676,7 +674,7 @@ void avl_foreach(avl_tree_t *tree, avl_action_t action) } } -void avl_foreach_node(avl_tree_t *tree, avl_action_t action) +void avl_foreach_node(const avl_tree_t *tree, avl_action_t action) { avl_node_t *node, *next; @@ -689,7 +687,7 @@ void avl_foreach_node(avl_tree_t *tree, avl_action_t action) /* Indexing */ #ifdef AVL_COUNT -unsigned int avl_count(avl_tree_t *tree) +unsigned int avl_count(const avl_tree_t *tree) { return AVL_NODE_COUNT(tree->root); } @@ -734,7 +732,7 @@ unsigned int avl_index(const avl_node_t *node) } #endif #ifdef AVL_DEPTH -unsigned int avl_depth(avl_tree_t *tree) +unsigned int avl_depth(const avl_tree_t *tree) { return AVL_NODE_DEPTH(tree->root); }