api documentation
[protos/libecoli.git] / include / ecoli_vec.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
3  */
4
5 /**
6  * @defgroup vec Vectors
7  * @{
8  *
9  * @brief Helpers for vectors manipulation.
10  *
11  * The ec_vec API provide helpers to manipulate vectors of objects
12  * of any kind.
13  */
14
15 #ifndef ECOLI_VEC_
16 #define ECOLI_VEC_
17
18 #include <sys/types.h>
19 #include <stdint.h>
20 #include <stdio.h>
21
22 /* if NULL, default does nothing */
23 typedef void (*ec_vec_elt_free_t)(void *ptr);
24
25 /* if NULL, default is:
26  * memcpy(dst, src, vec->elt_size)
27  */
28 typedef void (*ec_vec_elt_copy_t)(void *dst, void *src);
29
30 struct ec_vec *ec_vec(size_t elt_size, size_t size,
31                 ec_vec_elt_copy_t copy, ec_vec_elt_free_t free);
32 int ec_vec_add_by_ref(struct ec_vec *vec, void *ptr);
33
34 int ec_vec_add_ptr(struct ec_vec *vec, void *elt);
35 int ec_vec_add_u8(struct ec_vec *vec, uint8_t elt);
36 int ec_vec_add_u16(struct ec_vec *vec, uint16_t elt);
37 int ec_vec_add_u32(struct ec_vec *vec, uint32_t elt);
38 int ec_vec_add_u64(struct ec_vec *vec, uint64_t elt);
39
40 int ec_vec_get(void *ptr, const struct ec_vec *vec, size_t idx);
41
42 struct ec_vec *ec_vec_dup(const struct ec_vec *vec);
43 struct ec_vec *ec_vec_ndup(const struct ec_vec *vec,
44         size_t off, size_t len);
45 void ec_vec_free(struct ec_vec *vec);
46
47 __attribute__((pure))
48 size_t ec_vec_len(const struct ec_vec *vec);
49
50 #endif
51
52 /** @} */