diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-27 12:03:52 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-27 12:03:52 -0400 |
| commit | 9a7a7555c313fead21b31a82c2174da57aea3bc8 (patch) | |
| tree | facb21ee625a0fa535a1985b7306fca9eca87fe0 /pkbktarr.h | |
| parent | bef2087b4a68a6ac13a48020828bf95bbbad54f1 (diff) | |
pkbktarr: add pk_bkt_arr_clear
Diffstat (limited to 'pkbktarr.h')
| -rw-r--r-- | pkbktarr.h | 23 |
1 files changed, 21 insertions, 2 deletions
@@ -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); |
