2.4.4 Tree

typedef struct ZixTreeImpl ZixTree

A balanced binary search tree.

typedef struct ZixTreeNodeImpl ZixTreeIter

An iterator over a ZixTree.

typedef int (*ZixTreeCompareFunc)(const void *a, const void *b, const void *user_data)

Function for comparing two Tree elements.

typedef void (*ZixTreeDestroyFunc)(void *ptr, const void *user_data)

Function to destroy a Tree element.

ZixTree *zix_tree_new(ZixAllocator *allocator, bool allow_duplicates, ZixTreeCompareFunc cmp, void *cmp_data, ZixTreeDestroyFunc destroy, const void *destroy_user_data)

Create a new (empty) tree.

void zix_tree_free(ZixTree *t)

Free t

size_t zix_tree_size(const ZixTree *t)

Return the number of elements in t

ZixStatus zix_tree_insert(ZixTree *t, void *e, ZixTreeIter **ti)

Insert the element e into t and point ti at the new element.

ZixStatus zix_tree_remove(ZixTree *t, ZixTreeIter *ti)

Remove the item pointed at by ti from t

ZixStatus zix_tree_find(const ZixTree *t, const void *e, ZixTreeIter **ti)

Set ti to an element equal to e in t.

If no such item exists, ti is set to NULL.

void *zix_tree_get(const ZixTreeIter *ti)

Return the data associated with the given tree item.

ZixTreeIter *zix_tree_begin(ZixTree *t)

Return an iterator to the first (smallest) element in t

ZixTreeIter *zix_tree_end(ZixTree *t)

Return an iterator the the element one past the last element in t

bool zix_tree_iter_is_end(const ZixTreeIter *i)

Return true iff i is an iterator to the end of its tree.

ZixTreeIter *zix_tree_rbegin(ZixTree *t)

Return an iterator to the last (largest) element in t

ZixTreeIter *zix_tree_rend(ZixTree *t)

Return an iterator the the element one before the first element in t

bool zix_tree_iter_is_rend(const ZixTreeIter *i)

Return true iff i is an iterator to the reverse end of its tree.

ZixTreeIter *zix_tree_iter_next(ZixTreeIter *i)

Return an iterator that points to the element one past i

ZixTreeIter *zix_tree_iter_prev(ZixTreeIter *i)

Return an iterator that points to the element one before i