Partition an ArrayBuffer into multiple TypedArray views efficiently, while handling complex memory layouts and ensuring optimal alignment for better access performance.
@ain1084/array-buffer-partitioner is a utility library for creating multiple TypedArray views on a single ArrayBuffer or SharedArrayBuffer. This allows various data types to be efficiently placed within a single buffer. The library automatically adjusts each TypedArray’s byteOffset to prevent errors that can occur during view creation.
TypedArray views from a single ArrayBuffer or SharedArrayBuffer.Install the library via npm:
npm i @ain1084/array-buffer-partitioner
Import the createArrayBufferViews function to partition an ArrayBuffer or SharedArrayBuffer into multiple views:
import { createArrayBufferViews } from '@ain1084/array-buffer-partitioner';
const views = createArrayBufferViews(ArrayBuffer, {
data: [Float32Array, 1024],
index: [Uint32Array, 1],
flag: [Uint8Array, 1]
});
console.log(views.data.length); // 1024
console.log(views.data.byteOffset); // 0
console.log(views.index.length); // 1
console.log(views.flag.length); // 1
console.log(views.flag.byteOffset); // 4100
console.log(views.data.buffer.byteLength); // 4104
For detailed API documentation, please refer to the GitHub Pages documentation.
createArrayBufferViews(BufferType: { new(size: number): ArrayBuffer | SharedArrayBuffer }, config: Record<string, [TypedArrayConstructor, number]>)Creates multiple TypedArray views on a single ArrayBuffer or SharedArrayBuffer.
BufferType ({ new(size: number): ArrayBuffer | SharedArrayBuffer }): The constructor for the buffer, either ArrayBuffer or SharedArrayBuffer.config (Record<string, [TypedArrayConstructor, number]>): An object specifying the desired views. Each key represents the name of the view, and the value is a tuple where:
TypedArray class name (e.g., Float32Array, Uint32Array).An object containing the views, with each key corresponding to the provided configuration.
Contributions are welcome! If you have ideas, suggestions, or issues, please create an issue on the GitHub repository.
This project is licensed under the MIT OR Apache-2.0 license.