From b87c81d7cfc12637fc2f59ff188ab0fb41f7ae41 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Wed, 21 May 2025 12:14:09 -0400 Subject: pke: event DynArray to pk_arr_t --- src/event.cpp | 43 +++++++++++++++++++++++-------------------- 1 file 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 #include struct BaseEventBucket { @@ -11,12 +12,12 @@ struct BaseEventBucket { template struct EventBucket : public BaseEventBucket { using BaseEventBucket::name; - DynArray callbacks{8}; + pk_arr_t callbacks; }; -using EventArr = DynArray>; -using TickArr = DynArray>; -EventArr eventBuckets{0, nullptr}; -TickArr tickBuckets{0, nullptr}; +using EventArr = pk_arr_t>; +using TickArr = pk_arr_t>; +EventArr eventBuckets; +TickArr tickBuckets; template 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::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::value) { EventArr &tArr = *reinterpret_cast(arr); baseBkt = &tArr[i]; @@ -52,11 +53,13 @@ void EventBucketFind(const char *name, BaseEventBucket*& bkt) { } if constexpr(std::is_same::value) { EventArr &tArr = *reinterpret_cast(arr); - bkt = &tArr.Push(); + pk_arr_append_t(&tArr, {}); + bkt = &tArr[tArr.next-1]; } if constexpr(std::is_same::value) { TickArr &tArr = *reinterpret_cast(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(const char *name, EventHandler handler BaseEventBucket *bkt = nullptr; EventBucketFind(name, bkt); EventBucket *tBkt = reinterpret_cast *>(bkt); - tBkt->callbacks.Push(handler); + pk_arr_append_t(&tBkt->callbacks, handler); } template<> @@ -77,9 +80,9 @@ void Event_UnregisterCallback(const char *name, EventHandler handl BaseEventBucket *bkt = nullptr; EventBucketFind(name, bkt); EventBucket *tBkt = reinterpret_cast *>(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(const char *name) { BaseEventBucket *bkt = nullptr; EventBucketFind(name, bkt); EventBucket *tBkt = reinterpret_cast *>(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(const char *name, TickEvent handler) { BaseEventBucket *bkt = nullptr; EventBucketFind(name, bkt); EventBucket *tBkt = reinterpret_cast *>(bkt); - tBkt->callbacks.Push(handler); + pk_arr_append_t(&tBkt->callbacks, handler); } template<> @@ -110,9 +113,9 @@ void Event_UnregisterCallback(const char *name, TickEvent handler) { BaseEventBucket *bkt = nullptr; EventBucketFind(name, bkt); EventBucket *tBkt = reinterpret_cast *>(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(const char *name, double d) { BaseEventBucket *bkt = nullptr; EventBucketFind(name, bkt); EventBucket *tBkt = reinterpret_cast *>(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); } -- cgit v1.2.3