From 39022d53ff4957e5c8d5cd1f587f74f28471fe82 Mon Sep 17 00:00:00 2001 From: laentropia Date: Mon, 13 Apr 2026 17:55:45 -0600 Subject: [PATCH] addition: Added basic header and structure --- include/arraylist.h | 61 +++++++++++++++++++++++++++++++++++++++++++ src/arraylist.c | 34 ++++++++++++++++++++++++ src/main.c | 8 ++++++ test/CMakeLists.txt | 2 +- test/test_arraylist.c | 5 ++++ 5 files changed, 109 insertions(+), 1 deletion(-) diff --git a/include/arraylist.h b/include/arraylist.h index e69de29..087c47c 100644 --- a/include/arraylist.h +++ b/include/arraylist.h @@ -0,0 +1,61 @@ +#ifndef ARRAYLIST_H +#define ARRAYLIST_H + +#include +#include +#include + +typedef struct { + void *data; + size_t capacity; + size_t len; + size_t elem_size; +} ArrayList; + +typedef struct { + ArrayList array; + size_t offset; +} ArrayListSlice; + +typedef enum { + ARRLIST_OK = 0, + ARRLIST_OUT_OF_BOUNDS, + ARRLIST_BAD_ALLOC, + ARRLIST_EMPTY, + ARRLIST_NULL_ARG, + ARRLIST_INVALID_CAPACITY, + ARRLIST_INVALID_ELEM_SIZE, +} ArrayListErr; + +typedef struct { + bool is_valid; + union { + ArrayListErr err; + ArrayList array; + }; +} ArrayListResult; + +ArrayListResult arraylist_init(size_t capacity, size_t elem_size); +ArrayListErr arraylist_destroy(ArrayList *arr); +ArrayListErr arraylist_clear(ArrayList *arr); + +size_t arraylist_size(ArrayList *arr); +size_t arraylist_capacity(ArrayList *arr); +bool arraylist_is_empty(ArrayList *arr); + +ArrayListErr arraylist_push_back(ArrayList *arr, void *data); +ArrayListErr arraylist_insert(ArrayList*arr, size_t index, void *data); +ArrayListErr arraylist_push_front(ArrayList* arr, void *data); + +// Here out can be null for not having anything writen +ArrayListErr arraylist_pop_back(ArrayList *arr, void *out); +ArrayListErr arraylist_remove_at(ArrayList *arr, size_t index, void *out); +ArrayListErr arraylist_pop_front(ArrayList *arr, void *out); + +ArrayListErr arraylist_get(ArrayList *arr, size_t index, void *out); +ArrayListErr arraylist_set(ArrayList *arr, size_t index, void *data); + +ArrayListErr arraylist_resize(ArrayList *arr, size_t new_capacity); +ArrayListErr arraylist_reserve(ArrayList *arr, size_t size_to_reserve); + +#endif diff --git a/src/arraylist.c b/src/arraylist.c index e69de29..957bfd2 100644 --- a/src/arraylist.c +++ b/src/arraylist.c @@ -0,0 +1,34 @@ +#include "arraylist.h" +#include +#include + +ArrayListResult arraylist_init(size_t capacity, size_t elem_size) { + if (capacity == 0) { + return (ArrayListResult) { + .is_valid = false, + .err = ARRLIST_INVALID_CAPACITY}; + } + + if (elem_size == 0) { + return (ArrayListResult) { + .is_valid = false, + .err = ARRLIST_INVALID_ELEM_SIZE, + }; + } + + ArrayList arr = { + .data = malloc(capacity * elem_size), + .capacity = capacity, + .elem_size = elem_size, + .len = 0 + }; + + if (arr.data == NULL) { + return (ArrayListResult) { + .is_valid = false, + .err = ARRLIST_BAD_ALLOC, + }; + } + + return (ArrayListResult) {.is_valid = true, .array = arr}; +} diff --git a/src/main.c b/src/main.c index e69de29..c54152a 100644 --- a/src/main.c +++ b/src/main.c @@ -0,0 +1,8 @@ +#include +#include + +int main(void) { + + printf("hola\n"); + return EXIT_SUCCESS; +} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index df65436..965d2ed 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,7 +3,7 @@ find_package(cmocka REQUIRED) add_executable(test_arraylist test_arraylist.c) target_link_libraries(test_arraylist - arena_lib + arraylist_lib cmocka::cmocka ) diff --git a/test/test_arraylist.c b/test/test_arraylist.c index e69de29..24acc10 100644 --- a/test/test_arraylist.c +++ b/test/test_arraylist.c @@ -0,0 +1,5 @@ +#include + +int main(void) { + return EXIT_SUCCESS; +}