import type { Fn, Nullable, Pair } from "@thi.ng/api";
import type { Heap } from "@thi.ng/heaps";
import type { ReadonlyVec, VecOpRoVV } from "@thi.ng/vectors";
import type { IRegionQuery, ISpatialMap } from "./api.js";
/**
 * Common base class for {@link SpatialGrid2} and {@link SpatialGrid3}.
 *
 * @internal
 */
export declare abstract class ASpatialGrid<K extends ReadonlyVec, V> implements IRegionQuery<K, V, number>, ISpatialMap<K, V> {
    protected _min: ReadonlyVec;
    protected _size: ReadonlyVec;
    protected _res: ReadonlyVec;
    protected _cells: Nullable<Pair<K, V>[]>[];
    protected _num: number;
    protected _invSize: ReadonlyVec;
    protected _res1: ReadonlyVec;
    constructor(_min: ReadonlyVec, _size: ReadonlyVec, _res: ReadonlyVec);
    get size(): number;
    [Symbol.iterator](): IterableIterator<Pair<K, V>>;
    keys(): IterableIterator<K>;
    values(): IterableIterator<V>;
    copy(): ASpatialGrid<K, V>;
    abstract empty(): ASpatialGrid<K, V>;
    clear(): void;
    has(k: K, eps?: number): boolean;
    get(k: K, eps?: number): V | undefined;
    set(k: K, v: V, eps?: number): boolean;
    into(pairs: Iterable<Pair<K, V>>, eps?: number): boolean;
    remove(k: K): boolean;
    query(q: K, radius: number, limit?: number, acc?: Pair<K, V>[]): Pair<K, V>[];
    queryKeys(q: K, radius: number, limit?: number, acc?: K[]): K[];
    queryValues(q: K, radius: number, limit?: number, acc?: V[]): V[];
    protected abstract doQuery<T>(fn: Fn<Pair<K, V>, T>, k: K, r: number, limit?: number, acc?: T[]): T[];
    protected queryCell(dist: VecOpRoVV<number>, heap: Heap<[number, Nullable<Pair<K, V>>?]>, c: Pair<K, V>[], k: K, limit: number): void;
    protected find(k: K, eps: number): Pair<K, V> | undefined;
    protected abstract findIndex(k: ReadonlyVec): number;
}
//# sourceMappingURL=aspatial-grid.d.ts.map