bitsy

Fast and efficient bitset backed by a byte buffer

Usage no npm install needed!

<script type="module">
  import bitsy from 'https://cdn.skypack.dev/bitsy';
</script>

README

Bitsy is a bitset made of real bits

You can create a bitset in many ways. I've seen some bold implementations use literal strings of 1s and 0s. I've also seen quite a few array based ones, either using booleans or numbers. Bitsy uses real bits backed by a byte buffer.

Usage

First npm install bitsy

var createBitsy = require('bitsy');

// bitsyInstance = createBitsy([size]) (or new createBitsy.Bitsy([size]))
// Create a 10 MB bitset.
var MEGABYTE_IN_BITS = 1048576 * 8;
var bitsy = createBitsy(10 * MEGABYTE_IN_BITS);


// Bitsy.prototype.setSize(newSize)
bitsy.setSize(0); // Truncate bitset and release memory
bitsy.setSize(bitsy.length * 2); // double the bitset size


// Bitsy.prototype.set(index, bitValue)
bitsy.set(200, false);


// trueOrFalse = Bitsy.prototype.get(index)
var bitValue = bitsy.get(200);


// Bitsy.prototype.copyTo(target, [targetFirstBitIndex], [sourceFirstBitIndex], [sourceLastBitIndex])
var a = createBitsy(1000);
a.set(100, true);
var b = createBitsy(50);
a.copyTo(b, 0, 80, 120); // Copy the bit range 80-120 form a to b
b.get(20) === b.get(100);


// Bitsy.prototype.copyFrom(source, [sourceFirstBitIndex], [sourceLastBitIndex], [targetFirstBitIndex])
var b = createBitsy(50);
// Copy the bit range 80-120 form a to b
b.copyFrom(a, 80, 120, 0);
b.get(20) === a.get(100);



// Bitsy.prototype.slice(begin, end)
// Slicing works just like JavaScript Array.prototype.slice
// except it returns a new Bitsy instance.

// create copy of b called 'a'
var a = b.slice();

// take the 10th bit through the last bit of b and  use them to create 'a'
var a = b.slice(10);

// take the 10th bit through the 13th bit of b and use them to create 'a'
var a = b.slice(10, 14); // Note that the ending index is excluded

// take the last 5 bits of b and use them to create 'a'
var a = b.slice(-5);

// Bitsy.prototype.toString([type])
a.toString(); // Hex representation
a.toString('base64'); // Base64 representation
a.toString('binary'); // Binary represetnation