6#define CVEC_SIZE_T size_t
47#define cvec_shrink_to_fit_TYPE(vec) cvec_set_cap_TYPE((vec), (vec)->size)
66#ifdef CVECTOR_TYPE_IMPLEMENTATION
70#define CVEC_TYPE_ALLOCATOR(x) ((x+1) * 2)
72#if defined(CVEC_MALLOC) && defined(CVEC_FREE) && defined(CVEC_REALLOC)
74#elif !defined(CVEC_MALLOC) && !defined(CVEC_FREE) && !defined(CVEC_REALLOC)
77#error "Must define all or none of CVEC_MALLOC, CVEC_FREE, and CVEC_REALLOC."
82#define CVEC_MALLOC(sz) malloc(sz)
83#define CVEC_REALLOC(p, sz) realloc(p, sz)
84#define CVEC_FREE(p) free(p)
89#define CVEC_MEMMOVE(dst, src, sz) memmove(dst, src, sz)
94#define CVEC_ASSERT(x) assert(x)
201 vec->
a[vec->
size++] = a;
203 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
204 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
209 vec->
a[vec->
size++] = a;
217 return vec->
a[--vec->
size];
222 return &vec->
a[vec->
size-1];
231 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
251 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
252 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
272 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
288 TYPE tmp = vec->
a[i];
318 if (size < vec->size) {
322 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*size))) {
334 for (i=0; i<vec->
size; i++) {
#define CVEC_REALLOC(p, sz)
#define CVEC_MEMMOVE(dst, src, sz)
int cvec_set_cap_TYPE(cvector_TYPE *vec, cvec_sz size)
int cvec_reserve_TYPE(cvector_TYPE *vec, cvec_sz size)
int cvec_init_TYPE(cvector_TYPE *vec, TYPE *vals, cvec_sz num)
int cvec_copy_TYPE(cvector_TYPE *dest, cvector_TYPE *src)
void cvec_erase_TYPE(cvector_TYPE *vec, cvec_sz start, cvec_sz end)
void cvec_free_TYPE(void *vec)
TYPE * cvec_back_TYPE(cvector_TYPE *vec)
TYPE cvec_replace_TYPE(cvector_TYPE *vec, cvec_sz i, TYPE a)
TYPE cvec_pop_TYPE(cvector_TYPE *vec)
void cvec_free_TYPE_heap(void *vec)
void cvec_set_val_sz_TYPE(cvector_TYPE *vec, TYPE val)
cvector_TYPE * cvec_TYPE_heap(cvec_sz size, cvec_sz capacity)
void cvec_clear_TYPE(cvector_TYPE *vec)
int cvec_insert_array_TYPE(cvector_TYPE *vec, cvec_sz i, TYPE *a, cvec_sz num)
int cvec_copyc_TYPE(void *dest, void *src)
void cvec_set_val_cap_TYPE(cvector_TYPE *vec, TYPE val)
int cvec_push_TYPE(cvector_TYPE *vec, TYPE a)
int cvec_TYPE(cvector_TYPE *vec, cvec_sz size, cvec_sz capacity)
int cvec_insert_TYPE(cvector_TYPE *vec, cvec_sz i, TYPE a)
cvector_TYPE * cvec_init_TYPE_heap(TYPE *vals, cvec_sz num)
int cvec_extend_TYPE(cvector_TYPE *vec, cvec_sz num)
Data structure for TYPE vector.
cvec_sz size
Current size (amount you use when manipulating array directly).
cvec_sz capacity
Allocated size of array; always >= size.