Add option to fill array when allocating
This commit is contained in:
@@ -66,7 +66,7 @@ GenericArray *_array_append_alloc(const Allocator *allocator, GenericArray *arra
|
|||||||
|
|
||||||
if (array->count >= array->capacity) {
|
if (array->count >= array->capacity) {
|
||||||
u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(array->capacity * 2);
|
u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(array->capacity * 2);
|
||||||
output = (GenericArray *)_array_alloc_capacity(allocator, new_capacity, array->item_size);
|
output = (GenericArray *)_array_alloc_capacity(allocator, new_capacity, array->item_size, false);
|
||||||
if (!output) {
|
if (!output) {
|
||||||
output = array;
|
output = array;
|
||||||
goto RETURN_ARRAY_APPEND_ALLOC;
|
goto RETURN_ARRAY_APPEND_ALLOC;
|
||||||
@@ -90,7 +90,7 @@ GenericArray *_array_extend_alloc(const Allocator *allocator, GenericArray *dst,
|
|||||||
u64 remaining_capacity = dst->capacity - dst->count;
|
u64 remaining_capacity = dst->capacity - dst->count;
|
||||||
if (src->count >= remaining_capacity) {
|
if (src->count >= remaining_capacity) {
|
||||||
u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(dst->capacity * 2);
|
u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(dst->capacity * 2);
|
||||||
output = (GenericArray *)_array_alloc_capacity(allocator, new_capacity, dst->item_size);
|
output = (GenericArray *)_array_alloc_capacity(allocator, new_capacity, dst->item_size, false);
|
||||||
if (!output) {
|
if (!output) {
|
||||||
output = dst;
|
output = dst;
|
||||||
goto RETURN_ARRAY_EXTEND_ALLOC;
|
goto RETURN_ARRAY_EXTEND_ALLOC;
|
||||||
@@ -113,7 +113,7 @@ GenericArray *_array_copy_alloc(const Allocator *allocator, GenericArray *dst, c
|
|||||||
|
|
||||||
if (src->count >= dst->capacity) {
|
if (src->count >= dst->capacity) {
|
||||||
u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(dst->capacity * 2);
|
u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(dst->capacity * 2);
|
||||||
output = (GenericArray *)_array_alloc_capacity(allocator, new_capacity, src->item_size);
|
output = (GenericArray *)_array_alloc_capacity(allocator, new_capacity, src->item_size, false);
|
||||||
if (!output) {
|
if (!output) {
|
||||||
output = dst;
|
output = dst;
|
||||||
goto RETURN_ARRAY_COPY_ALLOC;
|
goto RETURN_ARRAY_COPY_ALLOC;
|
||||||
@@ -145,7 +145,7 @@ void _array_clear(GenericArray *array, u64 item_size) {
|
|||||||
array->count = 0;
|
array->count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
GenericArray *_array_alloc_capacity(const Allocator *allocator, u64 capacity, u64 item_size) {
|
GenericArray *_array_alloc_capacity(const Allocator *allocator, u64 capacity, u64 item_size, b8 fill) {
|
||||||
wapp_runtime_assert(allocator != NULL, "`allocator` should not be NULL");
|
wapp_runtime_assert(allocator != NULL, "`allocator` should not be NULL");
|
||||||
|
|
||||||
GenericArray *output = NULL;
|
GenericArray *output = NULL;
|
||||||
@@ -158,7 +158,7 @@ GenericArray *_array_alloc_capacity(const Allocator *allocator, u64 capacity, u6
|
|||||||
}
|
}
|
||||||
|
|
||||||
output->magic = WAPP_ARRAY_MAGIC;
|
output->magic = WAPP_ARRAY_MAGIC;
|
||||||
output->count = 0;
|
output->count = fill ? capacity : 0;
|
||||||
output->capacity = capacity;
|
output->capacity = capacity;
|
||||||
output->item_size = item_size;
|
output->item_size = item_size;
|
||||||
output->items = (void *)(output + 1);
|
output->items = (void *)(output + 1);
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ BEGIN_C_LINKAGE
|
|||||||
#define _calc_array_count(TYPE, ...) wapp_misc_utils_va_args_count(TYPE, __VA_ARGS__)
|
#define _calc_array_count(TYPE, ...) wapp_misc_utils_va_args_count(TYPE, __VA_ARGS__)
|
||||||
#define _calc_array_capacity(TYPE, ...) wapp_misc_utils_u64_round_up_pow2(_calc_array_count(TYPE, __VA_ARGS__) * 2)
|
#define _calc_array_capacity(TYPE, ...) wapp_misc_utils_u64_round_up_pow2(_calc_array_count(TYPE, __VA_ARGS__) * 2)
|
||||||
|
|
||||||
#define wapp_array_alloc_capacity(ELEM_TYPE, ARRAY_TYPE, ALLOCATOR_PTR, CAPACITY) \
|
#define wapp_array_alloc_capacity(ELEM_TYPE, ARRAY_TYPE, ALLOCATOR_PTR, CAPACITY, FILL) \
|
||||||
((ARRAY_TYPE *)_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY, sizeof(ELEM_TYPE)))
|
((ARRAY_TYPE *)_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY, sizeof(ELEM_TYPE), FILL))
|
||||||
|
|
||||||
#define WAPP_DEF_ARRAY_TYPE(T, NAME) \
|
#define WAPP_DEF_ARRAY_TYPE(T, NAME) \
|
||||||
typedef struct { \
|
typedef struct { \
|
||||||
@@ -131,7 +131,7 @@ GenericArray *_array_extend_alloc(const Allocator *allocator, GenericArray *dst,
|
|||||||
GenericArray *_array_copy_alloc(const Allocator *allocator, GenericArray *dst, const GenericArray *src, u64 item_size);
|
GenericArray *_array_copy_alloc(const Allocator *allocator, GenericArray *dst, const GenericArray *src, u64 item_size);
|
||||||
void *_array_pop(GenericArray *array, u64 item_size);
|
void *_array_pop(GenericArray *array, u64 item_size);
|
||||||
void _array_clear(GenericArray *array, u64 item_size);
|
void _array_clear(GenericArray *array, u64 item_size);
|
||||||
GenericArray *_array_alloc_capacity(const Allocator *allocator, u64 capacity, u64 item_size);
|
GenericArray *_array_alloc_capacity(const Allocator *allocator, u64 capacity, u64 item_size, b8 fill);
|
||||||
|
|
||||||
// Base array types
|
// Base array types
|
||||||
typedef struct str8 Str8;
|
typedef struct str8 Str8;
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ TestFuncResult test_i32_array_alloc_capacity(void) {
|
|||||||
|
|
||||||
Allocator allocator = wapp_mem_arena_allocator_init(MiB(4));
|
Allocator allocator = wapp_mem_arena_allocator_init(MiB(4));
|
||||||
u64 capacity = 32;
|
u64 capacity = 32;
|
||||||
I32Array *array = wapp_array_alloc_capacity(i32, I32Array, &allocator, capacity);
|
I32Array *array = wapp_array_alloc_capacity(i32, I32Array, &allocator, capacity, false);
|
||||||
|
|
||||||
result = array && array->capacity == capacity;
|
result = array && array->capacity == capacity;
|
||||||
|
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ TestFuncResult test_i32_array_alloc_capacity(void) {
|
|||||||
|
|
||||||
Allocator allocator = wapp_mem_arena_allocator_init(MiB(4));
|
Allocator allocator = wapp_mem_arena_allocator_init(MiB(4));
|
||||||
u64 capacity = 32;
|
u64 capacity = 32;
|
||||||
I32Array *array = wapp_array_alloc_capacity(i32, I32Array, &allocator, capacity);
|
I32Array *array = wapp_array_alloc_capacity(i32, I32Array, &allocator, capacity, false);
|
||||||
|
|
||||||
result = array && array->capacity == capacity;
|
result = array && array->capacity == capacity;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user