BitRange

Range over bit set. Each element is the bit number that is set.

This is more efficient than testing each bit in a sparsely populated bit set. Note that the first bit in the bit set would be bit 0.

Constructors

this
this(const(size_t)* bitarr, size_t numBits)

Construct a BitRange.

Members

Functions

empty
bool empty()

Range functions

front
size_t front()
popFront
void popFront()

Range functions

Manifest constants

bitsPerWord
enum bitsPerWord;

Number of bits in each size_t

Examples

1 import core.stdc.stdlib : malloc, free;
2 import core.stdc.string : memset;
3 
4 // initialize a bit array
5 enum nBytes = (100 + BitRange.bitsPerWord - 1) / 8;
6 size_t *bitArr = cast(size_t *)malloc(nBytes);
7 scope(exit) free(bitArr);
8 memset(bitArr, 0, nBytes);
9 
10 // set some bits
11 bts(bitArr, 48);
12 bts(bitArr, 24);
13 bts(bitArr, 95);
14 bts(bitArr, 78);
15 
16 enum sum = 48 + 24 + 95 + 78;
17 
18 // iterate
19 size_t testSum;
20 size_t nBits;
21 foreach (b; BitRange(bitArr, 100))
22 {
23     testSum += b;
24     ++nBits;
25 }
26 
27 assert(testSum == sum);
28 assert(nBits == 4);
Suggestion Box / Bug Report