@thi.ng/trie
Version:
Trie-based map data structure with prefix search/query support
39 lines • 1.74 kB
TypeScript
import type { Fn0, IObjectOf, Maybe, Nullable, Pair } from "@thi.ng/api";
export interface MultiTrieOpts<V> {
/**
* Custom value set factory (e.g. for using `Set` implementations from the
* [thi.ng/associative](https://thi.ng/associative) package). Uses native
* ES6 Set by default.
*/
vals: Fn0<Set<V>>;
}
export declare class MultiTrie<K extends ArrayLike<any>, V> {
protected opts?: Partial<MultiTrieOpts<V>> | undefined;
protected next: IObjectOf<MultiTrie<K, V>>;
protected vals?: Set<V>;
protected n: number;
constructor(pairs?: Nullable<Iterable<Pair<K, V>>>, opts?: Partial<MultiTrieOpts<V>> | undefined);
[Symbol.iterator](): Generator<(string | V)[], void, unknown>;
keys(sep?: string, prefix?: string): Generator<string, void, unknown>;
values(): Generator<V, void, unknown>;
suffixes(prefix: K, withPrefix?: boolean, sep?: string): Generator<string, void, unknown>;
clear(): void;
has(key: K): boolean;
hasPrefix(prefix: K): boolean;
get(key: K): Maybe<Set<V>>;
find(key: K): MultiTrie<K, V> | undefined;
/**
* Returns longest known prefix for `key` as array. If array is
* empty, the given key has no partial matches.
*
* @param key -
*/
knownPrefix(key: K): K[];
hasKnownPrefix(key: K): boolean;
add(key: K, val: V): void;
into(pairs: Iterable<[K, V]>): void;
delete(prefix: K, val?: V): boolean;
protected queueChildren(queue: [string, MultiTrie<any, any>][], prefix: string, sep?: string): void;
}
export declare const defMultiTrie: <K extends ArrayLike<any>, V>(pairs?: Iterable<Pair<K, V>>, opts?: Partial<MultiTrieOpts<V>>) => MultiTrie<K, V>;
//# sourceMappingURL=multi-trie.d.ts.map