#ifndef LEO_VEC_H #define LEO_VEC_H #include #include "alloc.h" static const size_t LEO_Vec_GROWTH_FACTOR_NUMER = 3; static const size_t LEO_Vec_GROWTH_FACTOR_DENOM = 2; static const size_t LEO_Vec_DEFAULT_CAPACITY = 8; struct LEO_Vec { struct LEO_Allocator allocator; void *data; size_t item_size; size_t length; size_t capacity; }; enum LEO_Vec_Error { LEO_Vec_OK = 0, LEO_Vec_NULL_VEC_POINTER = 1, LEO_Vec_NULL_ITEM_POINTER = 2, LEO_Vec_INVALID_ITEM_SIZE = 3, LEO_Vec_ALLOCATION_FAILURE = 4, LEO_Vec_TOO_BIG = 5, LEO_Vec_OUT_OF_BOUNDS = 6, }; enum LEO_Vec_Error LEO_Vec_init (struct LEO_Vec *vec, size_t item_size, struct LEO_Allocator allocator); void LEO_Vec_free (struct LEO_Vec *vec); enum LEO_Vec_Error LEO_Vec_push (struct LEO_Vec *vec, const void *item); enum LEO_Vec_Error LEO_Vec_pop (struct LEO_Vec *vec, void *item); enum LEO_Vec_Error LEO_Vec_get (struct LEO_Vec *vec, size_t i, void *item); #endif