Bitarrays in the age of 64bit
9il
ilyayaroshenko at gmail.com
Mon Apr 6 01:08:50 UTC 2020
On Friday, 3 April 2020 at 07:31:52 UTC, Dominikus Dittes Scherkl
wrote:
> It was said that implementing bitarrays is complicated, because
> of the indexing.
>
> Has anybody ever considered to use bit-pointers?
> Nobody really uses the full address range that 64bit pointers
> have - in fact some hardware internally still uses 48bit or
> 56bit address-registers, so instead adding three lower address
> bits would not cost a lot (just forward bit 3..58 to the
> register instead of bit 0..55).
> This would also allow for implementing 2bit-types (one that I
> really would appreciate, because it can represent sign values,
> providing -1, 0, 1 and NaN - which is necessary as a comparison
> result for non-ordered values), and 4bit-types (so called
> nibbles).
> And with bit-pointers of course implementing arrays of boolean,
> sign, nibbles or even odd-length types would be straight
> forward. All the strange side-effects of byte clustering would
> vanish.
>
> Just an idea.
Sure.
1. GC allocated bitarrays.
http://mir-algorithm.libmir.org/mir_ndslice_allocation.html#.bitSlice
2. Ref-counted bitarrays
http://mir-algorithm.libmir.org/mir_ndslice_allocation.html#.bitRcslice
2. Bit array on top of a user-provided integer array.
http://mir-algorithm.libmir.org/mir_ndslice_topology.html#.bitwise
3. Packed integer (1-65 bits) arrays on top of a user-provided
integer array.
http://mir-algorithm.libmir.org/mir_ndslice_topology.html#.bitpack
4. Packed bytes bytegroup arrays on top of a user-provided
integer array.
http://mir-algorithm.libmir.org/mir_ndslice_topology.html#.bitpack
All of the provided API has random access range primitives, as
well the types are ndslices. Thus mean you can have construct for
example a bitmatrix.
Have a good day :)
More information about the Digitalmars-d
mailing list