summaryrefslogtreecommitdiff
path: root/pkbktarr.h
diff options
context:
space:
mode:
Diffstat (limited to 'pkbktarr.h')
-rw-r--r--pkbktarr.h17
1 files changed, 9 insertions, 8 deletions
diff --git a/pkbktarr.h b/pkbktarr.h
index a263f61..b041edc 100644
--- a/pkbktarr.h
+++ b/pkbktarr.h
@@ -10,8 +10,8 @@
#define PK_BKT_ARR_HANDLE_B_MAX 0xFFFFFF
#define PK_BKT_ARR_HANDLE_I_MAX 64
-typedef bool (pk_bkt_arr_compare_fn)(void *user_data, void *obj_data);
-typedef void (pk_bkt_arr_iterate_fn)(void *obj_data);
+typedef bool (pk_bkt_arr_compare_fn)(void *user_data, const void *user_obj_data, const void *arr_obj_data);
+typedef void (pk_bkt_arr_iterate_fn)(void *user_data, void *arr_obj_data);
struct pk_bkt_arr_handle {
unsigned int b : 24;
@@ -41,8 +41,8 @@ enum PK_BKT_ARR_HANDLE_VALIDATION pk_bkt_arr_handle_validate(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);
-struct pk_bkt_arr_handle pk_bkt_arr_find_first_handle(struct pk_bkt_arr *bkt_arr, void *user_data, pk_bkt_arr_compare_fn fn);
-void pk_bkt_arr_iterate(struct pk_bkt_arr *bkt_arr, pk_bkt_arr_iterate_fn fn);
+struct pk_bkt_arr_handle pk_bkt_arr_find_first_handle(struct pk_bkt_arr *bkt_arr, pk_bkt_arr_compare_fn fn, void *user_data, const void *user_obj_data);
+void pk_bkt_arr_iterate(struct pk_bkt_arr *bkt_arr, pk_bkt_arr_iterate_fn fn, void *user_data);
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);
@@ -52,6 +52,7 @@ struct pk_bkt_arr_handle pk_bkt_arr_handle_decrement(struct pk_bkt_arr *arr, str
#if defined (__cplusplus)
#include <assert.h>
+#include <future>
template<typename T>
struct pk_bkt_arr_t : public pk_bkt_arr {
pk_bkt_arr_t();
@@ -136,7 +137,7 @@ void pk_bkt_arr_clear(struct pk_bkt_arr *bkt_arr) {
}
}
-struct pk_bkt_arr_handle pk_bkt_arr_find_first_handle(struct pk_bkt_arr *bkt_arr, void *user_data, pk_bkt_arr_compare_fn fn) {
+struct pk_bkt_arr_handle pk_bkt_arr_find_first_handle(struct pk_bkt_arr *bkt_arr, pk_bkt_arr_compare_fn fn, void *user_data, const void *user_obj_data) {
assert(bkt_arr != NULL);
assert(fn != NULL);
struct pk_bkt_arr_handle ret;
@@ -150,7 +151,7 @@ struct pk_bkt_arr_handle pk_bkt_arr_find_first_handle(struct pk_bkt_arr *bkt_arr
if (PK_HAS_FLAG(bkt_arr->idx_unused[b], 1ull << i)) {
continue;
}
- if (fn(user_data, arr+(bkt_arr->stride * i))) {
+ if (fn(user_data, user_obj_data, arr+(bkt_arr->stride * i))) {
ret.b = b;
ret.i = i;
return ret;
@@ -160,7 +161,7 @@ struct pk_bkt_arr_handle pk_bkt_arr_find_first_handle(struct pk_bkt_arr *bkt_arr
return ret;
}
-void pk_bkt_arr_iterate(struct pk_bkt_arr *bkt_arr, pk_bkt_arr_iterate_fn fn) {
+void pk_bkt_arr_iterate(struct pk_bkt_arr *bkt_arr, pk_bkt_arr_iterate_fn fn, void *user_data) {
assert(bkt_arr != NULL);
assert(fn != NULL);
unsigned int b, i, ii;
@@ -171,7 +172,7 @@ void pk_bkt_arr_iterate(struct pk_bkt_arr *bkt_arr, pk_bkt_arr_iterate_fn fn) {
if (PK_HAS_FLAG(bkt_arr->idx_unused[b], 1ull << i)) {
continue;
}
- fn(arr+(bkt_arr->stride * i));
+ fn(user_data, arr+(bkt_arr->stride * i));
}
}
}