summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2022-03-29 18:11:15 +0200
committerLouis Burda <quent.burda@gmail.com>2022-03-29 18:11:15 +0200
commit7520b04430cfbbb91fa1a3e7bf94995d18655caf (patch)
tree4b5ebf9532b0b24c25b4913b459322060ed90cf0 /include
parent7c1d102fb7559da3aa34e0457e68148e8f8bb8af (diff)
downloadlibdvec-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.h29
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);