@thi.ng/geom-accel
Version:
n-D spatial indexing data structures with a shared ES6 Map/Set-like API
71 lines • 3.3 kB
TypeScript
import type { Fn, ICopy, IEmpty, Maybe, Pair } from "@thi.ng/api";
import { Heap } from "@thi.ng/heaps/heap";
import type { DistanceFn, ReadonlyVec } from "@thi.ng/vectors";
import type { IRegionQuery, ISpatialMap } from "./api.js";
type MaybeNdQtNode<K extends ReadonlyVec, V> = Maybe<NdQtNode<K, V>>;
export declare class NdQtNode<K extends ReadonlyVec, V> {
pos: ReadonlyVec;
ext: ReadonlyVec;
parent?: NdQtNode<K, V>;
children?: NdQtNode<K, V>[];
numC: number;
k?: K;
v?: V;
constructor(parent: MaybeNdQtNode<K, V>, pos: ReadonlyVec, ext: ReadonlyVec);
clear(): void;
set(p: K, val: V, eps: number, distFn: DistanceFn): boolean;
setUnsafe(p: K, val: V): boolean;
query<T>(fn: Fn<NdQtNode<K, V>, T>, p: K, r: number, max: number, acc: T[], distFn: DistanceFn): T[];
queryKeys(p: K, r: number, max: number, acc: K[], distFn: DistanceFn): K[];
queryValues(p: K, r: number, max: number, acc: V[], distFn: DistanceFn): V[];
containsPoint(p: K): boolean;
nodeForPoint(p: K): MaybeNdQtNode<K, V>;
protected doQuery(p: K, r: number, max: number, acc: Heap<[number, NdQtNode<K, V>?]>, distFn: DistanceFn): Heap<[number, NdQtNode<K, V>?]>;
protected ensureChild(id: number): NdQtNode<K, V>;
}
/**
* Point-based quadtree for nD keys and optional value association. Supports
* radial range queries and key removal with tree pruning. See
* {@link NdQuadtreeMap.fromMinMax}.
*
* @remarks
* Partially ported from Clojure version of thi.ng/geom.
*/
export declare class NdQuadtreeMap<K extends ReadonlyVec, V> implements ICopy<NdQuadtreeMap<K, V>>, IEmpty<NdQuadtreeMap<K, V>>, IRegionQuery<K, V, number>, ISpatialMap<K, V> {
readonly distanceFn: DistanceFn;
static readonly MAX_DIM = 16;
/**
* Returns a new point-based `NdQuadtreeMap` for nD keys in given region
* defined by `min` / `max` coordinates. The dimensionality of the tree is
* implicitly defined by the provided coordinates. Only points within that
* region can be indexed.
*
* @remarks
* Due to exponentially growing lookup tables, currently only supports up to
* 16 dimensions.
*/
static fromMinMax<K extends ReadonlyVec, V>(min: ReadonlyVec, max: ReadonlyVec): NdQuadtreeMap<K, V>;
root: NdQtNode<K, V>;
protected _size: number;
constructor(pos: ReadonlyVec, ext: ReadonlyVec, pairs?: Iterable<Pair<K, V>>, distanceFn?: DistanceFn);
get size(): number;
[Symbol.iterator](): IterableIterator<Pair<K, V>>;
keys(): IterableIterator<K>;
values(): IterableIterator<V>;
nodes(all?: boolean): Generator<NdQtNode<K, V>, void, unknown>;
copy(): NdQuadtreeMap<K, V>;
clear(): void;
empty(): NdQuadtreeMap<K, V>;
set(key: K, val: V, eps?: number): boolean;
into(pairs: Iterable<Pair<K, V>>, eps?: number): boolean;
remove(p: K): boolean;
has(p: K, eps?: number): boolean;
get(p: K, eps?: number): V | undefined;
query(p: K, r: number, max?: number, acc?: Pair<K, V>[]): Pair<K, V>[];
queryKeys(p: K, r: number, max?: number, acc?: K[]): K[];
queryValues(p: K, r: number, max?: number, acc?: V[]): V[];
containsPoint(p: K): boolean;
nodeForPoint(p: K): MaybeNdQtNode<K, V>;
}
export {};
//# sourceMappingURL=nd-quadtree-map.d.ts.map