150397Sobrien/*
2169689Skan * bitset.h -- Dynamic bitset.
350397Sobrien *
4132718Skan * Copyright (c) 2001-2020, NLnet Labs. All rights reserved.
550397Sobrien *
6132718Skan * See LICENSE for the license.
750397Sobrien *
850397Sobrien */
950397Sobrien#ifndef BITSET_H
1050397Sobrien#define BITSET_H
11132718Skan
1250397Sobrien#include <assert.h>
1350397Sobrien#include <limits.h>
1450397Sobrien#include <string.h>
1550397Sobrien
1650397Sobrientypedef struct nsd_bitset nsd_bitset_type;
17132718Skan
18169689Skanstruct nsd_bitset {
19169689Skan	size_t size; /** Number of available bits in the set */
2050397Sobrien	unsigned char bits[];
2150397Sobrien};
2250397Sobrien
2350397Sobriensize_t nsd_bitset_size(size_t bits);
2450397Sobrien
2550397Sobrienvoid nsd_bitset_zero(struct nsd_bitset *bset);
2650397Sobrien
27117395Skanvoid nsd_bitset_init(struct nsd_bitset *bset, size_t bits);
2850397Sobrien
29117395Skanint nsd_bitset_isset(struct nsd_bitset *bset, size_t bit);
3050397Sobrien
3150397Sobrienvoid nsd_bitset_set(struct nsd_bitset *bset, size_t bit);
3250397Sobrien
3350397Sobrienvoid nsd_bitset_unset(struct nsd_bitset *bset, size_t bit);
3450397Sobrien
3550397Sobrienvoid nsd_bitset_or(
3650397Sobrien	struct nsd_bitset *destset,
3750397Sobrien	struct nsd_bitset *srcset1,
3850397Sobrien	struct nsd_bitset *srcset2);
3950397Sobrien
4050397Sobrien#endif /* BITSET_H */
4150397Sobrien