@fictivekin/growable-uint8-array
Version:
A wrapper around Uint8Array that simplifies buffer management when appending data (growing the array)
59 lines (40 loc) • 2.28 kB
Markdown
# growable-uint8-array

GrowableUint8Array is simple wrapper around Uint8Array that manages resizing the buffer when appending new data.
Adds a new method `extend` which can be used to append data to an array. `GrowableUint8Array` will manage the
underlying buffer, automatically allocating a larger `Uint8Array` when necessary using a simple exponential
growth algorithm.
`getElement(n)` and `setElement(n, value)` can be used to get and set the value, respectively, at a specific index. When setting, index values less than zero or greater than the length of the array are silently ignored.
All `TypedArray` prototype methods are delegated to the underlying `Uint8Array`. If the prototype method returns an instance of
`Uint8Array` it will be wrapped in a `GrowableUint8Array`.
Use `growableUint8Array.unwrap()` to return a `Uint8Array` view of the underlying data, with proper bounds. By default this will not copy the data, for performance reasons. Pass `true` as the first argument to unwrap to return a copy of the data.
## Usage
```js
import GrowableUint8Array from '@fictivekin/growable-uint8-array';
const arr = new GrowableUint8Array(new Uint8Array([1, 2, 3]));
console.log(arr.length); // 3
arr.extend([4, 5, 6]); // GrowableUint8Array [ 1, 2, 3, 4, 5, 6 ]
console.log(arr.length); // 6
arr.map((x) => x * 2); // GrowableUint8Array [ 2, 4, 6, 8, 10, 12 ]
console.log(arr); // GrowableUint8Array [ 1, 2, 3, 4, 5, 6 ]
arr.unwrap() // Uint8Array [ 1, 2, 3, 4, 5, 6 ]
```
## Array-like access
If your environment supports ES6 proxies, you can use `arr.accessProxy()` to get a proxy object which allows for Array-like attribute access.
```js
import GrowableUint8Array from '@fictivekin/growable-uint8-array';
const proxy = new GrowableUint8Array(new Uint8Array([1, 2, 42])).accessProxy();
proxy[2]; // 42
proxy[0] = 7; // 7
proxy.extend([3, 2, 1]);
proxy.unwrap() // Uint8Array [ 7, 2, 42, 3, 2, 1 ]
```
## Install
`npm install @fictivekin/growable-uint8-array`
## Contribute
Clone repo, then install dev dependencies:
`npm install --only=dev`
## Run tests
`npm run test`
## Build
`npm run build`