]> diplodocus.org Git - nmh/blob - sbr/vector.h
sendsbr.c: Move interface to own file.
[nmh] / sbr / vector.h
1 /* vector.h -- dynamically sized vectors
2 *
3 * This code is Copyright (c) 2017, by the authors of nmh. See the
4 * COPYRIGHT file in the root directory of the nmh distribution for
5 * complete copyright information. */
6
7 /* A vector of bits for tracking the sequence membership of a single
8 * message. Do not access the struct members; use vector.c.
9 * Do not move or copy this struct as it may contain a pointer to
10 * itself; use bvector_copy(). */
11 struct bvector {
12 unsigned long *bits;
13 size_t maxsize;
14 unsigned long tiny[2]; /* Default fixed-size storage for bits. */
15 };
16 typedef struct bvector *bvector_t;
17
18 bvector_t bvector_create(void);
19 void bvector_init(struct bvector *) NONNULL(1);
20 void bvector_copy(bvector_t, bvector_t) NONNULL(1, 2);
21 void bvector_free(bvector_t) NONNULL(1);
22 void bvector_fini(struct bvector *) NONNULL(1);
23 void bvector_clear(bvector_t, size_t) NONNULL(1);
24 void bvector_clear_all(bvector_t) NONNULL(1);
25 void bvector_set(bvector_t, size_t) NONNULL(1);
26 unsigned int bvector_at(bvector_t, size_t) NONNULL(1) PURE;
27 unsigned long bvector_first_bits(bvector_t) NONNULL(1) PURE;
28
29 typedef struct svector *svector_t;
30
31 svector_t svector_create(size_t);
32 void svector_free(svector_t) NONNULL(1);
33 char *svector_push_back(svector_t, char *) NONNULL(1);
34 char *svector_at(svector_t, size_t) NONNULL(1);
35 char **svector_find(svector_t, const char *) NONNULL(1) PURE;
36 char **svector_strs(svector_t) NONNULL(1) PURE;
37 size_t svector_size(svector_t) NONNULL(1) PURE;
38
39 typedef struct ivector *ivector_t;
40
41 ivector_t ivector_create(size_t);
42 void ivector_free(ivector_t) NONNULL(1);
43 int ivector_push_back(ivector_t, int) NONNULL(1);
44 int ivector_at(ivector_t, size_t) NONNULL(1);
45 int *ivector_atp(ivector_t, size_t) NONNULL(1);