#include #include #include "array.h" Array array_init(size_t capacity) { return (Array) { .items = calloc(capacity, sizeof(int)), .capacity = capacity, .length = 0 }; } int array_push(Array *a, int value) { if (a->length == a->capacity) { array_resize(a, a->capacity * 1.5); } a->items[a->length++] = value; return 0; } int array_pop(Array *a) { if (a->length > 0) { int item = a->items[a->length-1]; size_t capacity = a->capacity - (a->capacity - a->length); if (array_resize(a, capacity) == EXIT_SUCCESS) a->length--; return item; } return 1; } int array_resize(Array *a, size_t capacity) { a->items = realloc(a->items, capacity * sizeof(int)); if (a->items == NULL) { fprintf(stderr, "Memory reallocation failed\n"); return EXIT_FAILURE; } a->capacity = capacity; return EXIT_SUCCESS; } void array_free(Array *a) { free(a->items); a->items = NULL; a->length = a->capacity = 0; } void array_print(Array *a) { printf("Capacity: %zu\t length: %zu\n", a->capacity, a->length); puts("Array items:"); for (int i = 0; i < a->capacity; ++i) { if (i > a->length) { printf("%i: unused\n", i); } else { printf("%i: %i\n", i, a->items[i]); } } }