-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
cvector_str.h
73 lines (57 loc) · 2.22 KB
/
cvector_str.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#ifndef CVECTORSTR_H
#define CVECTORSTR_H
#ifndef CVEC_SIZE_T
#include <stdlib.h>
#define CVEC_SIZE_T size_t
#endif
#ifndef CVEC_SZ
#define CVEC_SZ
typedef CVEC_SIZE_T cvec_sz;
#endif
#ifdef __cplusplus
extern "C" {
#endif
/** Data structure for string vector. */
typedef struct cvector_str
{
char** a; /**< Array. */
cvec_sz size; /**< Current size (amount you use when manipulating array directly). */
cvec_sz capacity; /**< Allocated size of array; always >= size. */
} cvector_str;
extern cvec_sz CVEC_STR_START_SZ;
#ifndef CVEC_STRDUP
#define CVEC_STRDUP cvec_strdup
char* cvec_strdup(const char* str);
#endif
int cvec_str(cvector_str* vec, cvec_sz size, cvec_sz capacity);
int cvec_init_str(cvector_str* vec, char** vals, cvec_sz num);
cvector_str* cvec_str_heap(cvec_sz size, cvec_sz capacity);
cvector_str* cvec_init_str_heap(char** vals, cvec_sz num);
int cvec_copyc_str(void* dest, void* src);
int cvec_copy_str(cvector_str* dest, cvector_str* src);
int cvec_push_str(cvector_str* vec, char* a);
void cvec_pop_str(cvector_str* vec, char* ret);
int cvec_pushm_str(cvector_str* vec, char* a);
#define cvec_popm_str(vec) (vec).a[--(vec).size]
int cvec_insertm_str(cvector_str* vec, cvec_sz i, char* a);
int cvec_insert_arraym_str(cvector_str* vec, cvec_sz i, char** a, cvec_sz num);
#define cvec_replacem_str(vec, i, s, ret) ((ret) = (vec).a[i], (vec).a[i] = (s))
int cvec_extend_str(cvector_str* vec, cvec_sz num);
int cvec_insert_str(cvector_str* vec, cvec_sz i, char* a);
int cvec_insert_array_str(cvector_str* vec, cvec_sz i, char** a, cvec_sz num);
void cvec_replace_str(cvector_str* vec, cvec_sz i, char* a, char* ret);
void cvec_erase_str(cvector_str* vec, cvec_sz start, cvec_sz end);
void cvec_remove_str(cvector_str* vec, cvec_sz start, cvec_sz end);
int cvec_reserve_str(cvector_str* vec, cvec_sz size);
#define cvec_shrink_to_fit_str(vec) cvec_set_cap_str((vec), (vec)->size)
int cvec_set_cap_str(cvector_str* vec, cvec_sz size);
void cvec_set_val_sz_str(cvector_str* vec, char* val);
void cvec_set_val_cap_str(cvector_str* vec, char* val);
char** cvec_back_str(cvector_str* vec);
void cvec_clear_str(cvector_str* vec);
void cvec_free_str_heap(void* vec);
void cvec_free_str(void* vec);
#ifdef __cplusplus
}
#endif
#endif