Comment #0 by bearophile_hugs — 2013-07-15T17:00:54Z
This is a struct with no defined constructor that uses a bit array of statically known size:
import std.bitmanip: BitArray;
struct Foo {
enum nBits = 1_024;
size_t[nBits / size_t.sizeof] buffer;
BitArray bitSet;
bool isInitialized = false;
void bar() /*pure nothrow*/ {
if (!isInitialized) {
bitSet.init(buffer, nBits);
isInitialized = true;
}
// .......
}
}
void main() {}
A statically known size is useful to reduce pressure a bit on the GC, to increase cache locality, etc. So I suggest to introduce in std.bitmanip a simple FixedBitArray based on BitArray that offers a simpler usage for statically known sizes of bit arrays:
struct FixedBitArray(size_t nBits) {
private size_t[nBits / size_t.sizeof + (nBits % size_t.sizeof) ? 1 : 0] buffer;
...
}
import std.bitmanip: FixedBitArray;
struct Foo {
FixedBitArray!(1_024) bitSet;
void bar() pure nothrow {
// .......
}
}
void main() {}
An alternative name is "BoundedBitArray" as in the Ada 2012 bounded collections.
An alternative is to modify BitArray to allow both usages nicely.
Comment #1 by robert.schadek — 2024-12-01T16:18:17Z