#include #include #include "list.h" static void list_init(List *list, i32 elmSize) { list->data = NULL; list->capacity = 0; list->len = 0; list->elmSize = elmSize; } void list_init_float(List *list) { list_init(list, sizeof(float)); } void list_init_i32(List *list) { list_init(list, sizeof(i32)); } void list_init_u8(List *list) { list_init(list, sizeof(u8)); } void list_init_u32(List *list) { list_init(list, sizeof(u32)); } void list_init_u64(List *list) { list_init(list, sizeof(u64)); } void list_init_string(List *list) { list_init(list, sizeof(char *)); } static void list_push(List *list, const void *restrict elm) { if (list->len == list->capacity) { list->capacity *= 2; if (!list->capacity) list->capacity = 8; list->data = realloc(list->data, list->elmSize * list->capacity); } void *ptr = ((char *)list->data) + list->elmSize * list->len; memcpy(ptr, elm, list->elmSize); list->len++; } void list_push_float(List *list, float f) { list_push(list, &f); } void list_push_i32(List *list, i32 i) { list_push(list, &i); } void list_push_u8(List *list, u8 b) { list_push(list, &b); } void list_push_u32(List *list, u32 u) { list_push(list, &u); } void list_push_u64(List *list, u64 u) { list_push(list, &u); } void list_push_string(List *list, char *s) { list_push(list, &s); } void list_free(List *list) { free(list->data); }