Bitarray size limits
    bearophile 
    bearophileHUGS at lycos.com
       
    Wed Apr 25 09:33:35 PDT 2012
    
    
  
ixid:
> These seem to be limited to uint.max length. Is there a way to 
> make larger bit arrays?
Yeah, fixing the BigArray source :-)
It's limited by size_t.max length, that equals to uint.max on 32 
bit systems.
It contains code like:
struct BitArray {
     size_t len;
     size_t* ptr;
     @property const size_t dim() {
         return (len + (bitsPerSizeT-1)) / bitsPerSizeT;
     }
     @property const size_t length() {
         return len;
     }
...
}
To create larger arrays that 'len' needs to be a ulong. So it 
needs to become something like this:
struct BitArray(bool hugeToo=false) {
     static if (hugeToo) {
         alias ulong Tindex;
     else
         alias size_t Tindex;
     Tindex len;
     size_t* ptr;
     @property const Tindex dim() {
         return (len + (bitsPerSizeT - 1)) / bitsPerSizeT;
     }
     @property const Tindex length() {
         return len;
     }
...
}
But this may cause some problems because BitArray is trying to 
look like a dynamic array, while now it's something that can be 
longer (and with a larger struct) than any dynamic array, so 
_from the outside too_ the management of its length needs extra 
care.
Bye,
bearophile
    
    
More information about the Digitalmars-d-learn
mailing list