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.

Reply via email to