summaryrefslogtreecommitdiffstats
path: root/include/vector.h
blob: 02ed84e9e9492b326893927d7ac5dc1f848de523 (plain) (blame)
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
#ifndef VL_VECTOR_H_INCLUDED
#define VL_VECTOR_H_INCLUDED

#include <stddef.h>

/* implements a vector type (array of same-sized values) */

typedef struct vl__vector_tag vl_vector;

vl_vector *vl_vector_new(size_t sz);
vl_vector *vl_vector_new_ex(size_t sz, size_t init_cap);
void vl_vector_free(vl_vector *vec);

/* will abort if realloc fails to shrink the allocation (should never happen) */
void vl_vector_shrink_to_size(vl_vector *vec);

#define vl_newvec(_t) vl_vector_new(sizeof(_t))
#define vl_newvec_ex(_t, _ic) vl_vector_new_ex(sizeof(_t), _ic)

int vl_vector_push(vl_vector *vec, void *data);
int vl_vector_push_vec(vl_vector *vec, void *data, size_t n);
int vl_vector_push_2d(vl_vector *vec, void **data, size_t n);

size_t vl_vector_size(const vl_vector *vec);
void *vl_vector_values(const vl_vector *vec, size_t *psz);

#endif