The BitList is an array of bits. A bit can be set at any index using the set member function, the array expands itself automatically if the index exceeds the current size.
Copy constructor
The assignment operator.
Set a bit at a specific index to a given value. If the index is larger than the current size, the BitList expands itself to be able to hold that value at the given index.
Get the bit at a given index. If the index exceeds the size, the return value is 'false'. All BitLists are treated as if they were of infinite size, all bits set to zero at initialization.
Get the size of the BitList. At construction time the size may be specified, and that much memory will be allocated. If the construction is done using the set() method, the size is 'minimal' i.e. as much as it needs to hold the last 'true' bit.
Count the TRUE bits from a certain index on
Just chop off all trailing 'false' bits. Returns new size.
Clear the list, reset size to 0 by default. If true is given as an argument, the size is kept.
The standard &= operator.
The standard |= operator.
The inversion method, flip every bit in the BitList.
Check if BL is a subset of the current list
Check if the current BitList overlaps with the other (i.e. they have at least one common Bit)
compress output
decompress input
Mask off litter at the end of a word not belonging to the array
The BitListIterator iterates through a BitList efficiently. next() and prev() functions are supplied. The functionality is the following: The BLI saves an index to a certain bit in the BitList. By calling either next() or prev(), the index is incremented/decremented and the bit it is pointing to now is returned. If it gets out of bounds, these functions return 'false'. The out-of-bounds index is always index=size. So by calling next() or prev() again when a 'false' was returned previously, they return the first/last bit, respectively.
Normal Constructor: needs the BitList to initialize. The index is initialized to the out-of-bounds index.
Alternate constructor: set the starting index yourself.
Copy Constructor.
Assignment.
Init: set current index
Set the internal index to the next 'true' or 'false' bit, indicated by the first argument, and return the index in the second argument. Returns 'false' if it gets out of bounds. Example: For a BitList 001100110011 (from left to right, index starts at 0), the subsequent call to next(true,index) returns 'true' and sets index to 2, 3, 6, 7, 10, 11. The next call puts leaves index and returns 'false'. A subsequent next() call would again return 'true' and set index=2.
Just like next(), but the index is moved backwards.
Increment the internal index and put the value of the bit it points to into bit. Returns 'false' if the boundary is reached. Example: For a BitList 001100110011 the calls to next(val) return 'true' and set bit to 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1. The next call returns 'false' and does not set bit. A subsequent call would return again 'true' and set bit to the first bit in the list, in this case 0.
Just like next() above, just decrement the internal index. The two versions of next() and prev() may be used in conjunction.