UNPKG

@thi.ng/trie

Version:

Trie-based ES6-like Map data structures with prefix search/query support

55 lines 2.21 kB
import type { Fn0, Fn2, Maybe, Nullable, Pair } from "@thi.ng/api"; export interface MultiTrieOpts<V> { /** * Custom value set factory (e.g. `Set` implementations from the * [thi.ng/associative](https://thi.ng/associative) package). Uses native * ES6 Set by default. */ values: Fn0<Set<V>>; } /** * Multi-Map-like trie implementation for array-based keys and supporting * multiple unique values per key. */ export declare class MultiTrie<K, V> { protected opts?: Partial<MultiTrieOpts<V>> | undefined; next: Map<K, MultiTrie<K, V>>; vals?: Set<V>; constructor(pairs?: Nullable<Iterable<Pair<K[], V>>>, opts?: Partial<MultiTrieOpts<V>> | undefined); get size(): number; [Symbol.iterator](): Generator<Pair<K[], V>, void, any>; keys(prefix?: K[], includePrefix?: boolean): Generator<K[], void, any>; values(prefix?: K[]): Generator<V, void, any>; entries(prefix?: K[], includePrefix?: boolean): Generator<Pair<K[], V>, void, any>; 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<Pair<K[], V>>): void; delete(prefix: K[], val?: V): boolean; toJSON(): SerializedMultiTrie<V>; protected iterate<T>(fn: Fn2<K[], MultiTrie<K, V>, Iterable<T>>, prefix?: K[], includePrefix?: boolean): Generator<T, void, any>; } export declare const defMultiTrie: <K, V>(pairs?: Nullable<Iterable<Pair<K[], V>>>, opts?: Partial<MultiTrieOpts<V>>) => MultiTrie<K, V>; export type SerializedMultiTrie<V> = { next: Record<string, SerializedMultiTrie<V>>; vals?: any[]; }; /** * Reconstruct a {@link MultiTrie} from serialized JSON. * * @param src * @param opts */ export declare const defMultiTrieFromJSON: <V>(src: SerializedMultiTrie<V>, opts?: Partial<MultiTrieOpts<V>>) => MultiTrie<string, V>; //# sourceMappingURL=multi-trie.d.ts.map