6#define CVEC_SIZE_T size_t
55#define cvec_shrink_to_fit_TYPE(vec) cvec_set_cap_TYPE((vec), (vec)->size)
74#ifdef CVECTOR_TYPE_IMPLEMENTATION
78#define CVEC_TYPE_ALLOCATOR(x) ((x+1) * 2)
80#if defined(CVEC_MALLOC) && defined(CVEC_FREE) && defined(CVEC_REALLOC)
82#elif !defined(CVEC_MALLOC) && !defined(CVEC_FREE) && !defined(CVEC_REALLOC)
85#error "Must define all or none of CVEC_MALLOC, CVEC_FREE, and CVEC_REALLOC."
90#define CVEC_MALLOC(sz) malloc(sz)
91#define CVEC_REALLOC(p, sz) realloc(p, sz)
92#define CVEC_FREE(p) free(p)
97#define CVEC_MEMMOVE(dst, src, sz) memmove(dst, src, sz)
102#define CVEC_ASSERT(x) assert(x)
150 for (i=0; i<num; ++i) {
151 if (!elem_init(&vec->
a[i], &vals[i])) {
198 for (i=0; i<num; ++i) {
199 if (!elem_init(&vec->
a[i], &vals[i])) {
237 for (i=0; i<src->
size; ++i) {
260 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
261 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
286 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
287 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
323 return &vec->
a[vec->
size-1];
332 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
349 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
350 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
378 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
379 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
401 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
411 for (j=0; j<num; ++j) {
430 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
478 for (i=start; i<=end; i++) {
511 if (size < vec->size) {
513 for (i=vec->
size-1; i>=size; i--) {
522 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*size))) {
535 for(i=0; i<vec->
size; i++) {
541 for (i=0; i<vec->
size; i++) {
548 for (i=0; i<vec->
size; i++) {
559 for (i=0; i<vec->
size; i++) {
584 for (i=0; i<vec->
size; ++i) {
597 for (i=0; i<tmp->
size; i++) {
610 for (i=0; i<tmp->
size; i++) {
#define CVEC_REALLOC(p, sz)
#define CVEC_MEMMOVE(dst, src, sz)
cvec_sz CVEC_VOID_START_SZ
int cvec_set_cap_TYPE(cvector_TYPE *vec, cvec_sz size)
int cvec_reserve_TYPE(cvector_TYPE *vec, cvec_sz size)
int cvec_copy_TYPE(cvector_TYPE *dest, cvector_TYPE *src)
int cvec_set_val_cap_TYPE(cvector_TYPE *vec, TYPE *val)
void cvec_erase_TYPE(cvector_TYPE *vec, cvec_sz start, cvec_sz end)
int cvec_insertm_TYPE(cvector_TYPE *vec, cvec_sz i, TYPE *a)
int cvec_insert_TYPE(cvector_TYPE *vec, cvec_sz i, TYPE *a)
void cvec_free_TYPE(void *vec)
void cvec_popm_TYPE(cvector_TYPE *vec, TYPE *ret)
int cvec_pushm_TYPE(cvector_TYPE *vec, TYPE *a)
int cvec_push_TYPE(cvector_TYPE *vec, TYPE *val)
TYPE * cvec_back_TYPE(cvector_TYPE *vec)
void cvec_pop_TYPE(cvector_TYPE *vec, TYPE *ret)
int cvec_set_val_sz_TYPE(cvector_TYPE *vec, TYPE *val)
int cvec_init_TYPE(cvector_TYPE *vec, TYPE *vals, cvec_sz num, void(*elem_free)(void *), int(*elem_init)(void *, void *))
cvector_TYPE * cvec_init_TYPE_heap(TYPE *vals, cvec_sz num, void(*elem_free)(void *), int(*elem_init)(void *, void *))
int cvec_insert_arraym_TYPE(cvector_TYPE *vec, cvec_sz i, TYPE *a, cvec_sz num)
void cvec_replacem_TYPE(cvector_TYPE *vec, cvec_sz i, TYPE *a, TYPE *ret)
int cvec_replace_TYPE(cvector_TYPE *vec, cvec_sz i, TYPE *a, TYPE *ret)
void cvec_free_TYPE_heap(void *vec)
int cvec_TYPE(cvector_TYPE *vec, cvec_sz size, cvec_sz capacity, void(*elem_free)(void *), int(*elem_init)(void *, void *))
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)
cvector_TYPE * cvec_TYPE_heap(cvec_sz size, cvec_sz capacity, void(*elem_free)(void *), int(*elem_init)(void *, void *))
void cvec_remove_TYPE(cvector_TYPE *vec, cvec_sz start, cvec_sz end)
int cvec_extend_TYPE(cvector_TYPE *vec, cvec_sz num)
Data structure for TYPE vector.
int(* elem_init)(void *, void *)
cvec_sz size
Current size (amount you use when manipulating array directly).
void(* elem_free)(void *)
cvec_sz capacity
Allocated size of array; always >= size.