BitSet
This module implements an array of bits, that grows as needed. It can be used from both JavaScript:
var bs = new BitSet();
for(var n = 0; n < 12; n++) {
bs.set(n);
}
console.dir(bs);
as well as CoffeeScript:
bs = new BitSet
bs.set 1
bs.clear 1
console.log bs.toString()
Usage
BitSets are very useful for realtime metrics. If you want to count the number of active users (CoffeeScript):
# Somewhere in application code
todaysUserCount = new Bitset
# The User class
class User
@login: (userName, password) ->
todaysUserCount.set @userId
# In reporting code
todaysUserCount.cardinality()
Documentation
BitSet#set(pos)
- sets the bit on position pos to trueBitSet#get(pos)
- returns whether the bit on position pos is setBitSet#clear(pos)
- clears the bit on position posBitSet#length
- returns the logical length of the bitsetBitSet#wordLength
- returns the word-length of the bitsetBitSet#cardinality
- returns how many bits are set to true in the bitsetBitSet#toString
- returns a string representation of the bitsetBitSet#toBinaryString
- returns a binary string representation of the bitsetBitSet#or(bitset)
- OR's this bitset with the argument bitsetBitSet#and(bitset)
- AND's this bitset with the argument bitsetBitSet#andNot(bitset)
- ANDNOT's this bitset with the argument bitsetBitSet#xor(bitset)
- XOR's this bitset with the argument bitset
For details see src/bitset.coffee
Installation
npm install bitset
Performance
It performs pretty well, you can try the performance.js in the support folder. This is the output with 100.000.000 bits:
set 100000000 bits: 3173ms
cardinality 100000000
cardinality: 949ms
Tests
Testing is done via the excellent mocha (cake test)