UNPKG

@rimbu/multiset

Version:

An immutable Set where each element can occur multiple times

48 lines (47 loc) 2.43 kB
import type { RMap } from '@rimbu/collection-types/map'; import type { Streamable } from '@rimbu/stream'; import { type MultiSetBase, type MultiSetCreators } from '@rimbu/multiset/custom'; /** * A type-invariant immutable MultiSet of value type T. * In the MultiSet, each value can occur multiple times. * See the [MultiSet documentation](https://rimbu.org/docs/collections/multiset) and the [MultiSet API documentation](https://rimbu.org/api/rimbu/multiset/MultiSet/interface) * @typeparam T - the value type */ export interface MultiSet<T> extends MultiSetBase<T, MultiSet.Types> { } export declare namespace MultiSet { /** * A non-empty type-invariant immutable MultiSet of value type T. * In the MultiSet, each value can occur multiple times. * See the [MultiSet documentation](https://rimbu.org/docs/collections/multiset) and the [MultiSet API documentation](https://rimbu.org/api/rimbu/multiset/MultiSet/interface) * @typeparam T - the value type */ interface NonEmpty<T> extends MultiSetBase.NonEmpty<T, MultiSet.Types>, Omit<MultiSet<T>, keyof MultiSetBase.NonEmpty<any, any>>, Streamable.NonEmpty<T> { } /** * A context instance for `MultiSet` implementations that acts as a factory for every instance of this * type of collection. * @typeparam UT - the upper value type bound for which the context can be used */ interface Context<UT> extends MultiSetBase.Context<UT, MultiSet.Types> { } /** * A mutable `MultiSet` builder used to efficiently create new immutable instances. * See the [MultiSet documentation](https://rimbu.org/docs/collections/multiset) and the [MultiSet.Builder API documentation](https://rimbu.org/api/rimbu/multiset/MultiSet/Builder/interface) * @typeparam T - the value type */ interface Builder<T> extends MultiSetBase.Builder<T, MultiSet.Types> { } /** * Utility interface that provides higher-kinded types for this collection. */ interface Types extends MultiSetBase.Types { readonly normal: MultiSet<this['_T']>; readonly nonEmpty: MultiSet.NonEmpty<this['_T']>; readonly countMap: RMap<this['_T'], number>; readonly countMapNonEmpty: RMap.NonEmpty<this['_T'], number>; readonly context: MultiSet.Context<this['_T']>; readonly builder: MultiSet.Builder<this['_T']>; } } export declare const MultiSet: MultiSetCreators;