diff --git a/codegen/array/make_array.py b/codegen/array/make_array.py index 92b8977..39cec9d 100644 --- a/codegen/array/make_array.py +++ b/codegen/array/make_array.py @@ -77,8 +77,8 @@ def make_array(user_datatypes: Dict[CDataType, ArrayData] = {}): for _type in CType: if _type == CType.VOID: - datatypes["void *"] = ArrayData( - array_typename="VoidPArray", + datatypes[_type.value] = ArrayData( + array_typename="GenericArray", ) continue @@ -137,7 +137,7 @@ def make_array(user_datatypes: Dict[CDataType, ArrayData] = {}): ], ) - if isinstance(_type, str) and _type == "void *": + if isinstance(_type, str) and _type == CType.VOID.value: alloc_capacity_func = CFunc( name=f"_array_alloc_capacity", ret_type=array, @@ -156,275 +156,276 @@ def make_array(user_datatypes: Dict[CDataType, ArrayData] = {}): pointer=CPointer(CPointerType.SINGLE), ) generic_funcs.append(alloc_capacity_func) - - stack_array_cmacro = CMacro( - name=f"wapp_{type_string_lower}_array(...)", - value=__format_func_body( - filename=snippets_dir / "stack_array", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) - stack_array_cppmacro = CMacro( - name=f"wapp_{type_string_lower}_array(...)", - value=__format_func_body( - filename=snippets_dir / "stack_array_cpp", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) + else: + stack_array_cmacro = CMacro( + name=f"wapp_{type_string_lower}_array(...)", + value=__format_func_body( + filename=snippets_dir / "stack_array", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) + stack_array_cppmacro = CMacro( + name=f"wapp_{type_string_lower}_array(...)", + value=__format_func_body( + filename=snippets_dir / "stack_array_cpp", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) - stack_capacity_array_cmacro = CMacro( - name=f"wapp_{type_string_lower}_array_with_capacity(CAPACITY)", - value=__format_func_body( - filename=snippets_dir / "stack_capacity_array", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) - stack_capacity_array_cppmacro = CMacro( - name=f"wapp_{type_string_lower}_array_with_capacity(CAPACITY)", - value=__format_func_body( - filename=snippets_dir / "stack_capacity_array_cpp", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) + stack_capacity_array_cmacro = CMacro( + name=f"wapp_{type_string_lower}_array_with_capacity(CAPACITY)", + value=__format_func_body( + filename=snippets_dir / "stack_capacity_array", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) + stack_capacity_array_cppmacro = CMacro( + name=f"wapp_{type_string_lower}_array_with_capacity(CAPACITY)", + value=__format_func_body( + filename=snippets_dir / "stack_capacity_array_cpp", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) - alloc_capacity_array_macro = CMacro( - name=f"wapp_{type_string_lower}_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY)", - value=__format_func_body( - filename=snippets_dir / "alloc_capacity_macro", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) + alloc_capacity_array_macro = CMacro( + name=f"wapp_{type_string_lower}_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY)", + value=__format_func_body( + filename=snippets_dir / "alloc_capacity_macro", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) - array_pop_cmacro = CMacro( - name=f"wapp_{type_string_lower}_array_pop(ARRAY_PTR)", - value=__format_func_body( - filename=snippets_dir / "array_pop_macro", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) - array_pop_cppmacro = CMacro( - name=f"wapp_{type_string_lower}_array_pop(ARRAY_PTR)", - value=__format_func_body( - filename=snippets_dir / "array_pop_macro_cpp", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) + array_pop_cmacro = CMacro( + name=f"wapp_{type_string_lower}_array_pop(ARRAY_PTR)", + value=__format_func_body( + filename=snippets_dir / "array_pop_macro", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) + array_pop_cppmacro = CMacro( + name=f"wapp_{type_string_lower}_array_pop(ARRAY_PTR)", + value=__format_func_body( + filename=snippets_dir / "array_pop_macro_cpp", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) - get_func = CFunc( - name=f"wapp_{type_string_lower}_array_get", - ret_type=type_string, - args=[ - CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), - CArg(name="index", _type=CType.U64), - ], - body=__format_func_body( - filename=snippets_dir / "array_get", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - pointer=CPointer(CPointerType.SINGLE), - ) + get_func = CFunc( + name=f"wapp_{type_string_lower}_array_get", + ret_type=type_string, + args=[ + CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), + CArg(name="index", _type=CType.U64), + ], + body=__format_func_body( + filename=snippets_dir / "array_get", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + pointer=CPointer(CPointerType.SINGLE), + ) - set_func = CFunc( - name=f"wapp_{type_string_lower}_array_set", - ret_type=CType.VOID, - args=[ - CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), - CArg(name="index", _type=CType.U64), - CArg(name="item", _type=type_string, pointer=CPointer(CPointerType.SINGLE)), - ], - body=__format_func_body( - filename=snippets_dir / "array_set", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) + set_func = CFunc( + name=f"wapp_{type_string_lower}_array_set", + ret_type=CType.VOID, + args=[ + CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), + CArg(name="index", _type=CType.U64), + CArg(name="item", _type=type_string, pointer=CPointer(CPointerType.SINGLE)), + ], + body=__format_func_body( + filename=snippets_dir / "array_set", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) - append_capped_func = CFunc( - name=f"wapp_{type_string_lower}_array_append_capped", - ret_type=CType.VOID, - args=[ - CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), - CArg(name="item", _type=type_string, pointer=CPointer(CPointerType.SINGLE)), - ], - body=__format_func_body( - filename=snippets_dir / "append_capped", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) + append_capped_func = CFunc( + name=f"wapp_{type_string_lower}_array_append_capped", + ret_type=CType.VOID, + args=[ + CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), + CArg(name="item", _type=type_string, pointer=CPointer(CPointerType.SINGLE)), + ], + body=__format_func_body( + filename=snippets_dir / "append_capped", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) - extend_capped_func = CFunc( - name=f"wapp_{type_string_lower}_array_extend_capped", - ret_type=CType.VOID, - args=[ - CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), - CArg(name="other", _type=array, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), - ], - body=__format_func_body( - filename=snippets_dir / "extend_capped", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) + extend_capped_func = CFunc( + name=f"wapp_{type_string_lower}_array_extend_capped", + ret_type=CType.VOID, + args=[ + CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), + CArg(name="other", _type=array, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), + ], + body=__format_func_body( + filename=snippets_dir / "extend_capped", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) - clear_func = CFunc( - name=f"wapp_{type_string_lower}_array_clear", - ret_type=CType.VOID, - args=[ - CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), - ], - body=__format_func_body( - filename=snippets_dir / "clear", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) + clear_func = CFunc( + name=f"wapp_{type_string_lower}_array_clear", + ret_type=CType.VOID, + args=[ + CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), + ], + body=__format_func_body( + filename=snippets_dir / "clear", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) - copy_capped_func = CFunc( - name=f"wapp_{type_string_lower}_array_copy_capped", - ret_type=CType.VOID, - args=[ - CArg(name="src", _type=array, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), - CArg(name="dst", _type=array, pointer=CPointer(CPointerType.SINGLE)), - ], - body=__format_func_body( - filename=snippets_dir / "copy_capped", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - ) + copy_capped_func = CFunc( + name=f"wapp_{type_string_lower}_array_copy_capped", + ret_type=CType.VOID, + args=[ + CArg(name="src", _type=array, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), + CArg(name="dst", _type=array, pointer=CPointer(CPointerType.SINGLE)), + ], + body=__format_func_body( + filename=snippets_dir / "copy_capped", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + ) - append_alloc_func = CFunc( - name=f"wapp_{type_string_lower}_array_append_alloc", - ret_type=array, - args=[ - CArg(name="allocator", _type="Allocator", pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), - CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), - CArg(name="item", _type=type_string, pointer=CPointer(CPointerType.SINGLE)), - ], - body=__format_func_body( - filename=snippets_dir / "append_alloc", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - pointer=CPointer(CPointerType.SINGLE), - ) + append_alloc_func = CFunc( + name=f"wapp_{type_string_lower}_array_append_alloc", + ret_type=array, + args=[ + CArg(name="allocator", _type="Allocator", pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), + CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), + CArg(name="item", _type=type_string, pointer=CPointer(CPointerType.SINGLE)), + ], + body=__format_func_body( + filename=snippets_dir / "append_alloc", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + pointer=CPointer(CPointerType.SINGLE), + ) - extend_alloc_func = CFunc( - name=f"wapp_{type_string_lower}_array_extend_alloc", - ret_type=array, - args=[ - CArg(name="allocator", _type="Allocator", pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), - CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), - CArg(name="other", _type=array, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), - ], - body=__format_func_body( - filename=snippets_dir / "extend_alloc", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - pointer=CPointer(CPointerType.SINGLE), - ) + extend_alloc_func = CFunc( + name=f"wapp_{type_string_lower}_array_extend_alloc", + ret_type=array, + args=[ + CArg(name="allocator", _type="Allocator", pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), + CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), + CArg(name="other", _type=array, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), + ], + body=__format_func_body( + filename=snippets_dir / "extend_alloc", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + pointer=CPointer(CPointerType.SINGLE), + ) - copy_alloc_func = CFunc( - name=f"wapp_{type_string_lower}_array_copy_alloc", - ret_type=array, - args=[ - CArg(name="allocator", _type="Allocator", pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), - CArg(name="src", _type=array, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), - CArg(name="dst", _type=array, pointer=CPointer(CPointerType.SINGLE)), - ], - body=__format_func_body( - filename=snippets_dir / "copy_alloc", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - pointer=CPointer(CPointerType.SINGLE), - ) + copy_alloc_func = CFunc( + name=f"wapp_{type_string_lower}_array_copy_alloc", + ret_type=array, + args=[ + CArg(name="allocator", _type="Allocator", pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), + CArg(name="src", _type=array, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), + CArg(name="dst", _type=array, pointer=CPointer(CPointerType.SINGLE)), + ], + body=__format_func_body( + filename=snippets_dir / "copy_alloc", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + pointer=CPointer(CPointerType.SINGLE), + ) - pop_func = CFunc( - name=f"_{type_string_lower}_array_pop", - ret_type=type_string, - args=[ - CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), - ], - body=__format_func_body( - filename=snippets_dir / "array_pop", - type_string=type_string, - type_string_upper=type_string_upper, - type_string_lower=type_string_lower, - array_typename=array_data.array_typename, - ), - pointer=CPointer(CPointerType.SINGLE), - ) + pop_func = CFunc( + name=f"_{type_string_lower}_array_pop", + ret_type=type_string, + args=[ + CArg(name="array", _type=array, pointer=CPointer(CPointerType.SINGLE)), + ], + body=__format_func_body( + filename=snippets_dir / "array_pop", + type_string=type_string, + type_string_upper=type_string_upper, + type_string_lower=type_string_lower, + array_typename=array_data.array_typename, + ), + pointer=CPointer(CPointerType.SINGLE), + ) + + header.macros.extend([ + alloc_capacity_array_macro, + ]) + header.c_macros.extend([ + stack_array_cmacro, + stack_capacity_array_cmacro, + array_pop_cmacro, + ]) + header.cpp_macros.extend([ + stack_array_cppmacro, + stack_capacity_array_cppmacro, + array_pop_cppmacro, + ]) + header.funcs.extend([ + get_func, + set_func, + append_capped_func, + extend_capped_func, + clear_func, + copy_capped_func, + append_alloc_func, + extend_alloc_func, + copy_alloc_func, + pop_func, + ]) header.decl_types.extend(array_data.hdr_decl_types) - header.macros.extend([ - alloc_capacity_array_macro, - ]) - header.c_macros.extend([ - stack_array_cmacro, - stack_capacity_array_cmacro, - array_pop_cmacro, - ]) - header.cpp_macros.extend([ - stack_array_cppmacro, - stack_capacity_array_cppmacro, - array_pop_cppmacro, - ]) header.types.extend([array]) - header.funcs.extend([ - get_func, - set_func, - append_capped_func, - extend_capped_func, - clear_func, - copy_capped_func, - append_alloc_func, - extend_alloc_func, - copy_alloc_func, - pop_func, - ]) source.decl_types.extend(array_data.src_decl_types) source.funcs = header.funcs diff --git a/codegen/array/snippets/alloc_capacity b/codegen/array/snippets/alloc_capacity index 0fb0f4b..1fe9e13 100644 --- a/codegen/array/snippets/alloc_capacity +++ b/codegen/array/snippets/alloc_capacity @@ -1,4 +1,4 @@ - wapp_debug_assert(allocator != NULL, "`array` should not be NULL"); + wapp_debug_assert(allocator != NULL, "`allocator` should not be NULL"); u64 allocation_size = sizeof({ArrayType}) + item_size * capacity; {ArrayType} *array = wapp_mem_allocator_alloc(allocator, allocation_size); diff --git a/src/primitives/array/array.c b/src/primitives/array/array.c index 38bcb04..2beec0c 100644 --- a/src/primitives/array/array.c +++ b/src/primitives/array/array.c @@ -159,155 +159,6 @@ Str8 *_str8_array_pop(Str8Array *array) { return out; } -void * *wapp_void_ptr_array_get(const VoidPArray *array, u64 index) { - wapp_debug_assert(array != NULL, "`array` should not be NULL"); - wapp_runtime_assert(index < array->count, "`index` is out of bounds"); - - u8 *ptr = (u8 *)(array->items) + (array->item_size * index); - return (void * *)ptr; -} - -void wapp_void_ptr_array_set(VoidPArray *array, u64 index, void * *item) { - void * *ptr = wapp_void_ptr_array_get(array, index); - - memcpy((void *)ptr, (void *)item, array->item_size); -} - -void wapp_void_ptr_array_append_capped(VoidPArray *array, void * *item) { - wapp_debug_assert(array != NULL, "`array` should not be NULL"); - wapp_runtime_assert(array->count < array->capacity, "`array` is full"); - - u64 index = (array->count)++; - wapp_void_ptr_array_set(array, index, item); -} - -void wapp_void_ptr_array_extend_capped(VoidPArray *array, const VoidPArray *other) { - wapp_debug_assert(array != NULL && other != NULL, "`array` and `other` should not be NULL"); - - u64 remaining_capacity = array->capacity - array->count; - wapp_runtime_assert(other->count < remaining_capacity, "`array` does not have enough capacity"); - - void * *item; - - // NOTE (Abdelrahman): Uses a while loop instead of a for loop to get rid of - // MSVC Spectre mitigation warnings - u64 items_to_add = other->count; - u64 item_index = 0; - b32 running = true; - while (running) { - item = wapp_void_ptr_array_get(other, item_index); - ++item_index; - running = item_index < items_to_add; - - if (!item) { - continue; - } - - wapp_void_ptr_array_append_capped(array, item); - } -} - -void wapp_void_ptr_array_clear(VoidPArray *array) { - wapp_debug_assert(array != NULL, "`array` should not be NULL"); - array->count = 0; -} - -void wapp_void_ptr_array_copy_capped(const VoidPArray *src, VoidPArray *dst) { - wapp_debug_assert(src != NULL && dst != NULL, "`src` and `dst` should not be NULL"); - - wapp_void_ptr_array_clear(dst); - - void * *item; - - // NOTE (Abdelrahman): Uses a while loop instead of a for loop to get rid of - // MSVC Spectre mitigation warnings - u64 to_copy = src->count < dst->capacity ? src->count : dst->capacity; - u64 item_index = 0; - b32 running = true; - while (running) { - item = wapp_void_ptr_array_get(src, item_index); - ++item_index; - running = item_index < to_copy; - - if (!item) { - continue; - } - - wapp_void_ptr_array_append_capped(dst, item); - } -} - -VoidPArray *wapp_void_ptr_array_append_alloc(const Allocator *allocator, VoidPArray *array, void * *item) { - wapp_debug_assert(allocator != NULL && array != NULL, "`allocator` and `array` should not be NULL"); - - VoidPArray *output = array; - - if (array->count >= array->capacity) { - u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(array->capacity * 2); - output = (VoidPArray *)_array_alloc_capacity(allocator, new_capacity, array->item_size); - if (!output) { - output = array; - goto RETURN_VOID_PTR_ARRAY_APPEND_ALLOC; - } - wapp_void_ptr_array_copy_capped(array, output); - } - - wapp_void_ptr_array_append_capped(output, item); - -RETURN_VOID_PTR_ARRAY_APPEND_ALLOC: - return output; -} - -VoidPArray *wapp_void_ptr_array_extend_alloc(const Allocator *allocator, VoidPArray *array, const VoidPArray *other) { - wapp_debug_assert(allocator != NULL && array != NULL && other != NULL, "`allocator`, `array` and `other` should not be NULL"); - - VoidPArray *output = array; - - u64 remaining_capacity = array->capacity - array->count; - if (other->count >= remaining_capacity) { - u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(array->capacity * 2); - output = (VoidPArray *)_array_alloc_capacity(allocator, new_capacity, array->item_size); - if (!output) { - output = array; - goto RETURN_VOID_PTR_ARRAY_EXTEND_ALLOC; - } - wapp_void_ptr_array_copy_capped(array, output); - } - - wapp_void_ptr_array_extend_capped(output, other); - -RETURN_VOID_PTR_ARRAY_EXTEND_ALLOC: - return output; -} - -VoidPArray *wapp_void_ptr_array_copy_alloc(const Allocator *allocator, const VoidPArray *src, VoidPArray *dst) { - wapp_debug_assert(allocator != NULL && src != NULL && dst != NULL, "`allocator`, `src` and `dst` should not be NULL"); - - VoidPArray *output = dst; - - if (src->count >= dst->capacity) { - u64 new_capacity = wapp_misc_utils_u64_round_up_pow2(dst->capacity * 2); - output = (VoidPArray *)_array_alloc_capacity(allocator, new_capacity, src->item_size); - if (!output) { - output = dst; - goto RETURN_VOID_PTR_ARRAY_COPY_ALLOC; - } - } - - wapp_void_ptr_array_clear(output); - wapp_void_ptr_array_copy_capped(src, output); - -RETURN_VOID_PTR_ARRAY_COPY_ALLOC: - return output; -} - -void * *_void_ptr_array_pop(VoidPArray *array) { - u64 index = array->count - 1; - void * *out = wapp_void_ptr_array_get(array, index); - --(array->count); - return out; -} - b32 *wapp_b32_array_get(const B32Array *array, u64 index) { wapp_debug_assert(array != NULL, "`array` should not be NULL"); wapp_runtime_assert(index < array->count, "`index` is out of bounds"); @@ -2990,16 +2841,16 @@ uptr *_uptr_array_pop(UptrArray *array) { return out; } -VoidPArray *_array_alloc_capacity(const Allocator *allocator, u64 capacity, u64 item_size) { - wapp_debug_assert(allocator != NULL, "`array` should not be NULL"); +GenericArray *_array_alloc_capacity(const Allocator *allocator, u64 capacity, u64 item_size) { + wapp_debug_assert(allocator != NULL, "`allocator` should not be NULL"); - u64 allocation_size = sizeof(VoidPArray) + item_size * capacity; - VoidPArray *array = wapp_mem_allocator_alloc(allocator, allocation_size); + u64 allocation_size = sizeof(GenericArray) + item_size * capacity; + GenericArray *array = wapp_mem_allocator_alloc(allocator, allocation_size); if (!array) { goto RETURN_GENERIC_ARRAY_ALLOC; } - array->items = (void * *)((u8 *)array + sizeof(VoidPArray)); + array->items = (void *)((u8 *)array + sizeof(GenericArray)); array->count = 0; array->capacity = capacity; array->item_size = item_size; diff --git a/src/primitives/array/array.h b/src/primitives/array/array.h index 50533cf..38efe8d 100644 --- a/src/primitives/array/array.h +++ b/src/primitives/array/array.h @@ -15,7 +15,6 @@ BEGIN_C_LINKAGE #endif // !WAPP_PLATFORM_CPP #define wapp_str8_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY) ((Str8Array *)_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY, sizeof(Str8))) -#define wapp_void_ptr_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY) ((VoidPArray *)_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY, sizeof(void *))) #define wapp_b32_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY) ((B32Array *)_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY, sizeof(b32))) #define wapp_char_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY) ((CharArray *)_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY, sizeof(char))) #define wapp_c8_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY) ((C8Array *)_array_alloc_capacity(ALLOCATOR_PTR, CAPACITY, sizeof(c8))) @@ -53,23 +52,6 @@ BEGIN_C_LINKAGE *_str8_array_pop(ARRAY_PTR) : \ Str8{} \ ) -#define wapp_void_ptr_array(...) ([&]() { \ - persistent void * buf[wapp_misc_utils_u64_round_up_pow2(wapp_misc_utils_va_args_count(void *, __VA_ARGS__) * 2)] = {__VA_ARGS__}; \ - return VoidPArray{ \ - buf, \ - wapp_misc_utils_va_args_count(void *, __VA_ARGS__), \ - wapp_misc_utils_u64_round_up_pow2(wapp_misc_utils_va_args_count(void *, __VA_ARGS__) * 2), \ - sizeof(void *) \ - }; \ -}()) -#define wapp_void_ptr_array_with_capacity(CAPACITY) ([&]() { \ - persistent void * buf[CAPACITY] = {}; \ - return VoidPArray{buf, 0, CAPACITY, sizeof(void *)}; \ -}()) -#define wapp_void_ptr_array_pop(ARRAY_PTR) (ARRAY_PTR != NULL && (ARRAY_PTR)->count > 0 ? \ - *_void_ptr_array_pop(ARRAY_PTR) : \ - void *{} \ -) #define wapp_b32_array(...) ([&]() { \ persistent b32 buf[wapp_misc_utils_u64_round_up_pow2(wapp_misc_utils_va_args_count(b32, __VA_ARGS__) * 2)] = {__VA_ARGS__}; \ return B32Array{ \ @@ -388,17 +370,6 @@ BEGIN_C_LINKAGE *_str8_array_pop(ARRAY_PTR) : \ (Str8){0} \ ) -#define wapp_void_ptr_array(...) ((VoidPArray){ \ - .items = (void *[wapp_misc_utils_u64_round_up_pow2(wapp_misc_utils_va_args_count(void *, __VA_ARGS__) * 2)]){__VA_ARGS__}, \ - .count = wapp_misc_utils_va_args_count(void *, __VA_ARGS__), \ - .capacity = wapp_misc_utils_u64_round_up_pow2(wapp_misc_utils_va_args_count(void *, __VA_ARGS__) * 2), \ - .item_size = sizeof(void *) \ -}) -#define wapp_void_ptr_array_with_capacity(CAPACITY) ((VoidPArray){.items = (void *[CAPACITY]){0}, .count = 0, .capacity = CAPACITY, .item_size = sizeof(void *)}) -#define wapp_void_ptr_array_pop(ARRAY_PTR) (ARRAY_PTR != NULL && (ARRAY_PTR)->count > 0 ? \ - *_void_ptr_array_pop(ARRAY_PTR) : \ - (void *){0} \ -) #define wapp_b32_array(...) ((B32Array){ \ .items = (b32[wapp_misc_utils_u64_round_up_pow2(wapp_misc_utils_va_args_count(b32, __VA_ARGS__) * 2)]){__VA_ARGS__}, \ .count = wapp_misc_utils_va_args_count(b32, __VA_ARGS__), \ @@ -609,9 +580,9 @@ struct Str8Array { u64 item_size; }; -typedef struct VoidPArray VoidPArray; -struct VoidPArray { - void * *items; +typedef struct GenericArray GenericArray; +struct GenericArray { + void *items; u64 count; u64 capacity; u64 item_size; @@ -771,16 +742,6 @@ Str8Array *wapp_str8_array_append_alloc(const Allocator *allocator, Str8Array *a Str8Array *wapp_str8_array_extend_alloc(const Allocator *allocator, Str8Array *array, const Str8Array *other); Str8Array *wapp_str8_array_copy_alloc(const Allocator *allocator, const Str8Array *src, Str8Array *dst); Str8 *_str8_array_pop(Str8Array *array); -void * *wapp_void_ptr_array_get(const VoidPArray *array, u64 index); -void wapp_void_ptr_array_set(VoidPArray *array, u64 index, void * *item); -void wapp_void_ptr_array_append_capped(VoidPArray *array, void * *item); -void wapp_void_ptr_array_extend_capped(VoidPArray *array, const VoidPArray *other); -void wapp_void_ptr_array_clear(VoidPArray *array); -void wapp_void_ptr_array_copy_capped(const VoidPArray *src, VoidPArray *dst); -VoidPArray *wapp_void_ptr_array_append_alloc(const Allocator *allocator, VoidPArray *array, void * *item); -VoidPArray *wapp_void_ptr_array_extend_alloc(const Allocator *allocator, VoidPArray *array, const VoidPArray *other); -VoidPArray *wapp_void_ptr_array_copy_alloc(const Allocator *allocator, const VoidPArray *src, VoidPArray *dst); -void * *_void_ptr_array_pop(VoidPArray *array); b32 *wapp_b32_array_get(const B32Array *array, u64 index); void wapp_b32_array_set(B32Array *array, u64 index, b32 *item); void wapp_b32_array_append_capped(B32Array *array, b32 *item); @@ -961,7 +922,7 @@ UptrArray *wapp_uptr_array_append_alloc(const Allocator *allocator, UptrArray *a UptrArray *wapp_uptr_array_extend_alloc(const Allocator *allocator, UptrArray *array, const UptrArray *other); UptrArray *wapp_uptr_array_copy_alloc(const Allocator *allocator, const UptrArray *src, UptrArray *dst); uptr *_uptr_array_pop(UptrArray *array); -VoidPArray *_array_alloc_capacity(const Allocator *allocator, u64 capacity, u64 item_size); +GenericArray *_array_alloc_capacity(const Allocator *allocator, u64 capacity, u64 item_size); #ifdef WAPP_PLATFORM_CPP END_C_LINKAGE