7 #define CVEC_SIZE_T size_t
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."
89 #define CVEC_MALLOC(sz) malloc(sz)
90 #define CVEC_REALLOC(p, sz) realloc(p, sz)
91 #define CVEC_FREE(p) free(p)
96 #define CVEC_MEMMOVE(dst, src, sz) memmove(dst, src, sz)
101 #define CVEC_ASSERT(x) assert(x)
149 for (i=0; i<num; ++i) {
150 if (!elem_init(&vec->
a[i], &vals[i])) {
197 for (i=0; i<num; ++i) {
198 if (!elem_init(&vec->
a[i], &vals[i])) {
236 for (i=0; i<src->
size; ++i) {
259 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
260 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
285 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
286 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
322 return &vec->
a[vec->
size-1];
331 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
348 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
349 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
377 tmp_sz = CVEC_TYPE_ALLOCATOR(vec->
capacity);
378 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
400 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
410 for (j=0; j<num; ++j) {
429 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*tmp_sz))) {
477 for (i=start; i<=end; i++) {
510 if (size < vec->size) {
512 for (i=vec->
size-1; i>=size; i--) {
521 if (!(tmp = (TYPE*)
CVEC_REALLOC(vec->
a,
sizeof(TYPE)*size))) {
534 for(i=0; i<vec->
size; i++) {
540 for (i=0; i<vec->
size; i++) {
547 for (i=0; i<vec->
size; i++) {
558 for (i=0; i<vec->
size; i++) {
583 for (i=0; i<vec->
size; ++i) {
596 for (i=0; i<tmp->
size; i++) {
609 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)
TYPE * cvec_back_TYPE(cvector_TYPE *vec)
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)
void cvec_pop_TYPE(cvector_TYPE *vec, TYPE *ret)
int cvec_set_val_sz_TYPE(cvector_TYPE *vec, TYPE *val)
cvector_TYPE * cvec_init_TYPE_heap(TYPE *vals, cvec_sz num, void(*elem_free)(void *), int(*elem_init)(void *, void *))
int cvec_init_TYPE(cvector_TYPE *vec, TYPE *vals, cvec_sz num, void(*elem_free)(void *), int(*elem_init)(void *, void *))
cvector_TYPE * cvec_TYPE_heap(cvec_sz size, cvec_sz capacity, 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)
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.