69 lines
1.7 KiB
Plaintext
69 lines
1.7 KiB
Plaintext
@node Bitsets
|
|
@section Bitsets
|
|
|
|
@mindex bitset
|
|
The module @samp{bitset} provides a common interface to several
|
|
implementations of bitsets. It also provides routines for vectors of bitsets.
|
|
|
|
To look at an existing use, see GNU Bison.
|
|
|
|
Currently it supports five flavours of bitsets:
|
|
@description @code
|
|
@item BITSET_ARRAY
|
|
Array of bits (fixed size, fast for dense bitsets). Memory for bit array
|
|
and bitset structure allocated contiguously.
|
|
@item BITSET_LIST
|
|
Linked list of arrays of bits (variable size, least storage for large
|
|
very sparse sets).
|
|
@item BITSET_TABLE
|
|
Expandable table of pointers to arrays of bits (variable size, less
|
|
storage for large sparse sets). Faster than @code{BITSET_LIST} for
|
|
random access.
|
|
@item BITSET_VECTOR
|
|
Variable array of bits (variable size, fast for dense bitsets).
|
|
@item BITSET_STATS
|
|
Wrapper bitset for internal use only. Used for gathering statistics
|
|
and/or better run-time checking.
|
|
@end description
|
|
|
|
However, the choice of the actual implementation is performed by the
|
|
library, based on the user provided attributes:
|
|
|
|
@description @code
|
|
@code BITSET_FIXED
|
|
Bitset size fixed.
|
|
@code BITSET_VARIABLE
|
|
Bitset size variable.
|
|
@code BITSET_DENSE
|
|
Bitset dense.
|
|
@code BITSET_SPARSE
|
|
Bitset sparse.
|
|
@code BITSET_FRUGAL
|
|
Prefer most compact.
|
|
@code BITSET_GREEDY
|
|
Prefer fastest at memory expense.
|
|
@end description
|
|
|
|
|
|
@smallexample
|
|
enum { nbits = 32 };
|
|
|
|
bitset bs0 = bitset_create (nbits, BITSET_FIXED);
|
|
bitset_set (bs0, 1);
|
|
bitset_set (bs0, 3);
|
|
bitset_set (bs0, 5);
|
|
|
|
bitset bs1 = bitset_create (nbits, BITSET_FIXED);
|
|
bitset_set (bs1, 0);
|
|
bitset_set (bs1, 2);
|
|
bitset_set (bs1, 4);
|
|
|
|
bitset bs = bitset_create (nbits, BITSET_FIXED);
|
|
bitset_or (bs, bs0, bs1);
|
|
ASSERT (bitset_count (bs) == 6);
|
|
|
|
bitset_free (bs);
|
|
bitset_free (bs1);
|
|
bitset_free (bs0);
|
|
@end smallexample
|