import type { IHash, NumericArray } from "@thi.ng/api";
import { type IVector, type ReadonlyVec, type Vec } from "./api.js";
import { AVec } from "./avec.js";
export declare class Vec4 extends AVec implements IHash<number>, IVector<Vec4> {
    /**
     * Returns array of memory mapped {@link Vec4} instances using given
     * backing array and stride settings: The `cstride` is the step size
     * between individual XYZ vector components. `estride` is the step
     * size between successive vectors. This arrangement allows for
     * different storage approaches, incl. SOA, AOS, striped /
     * interleaved etc.
     *
     * @param buf - backing array
     * @param num - num vectors
     * @param start -  start index
     * @param cstride - component stride
     * @param estride - element stride
     */
    static mapBuffer(buf: NumericArray, num?: number, start?: number, cstride?: number, estride?: number): Vec4[];
    /**
     * Merges given `src` iterable of {@link Vec4}s into single array `buf`.
     * Vectors will be arranged according to given component and element
     * strides, starting at `start` index. It's the user's
     * responsibility to ensure the target buffer has sufficient
     * capacity to hold the input vectors. See `Vec4.mapBuffer` for the
     * inverse operation. Returns `buf`.
     *
     * @param buf -
     * @param src -
     * @param start -
     * @param cstride -
     * @param estride -
     */
    static intoBuffer(buf: NumericArray, src: Iterable<Vec4>, start?: number, cstride?: number, estride?: number): NumericArray;
    static iterator(buf: NumericArray, num: number, start?: number, cstride?: number, estride?: number): Generator<Vec4, void, unknown>;
    static readonly X_AXIS: Vec4;
    static readonly Y_AXIS: Vec4;
    static readonly Z_AXIS: Vec4;
    static readonly MIN: Vec4;
    static readonly MAX: Vec4;
    static readonly ZERO: Vec4;
    static readonly ONE: Vec4;
    [id: number]: number;
    constructor(buf?: NumericArray, offset?: number, stride?: number);
    [Symbol.iterator](): Generator<number, void, unknown>;
    get length(): number;
    get [0](): number;
    set [0](x: number);
    get [1](): number;
    set [1](y: number);
    get [2](): number;
    set [2](z: number);
    get [3](): number;
    set [3](w: number);
    get x(): number;
    set x(x: number);
    get y(): number;
    set y(y: number);
    get z(): number;
    set z(z: number);
    get w(): number;
    set w(w: number);
    copy(): Vec4;
    copyView(): Vec4;
    empty(): Vec4;
    eqDelta(v: ReadonlyVec, eps?: number): boolean;
    hash(): number;
    toJSON(): number[];
}
export declare const vec4: (x?: number, y?: number, z?: number, w?: number) => Vec4;
export declare const vec4n: (n: number) => Vec4;
export declare const asVec4: (x: Vec) => Vec4;
//# sourceMappingURL=vec4.d.ts.map