BitArray/BitFields - Review

Era Scarecrow rtcvb32 at yahoo.com
Sun Jul 29 01:55:54 PDT 2012


On Sunday, 29 July 2012 at 06:27:32 UTC, Dmitry Olshansky wrote:
> Thus BitArray either becomes value type (that may come as 
> unexpected, see your option c/d). Or it becomes full reference 
> type as in option a (though it sucks). Sorry but b is no go, as 
> it makes code unpredictable I'd rather take my idea with 
> separate ranges then b.

  I've had a thought. Why not make it fully reference and at the 
same time not? Consider making a slice which is the real 
BitArray, then you have an outer container that when you want 
value semantics you use it and it would make appropriate copies 
every time it needed to (including when first put in the 
container). It would be implicitly convertible to a slice. So...

BitArraySlice {
   //real bitarray stuff and pointer ref
}

BitArray { //value semantics wrapper?
   BitArraySlice ba;
   alias ba this;

   //include wrapper versions of binary operators

   this(this) {
   }
}

  Doing it this way the arguments being passed as reference slices 
would ensure unneeded copies wouldn't be made. On the other hand 
a smaller portion of the code would need to be updated. Along 
with that a slice could be set as COW allowing quite a bit of 
flexibility.

  Thoughts?


More information about the Digitalmars-d-learn mailing list