123456789101112131415161718192021222324252627282930313233343536 |
- /**
- * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author David Sehnal <david.sehnal@gmail.com>
- */
- import Interval from './interval'
- import OrderedSet from './ordered-set'
- import * as Impl from './impl/segmentation'
- namespace Segmentation {
- export interface Segment<I extends number = number> { index: I, start: number, end: number }
- export const create: <T extends number = number, I extends number = number>(segs: ArrayLike<T>) => Segmentation<T, I> = Impl.create as any;
- export const ofOffsets: <T extends number = number, I extends number = number>(offsets: ArrayLike<T>, bounds: Interval) => Segmentation<T, I> = Impl.ofOffsets as any;
- export const count: <T extends number = number, I extends number = number>(segs: Segmentation<T, I>) => number = Impl.count as any;
- export const getSegment: <T extends number = number, I extends number = number>(segs: Segmentation<T, I>, value: T) => number = Impl.getSegment as any;
- export const projectValue: <T extends number = number, I extends number = number>(segs: Segmentation<T, I>, set: OrderedSet<T>, value: T) => Interval = Impl.projectValue as any;
- /** Segment iterator that mutates a single segment object to mark all the segments. */
- export const transientSegments: <T extends number = number, I extends number = number>(segs: Segmentation<T, I>, set: OrderedSet<T>, segment?: Segment) => Impl.SegmentIterator<I> = Impl.segments as any;
- export type SegmentIterator<I extends number = number> = Impl.SegmentIterator<I>
- }
- interface Segmentation<T extends number = number, I extends number = number> {
- '@type': 'segmentation',
- /** All segments are defined by offsets [offsets[i], offsets[i + 1]) for i \in [0, count - 1] */
- readonly offsets: ArrayLike<T>,
- /** Segment index of the i-th element */
- readonly index: ArrayLike<I>,
- readonly count: number
- }
- export default Segmentation
|