diff options
| -rw-r--r-- | src/game.cpp | 1 | ||||
| -rw-r--r-- | src/physics.cpp | 1 | ||||
| -rw-r--r-- | src/pk.h | 25 | ||||
| -rw-r--r-- | src/plugins.cpp | 7 | ||||
| -rw-r--r-- | src/plugins.hpp | 1 |
5 files changed, 23 insertions, 12 deletions
diff --git a/src/game.cpp b/src/game.cpp index fc6318a..5013c49 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -296,6 +296,7 @@ GAME_SHUTDOWN: LoadedPkePlugins[i].OnTeardown(); } } + PkePlugin_Teardown(); Game_Teardown(); Event_Teardown(); EntityType_Teardown(); diff --git a/src/physics.cpp b/src/physics.cpp index 30620fa..49f9cbf 100644 --- a/src/physics.cpp +++ b/src/physics.cpp @@ -133,5 +133,6 @@ int32_t Physics_Tick(double delta) { } void Physics_Teardown() { + pk_arr_reset(&collisionsThisTick); pk_bucket_destroy(MemBkt_Bullet); } @@ -1,7 +1,7 @@ #ifndef PK_SINGLE_HEADER_FILE_H #define PK_SINGLE_HEADER_FILE_H /******************************************************************************* -* PK Single-Header-Library V0.4.7 +* PK Single-Header-Library V0.5.0 * * Author: Jonathan Bradley * Copyright: © 2024-2025 Jonathan Bradley @@ -254,7 +254,7 @@ * *******************************************************************************/ -#define PK_VERSION "0.4.7" +#define PK_VERSION "0.5.0" #ifdef PK_IMPL_ALL # ifndef PK_IMPL_MEM_TYPES @@ -668,6 +668,7 @@ pk_new(long count, pk_membucket* bucket = nullptr) } else { ptr = static_cast<char*>(pk_new_base(sizeof(T) * count, alignof(T))); } + if (ptr == nullptr) return nullptr; if IS_CONSTRUCTIBLE(T) { for (long i = 0; i < count; ++i) { new (ptr + (i * sizeof(T))) T{}; @@ -837,7 +838,7 @@ pk_memory_teardown_all() static int64_t pk_bucket_create_inner(int64_t sz, bool transient, const char* description) { - assert(pk_bucket_head < PK_MAX_BUCKET_COUNT && "pkmem.h: reserved bucket count exceeded"); + if (pk_bucket_head >= PK_MAX_BUCKET_COUNT) return -1; #ifdef PK_MEMORY_DEBUGGER if (has_init_debug == false) { has_init_debug = true; @@ -876,7 +877,10 @@ pk_bucket_create_inner(int64_t sz, bool transient, const char* description) struct pk_membucket* pk_bucket_create(const char* description, int64_t sz, bool transient) { - return &pk_buckets[pk_bucket_create_inner(sz, transient, description)]; + int64_t bkt_index = pk_bucket_create_inner(sz, transient, description); + // TODO some of of error handling + if (bkt_index < 0) { return nullptr; } + return &pk_buckets[bkt_index]; } void @@ -988,7 +992,9 @@ pk_new_bkt(size_t sz, size_t alignment, struct pk_membucket* bkt) return malloc(sz); #endif if (sz == 0) return nullptr; - assert((bkt->size - bkt->head) > (sz + alignment -1) && "Not enough space in bucket"); + if (bkt == nullptr) return nullptr; + // TODO some type of error handling + if ((bkt->size - bkt->head) < (sz + alignment - 1)) return nullptr; size_t i; size_t calculatedAlignment = alignment < PK_MINIMUM_ALIGNMENT ? PK_MINIMUM_ALIGNMENT : alignment; size_t misalignment = 0; @@ -1099,7 +1105,9 @@ pk_new_base(size_t sz, size_t alignment) break; } if (bkt == nullptr) { - bkt = &pk_buckets[pk_bucket_create_inner(PK_DEFAULT_BUCKET_SIZE, false, "pk_bucket internally created")]; + int64_t bkt_index = pk_bucket_create_inner(PK_DEFAULT_BUCKET_SIZE, false, "pk_bucket internally created"); + // TODO some of of error handling + if (bkt_index >= 0) bkt = &pk_buckets[bkt_index]; } return pk_new_bkt(sz, alignment, bkt); } @@ -1683,7 +1691,6 @@ struct pk_arr_t : public pk_arr { pk_arr_t(pk_arr_t<T> &&other); pk_arr_t &operator=(const pk_arr_t<T> &other); pk_arr_t &operator=(pk_arr_t<T> &&other); - ~pk_arr_t(); T &operator[](size_t index); }; template<typename T> @@ -1732,10 +1739,6 @@ pk_arr_t<T>::operator=(pk_arr_t<T> &&other) { return *this; } template<typename T> -pk_arr_t<T>::~pk_arr_t() { - if (this->data != NULL) pk_delete(this->data, this->stride * this->reserved, this->bkt); -} -template<typename T> T &pk_arr_t<T>::operator[](size_t index) { if(index >= this->next) throw "pk_arr_t<T>::operator[] out of range"; return reinterpret_cast<T*>(this->data)[index]; diff --git a/src/plugins.cpp b/src/plugins.cpp index c7bd7c8..5ec86af 100644 --- a/src/plugins.cpp +++ b/src/plugins.cpp @@ -15,6 +15,7 @@ pk_arr_t<PKEPluginInterface> LoadedPkePlugins; pk_arr_t<PkeCallback> pkePluginCallbacks; +pk_arr_t<CallbackSignature> sortedSignatures; void PkePlugin_Load(const char *path) { if (path == nullptr || path == CAFE_BABE(void)) { @@ -64,7 +65,6 @@ int pstrncmp(const void* a, const void* b) return strncmp(static_cast<const CallbackSignature *>(a)[0], static_cast<const CallbackSignature *>(b)[0], 16); } CallbackSignature *PkePlugin_GetSortedSignatures(long &count) { - static pk_arr_t<CallbackSignature> sortedSignatures; if (sortedSignatures.next != pkePluginCallbacks.next) { while (sortedSignatures.next != pkePluginCallbacks.next) { pk_arr_append(&sortedSignatures, pkePluginCallbacks[sortedSignatures.next].name); @@ -74,3 +74,8 @@ CallbackSignature *PkePlugin_GetSortedSignatures(long &count) { count = sortedSignatures.next; return &sortedSignatures[0]; } +void PkePlugin_Teardown() { + pk_arr_reset(&sortedSignatures); + pk_arr_reset(&pkePluginCallbacks); + pk_arr_reset(&LoadedPkePlugins); +} diff --git a/src/plugins.hpp b/src/plugins.hpp index 360f692..e6bc57c 100644 --- a/src/plugins.hpp +++ b/src/plugins.hpp @@ -11,5 +11,6 @@ void PkePlugin_Load(const char *path); PkeCallback *PkePlugin_FindSignature(const CallbackSignature &sig); void PkePlugin_SetSignatureFunc(PkeCallback *sig); CallbackSignature *PkePlugin_GetSortedSignatures(long &count); +void PkePlugin_Teardown(); #endif /* PKE_PLUGINS_HPP */ |
