diff options
author | David Robillard <d@drobilla.net> | 2020-09-26 10:54:19 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-09-26 10:54:19 +0200 |
commit | a433992d150f22c2fdff2c13801a74b31b726b55 (patch) | |
tree | 43a8561600e702ae3469d681b7ec528b3b3caedd /src/zix/btree.c | |
parent | 81e138633076c2d7ef7e1691845757208d02f478 (diff) | |
download | sord-a433992d150f22c2fdff2c13801a74b31b726b55.tar.gz sord-a433992d150f22c2fdff2c13801a74b31b726b55.tar.bz2 sord-a433992d150f22c2fdff2c13801a74b31b726b55.zip |
Update zix
Diffstat (limited to 'src/zix/btree.c')
-rw-r--r-- | src/zix/btree.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/zix/btree.c b/src/zix/btree.c index bc07f51..0a8010f 100644 --- a/src/zix/btree.c +++ b/src/zix/btree.c @@ -594,8 +594,10 @@ zix_btree_remove(ZixBTree* const t, n->children[1]->n_vals}; n = zix_btree_merge(t, n, 0); - ti->stack[ti->level].node = n; - ti->stack[ti->level].index = counts[i]; + if (ti) { + ti->stack[ti->level].node = n; + ti->stack[ti->level].index = counts[i]; + } } else { // Both child's siblings are minimal, merge them if (i < n->n_vals) { @@ -659,6 +661,9 @@ zix_btree_lower_bound(const ZixBTree* const t, if (!t) { *ti = NULL; return ZIX_STATUS_BAD_ARG; + } else if (!t->root) { + *ti = NULL; + return ZIX_STATUS_SUCCESS; } ZixBTreeNode* n = t->root; @@ -760,7 +765,7 @@ zix_btree_iter_copy(const ZixBTreeIter* const i) ZIX_API bool zix_btree_iter_is_end(const ZixBTreeIter* const i) { - return !i || (i->level == 0 && i->stack[0].node == NULL); + return !i || i->stack[0].node == NULL; } ZIX_API bool @@ -768,14 +773,16 @@ zix_btree_iter_equals(const ZixBTreeIter* const lhs, const ZixBTreeIter* const r { if (zix_btree_iter_is_end(lhs) && zix_btree_iter_is_end(rhs)) { return true; - } else if (!lhs || !rhs || lhs->n_levels != rhs->n_levels) { + } else if (zix_btree_iter_is_end(lhs) || zix_btree_iter_is_end(rhs)) { + return false; + } else if (!lhs || !rhs || lhs->level != rhs->level) { return false; } return !memcmp(lhs, rhs, sizeof(ZixBTreeIter) + - lhs->n_levels * sizeof(ZixBTreeIterFrame)); + (lhs->level + 1) * sizeof(ZixBTreeIterFrame)); } ZIX_API void |