Pass init flags to allocating array utilities
This commit is contained in:
@@ -104,7 +104,8 @@ void _array_copy_capped(GenericArray dst, const GenericArray src, u64 item_size)
|
||||
dst_header->count = copy_count;
|
||||
}
|
||||
|
||||
GenericArray _array_append_alloc(const Allocator *allocator, GenericArray array, void *value, u64 item_size) {
|
||||
GenericArray _array_append_alloc(const Allocator *allocator, GenericArray array, void *value,
|
||||
u64 item_size, ArrayInitFlags flags) {
|
||||
wapp_runtime_assert(allocator != NULL && array != NULL, "`allocator` and `array` should not be NULL");
|
||||
_array_validate(array, item_size);
|
||||
|
||||
@@ -113,7 +114,8 @@ GenericArray _array_append_alloc(const Allocator *allocator, GenericArray array,
|
||||
ArrayHeader *header = _array_header(array);
|
||||
if (header->count >= header->capacity) {
|
||||
u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(header->capacity * 2);
|
||||
output = (GenericArray )_array_alloc_capacity(allocator, new_capacity, header->item_size, false);
|
||||
output = (GenericArray )_array_alloc_capacity(allocator, new_capacity, header->item_size,
|
||||
flags);
|
||||
if (!output) {
|
||||
output = array;
|
||||
goto RETURN_ARRAY_APPEND_ALLOC;
|
||||
@@ -127,7 +129,8 @@ RETURN_ARRAY_APPEND_ALLOC:
|
||||
return output;
|
||||
}
|
||||
|
||||
GenericArray _array_extend_alloc(const Allocator *allocator, GenericArray dst, const GenericArray src, u64 item_size) {
|
||||
GenericArray _array_extend_alloc(const Allocator *allocator, GenericArray dst, const GenericArray src,
|
||||
u64 item_size, ArrayInitFlags flags) {
|
||||
wapp_runtime_assert(allocator != NULL && dst != NULL && src != NULL, "`allocator`, `dst` and `src` should not be NULL");
|
||||
_array_validate(dst, item_size);
|
||||
_array_validate(src, item_size);
|
||||
@@ -139,7 +142,8 @@ GenericArray _array_extend_alloc(const Allocator *allocator, GenericArray dst, c
|
||||
u64 remaining_capacity = dst_header->capacity - dst_header->count;
|
||||
if (src_header->count >= remaining_capacity) {
|
||||
u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(dst_header->capacity * 2);
|
||||
output = (GenericArray )_array_alloc_capacity(allocator, new_capacity, dst_header->item_size, false);
|
||||
output = (GenericArray )_array_alloc_capacity(allocator, new_capacity,
|
||||
dst_header->item_size, flags);
|
||||
if (!output) {
|
||||
output = dst;
|
||||
goto RETURN_ARRAY_EXTEND_ALLOC;
|
||||
@@ -153,7 +157,8 @@ RETURN_ARRAY_EXTEND_ALLOC:
|
||||
return output;
|
||||
}
|
||||
|
||||
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, ArrayInitFlags flags) {
|
||||
wapp_runtime_assert(allocator != NULL && dst != NULL && src != NULL, "`allocator`, `dst` and `src` should not be NULL");
|
||||
_array_validate(dst, item_size);
|
||||
_array_validate(src, item_size);
|
||||
@@ -165,7 +170,7 @@ GenericArray _array_copy_alloc(const Allocator *allocator, GenericArray dst, con
|
||||
if (src_header->count >= dst_header->capacity) {
|
||||
u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(dst_header->capacity * 2);
|
||||
output = (GenericArray )_array_alloc_capacity(allocator, new_capacity,
|
||||
src_header->item_size, false);
|
||||
src_header->item_size, flags);
|
||||
if (!output) {
|
||||
output = dst;
|
||||
goto RETURN_ARRAY_COPY_ALLOC;
|
||||
|
||||
@@ -153,21 +153,24 @@ typedef enum {
|
||||
(_array_copy_capped((GenericArray)DST_ARRAY, \
|
||||
(GenericArray)SRC_ARRAY, \
|
||||
sizeof(TYPE)))
|
||||
#define wapp_array_append_alloc(TYPE, ALLOCATOR_PTR, ARRAY, VALUE_PTR) \
|
||||
#define wapp_array_append_alloc(TYPE, ALLOCATOR_PTR, ARRAY, VALUE_PTR, FLAGS) \
|
||||
((TYPE *)_array_append_alloc(ALLOCATOR_PTR, \
|
||||
(GenericArray)ARRAY, \
|
||||
(u8 *)VALUE_PTR, \
|
||||
sizeof(TYPE)))
|
||||
#define wapp_array_extend_alloc(TYPE, ALLOCATOR_PTR, DST_ARRAY, SRC_ARRAY) \
|
||||
sizeof(TYPE), \
|
||||
FLAGS))
|
||||
#define wapp_array_extend_alloc(TYPE, ALLOCATOR_PTR, DST_ARRAY, SRC_ARRAY, FLAGS) \
|
||||
((TYPE *)_array_extend_alloc(ALLOCATOR_PTR, \
|
||||
(GenericArray)DST_ARRAY, \
|
||||
(GenericArray)SRC_ARRAY, \
|
||||
sizeof(TYPE)))
|
||||
#define wapp_array_copy_alloc(TYPE, ALLOCATOR_PTR, DST_ARRAY, SRC_ARRAY) \
|
||||
sizeof(TYPE), \
|
||||
FLAGS))
|
||||
#define wapp_array_copy_alloc(TYPE, ALLOCATOR_PTR, DST_ARRAY, SRC_ARRAY, FLAGS) \
|
||||
((TYPE *)_array_copy_alloc(ALLOCATOR_PTR, \
|
||||
(GenericArray)DST_ARRAY, \
|
||||
(GenericArray)SRC_ARRAY, \
|
||||
sizeof(TYPE)))
|
||||
sizeof(TYPE), \
|
||||
FLAGS))
|
||||
#define wapp_array_clear(TYPE, ARRAY) \
|
||||
(_array_clear((GenericArray)ARRAY, \
|
||||
sizeof(TYPE)))
|
||||
@@ -190,9 +193,12 @@ void _array_set(GenericArray array, u64 index, void *value, u64 item_siz
|
||||
void _array_append_capped(GenericArray array, void *value, u64 item_size);
|
||||
void _array_extend_capped(GenericArray dst, const GenericArray src, u64 item_size);
|
||||
void _array_copy_capped(GenericArray dst, const GenericArray src, u64 item_size);
|
||||
GenericArray _array_append_alloc(const Allocator *allocator, GenericArray array, void *value, u64 item_size);
|
||||
GenericArray _array_extend_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);
|
||||
GenericArray _array_append_alloc(const Allocator *allocator, GenericArray array, void *value,
|
||||
u64 item_size, ArrayInitFlags flags);
|
||||
GenericArray _array_extend_alloc(const Allocator *allocator, GenericArray dst, const GenericArray src,
|
||||
u64 item_size, ArrayInitFlags flags);
|
||||
GenericArray _array_copy_alloc(const Allocator *allocator, GenericArray dst, const GenericArray src,
|
||||
u64 item_size, ArrayInitFlags flags);
|
||||
void *_array_pop(GenericArray array, u64 item_size);
|
||||
void _array_clear(GenericArray array, u64 item_size);
|
||||
u64 _array_calc_alloc_size(u64 capacity, u64 item_size);
|
||||
|
||||
Reference in New Issue
Block a user