On Wednesday, 21 December 2016 at 09:08:51 UTC, Ezneh wrote:
Hi, in one of my projects I have to get a slice from a BitArray.
I am trying to achieve that like this :
void foo(BitArray ba)
{
auto slice = ba[0..3]; // Assuming it has more than 4
elements
}
The problem is that I get an error :
"no operator [] overload for type BitArray".
Is there any other way to get a slice from a BitArray ?
Thanks,
Ezneh.
Mir allows you to define simple alternative to BitArray:
https://github.com/libmir/mir
------
struct BitMap
{
size_t* ptr;
import core.bitop;
bool opIndex(size_t index) const
{
return bt(ptr, index) != 0;
}
void opIndexAssign(bool val, size_t index)
{
if(val)
bts(ptr, index);
else
btr(ptr, index);
}
}
import mir.ndslice;
void main()
{
auto arr = new size_t[3];
auto sl = BitMap(arr.ptr).sliced(size_t.sizeof * 8 *
arr.length);
sl[4] = true;
sl[100] = true;
sl.popFrontN(3);
assert(sl[1]);
assert(sl[97]);
auto sl2 = sl[1...3]; // slicing
}
------