summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-05-21 12:14:09 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-05-21 12:14:09 -0400
commitb87c81d7cfc12637fc2f59ff188ab0fb41f7ae41 (patch)
tree7159eecaede33d877d3dcae662d802315856d588
parentf75a2a682b0a66a6f1fb92395e3e760970c0f99b (diff)
pke: event DynArray to pk_arr_t
-rw-r--r--src/event.cpp43
1 files changed, 23 insertions, 20 deletions
diff --git a/src/event.cpp b/src/event.cpp
index 21d8bf0..41c1d7a 100644
--- a/src/event.cpp
+++ b/src/event.cpp
@@ -1,7 +1,8 @@
#include "event.hpp"
-#include "dynamic-array.hpp"
+#include "pk.h"
+#include <cstring>
#include <type_traits>
struct BaseEventBucket {
@@ -11,12 +12,12 @@ struct BaseEventBucket {
template<typename Fn>
struct EventBucket : public BaseEventBucket {
using BaseEventBucket::name;
- DynArray<Fn> callbacks{8};
+ pk_arr_t<Fn> callbacks;
};
-using EventArr = DynArray<EventBucket<EventHandler>>;
-using TickArr = DynArray<EventBucket<TickEvent>>;
-EventArr eventBuckets{0, nullptr};
-TickArr tickBuckets{0, nullptr};
+using EventArr = pk_arr_t<EventBucket<EventHandler>>;
+using TickArr = pk_arr_t<EventBucket<TickEvent>>;
+EventArr eventBuckets;
+TickArr tickBuckets;
template<typename Fn>
void EventBucketFind(const char *name, BaseEventBucket*& bkt) {
@@ -26,7 +27,7 @@ void EventBucketFind(const char *name, BaseEventBucket*& bkt) {
memcpy(safeName, name, strlen(name));
BaseEventBucket *baseBkt = nullptr;
- DynArrayBase *arr = nullptr;
+ pk_arr *arr = nullptr;
if constexpr(std::is_same<Fn, EventHandler>::value) {
arr = &eventBuckets;
@@ -35,7 +36,7 @@ void EventBucketFind(const char *name, BaseEventBucket*& bkt) {
arr = &tickBuckets;
}
assert(arr != nullptr);
- for (long i = 0; i < arr->elementCount; ++i) {
+ for (long i = 0; i < arr->next; ++i) {
if constexpr(std::is_same<Fn, EventHandler>::value) {
EventArr &tArr = *reinterpret_cast<EventArr *>(arr);
baseBkt = &tArr[i];
@@ -52,11 +53,13 @@ void EventBucketFind(const char *name, BaseEventBucket*& bkt) {
}
if constexpr(std::is_same<Fn, EventHandler>::value) {
EventArr &tArr = *reinterpret_cast<EventArr *>(arr);
- bkt = &tArr.Push();
+ pk_arr_append_t(&tArr, {});
+ bkt = &tArr[tArr.next-1];
}
if constexpr(std::is_same<Fn, TickEvent>::value) {
TickArr &tArr = *reinterpret_cast<TickArr *>(arr);
- bkt = &tArr.Push();
+ pk_arr_append_t(&tArr, {});
+ bkt = &tArr[tArr.next-1];
}
assert(bkt != nullptr);
memcpy(bkt->name, safeName, 16);
@@ -68,7 +71,7 @@ void Event_RegisterCallback<EventHandler>(const char *name, EventHandler handler
BaseEventBucket *bkt = nullptr;
EventBucketFind<EventHandler>(name, bkt);
EventBucket<EventHandler> *tBkt = reinterpret_cast<EventBucket<EventHandler> *>(bkt);
- tBkt->callbacks.Push(handler);
+ pk_arr_append_t(&tBkt->callbacks, handler);
}
template<>
@@ -77,9 +80,9 @@ void Event_UnregisterCallback<EventHandler>(const char *name, EventHandler handl
BaseEventBucket *bkt = nullptr;
EventBucketFind<EventHandler>(name, bkt);
EventBucket<EventHandler> *tBkt = reinterpret_cast<EventBucket<EventHandler> *>(bkt);
- for (int64_t i = 0; i < tBkt->callbacks.Count(); ++i) {
+ for (uint32_t i = 0; i < tBkt->callbacks.next; ++i) {
if (tBkt->callbacks[i] == handler) {
- tBkt->callbacks.Remove(i);
+ pk_arr_remove_at(&tBkt->callbacks, i);
break;
}
}
@@ -90,7 +93,7 @@ void Event_Dispatch<EventHandler>(const char *name) {
BaseEventBucket *bkt = nullptr;
EventBucketFind<EventHandler>(name, bkt);
EventBucket<EventHandler> *tBkt = reinterpret_cast<EventBucket<EventHandler> *>(bkt);
- for (int64_t i = 0; i < tBkt->callbacks.Count(); ++i) {
+ for (int64_t i = 0; i < tBkt->callbacks.next; ++i) {
tBkt->callbacks[i]();
}
}
@@ -101,7 +104,7 @@ void Event_RegisterCallback<TickEvent>(const char *name, TickEvent handler) {
BaseEventBucket *bkt = nullptr;
EventBucketFind<TickEvent>(name, bkt);
EventBucket<TickEvent> *tBkt = reinterpret_cast<EventBucket<TickEvent> *>(bkt);
- tBkt->callbacks.Push(handler);
+ pk_arr_append_t(&tBkt->callbacks, handler);
}
template<>
@@ -110,9 +113,9 @@ void Event_UnregisterCallback<TickEvent>(const char *name, TickEvent handler) {
BaseEventBucket *bkt = nullptr;
EventBucketFind<TickEvent>(name, bkt);
EventBucket<TickEvent> *tBkt = reinterpret_cast<EventBucket<TickEvent> *>(bkt);
- for (int64_t i = 0; i < tBkt->callbacks.Count(); ++i) {
+ for (uint32_t i = 0; i < tBkt->callbacks.next; ++i) {
if (tBkt->callbacks[i] == handler) {
- tBkt->callbacks.Remove(i);
+ pk_arr_remove_at(&tBkt->callbacks, i);
break;
}
}
@@ -123,13 +126,13 @@ void Event_Dispatch<TickEvent, double>(const char *name, double d) {
BaseEventBucket *bkt = nullptr;
EventBucketFind<TickEvent>(name, bkt);
EventBucket<TickEvent> *tBkt = reinterpret_cast<EventBucket<TickEvent> *>(bkt);
- for (int64_t i = 0; i < tBkt->callbacks.Count(); ++i) {
+ for (uint32_t i = 0; i < tBkt->callbacks.next; ++i) {
tBkt->callbacks[i](d);
}
}
void Event_Teardown() {
- tickBuckets.~DynArray();
- eventBuckets.~DynArray();
+ pk_arr_reset(&tickBuckets);
+ pk_arr_reset(&eventBuckets);
}