xref: /openbsd/usr.sbin/nsd/bitset.h (revision 3efee2e1)
1308d2509Sflorian /*
2308d2509Sflorian  * bitset.h -- Dynamic bitset.
3308d2509Sflorian  *
4308d2509Sflorian  * Copyright (c) 2001-2020, NLnet Labs. All rights reserved.
5308d2509Sflorian  *
6308d2509Sflorian  * See LICENSE for the license.
7308d2509Sflorian  *
8308d2509Sflorian  */
9*3efee2e1Sflorian #ifndef BITSET_H
10*3efee2e1Sflorian #define BITSET_H
11308d2509Sflorian 
12308d2509Sflorian #include <assert.h>
13308d2509Sflorian #include <limits.h>
14308d2509Sflorian #include <string.h>
15308d2509Sflorian 
16308d2509Sflorian typedef struct nsd_bitset nsd_bitset_type;
17308d2509Sflorian 
18308d2509Sflorian struct nsd_bitset {
19308d2509Sflorian 	size_t size; /** Number of available bits in the set */
20308d2509Sflorian 	unsigned char bits[];
21308d2509Sflorian };
22308d2509Sflorian 
23308d2509Sflorian size_t nsd_bitset_size(size_t bits);
24308d2509Sflorian 
25308d2509Sflorian void nsd_bitset_zero(struct nsd_bitset *bset);
26308d2509Sflorian 
27308d2509Sflorian void nsd_bitset_init(struct nsd_bitset *bset, size_t bits);
28308d2509Sflorian 
29308d2509Sflorian int nsd_bitset_isset(struct nsd_bitset *bset, size_t bit);
30308d2509Sflorian 
31308d2509Sflorian void nsd_bitset_set(struct nsd_bitset *bset, size_t bit);
32308d2509Sflorian 
33308d2509Sflorian void nsd_bitset_unset(struct nsd_bitset *bset, size_t bit);
34308d2509Sflorian 
35308d2509Sflorian void nsd_bitset_or(
36308d2509Sflorian 	struct nsd_bitset *destset,
37308d2509Sflorian 	struct nsd_bitset *srcset1,
38308d2509Sflorian 	struct nsd_bitset *srcset2);
39308d2509Sflorian 
40*3efee2e1Sflorian #endif /* BITSET_H */
41