From 9693ff2d4be85d356e07e3192baaa2262a7140ff Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Thu, 8 May 2025 12:02:56 -0400 Subject: pk.h: update to 0.5.0 + some breaking changes --- src/pk.h | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'src/pk.h') 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(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 &&other); pk_arr_t &operator=(const pk_arr_t &other); pk_arr_t &operator=(pk_arr_t &&other); - ~pk_arr_t(); T &operator[](size_t index); }; template @@ -1732,10 +1739,6 @@ pk_arr_t::operator=(pk_arr_t &&other) { return *this; } template -pk_arr_t::~pk_arr_t() { - if (this->data != NULL) pk_delete(this->data, this->stride * this->reserved, this->bkt); -} -template T &pk_arr_t::operator[](size_t index) { if(index >= this->next) throw "pk_arr_t::operator[] out of range"; return reinterpret_cast(this->data)[index]; -- cgit v1.2.3