AVL_CREATE(3AVL) AVL Tree Library Functions AVL_CREATE(3AVL)
NAME
avl_create - create an AVL tree
SYNOPSIS
AVL Tree Library (libavl, -lavl)
#include <sys/avl.h> void avl_create(
avl_tree_t *tree,
int (*compare)(const void *first, const void *second),
size_t size,
size_t offset);
DESCRIPTION
The
avl_create() function initializes an AVL tree rooted at
tree.
An AVL tree needs to encode information about the type of data structures
being stored inside of it and needs to be told how to compare two different
entries in the same tree. The
size argument represents the total size of
the data structure being used in the tree. This is a constant that is
generally expressed to
avl_create() using the
sizeof operator.
The data structure that is being stored in the AVL tree must include an
avl_node_t as a member of the structure. The structure may have multiple
avl_node_t's, one for each AVL tree that it may concurrently be a member
of. The
offset argument indicates what the offset of the
avl_node_t is for
the data structure that this AVL tree contains.
The
compare function pointer is used to compare two nodes in the tree.
This is used as part of all operations on the tree that cause traversal.
The function is given, as arguments, two pointers to the actual data nodes,
which should be cast to the corresponding type of actual data. The return
value must adhere to the following rules:
1. If the first argument,
first, is less than the second argument,
second, then the
compare function must return
-1.
2. If the first argument is greater than the second argument, then the
compare function must return
1.
3. Otherwise, if they compare to the same value, then it should return
0.
4. Only the return values, -1, 0, and 1, are valid. Returning values
other than those will result in undefined behavior.
When two nodes in the tree compare equal, then that means that they should
represent the same data, though they may not always be equivalent pointers,
due to lookups.
The life time and storage of the AVL tree is maintained by the caller. The
library does not perform any allocations as part of creating an AVL tree.
EXAMPLES
See the
EXAMPLES section in
libavl(3LIB).
INTERFACE STABILITY
CommittedMT-Level See
Locking in
libavl(3LIB).
SEE ALSO
libavl(3LIB)illumos May 7, 2015 illumos