#ifndef LTYPES_ARRAY_H #define LTYPES_ARRAY_H #include typedef struct { size_t count; size_t capacity; void** items; } LArray; LArray* l_array_create(); void l_array_delete(LArray* array); int l_array_append(LArray* array, void* item); int l_array_swap(LArray* array, int indexA, int indexB); void l_array_clear(LArray* array); #ifdef L_ARRAY_IMPLEMENTATION #include LArray* l_array_create() { return (LArray*) calloc(1, sizeof(LArray)); } void l_array_delete(LArray* array) { free(array); } int l_array_append(LArray* array, void* item) { if (array->count >= array->capacity) { if (array->capacity == 0) array->capacity = 8; else array->capacity *= 2; array->items = realloc(array->items, array->capacity * sizeof(*array->items)); } array->items[array->count++] = item; return 0; } int l_array_swap(LArray* array, int indexA, int indexB) { if (array->count < (size_t)indexA || array->count < (size_t)indexB || indexA == indexB) return 1; void* itemA = array->items[indexA]; array->items[indexA] = array->items[indexB]; array->items[indexB] = itemA; return 0; } void l_array_clear(LArray* array) { free(array->items); array->items = NULL; array->capacity = 0; array->count = 0; } #endif #endif