xref: /dflybsd-src/crypto/openssh/bitmap.h (revision 664f47636b7e6e9e2c54a4799ca4884a9c628df5)
1*664f4763Szrj /* $OpenBSD: bitmap.h,v 1.2 2017/10/20 01:56:39 djm Exp $ */
2e9778795SPeter Avalos /*
3e9778795SPeter Avalos  * Copyright (c) 2015 Damien Miller <djm@mindrot.org>
4e9778795SPeter Avalos  *
5e9778795SPeter Avalos  * Permission to use, copy, modify, and distribute this software for any
6e9778795SPeter Avalos  * purpose with or without fee is hereby granted, provided that the above
7e9778795SPeter Avalos  * copyright notice and this permission notice appear in all copies.
8e9778795SPeter Avalos  *
9e9778795SPeter Avalos  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10e9778795SPeter Avalos  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11e9778795SPeter Avalos  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12e9778795SPeter Avalos  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13e9778795SPeter Avalos  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14e9778795SPeter Avalos  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15e9778795SPeter Avalos  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16e9778795SPeter Avalos  */
17e9778795SPeter Avalos 
18e9778795SPeter Avalos #ifndef _BITMAP_H
19e9778795SPeter Avalos #define _BITMAP_H
20e9778795SPeter Avalos 
21e9778795SPeter Avalos #include <sys/types.h>
22e9778795SPeter Avalos 
23e9778795SPeter Avalos /* Simple bit vector routines */
24e9778795SPeter Avalos 
25e9778795SPeter Avalos struct bitmap;
26e9778795SPeter Avalos 
27e9778795SPeter Avalos /* Allocate a new bitmap. Returns NULL on allocation failure. */
28e9778795SPeter Avalos struct bitmap *bitmap_new(void);
29e9778795SPeter Avalos 
30e9778795SPeter Avalos /* Free a bitmap */
31e9778795SPeter Avalos void bitmap_free(struct bitmap *b);
32e9778795SPeter Avalos 
33e9778795SPeter Avalos /* Zero an existing bitmap */
34e9778795SPeter Avalos void bitmap_zero(struct bitmap *b);
35e9778795SPeter Avalos 
36e9778795SPeter Avalos /* Test whether a bit is set in a bitmap. */
37e9778795SPeter Avalos int bitmap_test_bit(struct bitmap *b, u_int n);
38e9778795SPeter Avalos 
39e9778795SPeter Avalos /* Set a bit in a bitmap. Returns 0 on success or -1 on error */
40e9778795SPeter Avalos int bitmap_set_bit(struct bitmap *b, u_int n);
41e9778795SPeter Avalos 
42e9778795SPeter Avalos /* Clear a bit in a bitmap */
43e9778795SPeter Avalos void bitmap_clear_bit(struct bitmap *b, u_int n);
44e9778795SPeter Avalos 
45e9778795SPeter Avalos /* Return the number of bits in a bitmap (i.e. the position of the MSB) */
46e9778795SPeter Avalos size_t bitmap_nbits(struct bitmap *b);
47e9778795SPeter Avalos 
48e9778795SPeter Avalos /* Return the number of bytes needed to represent a bitmap */
49e9778795SPeter Avalos size_t bitmap_nbytes(struct bitmap *b);
50e9778795SPeter Avalos 
51e9778795SPeter Avalos /* Convert a bitmap to a big endian byte string */
52e9778795SPeter Avalos int bitmap_to_string(struct bitmap *b, void *p, size_t l);
53e9778795SPeter Avalos 
54e9778795SPeter Avalos /* Convert a big endian byte string to a bitmap */
55e9778795SPeter Avalos int bitmap_from_string(struct bitmap *b, const void *p, size_t l);
56e9778795SPeter Avalos 
57e9778795SPeter Avalos #endif /* _BITMAP_H */
58