/**
 * This class makes it easier to worked with typed arrray used in a 2d grid.
 * It allow you to read from and write to a flat typed array using columns, rows
 * and blocks. It alow you to specify the stride per grid cell, so if you need
 * a grid og RGB colors, you set the stride to 3.
 *
 * Another useful feature of this class is that it will use bilinear interpolation
 * if you reference columns and/or rows with decimal indexes.
 *
 * @author Kjerand Pedersen
 */
export type TypedArrayArrayType = Float32Array | Uint8Array | Uint16Array | Uint32Array;
export type TypedArrayOutputArray = TypedArrayArrayType | undefined;
export type TypedArrayInputArray = number[];
export type TypedArrayMapFunction = (input: number | TypedArrayArrayType) => number | TypedArrayArrayType;
export type InterpolationFunction = (a: number, b: number, c: number, d: number, t1: number, t2: number) => number;
export declare class Typed2DArray {
    data: TypedArrayArrayType;
    columns: number;
    rows: number;
    stride: number;
    private _rowLength;
    private _lerpFn;
    private arrayConstructor;
    constructor(data: TypedArrayArrayType, columns: number, stride?: number);
    static readWriteBlock(source: Typed2DArray, sourceCol: number, sourceRow: number, sourceColumns: number, sourceRows: number, target: Typed2DArray, targetCol: number, targetRow: number, targetColumns: number, targetRows: number, mapFunction?: TypedArrayMapFunction | null): typeof Typed2DArray;
    static logInterp(a: number, b: number, c: number, d: number, t1: number, t2: number): number;
    static linearInterp(a: number, b: number, c: number, d: number, t1: number, t2: number): number;
    static nearestInterp(a: number, b: number, c: number, d: number, t1: number, t2: number): number;
    get width(): number;
    get height(): number;
    index(col: number, row: number): number;
    positionOf(index: number): {
        row: number;
        col: number;
    } | undefined;
    setInterpolator(...interpolatorFunction: InterpolationFunction[]): this;
    getInterpolator(component: number): InterpolationFunction;
    col(col: number, out: TypedArrayOutputArray): TypedArrayArrayType;
    row(row: number, out: TypedArrayOutputArray): Float32Array<ArrayBufferLike> | Uint8Array<ArrayBufferLike> | Uint16Array<ArrayBufferLike> | Uint32Array<ArrayBufferLike>;
    setValue(col: number, row: number, ...value: TypedArrayInputArray): this;
    readBlock(fromCol: number, fromRow: number, columns: number, rows: number, targetColumns?: number, targetRows?: number, out?: TypedArrayOutputArray): TypedArrayArrayType;
    upscale(newColumns: number, newRows: number): this;
    writeBlock(fromCol: number, fromRow: number, columns: number, rows: number, values: number[]): this;
    fillBlock(fromCol: number, fromRow: number, cols: number, rows: number, value: number | ((c: number, r: number, i: number) => number | number[])): this;
    valueOf(index: number, out?: TypedArrayOutputArray): number | TypedArrayArrayType;
    valueAt(col: number, row: number, out?: TypedArrayOutputArray): number | TypedArrayArrayType;
    swapRows(r1: number, r2: number, temp: TypedArrayArrayType): this;
    invertRows(): this;
    copyInto(target: TypedArrayArrayType, fromCol?: number, fromRow?: number, columns?: number, rows?: number): this;
    toJsArray(): any[];
}
