#ifndef VECTOR_H
#define VECTOR_H
#include <stdbool.h>
#include <stddef.h>
#define VECTOR_MINIMUM_CAPACITY …
#define VECTOR_GROWTH_FACTOR …
#define VECTOR_SHRINK_THRESHOLD …
#define VECTOR_ERROR …
#define VECTOR_SUCCESS …
#define VECTOR_UNINITIALIZED …
#define VECTOR_INITIALIZER …
Vector;
Iterator;
int aom_vector_setup(Vector *vector, size_t capacity, size_t element_size);
int aom_vector_copy(Vector *destination, Vector *source);
int aom_vector_copy_assign(Vector *destination, Vector *source);
int aom_vector_move(Vector *destination, Vector *source);
int aom_vector_move_assign(Vector *destination, Vector *source);
int aom_vector_swap(Vector *destination, Vector *source);
int aom_vector_destroy(Vector *vector);
int aom_vector_push_back(Vector *vector, void *element);
int aom_vector_push_front(Vector *vector, void *element);
int aom_vector_insert(Vector *vector, size_t index, void *element);
int aom_vector_assign(Vector *vector, size_t index, void *element);
int aom_vector_pop_back(Vector *vector);
int aom_vector_pop_front(Vector *vector);
int aom_vector_erase(Vector *vector, size_t index);
int aom_vector_clear(Vector *vector);
void *aom_vector_get(Vector *vector, size_t index);
const void *aom_vector_const_get(const Vector *vector, size_t index);
void *aom_vector_front(Vector *vector);
void *aom_vector_back(Vector *vector);
#define VECTOR_GET_AS(type, aom_vector_pointer, index) …
bool aom_vector_is_initialized(const Vector *vector);
size_t aom_vector_byte_size(const Vector *vector);
size_t aom_vector_free_space(const Vector *vector);
bool aom_vector_is_empty(const Vector *vector);
int aom_vector_resize(Vector *vector, size_t new_size);
int aom_vector_reserve(Vector *vector, size_t minimum_capacity);
int aom_vector_shrink_to_fit(Vector *vector);
Iterator aom_vector_begin(Vector *vector);
Iterator aom_vector_end(Vector *vector);
Iterator aom_vector_iterator(Vector *vector, size_t index);
void *aom_iterator_get(Iterator *iterator);
#define ITERATOR_GET_AS(type, iterator) …
int aom_iterator_erase(Vector *vector, Iterator *iterator);
void aom_iterator_increment(Iterator *iterator);
void aom_iterator_decrement(Iterator *iterator);
void *aom_iterator_next(Iterator *iterator);
void *aom_iterator_previous(Iterator *iterator);
bool aom_iterator_equals(Iterator *first, Iterator *second);
bool aom_iterator_is_before(Iterator *first, Iterator *second);
bool aom_iterator_is_after(Iterator *first, Iterator *second);
size_t aom_iterator_index(Vector *vector, Iterator *iterator);
#define VECTOR_FOR_EACH(aom_vector_pointer, iterator_name) …
#endif