UNPKG

@thi.ng/geom-accel

Version:

n-D spatial indexing data structures with a shared ES6 Map/Set-like API

71 lines 3.3 kB
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