( _left: Chunk.Chunk<Interval.Interval>, _right: Chunk.Chunk<Interval.Interval>, _acc: Chunk.Chunk<Interval.Interval> )
| 124 | |
| 125 | /** @internal */ |
| 126 | const intersectLoop = ( |
| 127 | _left: Chunk.Chunk<Interval.Interval>, |
| 128 | _right: Chunk.Chunk<Interval.Interval>, |
| 129 | _acc: Chunk.Chunk<Interval.Interval> |
| 130 | ): Intervals.Intervals => { |
| 131 | let left = _left |
| 132 | let right = _right |
| 133 | let acc = _acc |
| 134 | while (Chunk.isNonEmpty(left) && Chunk.isNonEmpty(right)) { |
| 135 | const interval = pipe(Chunk.headNonEmpty(left), Interval.intersect(Chunk.headNonEmpty(right))) |
| 136 | const intervals = Interval.isEmpty(interval) ? acc : pipe(acc, Chunk.prepend(interval)) |
| 137 | if (pipe(Chunk.headNonEmpty(left), Interval.lessThan(Chunk.headNonEmpty(right)))) { |
| 138 | left = Chunk.tailNonEmpty(left) |
| 139 | } else { |
| 140 | right = Chunk.tailNonEmpty(right) |
| 141 | } |
| 142 | acc = intervals |
| 143 | } |
| 144 | return make(Chunk.reverse(acc)) |
| 145 | } |
| 146 | |
| 147 | /** @internal */ |
| 148 | export const start = (self: Intervals.Intervals): number => { |
no test coverage detected