/** * Copyright (c) 2017-2025 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal * @author Alexander Rose */ import { Interval } from './interval.js'; import { SortedArray } from './sorted-array.js'; declare namespace OrderedSet { const Empty: OrderedSet; const ofSingleton: (value: T) => OrderedSet; /** Create interval from range [min, max] */ const ofRange: (min: T, max: T) => OrderedSet; /** Create interval from bounds [start, end), i.e. [start, end - 1] */ const ofBounds: (start: T, end: T) => OrderedSet; /** It is the responsibility of the caller to ensure the array is sorted and contains unique values. */ const ofSortedArray: (xs: ArrayLike) => OrderedSet; const has: (set: OrderedSet, x: T) => boolean; /** Returns the index of `x` in `set` or -1 if not found. */ const indexOf: (set: OrderedSet, x: T) => number; /** Returns the value in `set` at index `i`. */ const getAt: (set: OrderedSet, i: number) => T; const isEmpty: (set: OrderedSet) => boolean; const min: (set: OrderedSet) => T; const max: (set: OrderedSet) => T; const start: (set: OrderedSet) => T; const end: (set: OrderedSet) => T; /** Number of elements in the OrderedSet */ const size: (set: OrderedSet) => number; const hashCode: (set: OrderedSet) => number; const areEqual: (a: OrderedSet, b: OrderedSet) => boolean; const areIntersecting: (a: OrderedSet, b: OrderedSet) => boolean; /** Check if the 2nd argument is a subset of the 1st */ const isSubset: (a: OrderedSet, b: OrderedSet) => boolean; const union: (a: OrderedSet, b: OrderedSet) => OrderedSet; const intersect: (a: OrderedSet, b: OrderedSet) => OrderedSet; const indexedIntersect: (idxA: OrderedSet, a: SortedArray, b: SortedArray) => OrderedSet; /** Returns elements of `a` that are not in `b`, i.e `a` - `b` */ const subtract: (a: OrderedSet, b: OrderedSet) => OrderedSet; /** * Returns 0 if `x` is smaller or equal the first element of `set` * Returns length of `set` if `x` is bigger than the last element of `set` * Otherwise returns the first index where the value of `set` is equal or bigger than `x` */ const findPredecessorIndex: (set: OrderedSet, x: number) => number; const findPredecessorIndexInInterval: (set: OrderedSet, x: T, range: Interval) => number; const findRange: (set: OrderedSet, min: T, max: T) => Interval; const intersectionSize: (a: OrderedSet, b: OrderedSet) => number; function forEach(set: OrderedSet, f: (v: T, i: number, ctx: Ctx) => void, ctx?: Ctx): Ctx; function forEachSegment(set: OrderedSet, segment: (v: T) => S, f: (v: S, sI: number, ctx: Ctx) => void, ctx?: Ctx): Ctx; function isInterval(set: OrderedSet): set is Interval; function isSortedArray(set: OrderedSet): set is SortedArray; function toArray(set: OrderedSet): T[]; function toString(set: OrderedSet): string; } type OrderedSet = SortedArray | Interval; export { OrderedSet };