diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-10-30 11:33:46 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-10-30 11:33:46 -0400 |
| commit | 9260a41bc6e0a430d1ab0bba004f86d1d5afd506 (patch) | |
| tree | 14ef85a4373240576d338b713446514a2545fcd3 | |
| parent | 96d56f28f15923809ea01323ed13ccdf9b047a90 (diff) | |
pke: update pk.h to 0.9.5
| -rw-r--r-- | src/camera.cpp | 2 | ||||
| -rw-r--r-- | src/ecs.cpp | 10 | ||||
| -rw-r--r-- | src/pk.h | 133 | ||||
| -rw-r--r-- | 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<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); } @@ -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); } |
