CVector  4.1.0
A C++ style vector library in strict ANSI C (C89)
cvector_void.h
Go to the documentation of this file.
1 #ifndef CVECTORVOID_H
2 #define CVECTORVOID_H
3 
4 #include <stdlib.h>
5 
6 #ifndef CVEC_SIZE_T
7 #define CVEC_SIZE_T size_t
8 #endif
9 
10 #ifndef CVEC_SZ
11 #define CVEC_SZ
13 #endif
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 typedef unsigned char cvec_u8;
20 
22 typedef struct cvector_void
23 {
24  cvec_u8* a;
25  cvec_sz size;
28  void (*elem_free)(void*);
29  int (*elem_init)(void*, void*);
30 } cvector_void;
31 
33 
34 #define CVEC_GET_VOID(VEC, TYPE, I) ((TYPE*)&(VEC)->a[(I)*(VEC)->elem_size])
35 
36 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*));
37 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*));
38 
39 cvector_void* cvec_void_heap(cvec_sz size, cvec_sz capacity, cvec_sz elem_sz, void (*elem_free)(void*), int(*elem_init)(void*, void*));
40 cvector_void* cvec_init_void_heap(void* vals, cvec_sz num, cvec_sz elem_sz, void (*elem_free)(void*), int(*elem_init)(void*, void*));
41 
42 int cvec_copyc_void(void* dest, void* src);
44 
45 int cvec_push_void(cvector_void* vec, void* a);
46 void cvec_pop_void(cvector_void* vec, void* ret);
47 void* cvec_get_void(cvector_void* vec, cvec_sz i);
48 
49 int cvec_pushm_void(cvector_void* vec, void* a);
50 void cvec_popm_void(cvector_void* vec, void* ret);
51 int cvec_insertm_void(cvector_void* vec, cvec_sz i, void* a);
52 int cvec_insert_arraym_void(cvector_void* vec, cvec_sz i, void* a, cvec_sz num);
53 void cvec_replacem_void(cvector_void* vec, cvec_sz i, void* a, void* ret);
54 
56 int cvec_insert_void(cvector_void* vec, cvec_sz i, void* a);
57 int cvec_insert_array_void(cvector_void* vec, cvec_sz i, void* a, cvec_sz num);
58 int cvec_replace_void(cvector_void* vec, cvec_sz i, void* a, void* ret);
59 void cvec_erase_void(cvector_void* vec, cvec_sz start, cvec_sz end);
60 void cvec_remove_void(cvector_void* vec, cvec_sz start, cvec_sz end);
61 int cvec_reserve_void(cvector_void* vec, cvec_sz size);
62 int cvec_set_cap_void(cvector_void* vec, cvec_sz size);
63 int cvec_set_val_sz_void(cvector_void* vec, void* val);
64 int cvec_set_val_cap_void(cvector_void* vec, void* val);
65 
66 void* cvec_back_void(cvector_void* vec);
67 
68 void cvec_clear_void(cvector_void* vec);
69 void cvec_free_void_heap(void* vec);
70 void cvec_free_void(void* vec);
71 
72 #ifdef __cplusplus
73 }
74 #endif
75 
76 
77 #endif
unsigned char cvec_u8
Definition: cvector.h:239
CVEC_SIZE_T cvec_sz
Definition: cvector.h:88
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.
Definition: cvector_void.c:92
int cvec_set_val_sz_void(cvector_void *vec, void *val)
Set all size elements to val.
Definition: cvector_void.c:581
int cvec_copyc_void(void *dest, void *src)
Makes dest a copy of src.
Definition: cvector_void.c:197
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.
Definition: cvector_void.c:425
int cvec_copy_void(cvector_void *dest, cvector_void *src)
Makes dest a copy of src.
Definition: cvector_void.c:218
unsigned char cvec_u8
Definition: cvector_void.h:19
int cvec_reserve_void(cvector_void *vec, cvec_sz size)
Makes sure capacity >= size (the parameter not the member).
Definition: cvector_void.c:539
int cvec_pushm_void(cvector_void *vec, void *a)
Same as push except no elem_init even if it's set.
Definition: cvector_void.c:281
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.
Definition: cvector_void.c:455
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.
Definition: cvector_void.c:479
void cvec_remove_void(cvector_void *vec, cvec_sz start, cvec_sz end)
Same as erase except it does not call elem_free.
Definition: cvector_void.c:531
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...
Definition: cvector_void.c:156
void * cvec_back_void(cvector_void *vec)
Return pointer to last element.
Definition: cvector_void.c:327
void cvec_erase_void(cvector_void *vec, cvec_sz start, cvec_sz end)
Erases elements from start to end inclusive.
Definition: cvector_void.c:517
int cvec_push_void(cvector_void *vec, void *a)
Append a to end of vector (size increased 1).
Definition: cvector_void.c:254
int cvec_insertm_void(cvector_void *vec, cvec_sz i, void *a)
Same as insert but no elem_init even if defined.
Definition: cvector_void.c:396
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 ...
Definition: cvector_void.c:134
void cvec_pop_void(cvector_void *vec, void *ret)
Remove the last element (size decreased 1).
Definition: cvector_void.c:306
int cvec_set_cap_void(cvector_void *vec, cvec_sz size)
Set capacity to size.
Definition: cvector_void.c:557
CVEC_SIZE_T cvec_sz
Definition: cvector_void.h:12
void cvec_free_void(void *vec)
Frees the internal array and sets size and capacity to 0.
Definition: cvector_void.c:667
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.
Definition: cvector_void.c:61
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.
Definition: cvector_void.c:503
cvec_sz CVEC_VOID_START_SZ
Definition: cvector_void.c:29
int cvec_set_val_cap_void(cvector_void *vec, void *val)
Fills entire allocated array (capacity) with val.
Definition: cvector_void.c:611
void cvec_free_void_heap(void *vec)
Frees everything so don't use vec after calling this.
Definition: cvector_void.c:652
int cvec_extend_void(cvector_void *vec, cvec_sz num)
Increase the size of the array num items.
Definition: cvector_void.c:334
void * cvec_get_void(cvector_void *vec, cvec_sz i)
Return a void pointer to the ith element.
Definition: cvector_void.c:357
#define CVEC_SIZE_T
Definition: cvector_void.h:7
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...
Definition: cvector_void.c:638
void cvec_popm_void(cvector_void *vec, void *ret)
Same as pop except no elem_free even if it's set.
Definition: cvector_void.c:318
int cvec_insert_void(cvector_void *vec, cvec_sz i, void *a)
Insert a at index i (0 based).
Definition: cvector_void.c:366
Data structure for generic type (cast to void) vectors.
Definition: cvector.h:243
cvec_sz size
Current size (amount you should use when manipulating array directly).
Definition: cvector.h:245
cvec_sz elem_size
Size in bytes of type stored (sizeof(T) where T is type).
Definition: cvector.h:247
cvec_sz capacity
Allocated size of array; always >= size.
Definition: cvector.h:246
void(* elem_free)(void *)
Definition: cvector.h:248
cvec_u8 * a
Array.
Definition: cvector.h:244
int(* elem_init)(void *, void *)
Definition: cvector.h:249