summaryrefslogtreecommitdiff
path: root/blockarr.c
diff options
context:
space:
mode:
Diffstat (limited to 'blockarr.c')
-rw-r--r--blockarr.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/blockarr.c b/blockarr.c
index 1d8590d..cd4d343 100644
--- a/blockarr.c
+++ b/blockarr.c
@@ -39,6 +39,15 @@ static void *block_arr_add(BlockArr *arr) {
}
}
+static U64 block_arr_len(BlockArr *arr) {
+ ArrBlock *last_block;
+ if (!arr->blocks) return 0;
+ last_block = arr->blocks + (arr_len(arr->blocks) - 1);
+ U64 len = (arr_len(arr->blocks)-1) * (((U64)1)<<arr->lg_block_sz);
+ len += last_block->n;
+ return len;
+}
+
static inline void *block_arr_get(BlockArr *arr, size_t index) {
size_t block_index = index >> arr->lg_block_sz;
ArrBlock *block = &arr->blocks[block_index];