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