BitArray - Is there one?

Era Scarecrow rtcvb32 at yahoo.com
Sat May 26 23:50:40 PDT 2012


  Curiously I'm making a huffman compression algo for fun, however 
I didn't see anything in std.array or anywhere that was to 
support bools specifically (in a packed form anyways). So I'm 
making one. So far I've got it saving the data as uint, 0 refers 
to the most significant bit and 7 the least significant, so A 
will come out as 0100001 and look right

  It supports a range, however foreach doesn't like using 
front/popFront/empty if I make opApply. It supports slices as 
well.

  For the BitArray, using it as follows I get an error:

struct BitArray {
   alias length opDollar;
   alias length __dollar;

   int length();
   Range opSlice();
   Range opSlice(int s, int e);
   struct Range {
      int opDollar();
   }
}

  BitArray ba = BitArray(someArrayOfUbyte);
  auto range = ba[0 .. $]; //needs to access 'this' for length? 
shouldn't it rewrite to ba[0 .. ba.opDollar()] ?
  auto range2 = ba[];      //works fine

  It also seems the BitArray (but not the range) requires __dollar 
rather than opDollar, however an alias seems to fix that. (Why is 
this?? the Range doesn't need a __dollar alias to work right)

  I also have it so you can ref the individual bools (by using an 
intermediate one in opApply). So..

//perfectly fine in unittest
foreach(ref r_b; range) {
   r_b = !r_b;
}


More information about the Digitalmars-d-learn mailing list