segmentation.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536
  1. /**
  2. * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. */
  6. import Interval from './interval'
  7. import OrderedSet from './ordered-set'
  8. import * as Impl from './impl/segmentation'
  9. namespace Segmentation {
  10. export interface Segment<I extends number = number> { index: I, start: number, end: number }
  11. export const create: <T extends number = number, I extends number = number>(segs: ArrayLike<T>) => Segmentation<T, I> = Impl.create as any;
  12. export const ofOffsets: <T extends number = number, I extends number = number>(offsets: ArrayLike<T>, bounds: Interval) => Segmentation<T, I> = Impl.ofOffsets as any;
  13. export const count: <T extends number = number, I extends number = number>(segs: Segmentation<T, I>) => number = Impl.count as any;
  14. export const getSegment: <T extends number = number, I extends number = number>(segs: Segmentation<T, I>, value: T) => number = Impl.getSegment as any;
  15. 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;
  16. // Segment iterator that mutates a single segment object to mark all the segments.
  17. 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;
  18. export type SegmentIterator<I extends number = number> = Impl.SegmentIterator<I>
  19. }
  20. interface Segmentation<T extends number = number, I extends number = number> {
  21. '@type': 'segmentation',
  22. /** All segments are defined by offsets [offsets[i], offsets[i + 1]) for i \in [0, count - 1] */
  23. readonly offsets: ArrayLike<T>,
  24. /** Segment index of the i-th element */
  25. readonly index: ArrayLike<I>,
  26. readonly count: number
  27. }
  28. export default Segmentation