#include #include #include "list.h" static void list_init(List *list, int elmSize) { list->data = NULL; list->capacity = 0; list->len = 0; list->elmSize = elmSize; } void list_initf(List *list) { list_init(list, sizeof(float)); } void list_initi(List *list) { list_init(list, sizeof(int)); } void list_initu(List *list) { list_init(list, sizeof(unsigned int)); } void list_initb(List *list) { list_init(list, sizeof(unsigned char)); } static void list_push(List *list, const void *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_pushf(List *list, float f) { list_push(list, &f); } void list_pushi(List *list, int i) { list_push(list, &i); } void list_pushu(List *list, unsigned int u) { list_push(list, &u); } void list_pushb(List *list, unsigned char b) { list_push(list, &b); } void list_free(List *list) { free(list->data); }