// // Created by Lennart on 02/12/2023. // #ifndef ADVENT_OF_CODE_2023_ARRAY_LIST_H #ifndef ELEMENT_TYPE #define ELEMENT_TYPE int #endif typedef struct array_list_struct { ELEMENT_TYPE *data; int capacity; int length; } array_list; array_list* alist_create(int capacity); void alist_add(array_list *alist, ELEMENT_TYPE entry); void alist_free(array_list *alist); #define ADVENT_OF_CODE_2023_ARRAY_LIST_H #endif //ADVENT_OF_CODE_2023_ARRAY_LIST_H //#define ARRAY_LIST_IMPLEMENTATION #ifdef ARRAY_LIST_IMPLEMENTATION array_list* alist_create(int capacity) { array_list *alist = malloc(sizeof (struct array_list_struct)); alist->data = malloc(sizeof (ELEMENT_TYPE) * capacity); alist->capacity = capacity; alist->length = 0; return alist; } void alist_add(array_list *alist, ELEMENT_TYPE entry) { if(alist->length >= alist->capacity) { alist->data = realloc(alist->data, alist->capacity * 2); alist->capacity = alist->capacity * 2; } alist->data[alist->length++] = entry; } void alist_remove(array_list *alist, int index) { #ifdef ARRAY_LIST_UNORDERED alist->data[index] = alist->data[--alist->length]; #else memcpy(&alist->data[index], &alist->data[index + 1], sizeof(ELEMENT_TYPE) * (alist->capacity - index - 1)); alist->length--; #endif //ARRAY_LIST_UNORDERED } void alist_free(array_list *alist) { free(alist->data); free(alist); } #endif //ARRAY_LIST_IMPLEMENTATION