summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-08-28 14:02:26 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-08-28 14:02:26 -0400
commitf8e456532ffaa9225894e77d5851c8d93a8fdad2 (patch)
tree89a0494b8d99f79e78084dcd1a0d66072cbfe3eb
parent3e3d08f83f4e19d0f90d1c0356f78058e227f6fe (diff)
pkiter: promote to first-class feature
-rw-r--r--pk.h.in3
-rw-r--r--pkarr.h8
-rw-r--r--pkbktarr.h9
-rw-r--r--pkiter.h7
-rw-r--r--test/pkarr.cpp32
-rw-r--r--test/pkbktarr.cpp4
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 <stdint.h>
#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<typename T>
@@ -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 <typename T>
struct pk_iter_t : public pk_iter {
- operator T&() {
- return *reinterpret_cast<T*>(this->data);
+ operator T*() {
+ return reinterpret_cast<T*>(this->data);
+ }
+ T* operator->() {
+ return reinterpret_cast<T*>(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);
}
}