/*! 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 {};
