Bug 10650 – std.bitmanip.FixedBitArray

Status
NEW
Severity
enhancement
Priority
P4
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2013-07-15T17:00:54Z
Last change time
2024-12-01T16:18:17Z
Assigned to
No Owner
Creator
bearophile_hugs
Moved to GitHub: phobos#9610 →

Comments

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
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/9610 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB