# bm

> Create and use bitmasks of arbitrary depth without thinking.

Latest version **0.1.1** (published 2014-10-01) · MIT license · 0 weekly downloads

## Install

```sh
npm install bm
pnpm add bm
yarn add bm
bun add bm
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.1 |
| Published | 2014-10-01 |
| First published | 2014-09-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 5 |
| Author | Louis Acresti |
| Maintainers | namuol |
| Keywords | bitmask, bit, mask, light |

## Links

- npm: https://www.npmjs.com/package/bm
- Repository: https://github.com/gitsubio/bm
- Issues: https://github.com/gitsubio/bm/issues
- npm.io page: https://npm.io/package/bm

## Alternatives

- [@oh-my-pi/pi-natives](https://npm.io/package/@oh-my-pi/pi-natives.md) — 51.8K weekly downloads
- [@capgo/capacitor-light-sensor](https://npm.io/package/@capgo/capacitor-light-sensor.md) — 3.0K weekly downloads
- [@heyhuynhgiabuu/pi-diff](https://npm.io/package/@heyhuynhgiabuu/pi-diff.md) — 492 weekly downloads
- [@lotsa/verdant-lang-asm](https://npm.io/package/@lotsa/verdant-lang-asm.md) — 38 weekly downloads
- [new-era-syntax](https://npm.io/package/new-era-syntax.md) — 20 weekly downloads

## Recent versions

- 0.1.1 (latest) — 2014-10-01
- 0.1.0 — 2014-09-29
- 0.0.0 — 2014-09-29

## README

# bm [![Build Status](https://drone.io/github.com/gitsubio/bm/status.png)](https://drone.io/github.com/gitsubio/bm/latest) [![devDependency Status](https://david-dm.org/gitsubio/bm/dev-status.svg?style=flat-square)](https://david-dm.org/gitsubio/bm#info=devDependencies)

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](http://github.com/gitsubio/bm/issues))

```js
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

```js
var createBitmaskGenerator = require('bm');
```

#### Create a new bitmask generator
```js
var bm = createBitmaskGenerator(maxUniqueValues);
```
> **`maxUniqueValues`** ***Number*** *default=31* The number of unique tags supported.


#### Create a new bitmask from any number of tags
```js
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
```js
mask.has(otherMask);
```

Example:

```js
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
```js
mask.any(otherMask);
```

Example:

```js
bm('a','b','c').any(bm('a', 'x')); // true!
bm('a','b','c').any(bm('x', 'y', 'z')); // false!
```

#### Combine two groups of tags
```js
var combined = mask.and(otherMask);
```

Example:

```js
bm('a').and(bm('b')).and(bm('c')) === bm('a', 'b', 'c'); // true!
```

#### Remove certain tags from a mask

```js
var without = mask.not(otherMask);
```

Example:

```js
bm('a','b','c').not(bm('b')) === bm('a','c'); // true!
```

## License

MIT

## Install

```bash
npm install bm --save
```

----

[![Analytics](https://ga-beacon.appspot.com/UA-33247419-2/bm/README.md)](https://github.com/igrigorik/ga-beacon)

---
_Source: https://npm.io/package/bm · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
