summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game.cpp1
-rw-r--r--src/physics.cpp1
-rw-r--r--src/pk.h25
-rw-r--r--src/plugins.cpp7
-rw-r--r--src/plugins.hpp1
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);
}
diff --git a/src/pk.h b/src/pk.h
index 74b5a8d..d3ca7cd 100644
--- a/src/pk.h
+++ b/src/pk.h
@@ -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 */