From 9a7a7555c313fead21b31a82c2174da57aea3bc8 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Tue, 27 May 2025 12:03:52 -0400 Subject: pkbktarr: add pk_bkt_arr_clear --- pkbktarr.h | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'pkbktarr.h') diff --git a/pkbktarr.h b/pkbktarr.h index 0166896..ea0fab4 100644 --- a/pkbktarr.h +++ b/pkbktarr.h @@ -4,6 +4,9 @@ #include "./pkmem.h" /* deleteme */ #include "./pkmacros.h" /* deleteme */ +#ifndef PK_BKT_ARR_ALL_UNUSED_VAL + #define PK_BKT_ARR_ALL_UNUSED_VAL 0xFFFFFFFFFFFFFFFF +#endif #define PK_BKT_ARR_HANDLE_B_MAX 0xFFFFFF #define PK_BKT_ARR_HANDLE_I_MAX 64 @@ -26,6 +29,7 @@ struct pk_bkt_arr { }; void pk_bkt_arr_init(struct pk_bkt_arr *bkt_arr, unsigned long stride, unsigned long alignment, struct pk_bkt_arr_handle limits, struct pk_membucket *bkt_buckets, struct pk_membucket *bkt_data); +void pk_bkt_arr_clear(struct pk_bkt_arr *bkt_arr); void pk_bkt_arr_teardown(struct pk_bkt_arr *bkt_arr); struct pk_bkt_arr_handle pk_bkt_arr_new_handle(struct pk_bkt_arr *bkt_arr); void pk_bkt_arr_free_handle(struct pk_bkt_arr *bkt_arr, struct pk_bkt_arr_handle handle); @@ -89,11 +93,22 @@ void pk_bkt_arr_init(struct pk_bkt_arr *bkt_arr, unsigned long stride, unsigned bkt_arr->stride = stride; bkt_arr->alignment = alignment; bkt_arr->idx_unused = (unsigned long long *)pk_new(sizeof(unsigned long long), alignof(unsigned long long), bkt_buckets); - bkt_arr->idx_unused[0] = 0xFFFFFFFFFFFFFFFF; + bkt_arr->idx_unused[0] = PK_BKT_ARR_ALL_UNUSED_VAL; bkt_arr->bucketed_data = (void **)pk_new(sizeof(void *), alignof(void *), bkt_buckets); bkt_arr->bucketed_data[0] = pk_new(stride * limits.i, alignment, bkt_data); } +void pk_bkt_arr_clear(struct pk_bkt_arr *bkt_arr) { + unsigned int b; + bkt_arr->head_l.b = 0; + bkt_arr->head_l.i = 0; + bkt_arr->head_r.b = 0; + bkt_arr->head_r.i = 0; + for (b = 0; b < bkt_arr->reserved_buckets; ++b) { + bkt_arr->idx_unused[b] = PK_BKT_ARR_ALL_UNUSED_VAL; + } +} + void pk_bkt_arr_teardown(struct pk_bkt_arr *bkt_arr) { int b; @@ -105,6 +120,10 @@ void pk_bkt_arr_teardown(struct pk_bkt_arr *bkt_arr) pk_delete((void *)bkt_arr->idx_unused, sizeof(unsigned long long) * (bkt_arr->reserved_buckets), bkt_arr->bkt_buckets); pk_delete((void *)bkt_arr->bucketed_data, sizeof(void *) * (bkt_arr->reserved_buckets), bkt_arr->bkt_buckets); memset(bkt_arr, 0, sizeof(struct pk_bkt_arr)); + bkt_arr->bkt_buckets = NULL; + bkt_arr->bkt_data = NULL; + bkt_arr->idx_unused = NULL; + bkt_arr->bucketed_data = NULL; } struct pk_bkt_arr_handle pk_bkt_arr_new_handle(struct pk_bkt_arr *bkt_arr) @@ -145,7 +164,7 @@ struct pk_bkt_arr_handle pk_bkt_arr_new_handle(struct pk_bkt_arr *bkt_arr) new_idx_unused[b] = bkt_arr->idx_unused[b]; new_data_ptrs[b] = bkt_arr->bucketed_data[b]; } - new_idx_unused[bkt_arr->reserved_buckets - 1] = 0xFFFFFFFFFFFFFFFF; + new_idx_unused[bkt_arr->reserved_buckets - 1] = PK_BKT_ARR_ALL_UNUSED_VAL; new_data_ptrs[bkt_arr->reserved_buckets - 1] = pk_new(bkt_arr->stride * bkt_arr->limits.i, bkt_arr->alignment, bkt_arr->bkt_data); pk_delete((void *)bkt_arr->idx_unused, sizeof(unsigned long long) * (bkt_arr->reserved_buckets - 1), bkt_arr->bkt_buckets); -- cgit v1.2.3