gnablib
Version:
A lean, zero dependency library to provide a useful base for your project.
60 lines (59 loc) • 2.13 kB
TypeScript
/*! Copyright 2023-2024 the gnablib contributors MPL-1.1 */
interface DivideResponse<T> {
quotient: T;
remainder: T;
}
export declare class ReedSolomonError extends Error {
constructor(reason: string);
}
export type UIntArray = Uint8Array | Uint16Array | Uint32Array;
export interface IGf<T extends UIntArray> {
get primitive(): number;
get base(): number;
get zero(): GfPoly<T>;
get one(): GfPoly<T>;
get size(): number;
newPoly(coefficients: T): GfPoly<T>;
newPolyArr(coefficients: Iterable<number>): GfPoly<T>;
newArr(size: number): T;
buildMonomial(degree: number, coefficient: number): GfPoly<T>;
exp(pos: number): number;
log(pos: number): number;
inverse(a: number): number;
mul(a: number, b: number): number;
toString(): string;
}
interface GfPoly<T extends UIntArray> {
get coefficients(): T;
get degree(): number;
get degreeCoefficient(): number;
get isZero(): boolean;
coefficient(degree: number): number;
evalAt(a: number): number;
addOrSubtract(other: GfPoly<T>): GfPoly<T>;
mulPoly(other: GfPoly<T>): GfPoly<T>;
mulScalar(scalar: number): GfPoly<T>;
mulMonomial(degree: number, coefficient: number): GfPoly<T>;
div(other: GfPoly<T>): DivideResponse<GfPoly<T>>;
toString(): string;
}
export declare function qrCode(): IGf<Uint8Array>;
export declare function dataMatrix(): IGf<Uint8Array>;
export declare function aztecParam(): IGf<Uint8Array>;
export declare function aztecData6(): IGf<Uint8Array>;
export declare function aztecData8(): IGf<Uint8Array>;
export declare function aztecData10(): IGf<Uint16Array>;
export declare function aztecData12(): IGf<Uint16Array>;
export declare function maxicodeField(): IGf<Uint8Array>;
export declare class ReedSolomon<T extends UIntArray> {
private readonly _field;
private readonly _cache;
constructor(field: IGf<T>);
private _generator;
encode(value: T, ecLen: number): void;
private _findErrorMagnitudes;
private _findErrorLocations;
private _runEuclideanAlgorithm;
decode(received: T, ecLen: number): void;
}
export {};