bm
v0.1.1
Published
Create and use bitmasks of arbitrary depth without thinking.
Downloads
14
Readme
bm
Create and use bitmasks of arbitrary depth without thinking.
NOTE: This has not been battle tested yet; use at your own risk. (And please report issues)
var createBitmaskGenerator = require('bm');
// Up to 1000 unique values (actually a multiple of 32 under the hood)
var bm = createBitmaskGenerator(1000);
var positionable = bm('position');
var moveable = bm('position', 'velocity');
var sprite = bm('position', 'velocity', 'texture');
moveable.has(bm('position')); // true
moveable.has(positionable); // true
positionable.has(bm('velocity')); // false
moveable.any(bm('velocity', 'position', 'texture')); // true
moveable.has(bm('velocity', 'position', 'texture')); // false
moveable.and(bm('texture')) === sprite; // true
sprite.not(bm('texture')) === moveable; // true
// Notice how you can actually compare by value; this is because
// the generator keeps a cache of all the mask objects
// under the hood.
sprite === bm('texture', 'velocity', 'position'); // true
API
var createBitmaskGenerator = require('bm');
Create a new bitmask generator
var bm = createBitmaskGenerator(maxUniqueValues);
maxUniqueValues
Number default=31 The number of unique tags supported.
Create a new bitmask from any number of tags
var mask = bm(tag1, tag2, tagN);
tag1, tag2, tagN...
Strings The tags that are marked in this mask.
Note: Masks returned by this function can be compared by value, and order of arguments does not matter.
In other words, bm('a','b','c') === bm('c','b','a')
.
Check if one mask contains all values from another
mask.has(otherMask);
Example:
bm('a','b','c').has(bm('a')); // true!
bm('a','b','c').has(bm('x')); // false!
Check if one mask contains any values from another
mask.any(otherMask);
Example:
bm('a','b','c').any(bm('a', 'x')); // true!
bm('a','b','c').any(bm('x', 'y', 'z')); // false!
Combine two groups of tags
var combined = mask.and(otherMask);
Example:
bm('a').and(bm('b')).and(bm('c')) === bm('a', 'b', 'c'); // true!
Remove certain tags from a mask
var without = mask.not(otherMask);
Example:
bm('a','b','c').not(bm('b')) === bm('a','c'); // true!
License
MIT
Install
npm install bm --save