26#ifndef _ACF_UTILS_AVL_H_
27#define _ACF_UTILS_AVL_H_
36#define _AVL_IMPL_INCLUDED_FROM_AVL_H
125#define AVL_BEFORE (0)
155API_EXPORT
extern void avl_create(avl_tree_t *tree,
156 int (*compar) (
const void *,
const void *),
size_t size,
size_t offset);
169API_EXPORT
extern void *
avl_find(
const avl_tree_t *tree,
const void *node,
178API_EXPORT
extern void avl_insert(avl_tree_t *tree,
void *node,
192API_EXPORT
extern void avl_insert_here(avl_tree_t *tree,
void *new_data,
193 void *here,
int direction);
200API_EXPORT
extern void *
avl_first(
const avl_tree_t *tree);
205API_EXPORT
extern void *
avl_last(
const avl_tree_t *tree);
212#define AVL_NEXT(tree, node) avl_walk(tree, node, AVL_AFTER)
218#define AVL_PREV(tree, node) avl_walk(tree, node, AVL_BEFORE)
255API_EXPORT
extern void avl_add(avl_tree_t *tree,
void *node);
263API_EXPORT
extern void avl_remove(avl_tree_t *tree,
void *node);
272API_EXPORT
extern bool_t
avl_update(avl_tree_t *,
void *);
285API_EXPORT
extern unsigned long avl_numnodes(
const avl_tree_t *tree);
324API_EXPORT
extern void avl_destroy(avl_tree_t *tree);
void * avl_destroy_nodes(avl_tree_t *tree, void **cookie)
void * avl_last(const avl_tree_t *tree)
void avl_insert_here(avl_tree_t *tree, void *new_data, void *here, int direction)
void * avl_first(const avl_tree_t *tree)
bool_t avl_update(avl_tree_t *, void *)
void avl_remove(avl_tree_t *tree, void *node)
bool_t avl_update_lt(avl_tree_t *, void *)
void * avl_nearest(const avl_tree_t *tree, avl_index_t where, int direction)
void avl_add(avl_tree_t *tree, void *node)
bool_t avl_is_empty(avl_tree_t *tree)
void avl_insert(avl_tree_t *tree, void *node, avl_index_t where)
void avl_create(avl_tree_t *tree, int(*compar)(const void *, const void *), size_t size, size_t offset)
unsigned long avl_numnodes(const avl_tree_t *tree)
bool_t avl_update_gt(avl_tree_t *, void *)
void avl_destroy(avl_tree_t *tree)
void * avl_find(const avl_tree_t *tree, const void *node, avl_index_t *where)