From f8e456532ffaa9225894e77d5851c8d93a8fdad2 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Thu, 28 Aug 2025 14:02:26 -0400 Subject: pkiter: promote to first-class feature --- pk.h.in | 3 --- pkarr.h | 8 +------- pkbktarr.h | 9 +-------- pkiter.h | 7 +++++-- test/pkarr.cpp | 32 ++++++++++++++++---------------- test/pkbktarr.cpp | 4 ++-- 6 files changed, 25 insertions(+), 38 deletions(-) diff --git a/pk.h.in b/pk.h.in index 52246f9..7e95dd7 100644 --- a/pk.h.in +++ b/pk.h.in @@ -305,9 +305,6 @@ # ifndef PK_IMPL_EV # define PK_IMPL_EV # endif -# ifndef PK_IMPL_ITER -# define PK_IMPL_ITER -# endif # ifndef PK_IMPL_ARR # define PK_IMPL_ARR # endif diff --git a/pkarr.h b/pkarr.h index 83db8ef..d3e43ea 100644 --- a/pkarr.h +++ b/pkarr.h @@ -3,6 +3,7 @@ #include #include "pkmem.h" /* deleteme */ +#include "pkiter.h" /*deleteme*/ struct pk_arr { uint32_t next; @@ -25,13 +26,10 @@ void pk_arr_remove_at(struct pk_arr *arr, uint32_t index); void pk_arr_clone(struct pk_arr *lhs, struct pk_arr *rhs); void pk_arr_swap(struct pk_arr *lhs, struct pk_arr *rhs); uint32_t pk_arr_find_first_index(struct pk_arr *arr, void *user_data, pk_arr_item_compare *fn); -#ifdef PK_IMPL_ITER -#include "pkiter.h" /*deleteme*/ bool pk_arr_iter_begin(struct pk_arr *arr, struct pk_iter *it); bool pk_arr_iter_end(struct pk_arr *arr, struct pk_iter *it); bool pk_arr_iter_increment(struct pk_arr *arr, struct pk_iter *it); bool pk_arr_iter_decrement(struct pk_arr *arr, struct pk_iter *it); -#endif /* PK_IMPL_ITER */ #if defined(__cplusplus) template @@ -301,8 +299,6 @@ pk_arr_find_first_index(struct pk_arr *arr, void *user_data, pk_arr_item_compare return -1; } -#ifdef PK_IMPL_ITER - bool pk_arr_iter_begin(struct pk_arr *arr, struct pk_iter *it) { it->data = nullptr; @@ -345,6 +341,4 @@ pk_arr_iter_decrement(struct pk_arr *arr, struct pk_iter *it) { return true; } -#endif /* PK_IMPL_ITER */ - #endif /* PK_IMPL_ARR */ diff --git a/pkbktarr.h b/pkbktarr.h index d0d2439..a833f87 100644 --- a/pkbktarr.h +++ b/pkbktarr.h @@ -3,6 +3,7 @@ #include "./pkmem.h" /* deleteme */ #include "./pkmacros.h" /* deleteme */ +#include "pkiter.h" /*deleteme*/ #ifndef PK_BKT_ARR_ALL_UNUSED_VAL #define PK_BKT_ARR_ALL_UNUSED_VAL 0xFFFFFFFFFFFFFFFF @@ -62,14 +63,10 @@ void pk_bkt_arr_free_handle(struct pk_bkt_arr *bkt_arr, struct pk_bkt_arr_handle int pk_bkt_arr_handle_compare(struct pk_bkt_arr_handle lhs, struct pk_bkt_arr_handle rhs); struct pk_bkt_arr_handle pk_bkt_arr_handle_increment(struct pk_bkt_arr *arr, struct pk_bkt_arr_handle h); struct pk_bkt_arr_handle pk_bkt_arr_handle_decrement(struct pk_bkt_arr *arr, struct pk_bkt_arr_handle h); - -#ifdef PK_IMPL_ITER -#include "pkiter.h" /*deleteme*/ bool pk_bkt_arr_iter_begin(struct pk_bkt_arr *arr, struct pk_iter *it); bool pk_bkt_arr_iter_end(struct pk_bkt_arr *arr, struct pk_iter *it); bool pk_bkt_arr_iter_increment(struct pk_bkt_arr *arr, struct pk_iter *it); bool pk_bkt_arr_iter_decrement(struct pk_bkt_arr *arr, struct pk_iter *it); -#endif #if defined (__cplusplus) #include "pktmpln.h" /*deleteme*/ @@ -338,8 +335,6 @@ struct pk_bkt_arr_handle pk_bkt_arr_handle_decrement(struct pk_bkt_arr *arr, str return h; } -#ifdef PK_IMPL_ITER - bool pk_bkt_arr_iter_begin(struct pk_bkt_arr *arr, struct pk_iter *it) { it->data = nullptr; it->id.bkt.b = 0; @@ -408,6 +403,4 @@ bool pk_bkt_arr_iter_decrement(struct pk_bkt_arr *arr, struct pk_iter *it) { return true; } -#endif /* PK_IMPL_ITER */ - #endif /* PK_IMPL_BKTARR */ diff --git a/pkiter.h b/pkiter.h index db7f451..d2694a3 100644 --- a/pkiter.h +++ b/pkiter.h @@ -19,8 +19,11 @@ struct pk_iter { #if defined (__cplusplus) template struct pk_iter_t : public pk_iter { - operator T&() { - return *reinterpret_cast(this->data); + operator T*() { + return reinterpret_cast(this->data); + } + T* operator->() { + return reinterpret_cast(this->data); } }; #endif diff --git a/test/pkarr.cpp b/test/pkarr.cpp index db42ad8..8879ca4 100644 --- a/test/pkarr.cpp +++ b/test/pkarr.cpp @@ -171,26 +171,26 @@ int main(int argc, char *argv[]) res = pk_arr_iter_begin(&arr, &it); if (res == false) exit(1); if (it.id.arr.i != 0) exit(1); - if (it != 3) exit(1); - PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + if (*it != 3) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *it); res = pk_arr_iter_increment(&arr, &it); if (res == false) exit(1); if (it.id.arr.i != 1) exit(1); - if (it != 2) exit(1); - PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + if (*it != 2) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *it); res = pk_arr_iter_increment(&arr, &it); if (res == false) exit(1); if (it.id.arr.i != 2) exit(1); - if (it != 1) exit(1); - PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + if (*it != 1) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *it); res = pk_arr_iter_increment(&arr, &it); if (res == false) exit(1); if (it.id.arr.i != 3) exit(1); - if (it != 0) exit(1); - PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + if (*it != 0) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *it); res = pk_arr_iter_increment(&arr, &it); if (res == true) exit(1); @@ -214,26 +214,26 @@ int main(int argc, char *argv[]) res = pk_arr_iter_end(&arr, &it); if (res == false) exit(1); if (it.id.arr.i != 3) exit(1); - if (it != 0) exit(1); - PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + if (*it != 0) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *it); res = pk_arr_iter_decrement(&arr, &it); if (res == false) exit(1); if (it.id.arr.i != 2) exit(1); - if (it != 1) exit(1); - PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + if (*it != 1) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *it); res = pk_arr_iter_decrement(&arr, &it); if (res == false) exit(1); if (it.id.arr.i != 1) exit(1); - if (it != 2) exit(1); - PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + if (*it != 2) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *it); res = pk_arr_iter_decrement(&arr, &it); if (res == false) exit(1); if (it.id.arr.i != 0) exit(1); - if (it != 3) exit(1); - PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + if (*it != 3) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *it); res = pk_arr_iter_decrement(&arr, &it); if (res == true) exit(1); diff --git a/test/pkbktarr.cpp b/test/pkbktarr.cpp index db30e56..dd92534 100644 --- a/test/pkbktarr.cpp +++ b/test/pkbktarr.cpp @@ -212,7 +212,7 @@ int main(int argc, char *argv[]) fprintf(stdout, "it.data: %p, val: %i\n", it.data, *(uint8_t*)it.data); if (it.id.bkt.b != u) exit(1); if (it.id.bkt.i != uu) exit(1); - if (it != uu) exit(1); + if (*it != uu) exit(1); } } @@ -264,7 +264,7 @@ int main(int argc, char *argv[]) fprintf(stdout, "it.data: %p, val: %i\n", it.data, *(uint8_t*)it.data); if (it.id.bkt.b != u-1) exit(1); if (it.id.bkt.i != uu-1) exit(1); - if (it != uu-1) exit(1); + if (*it != uu-1) exit(1); } } -- cgit v1.2.3