@jawis/shared-buffer-store
Version:
Store for variable sized buffers to use in concurrent programs.
77 lines (76 loc) • 1.99 kB
TypeScript
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;
}