diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-21 12:14:09 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-21 12:14:09 -0400 |
| commit | b87c81d7cfc12637fc2f59ff188ab0fb41f7ae41 (patch) | |
| tree | 7159eecaede33d877d3dcae662d802315856d588 /src | |
| parent | f75a2a682b0a66a6f1fb92395e3e760970c0f99b (diff) | |
pke: event DynArray to pk_arr_t
Diffstat (limited to 'src')
| -rw-r--r-- | src/event.cpp | 43 |
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); } |
