summaryrefslogtreecommitdiff
path: root/pkiter.h
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-08-26 13:23:37 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-08-26 13:23:37 -0400
commit78956339691db1fb0de02e63823dc9100c0cd7e7 (patch)
treebf8aef0abcbe2b55d19a3ba04e809c571a2c995e /pkiter.h
parent488ee1d60e32502645d4fce9a8261b012ec1ba6a (diff)
pkiter: add iterator for pkarr and pkbktarr
Diffstat (limited to 'pkiter.h')
-rw-r--r--pkiter.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/pkiter.h b/pkiter.h
new file mode 100644
index 0000000..db7f451
--- /dev/null
+++ b/pkiter.h
@@ -0,0 +1,28 @@
+#ifndef PK_PKITER_H
+#define PK_PKITER_H
+
+union pk_iter_id {
+ struct pk_iter_bkt_handle {
+ unsigned int b : 24;
+ unsigned int i : 8;
+ } bkt;
+ struct pk_iter_arr_idx {
+ unsigned int i : 32;
+ } arr;
+};
+
+struct pk_iter {
+ void *data;
+ union pk_iter_id id;
+};
+
+#if defined (__cplusplus)
+template <typename T>
+struct pk_iter_t : public pk_iter {
+ operator T&() {
+ return *reinterpret_cast<T*>(this->data);
+ }
+};
+#endif
+
+#endif /* PK_PKITER_H */