UNPKG

@rimbu/sorted

Version:

Immutable SortedMap and SortedSet implementations for TypeScript

154 lines (153 loc) 6.88 kB
import { type ArrayNonEmpty, IndexRange, OptLazy, Range, type RelatedTo, type ToJSON, TraverseState } from '@rimbu/common'; import { Stream, type StreamSource } from '@rimbu/stream'; import type { SortedSet } from '@rimbu/sorted/set'; import type { SortedSetContext } from '@rimbu/sorted/set-custom'; import { SortedEmpty, SortedNonEmptyBase } from '@rimbu/sorted/common'; export declare class SortedSetEmpty<T = any> extends SortedEmpty implements SortedSet<T> { readonly context: SortedSetContext<T>; _NonEmptyType: SortedSet.NonEmpty<T>; constructor(context: SortedSetContext<T>); streamRange(): Stream<T>; streamSliceIndex(): Stream<T>; has(): false; findIndex(): number; add(value: T): SortedSet.NonEmpty<T>; addAll(values: StreamSource<T>): SortedSet.NonEmpty<T>; remove(): this; removeAll(): this; slice(): this; union(other: StreamSource<T>): SortedSet<T> | any; difference(): SortedSet<T>; intersect(): SortedSet<T>; symDifference(other: StreamSource<T>): SortedSet<T>; toBuilder(): SortedSet.Builder<T>; toString(): string; toJSON(): ToJSON<T[]>; } export declare abstract class SortedSetNode<T> extends SortedNonEmptyBase<T, SortedSetNode<T>> implements SortedSet.NonEmpty<T> { _NonEmptyType: SortedSetNode<T>; abstract get context(): SortedSetContext<T>; abstract get size(): number; abstract stream(options?: { reversed?: boolean; }): Stream.NonEmpty<T>; abstract streamSliceIndex(range: IndexRange, options?: { reversed?: boolean; }): Stream<T>; abstract forEach(f: (value: T, index: number, halt: () => void) => void, options?: { state?: TraverseState; }): void; abstract has<U>(value: RelatedTo<T, U>): boolean; abstract findIndex(value: T): number; abstract min(): T; abstract max(): T; abstract toArray(): ArrayNonEmpty<T>; abstract addInternal(value: T): SortedSetNode<T>; abstract removeInternal(value: T): SortedSetNode<T>; abstract getInsertIndexOf(value: T): number; abstract normalize(): SortedSet<T>; asNormal(): this; getSliceRange(range: Range<T>): { startIndex: number; endIndex: number; }; streamRange(range: Range<T>, options?: { reversed?: boolean; }): Stream<T>; add(value: T): SortedSet.NonEmpty<T>; addAll(values: StreamSource<T>): SortedSet.NonEmpty<T>; remove<U>(value: RelatedTo<T, U>): SortedSet<T>; removeAll<U>(values: StreamSource<RelatedTo<T, U>>): SortedSet<T>; filter(pred: (value: T, index: number, halt: () => void) => boolean, options?: { negate?: boolean | undefined; }): any; take(amount: number): SortedSet<T> | any; drop(amount: number): SortedSet<T>; sliceIndex(range: IndexRange): SortedSet<T>; slice(range: Range<T>): SortedSet<T>; union(other: StreamSource<T>): SortedSet<T> | any; difference(other: StreamSource<T>): SortedSet<T>; intersect(other: StreamSource<T>): SortedSet<T>; symDifference(other: StreamSource<T>): SortedSet<T>; toBuilder(): SortedSet.Builder<T>; toString(): string; toJSON(): ToJSON<T[]>; } export declare class SortedSetLeaf<T> extends SortedSetNode<T> { readonly context: SortedSetContext<T>; entries: readonly T[]; constructor(context: SortedSetContext<T>, entries: readonly T[]); copy(entries: readonly T[]): SortedSetLeaf<T>; get size(): number; stream(options?: { reversed?: boolean; }): Stream.NonEmpty<T>; streamSliceIndex(range: IndexRange, options?: { reversed?: boolean; }): Stream<T>; min(): T; max(): T; has<U>(value: RelatedTo<T, U>): boolean; findIndex(value: T): number; getAtIndex<O>(index: number, otherwise?: OptLazy<O>): T | O; forEach(f: (value: T, index: number, halt: () => void) => void, options?: { state?: TraverseState; }): void; toArray(): ArrayNonEmpty<T>; getInsertIndexOf(value: T): number; addInternal(value: T): SortedSetNode<T>; removeInternal(value: T): SortedSetNode<T>; takeInternal(amount: number): SortedSetLeaf<T>; dropInternal(amount: number): SortedSetLeaf<T>; deleteMin(): [T, SortedSetLeaf<T>]; deleteMax(): [T, SortedSetLeaf<T>]; mutateSplitRight(index?: number): [T, SortedSetLeaf<T>]; mutateGiveToLeft(left: SortedSetLeaf<T>, toLeft: T): [T, SortedSetLeaf<T>]; mutateGiveToRight(right: SortedSetLeaf<T>, toRight: T): [T, SortedSetLeaf<T>]; mutateGetFromLeft(left: SortedSetLeaf<T>, toMe: T): [T, SortedSetLeaf<T>]; mutateGetFromRight(right: SortedSetLeaf<T>, toMe: T): [T, SortedSetLeaf<T>]; mutateJoinLeft(left: SortedSetLeaf<T>, entry: T): void; mutateJoinRight(right: SortedSetLeaf<T>, entry: T): void; normalize(): SortedSet<T>; } export declare class SortedSetInner<T> extends SortedSetNode<T> { readonly context: SortedSetContext<T>; entries: readonly T[]; children: readonly SortedSetNode<T>[]; size: number; constructor(context: SortedSetContext<T>, entries: readonly T[], children: readonly SortedSetNode<T>[], size: number); get mutateChildren(): SortedSetNode<T>[]; copy(entries?: readonly T[], children?: readonly SortedSetNode<T>[], size?: number): SortedSetInner<T>; stream(options?: { reversed?: boolean; }): Stream.NonEmpty<T>; streamSliceIndex(range: IndexRange, options?: { reversed?: boolean; }): Stream<T>; min(): T; max(): T; has<U>(value: RelatedTo<T, U>): boolean; findIndex(value: T): number; getAtIndex<O>(index: number, otherwise?: OptLazy<O>): T | O; forEach(f: (value: T, index: number, halt: () => void) => void, options?: { state?: TraverseState; }): void; toArray(): ArrayNonEmpty<T>; getInsertIndexOf(value: T): number; deleteMin(): [T, SortedSetInner<T>]; deleteMax(): [T, SortedSetInner<T>]; mutateSplitRight(index?: number): [T, SortedSetInner<T>]; mutateGiveToLeft(left: SortedSetInner<T>, toLeft: T): [T, SortedSetInner<T>]; mutateGiveToRight(right: SortedSetInner<T>, toRight: T): [T, SortedSetInner<T>]; mutateGetFromLeft(left: SortedSetInner<T>, toMe: T): [T, SortedSetInner<T>]; mutateGetFromRight(right: SortedSetInner<T>, toMe: T): [T, SortedSetInner<T>]; mutateJoinLeft(left: SortedSetInner<T>, entry: T): void; mutateJoinRight(right: SortedSetInner<T>, entry: T): void; normalizeDownsizeChild(childIndex: number, newChild: SortedSetNode<T>, newSize: number): SortedSetInner<T>; normalizeIncreaseChild(childIndex: number, newChild: SortedSetNode<T>, newSize: number): SortedSetInner<T>; addInternal(value: T): SortedSetInner<T>; removeInternal(value: T): SortedSetNode<T>; takeInternal(amount: number): SortedSetNode<T>; dropInternal(amount: number): SortedSetNode<T>; normalize(): SortedSet<T>; }