From 04ee0c3f6ad7e4177cc43a0c57f046013a4fbac9 Mon Sep 17 00:00:00 2001 From: Ralph Corderoy Date: Sun, 5 Nov 2017 13:10:17 +0000 Subject: [PATCH] vector.c: Move interface to own file. Don't #include it in all its users yet as it's too tangled with mh.h's other content, so just #include it in mh.h instead. --- Makefile.am | 1 + h/mh.h | 40 +--------------------------------------- sbr/vector.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 39 deletions(-) create mode 100644 sbr/vector.h diff --git a/Makefile.am b/Makefile.am index 2497060a..e6cc4dc4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -390,6 +390,7 @@ noinst_HEADERS = \ sbr/seq_print.h \ sbr/terminal.h \ sbr/unquote.h \ + sbr/vector.h \ thirdparty/jsmn/jsmn.h \ uip/forwsbr.h \ uip/mhfree.h \ diff --git a/h/mh.h b/h/mh.h index bf746f18..bc3766e4 100644 --- a/h/mh.h +++ b/h/mh.h @@ -267,45 +267,7 @@ extern struct swit anoyes[]; /* standard yes/no switches */ #define MBITS "\020\01EXISTS\02SELECTED\03NEW\04UNSEEN" -/* A vector of bits for tracking the sequence membership of a single - * message. Do not access the struct members; use vector.c. - * Do not move or copy this struct as it may contain a pointer to - * itself; use bvector_copy(). */ -struct bvector { - unsigned long *bits; - size_t maxsize; - unsigned long tiny[2]; /* Default fixed-size storage for bits. */ -}; -typedef struct bvector *bvector_t; - -bvector_t bvector_create (void); -void bvector_init(struct bvector *bv) NONNULL(1); -void bvector_copy (bvector_t, bvector_t) NONNULL(1, 2); -void bvector_free (bvector_t) NONNULL(1); -void bvector_fini(struct bvector *bv) NONNULL(1); -void bvector_clear (bvector_t, size_t) NONNULL(1); -void bvector_clear_all (bvector_t) NONNULL(1); -void bvector_set (bvector_t, size_t) NONNULL(1); -unsigned int bvector_at (bvector_t, size_t) NONNULL(1) PURE; -unsigned long bvector_first_bits (bvector_t) NONNULL(1) PURE; - -typedef struct svector *svector_t; - -svector_t svector_create (size_t); -void svector_free (svector_t) NONNULL(1); -char *svector_push_back (svector_t, char *) NONNULL(1); -char *svector_at (svector_t, size_t) NONNULL(1); -char **svector_find(svector_t, const char *) NONNULL(1) PURE; -char **svector_strs (svector_t) NONNULL(1) PURE; -size_t svector_size (svector_t) NONNULL(1) PURE; - -typedef struct ivector *ivector_t; - -ivector_t ivector_create (size_t); -void ivector_free (ivector_t) NONNULL(1); -int ivector_push_back (ivector_t, int) NONNULL(1); -int ivector_at (ivector_t, size_t) NONNULL(1); -int *ivector_atp (ivector_t, size_t) NONNULL(1); +#include "sbr/vector.h" /* * Primary structure of folder/message information diff --git a/sbr/vector.h b/sbr/vector.h new file mode 100644 index 00000000..fc03a2dc --- /dev/null +++ b/sbr/vector.h @@ -0,0 +1,45 @@ +/* vector.h -- dynamically sized vectors + * + * This code is Copyright (c) 2017, by the authors of nmh. See the + * COPYRIGHT file in the root directory of the nmh distribution for + * complete copyright information. */ + +/* A vector of bits for tracking the sequence membership of a single + * message. Do not access the struct members; use vector.c. + * Do not move or copy this struct as it may contain a pointer to + * itself; use bvector_copy(). */ +struct bvector { + unsigned long *bits; + size_t maxsize; + unsigned long tiny[2]; /* Default fixed-size storage for bits. */ +}; +typedef struct bvector *bvector_t; + +bvector_t bvector_create(void); +void bvector_init(struct bvector *) NONNULL(1); +void bvector_copy(bvector_t, bvector_t) NONNULL(1, 2); +void bvector_free(bvector_t) NONNULL(1); +void bvector_fini(struct bvector *) NONNULL(1); +void bvector_clear(bvector_t, size_t) NONNULL(1); +void bvector_clear_all(bvector_t) NONNULL(1); +void bvector_set(bvector_t, size_t) NONNULL(1); +unsigned int bvector_at(bvector_t, size_t) NONNULL(1) PURE; +unsigned long bvector_first_bits(bvector_t) NONNULL(1) PURE; + +typedef struct svector *svector_t; + +svector_t svector_create(size_t); +void svector_free(svector_t) NONNULL(1); +char *svector_push_back(svector_t, char *) NONNULL(1); +char *svector_at(svector_t, size_t) NONNULL(1); +char **svector_find(svector_t, const char *) NONNULL(1) PURE; +char **svector_strs(svector_t) NONNULL(1) PURE; +size_t svector_size(svector_t) NONNULL(1) PURE; + +typedef struct ivector *ivector_t; + +ivector_t ivector_create(size_t); +void ivector_free(ivector_t) NONNULL(1); +int ivector_push_back(ivector_t, int) NONNULL(1); +int ivector_at(ivector_t, size_t) NONNULL(1); +int *ivector_atp(ivector_t, size_t) NONNULL(1); -- 2.56.0