UNPKG

@jawis/shared-buffer-store

Version:

Store for variable sized buffers to use in concurrent programs.

77 lines (76 loc) 1.99 kB
export type HeaderUtilDeps = { sharedArray: Uint8Array; direction: "left" | "right"; byteSize: number; }; /** * */ export type BufferHeader = { headerLength: number; alignment: number; version: number; bufferLength: number; }; /** * */ export declare class HeaderUtil { deps: HeaderUtilDeps; /** * */ constructor(deps: HeaderUtilDeps); /** * */ getDataIndex: (index: number, dataLength: number, headerLength: number) => number; /** * Calculates the data to be stored in the header. * * - The result is an array of bytes. * - Doesn't have to check that numbers fit in each byte, because it's checked at write to buffer. * - Can return a different amount of bytes, than is stored in headerlength. Because of padding. * */ prepare(index: number, header: Omit<BufferHeader, "headerLength">): number[]; /** * Pad the header. (in right direction mode) * * - The header size is increased enough, so the dataIndex is moved enough to the right. */ makeRightPadding(res: number[], index: number, header: Omit<BufferHeader, "headerLength">): void; /** * Pad the header. (in left direction mode) * * - The header size is increased enough, so the dataIndex is moved enough to the left. * - Note this technique works without knowning whether to right edge is aligned to 8 bytes. */ makeLeftPadding(res: number[], index: number, header: Omit<BufferHeader, "headerLength">): void; /** * */ set(index: number, header: number[]): void; /** * */ get(index: number): { headerLength: number; bufferLength: number; }; /** * */ delete: (ref: number) => void; /** * */ encode: (oldFreePointer: number, version: number) => { index: number; ref: number; }; /** * */ decodeRef: (ref: number) => number; }