an integral input range to iterate over
range to consume bit by by
A Bitwise input range with propagated forward, bidirectional and random access capabilities
1 import std.algorithm.comparison : equal; 2 import std.format : format; 3 4 // 00000011 00001001 5 ubyte[] arr = [3, 9]; 6 auto r = arr.bitwise; 7 8 // iterate through it as with any other range 9 assert(format("%(%d%)", r) == "1100000010010000"); 10 assert(format("%(%d%)", r.retro).equal("1100000010010000".retro)); 11 12 auto r2 = r[5 .. $]; 13 // set a bit 14 r[2] = 1; 15 assert(arr[0] == 7); 16 assert(r[5] == r2[0]);
You can use bitwise to implement an uniform bool generator
import std.algorithm.comparison : equal; import std.random : rndGen; auto rb = rndGen.bitwise; static assert(isInfinite!(typeof(rb))); auto rb2 = rndGen.bitwise; // Don't forget that structs are passed by value assert(rb.take(10).equal(rb2.take(10)));
Bitwise adapter over an integral type range. Consumes the range elements bit by bit, from the least significant bit to the most significant bit.