CVector  4.1.0
A C++ style vector library in strict ANSI C (C89)
cvector_str.h
Go to the documentation of this file.
1 #ifndef CVECTORSTR_H
2 #define CVECTORSTR_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 
20 typedef struct cvector_str
21 {
22  char** a;
23  cvec_sz size;
25 } cvector_str;
26 
28 
29 #ifndef CVEC_STRDUP
30 #define CVEC_STRDUP cvec_strdup
31 char* cvec_strdup(const char* str);
32 #endif
33 
34 int cvec_str(cvector_str* vec, cvec_sz size, cvec_sz capacity);
35 int cvec_init_str(cvector_str* vec, char** vals, cvec_sz num);
36 
37 cvector_str* cvec_str_heap(cvec_sz size, cvec_sz capacity);
38 cvector_str* cvec_init_str_heap(char** vals, cvec_sz num);
39 int cvec_copyc_str(void* dest, void* src);
40 int cvec_copy_str(cvector_str* dest, cvector_str* src);
41 
42 int cvec_push_str(cvector_str* vec, char* a);
43 void cvec_pop_str(cvector_str* vec, char* ret);
44 
45 int cvec_pushm_str(cvector_str* vec, char* a);
46 #define cvec_popm_str(vec) (vec).a[--(vec).size]
47 int cvec_insertm_str(cvector_str* vec, cvec_sz i, char* a);
48 int cvec_insert_arraym_str(cvector_str* vec, cvec_sz i, char** a, cvec_sz num);
49 #define cvec_replacem_str(vec, i, s, ret) ((ret) = (vec).a[i], (vec).a[i] = (s))
50 
51 int cvec_extend_str(cvector_str* vec, cvec_sz num);
52 int cvec_insert_str(cvector_str* vec, cvec_sz i, char* a);
53 int cvec_insert_array_str(cvector_str* vec, cvec_sz i, char** a, cvec_sz num);
54 void cvec_replace_str(cvector_str* vec, cvec_sz i, char* a, char* ret);
55 void cvec_erase_str(cvector_str* vec, cvec_sz start, cvec_sz end);
56 void cvec_remove_str(cvector_str* vec, cvec_sz start, cvec_sz end);
57 int cvec_reserve_str(cvector_str* vec, cvec_sz size);
58 int cvec_set_cap_str(cvector_str* vec, cvec_sz size);
59 void cvec_set_val_sz_str(cvector_str* vec, char* val);
60 void cvec_set_val_cap_str(cvector_str* vec, char* val);
61 
62 char** cvec_back_str(cvector_str* vec);
63 
64 void cvec_clear_str(cvector_str* vec);
65 void cvec_free_str_heap(void* vec);
66 void cvec_free_str(void* vec);
67 
68 #ifdef __cplusplus
69 }
70 #endif
71 
72 
73 #endif
CVEC_SIZE_T cvec_sz
Definition: cvector.h:88
int cvec_init_str(cvector_str *vec, char **vals, cvec_sz num)
Same as cvec_init_str_heap() except the vector passed in was declared on the stack so it isn't alloca...
Definition: cvector_str.c:140
void cvec_clear_str(cvector_str *vec)
Clears the contents of vector (frees all strings) and sets size to 0.
Definition: cvector_str.c:495
char * cvec_strdup(const char *str)
Useful utility function since strdup isn't in standard C.
Definition: cvector_str.c:35
int cvec_copy_str(cvector_str *dest, cvector_str *src)
Makes dest a copy of src.
Definition: cvector_str.c:190
int cvec_set_cap_str(cvector_str *vec, cvec_sz size)
Set capacity to size.
Definition: cvector_str.c:444
int cvec_extend_str(cvector_str *vec, cvec_sz num)
Increase the size of the array num items.
Definition: cvector_str.c:270
void cvec_set_val_cap_str(cvector_str *vec, char *val)
Fills entire allocated array (capacity) with val.
Definition: cvector_str.c:481
int cvec_copyc_str(void *dest, void *src)
Makes dest a copy of src.
Definition: cvector_str.c:169
void cvec_set_val_sz_str(cvector_str *vec, char *val)
Sets all size elements to val.
Definition: cvector_str.c:466
int cvec_insert_array_str(cvector_str *vec, cvec_sz i, char **a, cvec_sz num)
Insert the first num elements of array a at index i.
Definition: cvector_str.c:341
int cvec_insertm_str(cvector_str *vec, cvec_sz i, char *a)
Same as insert except no CVEC_STRDUP.
Definition: cvector_str.c:316
void cvec_erase_str(cvector_str *vec, cvec_sz start, cvec_sz end)
Erases strings from start to end inclusive.
Definition: cvector_str.c:405
void cvec_free_str(void *vec)
Frees the internal array and sets size and capacity to 0.
Definition: cvector_str.c:521
CVEC_SIZE_T cvec_sz
Definition: cvector_str.h:12
char ** cvec_back_str(cvector_str *vec)
Return pointer to last element.
Definition: cvector_str.c:262
int cvec_push_str(cvector_str *vec, char *a)
Append a to end of vector (size increased 1).
Definition: cvector_str.c:212
int cvec_insert_arraym_str(cvector_str *vec, cvec_sz i, char **a, cvec_sz num)
Same as insert_array except no CVEC_STRDUP.
Definition: cvector_str.c:367
int cvec_pushm_str(cvector_str *vec, char *a)
same as push but without calling CVEC_STRDUP(a), m suffix is for "move"
Definition: cvector_str.c:231
void cvec_replace_str(cvector_str *vec, cvec_sz i, char *a, char *ret)
Replace string at i with a.
Definition: cvector_str.c:392
void cvec_pop_str(cvector_str *vec, char *ret)
Remove the last element (size decreased 1).
Definition: cvector_str.c:253
void cvec_free_str_heap(void *vec)
Frees contents (individual strings and array) and frees vector so don't use after calling this.
Definition: cvector_str.c:507
int cvec_reserve_str(cvector_str *vec, cvec_sz size)
Makes sure the vector capacity is >= size (parameter not member).
Definition: cvector_str.c:426
int cvec_insert_str(cvector_str *vec, cvec_sz i, char *a)
Insert a at index i (0 based).
Definition: cvector_str.c:293
cvector_str * cvec_str_heap(cvec_sz size, cvec_sz capacity)
Create a new cvector_str on the heap.
Definition: cvector_str.c:64
#define CVEC_SIZE_T
Definition: cvector_str.h:7
void cvec_remove_str(cvector_str *vec, cvec_sz start, cvec_sz end)
Same as erase except it does not call CVEC_FREE.
Definition: cvector_str.c:418
int cvec_str(cvector_str *vec, cvec_sz size, cvec_sz capacity)
Same as cvec_str_heap() except the vector passed in was declared on the stack so it isn't allocated i...
Definition: cvector_str.c:120
cvector_str * cvec_init_str_heap(char **vals, cvec_sz num)
Create (on the heap) and initialize cvector_str with num elements of vals.
Definition: cvector_str.c:91
cvec_sz CVEC_STR_START_SZ
Definition: cvector_str.c:29
Data structure for string vector.
Definition: cvector.h:186
cvec_sz capacity
Allocated size of array; always >= size.
Definition: cvector.h:189
cvec_sz size
Current size (amount you use when manipulating array directly).
Definition: cvector.h:188
char ** a
Array.
Definition: cvector.h:187