bitfield
Version:
a simple bitfield, compliant with the BitTorrent spec
140 lines (81 loc) • 4.57 kB
Markdown
# bitfield
A simple bitfield, compliant with the BitTorrent spec.
npm install bitfield
#### Example
```js
import Bitfield from "bitfield";
const field = new Bitfield(256); // Create a bitfield with 256 bits.
field.set(128); // Set the 128th bit.
field.set(128, true); // Same as above.
field.get(128); // `true`
field.get(200); // `false` (all values are initialised to `false`)
field.get(1e3); // `false` (out-of-bounds is also false)
field.set(128, false); // Set the 128th bit to 0 again.
field.buffer; // The buffer used by the bitfield.
```
## Class: BitField
### Constructors
- [constructor](#constructor)
### Properties
- [buffer](#buffer)
### Methods
- [forEach](#foreach)
- [get](#get)
- [set](#set)
## Constructors
### constructor
\+ **new BitField**(`data?`: number \| Uint8Array, `opts?`: BitFieldOptions): `BitField`
#### Parameters:
| Name | Type | Default value | Description |
| ------- | -------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `data` | number \| Uint8Array | 0 | Either a number representing the maximum number of supported bytes, or a Uint8Array. |
| `opts?` | { grow: number } | { grow: 0 } | <p>**grow:**<p>If you `set` an index that is out-of-bounds, the bitfield will automatically grow so that the bitfield is big enough to contain the given index, up to the given size (in bit). <p>If you want the Bitfield to grow indefinitely, pass `Infinity`. |
**Returns:** `BitField`
## Properties
### buffer
• **buffer**: Uint8Array
The internal storage of the bitfield.
## Methods
### forEach
▸ **forEach**(`fn`: (bit: boolean, index: number) => void, `start?`: number, `end?`: number): void
Loop through the bits in the bitfield.
#### Parameters:
| Name | Type | Default value | Description |
| ------- | ------------------------------------- | ----------------------- | ----------------------------------------------------------- |
| `fn` | (bit: boolean, index: number) => void | - | Function to be called with the bit value and index. |
| `start` | number | 0 | Index of the first bit to look at. |
| `end` | number | this.buffer.length \* 8 | Index of the first bit that should no longer be considered. |
**Returns:** void
---
### get
▸ **get**(`i`: number): boolean
Get a particular bit.
#### Parameters:
| Name | Type | Description |
| ---- | ------ | ---------------------- |
| `i` | number | Bit index to retrieve. |
**Returns:** boolean
A boolean indicating whether the `i`th bit is set.
---
### set
▸ **set**(`i`: number, `value?`: boolean): void
Set a particular bit.
Will grow the underlying array if the bit is out of bounds and the `grow` option is set.
#### Parameters:
| Name | Type | Default value | Description |
| ------- | ------- | ------------- | -------------------------------------------- |
| `i` | number | - | Bit index to set. |
| `value` | boolean | true | Value to set the bit to. Defaults to `true`. |
**Returns:** void
---
### setAll
▸ **setAll**(`array`: `ArrayLike<boolean>`, `offset?`: number): void
Set the bits in the bitfield to the values in the given array.
#### Parameters:
| Name | Type | Default value | Description |
| -------- | -------------------- | ------------- | ------------------------------------- |
| `array` | `ArrayLike<boolean>` | - | Array of booleans to set the bits to. |
| `offset` | number | 0 | Index of the first bit to set. |
**Returns:** void
## License
MIT