diff options
| author | Louis Burda <quent.burda@gmail.com> | 2022-03-29 18:11:15 +0200 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2022-03-29 18:11:15 +0200 |
| commit | 7520b04430cfbbb91fa1a3e7bf94995d18655caf (patch) | |
| tree | 4b5ebf9532b0b24c25b4913b459322060ed90cf0 /include | |
| parent | 7c1d102fb7559da3aa34e0457e68148e8f8bb8af (diff) | |
| download | libdvec-c-7520b04430cfbbb91fa1a3e7bf94995d18655caf.tar.gz libdvec-c-7520b04430cfbbb91fa1a3e7bf94995d18655caf.zip | |
Disconnect data buf from struct and make definition public
Diffstat (limited to 'include')
| -rw-r--r-- | include/vec.h | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/include/vec.h b/include/vec.h index 561b3da..0601c88 100644 --- a/include/vec.h +++ b/include/vec.h @@ -1,7 +1,29 @@ #include <stdbool.h> #include <stdlib.h> -struct vec; +#define VEC_PUSH(vec, type, val) \ + do { \ + type tmp = (val); \ + vec_push(vec, &tmp); } while (0) + +#define VEC_POP(vec, type, var) \ + do { \ + type *tmp = vec_pop(vec); \ + memcpy(&var, tmp, sizeof(type); \ + } while (0) + +#define VEC_AT(vec, type, idx) \ + (*(type *)vec_at(vec, idx)) + +struct vec { + size_t dsize; + size_t len, cap; + + char *data; +}; + +void vec_init(struct vec *vec, size_t dsize, size_t cap); +void vec_deinit(struct vec *vec); struct vec *vec_alloc(size_t dsize, size_t cap); void vec_free(struct vec *vec); @@ -11,15 +33,18 @@ void vec_resize(struct vec *vec, size_t cap); void vec_add(struct vec *vec, const void *data, size_t count); void vec_rm(struct vec *vec, size_t count); +void vec_rm_at(struct vec *vec, size_t index, size_t count); void vec_push(struct vec *vec, const void *data); void *vec_pop(struct vec *vec); -void vec_pop_at(struct vec *vec, size_t index); void *vec_at(struct vec *vec, size_t index); bool vec_iter(struct vec *vec, void *p); void vec_set(struct vec *vec, size_t index, const void *data); +void vec_setbuf(struct vec *vec, void *buf); +void *vec_popbuf(struct vec *vec); + int vec_empty(struct vec *vec); int vec_len(struct vec *vec); |
