Skip to content

namuol/bm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bm Build Status devDependency Status

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

Analytics

About

Use bitmasks of arbitrary depth without thinking.

Resources

Stars

Watchers

Forks

Packages

No packages published