From 9260a41bc6e0a430d1ab0bba004f86d1d5afd506 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Thu, 30 Oct 2025 11:33:46 -0400 Subject: pke: update pk.h to 0.9.5 --- src/camera.cpp | 2 +- src/ecs.cpp | 10 ++--- src/pk.h | 133 +++++++++++++++++++++++++++++++++++++++++++++++---------- src/scene.cpp | 2 +- 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(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(); + 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(); - ecs.bc.instances.~pk_bkt_arr_t(); - ecs.bc.grBinds.~pk_bkt_arr_t(); - ecs.bc.entityPtrs.~pk_bkt_arr_t(); - ecs.bc.generics.~pk_bkt_arr_t(); + 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(); // 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 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 template 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; using FN_Find = pk_tmpln_2; }; template -pk_bkt_arr_t::pk_bkt_arr_t() { } -template pk_bkt_arr_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 -pk_bkt_arr_t::~pk_bkt_arr_t() { - pk_bkt_arr_teardown(this); -} -template T &pk_bkt_arr_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 -#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 -#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(); + pk_bkt_arr_teardown(&scene_mstr.bc); pk_mem_bucket_destroy(scene_mstr.bkt); } -- cgit v1.2.3