On Monday, 28 May 2012 at 21:59:36 UTC, Dmitry Olshansky wrote:
Check your math. Xor != sub.
1 ^ 0 == 1, 0 ^ 1 == 1;
Compare with
1 <sub> 0 == 1, 0 <sub> 1 == 0.
That is, for one thing, sub is asymmetric :)
Hmm well subs would all happen at the 1 bit level. So let's
compare.
xor
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
sub
0 - 0 = 0
0 - 1 = -1 (or non-zero/true, truncates to 1)
1 - 0 = 1
1 - 1 = 0
Sorry, seems the same unless we are going with carry rules, (at
which point it is no longer bit arrays subs), it seems to follow
the xor rules.
I think it would be nice to rewrite operators to new style. Cut
down of the sheer repetition is good enough reason to merge it.
Alas the other primary thing it lacks aside from set operators
overloading is Small string optimization. Namely you have some
8bytes here, that's more then enough to store say 7*8=56 bits,
and have 7 bits for length. Presumably you check if it's a
small set by using lower bit of a pointer. e.g. 0 == normal
pointer, big set. if set to 1 == small set, everything else in
next 3 bits of "pointer" are small-length, all other 7 bytes of
the whole struct contain bit-array. You still can operate on it
as 2 words.
Union work. Could do it, but it then requires special rules. To
do slices I have 2 longs representing the offset and ending bits
within the size_t array, so we're looking at 192-256 bits. minus
16 will still leave us with 128 workable bits.
Dealing with the pointer seems like a bad idea, but my starting
offset we can say the first two bytes are 255, dropping the
usable range of the starting offset to about 2^64 - 2^32, That
could work and keep almost all the functionality.
Then it can have very interesting use cases. Like say
completely replace usual nitty-gritty C-ish bit-flags. They
sadly are too cost effective so that no suitable safe
alternative came about yet. Time to make a game changer? ;)
I don't see BitArray as a good replacement for the C flags.
However I already made (and suggested) a flags struct that
accepts and uses enums for it's flags.
(and of course this optimization would be very welcome, I'll
happily bash any walls in front of such contribution making
into Phobos)
Then I'll import it and Hope I don't get too much criticism from
the community.