Add ability to fill array with capacity

This commit is contained in:
2025-12-28 18:31:49 +00:00
parent a065dfb573
commit 1cbb148a1f
3 changed files with 18 additions and 12 deletions

View File

@@ -43,13 +43,13 @@ BEGIN_C_LINKAGE
items, \ items, \
}; \ }; \
}()) }())
#define wapp_array_with_capacity(ELEM_TYPE, ARRAY_TYPE, CAPACITY) ([&]() { \ #define wapp_array_with_capacity(ELEM_TYPE, ARRAY_TYPE, CAPACITY, FILL) ([&]() { \
wapp_persist ELEM_TYPE items[sizeof(ELEM_TYPE) == sizeof(*((ARRAY_TYPE{}).items)) ? \ wapp_persist ELEM_TYPE items[sizeof(ELEM_TYPE) == sizeof(*((ARRAY_TYPE{}).items)) ? \
CAPACITY : -1] = {}; \ CAPACITY : -1] = {}; \
\ \
return ARRAY_TYPE{ \ return ARRAY_TYPE{ \
WAPP_ARRAY_MAGIC, \ WAPP_ARRAY_MAGIC, \
0, \ FILL ? CAPACITY : 0, \
CAPACITY, \ CAPACITY, \
sizeof(ELEM_TYPE), \ sizeof(ELEM_TYPE), \
items, \ items, \
@@ -74,10 +74,10 @@ BEGIN_C_LINKAGE
_calc_array_capacity(ELEM_TYPE, __VA_ARGS__) : \ _calc_array_capacity(ELEM_TYPE, __VA_ARGS__) : \
-1]){__VA_ARGS__} \ -1]){__VA_ARGS__} \
}) })
#define wapp_array_with_capacity(ELEM_TYPE, ARRAY_TYPE, CAPACITY) \ #define wapp_array_with_capacity(ELEM_TYPE, ARRAY_TYPE, CAPACITY, FILL) \
((ARRAY_TYPE){ \ ((ARRAY_TYPE){ \
.magic = WAPP_ARRAY_MAGIC, \ .magic = WAPP_ARRAY_MAGIC, \
.count = 0, \ .count = FILL ? CAPACITY : 0, \
.capacity = CAPACITY, \ .capacity = CAPACITY, \
.item_size = sizeof(ELEM_TYPE), \ .item_size = sizeof(ELEM_TYPE), \
.items = (ELEM_TYPE[sizeof(ELEM_TYPE) == sizeof(*((ARRAY_TYPE){0}.items)) ? \ .items = (ELEM_TYPE[sizeof(ELEM_TYPE) == sizeof(*((ARRAY_TYPE){0}.items)) ? \

View File

@@ -25,8 +25,11 @@ TestFuncResult test_i32_array(void) {
TestFuncResult test_i32_array_with_capacity(void) { TestFuncResult test_i32_array_with_capacity(void) {
b8 result; b8 result;
I32Array array = wapp_array_with_capacity(i32, I32Array, 64); I32Array array1 = wapp_array_with_capacity(i32, I32Array, 64, false);
result = array.count == 0 && array.capacity == 64; result = array1.count == 0 && array1.capacity == 64;
I32Array array2 = wapp_array_with_capacity(i32, I32Array, 64, true);
result = array2.count == 64 && array2.capacity == 64;
return wapp_tester_result(result); return wapp_tester_result(result);
} }
@@ -76,7 +79,7 @@ TestFuncResult test_i32_array_set(void) {
TestFuncResult test_i32_array_append_capped(void) { TestFuncResult test_i32_array_append_capped(void) {
b8 result; b8 result;
I32Array array = wapp_array_with_capacity(i32, I32Array, 64); I32Array array = wapp_array_with_capacity(i32, I32Array, 64, false);
wapp_array_append_capped(i32, &array, &((i32){10})); wapp_array_append_capped(i32, &array, &((i32){10}));
result = array.count == 1; result = array.count == 1;
@@ -246,7 +249,7 @@ TestFuncResult test_i32_array_pop(void) {
b8 result; b8 result;
I32Array array1 = wapp_array(i32, I32Array, 0, 1, 2, 3, 4, 5, 6, 7, 8); I32Array array1 = wapp_array(i32, I32Array, 0, 1, 2, 3, 4, 5, 6, 7, 8);
I32Array array2 = wapp_array_with_capacity(i32, I32Array, 32); I32Array array2 = wapp_array_with_capacity(i32, I32Array, 32, false);
i32 item1 = wapp_array_pop(i32, &array1); i32 item1 = wapp_array_pop(i32, &array1);
i32 item2 = wapp_array_pop(i32, &array2); i32 item2 = wapp_array_pop(i32, &array2);

View File

@@ -25,8 +25,11 @@ TestFuncResult test_i32_array(void) {
TestFuncResult test_i32_array_with_capacity(void) { TestFuncResult test_i32_array_with_capacity(void) {
b8 result; b8 result;
I32Array array = wapp_array_with_capacity(i32, I32Array, 64); I32Array array1 = wapp_array_with_capacity(i32, I32Array, 64, false);
result = array.count == 0 && array.capacity == 64; result = array1.count == 0 && array1.capacity == 64;
I32Array array2 = wapp_array_with_capacity(i32, I32Array, 64, true);
result = array2.count == 64 && array2.capacity == 64;
return wapp_tester_result(result); return wapp_tester_result(result);
} }
@@ -76,7 +79,7 @@ TestFuncResult test_i32_array_set(void) {
TestFuncResult test_i32_array_append_capped(void) { TestFuncResult test_i32_array_append_capped(void) {
b8 result; b8 result;
I32Array array = wapp_array_with_capacity(i32, I32Array, 64); I32Array array = wapp_array_with_capacity(i32, I32Array, 64, false);
i32 item1 = 10; i32 item1 = 10;
wapp_array_append_capped(i32, &array, &item1); wapp_array_append_capped(i32, &array, &item1);
@@ -262,7 +265,7 @@ TestFuncResult test_i32_array_pop(void) {
b8 result; b8 result;
I32Array array1 = wapp_array(i32, I32Array, 0, 1, 2, 3, 4, 5, 6, 7, 8); I32Array array1 = wapp_array(i32, I32Array, 0, 1, 2, 3, 4, 5, 6, 7, 8);
I32Array array2 = wapp_array_with_capacity(i32, I32Array, 32); I32Array array2 = wapp_array_with_capacity(i32, I32Array, 32, false);
i32 item1 = wapp_array_pop(i32, &array1); i32 item1 = wapp_array_pop(i32, &array1);
i32 item2 = wapp_array_pop(i32, &array2); i32 item2 = wapp_array_pop(i32, &array2);