diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-09-09 15:45:56 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-09-09 15:45:56 -0400 |
| commit | 848247d0aedc1ed971b5ee20920cbc32f7e62ecb (patch) | |
| tree | d956b319fa3c004f112dfdc14c33098da36a12db | |
| parent | 69fe8825407835b595537a17bf6c66dfc18b7b63 (diff) | |
pkbktarr: find first valid iter key on _begin
| -rw-r--r-- | pkbktarr.h | 5 | ||||
| -rw-r--r-- | test/pkbktarr.c | 13 |
2 files changed, 9 insertions, 9 deletions
@@ -339,8 +339,11 @@ bool pk_bkt_arr_iter_begin(struct pk_bkt_arr *arr, struct pk_iter *it) { it->data = nullptr; it->id.bkt.b = 0; it->id.bkt.i = 0; + if (arr->head_l.b == 0 && arr->head_l.i == 0 && (arr->head_l.b != arr->head_r.b || arr->head_l.i != arr->head_r.i)) { + return pk_bkt_arr_iter_increment(arr, it); + } if ((arr->idx_unused[it->id.bkt.b] & (1ull << it->id.bkt.i)) != 0) return false; - it->data = arr->bucketed_data[0]; + it->data = (char*)(arr->bucketed_data[it->id.bkt.b]) + (arr->stride * it->id.bkt.i); return true; } diff --git a/test/pkbktarr.c b/test/pkbktarr.c index 012bc90..1b89b53 100644 --- a/test/pkbktarr.c +++ b/test/pkbktarr.c @@ -492,6 +492,11 @@ int main(int argc, char *argv[]) typed_arr[h.i] = u; } + // remvoe first element + h.b = 0; + h.i = 0; + pk_bkt_arr_free_handle(&arr, h); + h.b = 0; h.i = 2; pk_bkt_arr_free_handle(&arr, h); @@ -501,14 +506,6 @@ int main(int argc, char *argv[]) if (b == false) exit(1); if (it.data == nullptr) exit(1); if (it.id.bkt.b != 0) exit(1); - if (it.id.bkt.i != 0) exit(1); - if (*(uint8_t*)it.data != 0) exit(1); - fprintf(stdout, "it.data: %p, val: %i\n", it.data, *(uint8_t*)it.data); - - b = pk_bkt_arr_iter_increment(&arr, &it); - if (b == false) exit(1); - if (it.data == nullptr) exit(1); - if (it.id.bkt.b != 0) exit(1); if (it.id.bkt.i != 1) exit(1); if (*(uint8_t*)it.data != 1) exit(1); fprintf(stdout, "it.data: %p, val: %i\n", it.data, *(uint8_t*)it.data); |
