5 #if defined(CVEC_MALLOC) && defined(CVEC_FREE) && defined(CVEC_REALLOC)
7 #elif !defined(CVEC_MALLOC) && !defined(CVEC_FREE) && !defined(CVEC_REALLOC)
10 #error "Must define all or none of CVEC_MALLOC, CVEC_FREE, and CVEC_REALLOC."
14 #define CVEC_MALLOC(sz) malloc(sz)
15 #define CVEC_REALLOC(p, sz) realloc(p, sz)
16 #define CVEC_FREE(p) free(p)
21 #define CVEC_MEMMOVE(dst, src, sz) memmove(dst, src, sz)
26 #define CVEC_ASSERT(x) assert(x)
31 #define CVEC_VOID_ALLOCATOR(x) ((x+1) * 2)
113 for (i=0; i<num; ++i) {
114 if (!elem_init(&vec->
a[i*elem_sz], &((
cvec_u8*)vals)[i*elem_sz])) {
171 for (i=0; i<num; ++i) {
172 if (!elem_init(&vec->
a[i*elem_sz], &((
cvec_u8*)vals)[i*elem_sz])) {
229 for (i=0; i<src->
size; ++i) {
441 for (j=0; j<num; ++j) {
522 for (i=start; i<=end; i++) {
561 if (size < vec->size) {
563 for (i=vec->
size-1; i>=size; i--) {
586 for(i=0; i<vec->
size; i++) {
592 for (i=0; i<vec->
size; i++) {
599 for (i=0; i<vec->
size; i++) {
615 for (i=0; i<vec->
size; i++) {
642 for (i=0; i<vec->
size; ++i) {
658 for (i=0; i<tmp->
size; i++) {
672 for (i=0; i<tmp->
size; i++) {
cvector_void * cvec_init_void_heap(void *vals, cvec_sz num, cvec_sz elem_sz, void(*elem_free)(void *), int(*elem_init)(void *, void *))
Create (on the heap) and initialize vector with num elements of vals.
int cvec_set_val_sz_void(cvector_void *vec, void *val)
Set all size elements to val.
int cvec_copyc_void(void *dest, void *src)
Makes dest a copy of src.
#define CVEC_VOID_ALLOCATOR(x)
int cvec_insert_array_void(cvector_void *vec, cvec_sz i, void *a, cvec_sz num)
Insert the first num elements of array a at index i.
int cvec_copy_void(cvector_void *dest, cvector_void *src)
Makes dest a copy of src.
int cvec_reserve_void(cvector_void *vec, cvec_sz size)
Makes sure capacity >= size (the parameter not the member).
#define CVEC_REALLOC(p, sz)
int cvec_pushm_void(cvector_void *vec, void *a)
Same as push except no elem_init even if it's set.
int cvec_insert_arraym_void(cvector_void *vec, cvec_sz i, void *a, cvec_sz num)
Same as insert_array but no elem_init even if defined.
int cvec_replace_void(cvector_void *vec, cvec_sz i, void *a, void *ret)
Replace value at i with a, return old value in ret if non-NULL.
void cvec_remove_void(cvector_void *vec, cvec_sz start, cvec_sz end)
Same as erase except it does not call elem_free.
int cvec_init_void(cvector_void *vec, void *vals, cvec_sz num, cvec_sz elem_sz, void(*elem_free)(void *), int(*elem_init)(void *, void *))
Same as init_vec_heap() except the vector passed in was declared on the stack so it isn't allocated i...
void * cvec_back_void(cvector_void *vec)
Return pointer to last element.
#define CVEC_MEMMOVE(dst, src, sz)
void cvec_erase_void(cvector_void *vec, cvec_sz start, cvec_sz end)
Erases elements from start to end inclusive.
int cvec_push_void(cvector_void *vec, void *a)
Append a to end of vector (size increased 1).
int cvec_insertm_void(cvector_void *vec, cvec_sz i, void *a)
Same as insert but no elem_init even if defined.
int cvec_void(cvector_void *vec, cvec_sz size, cvec_sz capacity, cvec_sz elem_sz, void(*elem_free)(void *), int(*elem_init)(void *, void *))
Same as cvec_void_heap() except the vector passed in was declared on the stack so it isn't allocated ...
void cvec_pop_void(cvector_void *vec, void *ret)
Remove the last element (size decreased 1).
int cvec_set_cap_void(cvector_void *vec, cvec_sz size)
Set capacity to size.
void cvec_free_void(void *vec)
Frees the internal array and sets size and capacity to 0.
cvector_void * cvec_void_heap(cvec_sz size, cvec_sz capacity, cvec_sz elem_sz, void(*elem_free)(void *), int(*elem_init)(void *, void *))
Creates a new vector on the heap.
void cvec_replacem_void(cvector_void *vec, cvec_sz i, void *a, void *ret)
Same as replace but no elem_free or elem_init even if they're defined.
cvec_sz CVEC_VOID_START_SZ
int cvec_set_val_cap_void(cvector_void *vec, void *val)
Fills entire allocated array (capacity) with val.
void cvec_free_void_heap(void *vec)
Frees everything so don't use vec after calling this.
int cvec_extend_void(cvector_void *vec, cvec_sz num)
Increase the size of the array num items.
void * cvec_get_void(cvector_void *vec, cvec_sz i)
Return a void pointer to the ith element.
void cvec_clear_void(cvector_void *vec)
Sets size to 0 (does not change contents unless elem_free is set then it will elem_free all size elem...
void cvec_popm_void(cvector_void *vec, void *ret)
Same as pop except no elem_free even if it's set.
int cvec_insert_void(cvector_void *vec, cvec_sz i, void *a)
Insert a at index i (0 based).
Data structure for generic type (cast to void) vectors.
cvec_sz size
Current size (amount you should use when manipulating array directly).
cvec_sz elem_size
Size in bytes of type stored (sizeof(T) where T is type).
cvec_sz capacity
Allocated size of array; always >= size.
void(* elem_free)(void *)
int(* elem_init)(void *, void *)