diff options
| author | Fabrice <fabrice@schaub-dev.xyz> | 2026-03-02 17:56:41 +0100 |
|---|---|---|
| committer | Fabrice <fabrice@schaub-dev.xyz> | 2026-03-02 17:56:41 +0100 |
| commit | cb95ef0b3690e7817db34e3a7c0d7c021a7a8ccf (patch) | |
| tree | 21fff7dd9fccccd6816ee0d10db8f9ed7efda497 /src/array.cc | |
| parent | f8f057a773a6673c99d74e9bfbabf0f1f4c7232a (diff) | |
fixing mimalloc build
Diffstat (limited to 'src/array.cc')
| -rw-r--r-- | src/array.cc | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/src/array.cc b/src/array.cc index fa2cb61..f522bfc 100644 --- a/src/array.cc +++ b/src/array.cc @@ -9,7 +9,7 @@ template <typename T> struct Array { usize capacity, size; - u8* data; + T* data; const Allocator* allocator; }; @@ -18,25 +18,26 @@ struct Array { template<typename T> static inline usize array_nbytes(usize size) { + assert_neq(size, 0); return size * sizeof(T); } template<typename T> static inline usize array_next_capacity(const Array<T>* array) { - assert(array != nullptr); + assert_neq(array, nullptr); return array->capacity == 0 ? ARRAY_INIT : array->capacity * ARRAY_GROWTH; } template<typename T> bool array_resize(Array<T>* array, usize new_capacity) { - assert(array != nullptr); - assert(array->size < new_capacity); + assert_neq(array, nullptr); + assert_st(array->size, new_capacity); - u8* new_data = allocate(array->allocator, array_nbytes<T>(new_capacity), alignof(T)); + T* new_data = (T*)allocate(array->allocator, array_nbytes<T>(new_capacity), alignof(T)); if(new_data == nullptr) return false; memcpy(new_data, array->data, array_nbytes<T>(new_capacity)); - deallocate(array->allocator, array->data); + deallocate(array->allocator, (u8*)array->data); array->data = new_data; array->capacity = new_capacity; @@ -45,8 +46,8 @@ bool array_resize(Array<T>* array, usize new_capacity) { template<typename T> static inline bool array_grow_if_needed(Array<T>* array) { - assert(array != nullptr); - assert(array->size <= array->capacity); + assert_neq(array, nullptr); + assert_ste(array->size, array->capacity); if(array->size < array->capacity) return true; @@ -56,16 +57,24 @@ static inline bool array_grow_if_needed(Array<T>* array) { template<typename T> static inline T* array_at(const Array<T>* array, usize index) { - assert(array != NULL); - assert(index < array->capacity); + assert_neq(array, nullptr); + assert_st(index, array->capacity); return array->data + index; } template<typename T> +inline T* array_last(const Array<T>* array) { + assert_neq(array, nullptr); + + if(array->size == 0) return nullptr; + return array_at(array, array->size - 1); +} + +template<typename T> bool array_push(Array<T>* array, T* item) { - assert(array != nullptr); - assert(item != nullptr); + assert_neq(array, nullptr); + assert_neq(item, nullptr); bool ret = array_grow_if_needed(array); if(!ret) return false; @@ -79,11 +88,11 @@ bool array_push(Array<T>* array, T* item) { template <typename T> void array_deinit(Array<T>* array) { - assert(array != nullptr); - + assert_neq(array, nullptr); + if (unlikely(array->data == nullptr)) return; - deallocate(array->allocator, array->data); + deallocate(array->allocator, (u8*)array->data); memset(array, 0, sizeof(*array)); } |
