62 lines
1.4 KiB
C
62 lines
1.4 KiB
C
//
|
|
// 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
|