/* * CS5600 University of Utah * Charles McGarvey * mcgarvey@eng.utah.edu */ #include "array.h" array_t* array_alloc2(size_t size, size_t capacity) { array_t* v = mem_alloc(sizeof(array_t)); capacity = MAX(capacity, ARRAY_CAPACITY_MIN); v->arr = mem_alloc(size * capacity); v->cap = capacity; v->len = 0; v->siz = size; return v; } void array_reserve(array_t* v, size_t s) { assert(v && v->arr); if (v->cap < s) { size_t cap = MAX(s + ARRAY_CAPACITY_DEFAULT, ARRAY_CAPACITY_MIN); void* arr = mem_realloc(v->arr, v->siz * cap); v->arr = arr; v->cap = cap; } } void array_done(array_t* v) { assert(v && v->arr); if (v->len < v->cap) { size_t cap = MAX(v->len, ARRAY_CAPACITY_MIN); void* arr = mem_realloc(v->arr, v->siz * cap); v->arr = arr; v->cap = cap; } } void array_call(const array_t* v, array_call_fn_t fn) { array_it_t it = array_begin(v); void* e; while (e = array_it_next(&it)) fn(it.pos - 1, e); }