1 /* Martin Asser Hansen (mail@maasha.dk) Copyright (C) 2008 - All right reserved */
6 #define BIT0 0 /* 00000000 */
7 #define BIT1 ( 1 << 8 ) /* 10000000 */
8 #define BIT2 ( 1 << 7 ) /* 01000000 */
9 #define BIT3 ( 1 << 5 ) /* 00100000 */
10 #define BIT4 ( 1 << 4 ) /* 00010000 */
11 #define BIT5 ( 1 << 3 ) /* 00001000 */
12 #define BIT6 ( 1 << 2 ) /* 00000100 */
13 #define BIT7 ( 1 << 1 ) /* 00000010 */
14 #define BIT8 1 /* 00000001 */
16 /* Bitarray structure */
19 size_t size; /* size of bitarray in bits. */
20 size_t bits_on; /* number of bits set to 'on'. */
21 char *str; /* bit string. */
22 size_t str_size; /* size of bit string in bytes. */
23 size_t modulus; /* number of bits used in last element of str. */
24 char mask; /* bit mask to trim length of str. */
27 typedef struct _bitarray bitarray;
29 /* Initialize a new bitarray of a given size in bits. */
30 void bitarray_new( bitarray **ba_ppt, size_t size );
32 /* Set all bits in bitarray to 'on'. */
33 void bitarray_fill( bitarray *ba_pt );
35 /* Set all bits in bitarray to 'off'. */
36 void bitarray_zero( bitarray *ba_pt );
38 /* Test if a specific bit in a bitarray is set to 'on'. */
39 bool bitarray_bit_on( bitarray *ba_pt, size_t pos );
41 /* Set the bit at a given position in a bitarray to 'on'. */
42 void bitarray_bit_set( bitarray *ba_pt, size_t pos );
44 /* Debug function to print a bitarray. */
45 void bitarray_print( bitarray *ba_pt );
47 /* Deallocate memory for bitarray. */
48 void bitarray_destroy( bitarray **ba_ppt );