#ifndef VL_VECTOR_H_INCLUDED #define VL_VECTOR_H_INCLUDED #include /* 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