@thi.ng/trie
Version:
Trie-based ES6-like Map data structures with prefix search/query support
55 lines • 2.21 kB
TypeScript
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