UNPKG

bitfield

Version:

a simple bitfield, compliant with the BitTorrent spec

140 lines (81 loc) 4.57 kB
# 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