7 #define CVEC_SIZE_T size_t
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."
81 #define CVEC_MALLOC(sz) malloc(sz)
82 #define CVEC_REALLOC(p, sz) realloc(p, sz)
83 #define CVEC_FREE(p) free(p)
88 #define CVEC_MEMMOVE(dst, src, sz) memmove(dst, src, sz)
93 #define CVEC_ASSERT(x) assert(x)
200 vec->
a[vec->
size++] = a;
202 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
203 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
208 vec->
a[vec->
size++] = a;
216 return vec->
a[--vec->
size];
221 return &vec->
a[vec->
size-1];
230 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
250 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
251 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
271 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
287 TYPE tmp = vec->
a[i];
317 if (size < vec->size) {
321 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*size))) {
333 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)
TYPE * cvec_back_TYPE(cvector_TYPE *vec)
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_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)
cvector_TYPE * cvec_init_TYPE_heap(TYPE *vals, cvec_sz num)
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)
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.