summaryrefslogtreecommitdiffstats
path: root/include/zix/tree.h
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-09-10 20:11:46 -0400
committerDavid Robillard <d@drobilla.net>2021-09-10 20:54:28 -0400
commit904c1b4d699aeb1ce170f0cd996a01d2d06812e3 (patch)
tree35a4a9f75a395a958ab0ea5fffeca81ce733bbc1 /include/zix/tree.h
parent1f8c8118f2d42f495dbe6e3adb2a95c87a92e8e0 (diff)
downloadzix-904c1b4d699aeb1ce170f0cd996a01d2d06812e3.tar.gz
zix-904c1b4d699aeb1ce170f0cd996a01d2d06812e3.tar.bz2
zix-904c1b4d699aeb1ce170f0cd996a01d2d06812e3.zip
Add nullability annotations
This allows clang to issue warnings at compile time when null is passed to a non-null parameter. For public entry points, also add assertions to catch such issues when the compiler does not support this.
Diffstat (limited to 'include/zix/tree.h')
-rw-r--r--include/zix/tree.h58
1 files changed, 31 insertions, 27 deletions
diff --git a/include/zix/tree.h b/include/zix/tree.h
index a6822e1..2ce7490 100644
--- a/include/zix/tree.h
+++ b/include/zix/tree.h
@@ -42,32 +42,34 @@ typedef struct ZixTreeNodeImpl ZixTreeIter;
/// Create a new (empty) tree
ZIX_API
-ZixTree*
-zix_tree_new(bool allow_duplicates,
- ZixComparator cmp,
- void* cmp_data,
- ZixDestroyFunc destroy,
- const void* destroy_user_data);
+ZixTree* ZIX_ALLOCATED
+zix_tree_new(bool allow_duplicates,
+ ZixComparator ZIX_NONNULL cmp,
+ void* ZIX_NULLABLE cmp_data,
+ ZixDestroyFunc ZIX_NULLABLE destroy,
+ const void* ZIX_NULLABLE destroy_user_data);
/// Free `t`
ZIX_API
void
-zix_tree_free(ZixTree* t);
+zix_tree_free(ZixTree* ZIX_NULLABLE t);
/// Return the number of elements in `t`
ZIX_PURE_API
size_t
-zix_tree_size(const ZixTree* t);
+zix_tree_size(const ZixTree* ZIX_NONNULL t);
/// Insert the element `e` into `t` and point `ti` at the new element
ZIX_API
ZixStatus
-zix_tree_insert(ZixTree* t, void* e, ZixTreeIter** ti);
+zix_tree_insert(ZixTree* ZIX_NONNULL t,
+ void* ZIX_NULLABLE e,
+ ZixTreeIter* ZIX_NULLABLE* ZIX_NULLABLE ti);
/// Remove the item pointed at by `ti` from `t`
ZIX_API
ZixStatus
-zix_tree_remove(ZixTree* t, ZixTreeIter* ti);
+zix_tree_remove(ZixTree* ZIX_NONNULL t, ZixTreeIter* ZIX_NONNULL ti);
/**
Set `ti` to an element equal to `e` in `t`.
@@ -76,52 +78,54 @@ zix_tree_remove(ZixTree* t, ZixTreeIter* ti);
*/
ZIX_API
ZixStatus
-zix_tree_find(const ZixTree* t, const void* e, ZixTreeIter** ti);
+zix_tree_find(const ZixTree* ZIX_NONNULL t,
+ const void* ZIX_NULLABLE e,
+ ZixTreeIter* ZIX_NULLABLE* ZIX_NONNULL ti);
/// Return the data associated with the given tree item
ZIX_PURE_API
-void*
-zix_tree_get(const ZixTreeIter* ti);
+void* ZIX_NULLABLE
+zix_tree_get(const ZixTreeIter* ZIX_NULLABLE ti);
/// Return an iterator to the first (smallest) element in `t`
ZIX_PURE_API
-ZixTreeIter*
-zix_tree_begin(ZixTree* t);
+ZixTreeIter* ZIX_NULLABLE
+zix_tree_begin(ZixTree* ZIX_NONNULL t);
/// Return an iterator the the element one past the last element in `t`
ZIX_CONST_API
-ZixTreeIter*
-zix_tree_end(ZixTree* t);
+ZixTreeIter* ZIX_NULLABLE
+zix_tree_end(ZixTree* ZIX_NONNULL t);
/// Return true iff `i` is an iterator to the end of its tree
ZIX_CONST_API
bool
-zix_tree_iter_is_end(const ZixTreeIter* i);
+zix_tree_iter_is_end(const ZixTreeIter* ZIX_NULLABLE i);
/// Return an iterator to the last (largest) element in `t`
ZIX_PURE_API
-ZixTreeIter*
-zix_tree_rbegin(ZixTree* t);
+ZixTreeIter* ZIX_NULLABLE
+zix_tree_rbegin(ZixTree* ZIX_NONNULL t);
/// Return an iterator the the element one before the first element in `t`
ZIX_CONST_API
-ZixTreeIter*
-zix_tree_rend(ZixTree* t);
+ZixTreeIter* ZIX_NULLABLE
+zix_tree_rend(ZixTree* ZIX_NONNULL t);
/// Return true iff `i` is an iterator to the reverse end of its tree
ZIX_CONST_API
bool
-zix_tree_iter_is_rend(const ZixTreeIter* i);
+zix_tree_iter_is_rend(const ZixTreeIter* ZIX_NULLABLE i);
/// Return an iterator that points to the element one past `i`
ZIX_PURE_API
-ZixTreeIter*
-zix_tree_iter_next(ZixTreeIter* i);
+ZixTreeIter* ZIX_NULLABLE
+zix_tree_iter_next(ZixTreeIter* ZIX_NULLABLE i);
/// Return an iterator that points to the element one before `i`
ZIX_PURE_API
-ZixTreeIter*
-zix_tree_iter_prev(ZixTreeIter* i);
+ZixTreeIter* ZIX_NULLABLE
+zix_tree_iter_prev(ZixTreeIter* ZIX_NULLABLE i);
/**
@}