bitwise

Bitwise adapter over an integral type range. Consumes the range elements bit by bit, from the least significant bit to the most significant bit.

bitwise
(
R
)
(
auto ref R range
)

Parameters

R

an integral input range to iterate over

range R

range to consume bit by by

Return Value

Type: auto

A Bitwise input range with propagated forward, bidirectional and random access capabilities

Examples

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)));

Meta

Suggestion Box / Bug Report