summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-10-30 11:33:46 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-10-30 11:33:46 -0400
commit9260a41bc6e0a430d1ab0bba004f86d1d5afd506 (patch)
tree14ef85a4373240576d338b713446514a2545fcd3
parent96d56f28f15923809ea01323ed13ccdf9b047a90 (diff)
pke: update pk.h to 0.9.5
-rw-r--r--src/camera.cpp2
-rw-r--r--src/ecs.cpp10
-rw-r--r--src/pk.h133
-rw-r--r--src/scene.cpp2
4 files changed, 117 insertions, 30 deletions
diff --git a/src/camera.cpp b/src/camera.cpp
index 07e4253..5fab071 100644
--- a/src/camera.cpp
+++ b/src/camera.cpp
@@ -182,7 +182,7 @@ void PkeCamera_Teardown() {
pk_delete<btRigidBody>(NullCameraInstance.bt.rigidBody, MemBkt_Bullet);
NullCameraInstance.bt.motionState = CAFE_BABE(btDefaultMotionState);
NullCameraInstance.bt.rigidBody = CAFE_BABE(btRigidBody);
- cam_mstr.bktc_cameras.~pk_bkt_arr_t<PkeCamera>();
+ pk_bkt_arr_teardown(&cam_mstr.bktc_cameras);
pk_mem_bucket_destroy(cam_mstr.bkt);
}
diff --git a/src/ecs.cpp b/src/ecs.cpp
index a74c33d..b0e5d7b 100644
--- a/src/ecs.cpp
+++ b/src/ecs.cpp
@@ -679,10 +679,10 @@ void ECS_Teardown() {
pk_arr_reset(&EntitiesWithExcessInstances);
pk_arr_reset(&entitiesYetToBeRemoved);
pk_arr_reset(&entitiesMarkedForRemoval);
- ecs.bc.ev_mgrs.~pk_bkt_arr_t<pke_component_event>();
- ecs.bc.instances.~pk_bkt_arr_t<CompInstance>();
- ecs.bc.grBinds.~pk_bkt_arr_t<CompGrBinds>();
- ecs.bc.entityPtrs.~pk_bkt_arr_t<Entity_Base*>();
- ecs.bc.generics.~pk_bkt_arr_t<Entity_Base>();
+ pk_bkt_arr_teardown(&ecs.bc.ev_mgrs);
+ pk_bkt_arr_teardown(&ecs.bc.instances);
+ pk_bkt_arr_teardown(&ecs.bc.grBinds);
+ pk_bkt_arr_teardown(&ecs.bc.entityPtrs);
+ pk_bkt_arr_teardown(&ecs.bc.generics);
pk_mem_bucket_destroy(ecs.bkt);
}
diff --git a/src/pk.h b/src/pk.h
index 87d829e..c1ab0e9 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.9.4
+* PK Single-Header-Library V0.9.5
*
* Author: Jonathan Bradley
* Copyright: © 2024-2025 Jonathan Bradley
@@ -269,7 +269,7 @@
* struct pk_bkt_arr_handle h = pk_bkt_arr_new_handle(&arr);
* arr[h] = 128;
* pk_bkt_arr_free_handle(&arr, h);
-* arr.~pk_bkt_arr<int>(); // manually call dtor for globals
+* pk_bkt_arr_teardown(&arr);
* ```
*
********************************************************************************
@@ -303,7 +303,7 @@
*
*******************************************************************************/
-#define PK_VERSION "0.9.4"
+#define PK_VERSION "0.9.5"
#ifdef PK_IMPL_ALL
# ifndef PK_IMPL_MEM_TYPES
@@ -1387,6 +1387,7 @@ pk_delete(const void* ptr, size_t sz, struct pk_membucket* bkt)
#ifndef PK_STR_H
#define PK_STR_H
+
#include <stdint.h>
struct pk_str {
@@ -1404,6 +1405,8 @@ struct pk_str cstring_to_pk_str(char *s);
struct pk_cstr cstring_to_pk_cstr(const char *s);
struct pk_str pk_cstr_to_pk_str(const struct pk_cstr *s);
struct pk_cstr pk_str_to_pk_cstr(const struct pk_str *s);
+struct pk_str pk_str_clone(const struct pk_str *s, struct pk_membucket *bkt);
+struct pk_cstr pk_cstr_clone(const struct pk_cstr *s, struct pk_membucket *bkt);
int pk_compare_str(const struct pk_str *lhs, const struct pk_str *rhs);
int pk_compare_cstr(const struct pk_cstr *lhs, const struct pk_cstr *rhs);
@@ -1453,6 +1456,28 @@ pk_str_to_pk_cstr(const struct pk_str *s)
return ret;
}
+struct pk_str
+pk_str_clone(const struct pk_str *s, struct pk_membucket *bkt) {
+ struct pk_str str;
+ str.length = s->length == 0 ? strlen(s->val) : s->length;
+ str.reserved = s->length + 1;
+ char *ss = (char*)pk_new(str.reserved * sizeof(char), alignof(char), bkt);
+ strncpy(ss, s->val, str.reserved);
+ str.val = ss;
+ return str;
+}
+
+struct pk_cstr
+pk_cstr_clone(const struct pk_cstr *s, struct pk_membucket *bkt) {
+ struct pk_cstr str;
+ str.length = s->length == 0 ? strlen(s->val) : s->length;
+ str.reserved = s->length + 1;
+ char *ss = (char*)pk_new(str.reserved * sizeof(char), alignof(char), bkt);
+ strncpy(ss, s->val, str.reserved);
+ str.val = ss;
+ return str;
+}
+
int
pk_compare_str(const struct pk_str *lhs, const struct pk_str *rhs)
{
@@ -2833,24 +2858,18 @@ bool pk_bkt_arr_iter_decrement(struct pk_bkt_arr *arr, struct pk_iter *it);
#include <assert.h>
template<typename T>
struct pk_bkt_arr_t : public pk_bkt_arr {
- pk_bkt_arr_t();
+ pk_bkt_arr_t() = default;
pk_bkt_arr_t(struct pk_bkt_arr_handle limits, struct pk_membucket *bkt_buckets, struct pk_membucket *bkt_data);
- ~pk_bkt_arr_t();
+ ~pk_bkt_arr_t() = default;
T &operator[](struct pk_bkt_arr_handle);
using FN_Iter = pk_tmpln_1<void, T*, void*>;
using FN_Find = pk_tmpln_2<bool, const T*, const T*, const void*, const void*>;
};
template<typename T>
-pk_bkt_arr_t<T>::pk_bkt_arr_t() { }
-template<typename T>
pk_bkt_arr_t<T>::pk_bkt_arr_t(struct pk_bkt_arr_handle limits, struct pk_membucket *bkt_buckets, struct pk_membucket *bkt_data) {
pk_bkt_arr_init(this, sizeof(T), alignof(T), limits, bkt_buckets, bkt_data);
}
template<typename T>
-pk_bkt_arr_t<T>::~pk_bkt_arr_t() {
- pk_bkt_arr_teardown(this);
-}
-template<typename T>
T &pk_bkt_arr_t<T>::operator[](struct pk_bkt_arr_handle handle) {
assert(this->idx_unused != nullptr);
assert(this->bucketed_data != nullptr);
@@ -3577,11 +3596,11 @@ void pk_test_run_test_groups(pk_test_group_get **group_get_fns, unsigned long n_
#if defined(__cplusplus)
#include <iostream>
-#define PK_TEST_ASSERT_BODY(expected, value) \
+#define PK_TEST_ASSERT_BODY(expected, value, comp) \
std::cerr << "[pk-test] "; \
std::cerr << "(" << __FILE__ << ":" << __LINE__ << ")"; \
- std::cerr << PK_CLR_FG_RED " Failed. " PK_CLR_RESET; \
- std::cerr << "Condition: \""; \
+ std::cerr << PK_CLR_FG_RED " Failed " PK_CLR_RESET; \
+ std::cerr << #comp " , Condition: \""; \
std::cerr << PK_CLR_FG_BRIGHT_BLUE << #value << PK_CLR_RESET; \
std::cerr << "\", Expected: \""; \
std::cerr << PK_CLR_FG_GREEN << (expected) << PK_CLR_RESET; \
@@ -3594,44 +3613,112 @@ inline bool flt_equal(T a, T b, T epsilon) {
}
#else /* __cplusplus */
#include <stdio.h>
-#define PK_TEST_ASSERT_BODY(expected, value) \
+#define PK_TEST_ASSERT_BODY(expected, value, comp) \
fprintf(stderr,"[pk-test] (%s:%i) ", __FILE__, __LINE__); \
- fprintf(stderr,"%s ", PK_CLR_FG_RED "Failed. " PK_CLR_RESET); \
- fprintf(stderr,"Test condition \""); \
+ fprintf(stderr,"%s ", PK_CLR_FG_RED "Failed" PK_CLR_RESET); \
+ fprintf(stderr,#comp " : Test condition \""); \
fprintf(stderr,"%s\"\n",PK_CLR_FG_BRIGHT_BLUE #value PK_CLR_RESET);
#endif /* __cplusplus */
#define PK_TEST_ASSERT_EQ(expected, value) { \
if ((value) != (expected)) { \
- PK_TEST_ASSERT_BODY(expected, value) \
+ PK_TEST_ASSERT_BODY(expected, value, ==) \
} \
}
#define PK_TEST_ASSERT_EQ_RET(expected, value) { \
if ((value) != (expected)) { \
- PK_TEST_ASSERT_BODY(expected, value) \
+ PK_TEST_ASSERT_BODY(expected, value, ==) \
return -1; \
} \
}
#define PK_TEST_ASSERT_EQ_EXIT(expected, value) { \
if ((value) != (expected)) { \
- PK_TEST_ASSERT_BODY(expected, value) \
+ PK_TEST_ASSERT_BODY(expected, value, ==) \
exit(1); \
} \
}
#define PK_TEST_ASSERT_NEQ(expected, value) { \
if ((value) == (expected)) { \
- PK_TEST_ASSERT_BODY(expected, value) \
+ PK_TEST_ASSERT_BODY(expected, value, !=) \
} \
}
#define PK_TEST_ASSERT_NEQ_RET(expected, value) { \
if ((value) == (expected)) { \
- PK_TEST_ASSERT_BODY(expected, value) \
+ PK_TEST_ASSERT_BODY(expected, value, !=) \
return -1; \
} \
}
#define PK_TEST_ASSERT_NEQ_EXIT(expected, value) { \
if ((value) == (expected)) { \
- PK_TEST_ASSERT_BODY(expected, value) \
+ PK_TEST_ASSERT_BODY(expected, value, !=) \
+ exit(1); \
+ } \
+}
+#define PK_TEST_ASSERT_GT(expected, value) { \
+ if ((value) > (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, >) \
+ } \
+}
+#define PK_TEST_ASSERT_GT_RET(expected, value) { \
+ if ((value) > (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, >) \
+ return -1; \
+ } \
+}
+#define PK_TEST_ASSERT_GT_EXIT(expected, value) { \
+ if ((value) > (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, >) \
+ exit(1); \
+ } \
+}
+#define PK_TEST_ASSERT_LT(expected, value) { \
+ if ((value) > (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, <) \
+ } \
+}
+#define PK_TEST_ASSERT_LT_RET(expected, value) { \
+ if ((value) > (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, <) \
+ return -1; \
+ } \
+}
+#define PK_TEST_ASSERT_LT_EXIT(expected, value) { \
+ if ((value) > (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, <) \
+ exit(1); \
+ } \
+}
+#define PK_TEST_ASSERT_GTE(expected, value) { \
+ if ((value) >= (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, >=) \
+ } \
+}
+#define PK_TEST_ASSERT_GTE_RET(expected, value) { \
+ if ((value) >= (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, >=) \
+ return -1; \
+ } \
+}
+#define PK_TEST_ASSERT_GTE_EXIT(expected, value) { \
+ if ((value) >= (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, >=) \
+ exit(1); \
+ } \
+}
+#define PK_TEST_ASSERT_LTE(expected, value) { \
+ if ((value) >= (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, <=) \
+ } \
+}
+#define PK_TEST_ASSERT_LTE_RET(expected, value) { \
+ if ((value) >= (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, <=) \
+ return -1; \
+ } \
+}
+#define PK_TEST_ASSERT_LTE_EXIT(expected, value) { \
+ if ((value) >= (expected)) { \
+ PK_TEST_ASSERT_BODY(expected, value, <=) \
exit(1); \
} \
}
diff --git a/src/scene.cpp b/src/scene.cpp
index 4d5cc76..7d7ee20 100644
--- a/src/scene.cpp
+++ b/src/scene.cpp
@@ -18,7 +18,7 @@ void pke_scene_master_init() {
}
void pke_scene_master_teardown() {
- scene_mstr.bc.~pk_bkt_arr_t<pke_scene>();
+ pk_bkt_arr_teardown(&scene_mstr.bc);
pk_mem_bucket_destroy(scene_mstr.bkt);
}