@rimbu/bimap
Version:
A bidirectional immutable Map of keys and values for TypeScript
74 lines (73 loc) • 3.7 kB
text/typescript
import type { BiMapContext } from '@rimbu/bimap/custom';
import type { BiMap } from '@rimbu/bimap';
import type { RMap } from '@rimbu/collection-types/map';
import { EmptyBase, NonEmptyBase } from '@rimbu/collection-types/map-custom';
import { type ArrayNonEmpty, OptLazy, type RelatedTo, type ToJSON, TraverseState, Update } from '@rimbu/common';
import { Stream, type StreamSource } from '@rimbu/stream';
export declare class BiMapEmpty<K = any, V = any> extends EmptyBase implements BiMap<K, V> {
readonly context: BiMapContext<K, V>;
_NonEmptyType: BiMap.NonEmpty<K, V>;
constructor(context: BiMapContext<K, V>);
get size(): 0;
get keyValueMap(): RMap<K, V>;
get valueKeyMap(): RMap<V, K>;
hasKey(): false;
hasValue(): false;
getValue<_, O>(key: K, otherwise?: OptLazy<O>): O;
getKey<_, O>(value: V, otherwise?: OptLazy<O>): O;
set(key: K, value: V): BiMap.NonEmpty<K, V>;
addEntry(entry: readonly [K, V]): BiMap.NonEmpty<K, V>;
addEntries(entries: StreamSource<readonly [K, V]>): BiMap.NonEmpty<K, V>;
removeKey(): this;
removeKeyAndGet(): undefined;
removeKeys(): this;
removeValue(): this;
removeValueAndGet(): undefined;
removeValues(): this;
updateKeyAtValue(): this;
updateValueAtKey(): this;
streamKeys(): Stream<K>;
streamValues(): Stream<V>;
toBuilder(): BiMap.Builder<K, V>;
toString(): string;
toJSON(): ToJSON<(readonly [K, V])[], this['context']['typeTag']>;
}
export declare class BiMapNonEmptyImpl<K, V> extends NonEmptyBase<readonly [K, V]> implements BiMap.NonEmpty<K, V> {
readonly context: BiMapContext<K, V>;
readonly keyValueMap: RMap.NonEmpty<K, V>;
readonly valueKeyMap: RMap.NonEmpty<V, K>;
_NonEmptyType: BiMap.NonEmpty<K, V>;
constructor(context: BiMapContext<K, V>, keyValueMap: RMap.NonEmpty<K, V>, valueKeyMap: RMap.NonEmpty<V, K>);
copy(keyValueMap?: RMap.NonEmpty<K, V>, valueKeyMap?: RMap.NonEmpty<V, K>): BiMap.NonEmpty<K, V>;
copyE(keyValueMap?: RMap<K, V>, valueKeyMap?: RMap<V, K>): BiMap<K, V>;
get size(): number;
asNormal(): this;
stream(): Stream.NonEmpty<readonly [K, V]>;
streamKeys(): Stream.NonEmpty<K>;
streamValues(): Stream.NonEmpty<V>;
hasKey<UK>(key: RelatedTo<K, UK>): boolean;
hasValue<UV>(value: RelatedTo<V, UV>): boolean;
getValue<UK, O>(key: RelatedTo<K, UK>, otherwise?: OptLazy<O>): V | O;
getKey<UV, O>(value: RelatedTo<V, UV>, otherwise?: OptLazy<O>): K | O;
set(key: K, value: V): BiMap.NonEmpty<K, V>;
addEntry(entry: readonly [K, V]): BiMap.NonEmpty<K, V>;
addEntries(entries: StreamSource<readonly [K, V]>): BiMap.NonEmpty<K, V>;
removeKey<UK>(key: RelatedTo<K, UK>): BiMap<K, V>;
removeKeyAndGet<UK>(key: RelatedTo<K, UK>): [BiMap<K, V>, V] | undefined;
removeKeys<UK>(keys: Stream<RelatedTo<K, UK>>): BiMap<K, V>;
removeValue<UV>(value: RelatedTo<V, UV>): BiMap<K, V>;
removeValueAndGet<UV>(value: RelatedTo<V, UV>): [BiMap<K, V>, K] | undefined;
removeValues<UV>(values: Stream<RelatedTo<V, UV>>): BiMap<K, V>;
updateValueAtKey(key: K, valueUpdate: Update<V>): BiMap.NonEmpty<K, V>;
updateKeyAtValue(keyUpdate: Update<K>, value: V): BiMap.NonEmpty<K, V>;
forEach(f: (entry: readonly [K, V], index: number, halt: () => void) => void, options?: {
state?: TraverseState;
}): void;
filter(pred: (entry: readonly [K, V], index: number, halt: () => void) => boolean, options?: {
negate?: boolean;
}): BiMap<K, V>;
toBuilder(): BiMap.Builder<K, V>;
toArray(): ArrayNonEmpty<readonly [K, V]>;
toString(): string;
toJSON(): ToJSON<(readonly [K, V])[], this['context']['typeTag']>;
}