diff options
Diffstat (limited to 'chapter-modules/src/main/smp/sys/adt')
| -rw-r--r-- | chapter-modules/src/main/smp/sys/adt/bitset.smp | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/chapter-modules/src/main/smp/sys/adt/bitset.smp b/chapter-modules/src/main/smp/sys/adt/bitset.smp deleted file mode 100644 index d02cd2fe..00000000 --- a/chapter-modules/src/main/smp/sys/adt/bitset.smp +++ /dev/null @@ -1,57 +0,0 @@ - -// A set of non-negative integers, represented one bit per value. -struct bitset { - i64[] !_bits; - - new bitset = { -> - _bits = new i64[1]; - }; - - // Return 0 for missing, non-zero for true - val get = { int bit -> - if( (bit >> 6) >= _bits# ) return false; - i64 mask = 1 << (bit & 63); - return (_bits[bit >> 6] & mask); - }; - - val _grow = { int bit -> - int x = bit >> 6; - int len = _bits#; - if( x < len ) return self; - while( x >= len ) len *= 2; - var bits = new i64[len]; - for( int i=0; i<_bits#; i++ ) - bits[i] = _bits[i]; - _bits = bits; - return self; - }; - - // Set - val set = { int bit -> - i64 mask = 1 << (bit & 63); - _grow(bit)._bits[bit >> 6] |= mask; - return self; - }; - - // Test and set - val tset = { int bit -> - int idx = bit >> 6; - i64 mask = 1 << (bit & 63); - if( _grow(bit)._bits[idx] & mask ) - return true; // Already set - _bits[idx] |= mask; - return false; // Was false (and now set) - }; - - val clr = { int bit -> - if( (bit >> 6) >= _bits# ) return self; - i64 mask = 1 << (bit & 63); - _bits[bit >> 6] &= (mask ^ -1); - return self; - }; - - val clear = { -> - for( int i=0; i<_bits#; i++ ) _bits[i] = 0; - return self; - }; -}; |
