|
@@ -52,22 +52,18 @@ export function projectValue({ segments }: Segmentation, set: OrderedSet, value:
|
|
|
}
|
|
|
|
|
|
export class SegmentIterator<T extends number = number> implements Iterator<Segs.Segment<T>> {
|
|
|
- private _segmentMin = 0;
|
|
|
- private _segmentMax = 0;
|
|
|
- private segmentCur = 0;
|
|
|
+ private segmentMax = 0;
|
|
|
+ private segmentMin = 0;
|
|
|
private setRange = Interval.Empty;
|
|
|
private value: Segs.Segment<T> = { index: 0, start: 0 as T, end: 0 as T };
|
|
|
|
|
|
hasNext: boolean = false;
|
|
|
|
|
|
- get segmentMin() { return this._segmentMin }
|
|
|
- get segmentMax() { return this._segmentMax }
|
|
|
-
|
|
|
move() {
|
|
|
while (this.hasNext) {
|
|
|
if (this.updateValue()) {
|
|
|
- this.value.index = this.segmentCur++;
|
|
|
- this.hasNext = this._segmentMax >= this.segmentCur && Interval.size(this.setRange) > 0;
|
|
|
+ this.value.index = this.segmentMin++;
|
|
|
+ this.hasNext = this.segmentMax >= this.segmentMin && Interval.size(this.setRange) > 0;
|
|
|
break;
|
|
|
} else {
|
|
|
this.updateSegmentRange();
|
|
@@ -77,7 +73,7 @@ export class SegmentIterator<T extends number = number> implements Iterator<Segs
|
|
|
}
|
|
|
|
|
|
private updateValue() {
|
|
|
- const segmentEnd = this.segments[this.segmentCur + 1];
|
|
|
+ const segmentEnd = this.segments[this.segmentMin + 1];
|
|
|
// TODO: add optimized version for interval and array?
|
|
|
const setEnd = OrderedSet.findPredecessorIndexInInterval(this.set, segmentEnd, this.setRange);
|
|
|
this.value.start = Interval.start(this.setRange) as T;
|
|
@@ -92,12 +88,9 @@ export class SegmentIterator<T extends number = number> implements Iterator<Segs
|
|
|
this.hasNext = false;
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
- this.segmentCur = this.segmentMap[OrderedSet.getAt(this.set, sMin)];
|
|
|
- this._segmentMax = this.segmentMap[OrderedSet.getAt(this.set, sMax)];
|
|
|
-
|
|
|
- this._segmentMin = this.segmentCur
|
|
|
- this.hasNext = this._segmentMax >= this.segmentCur;
|
|
|
+ this.segmentMin = this.segmentMap[OrderedSet.getAt(this.set, sMin)];
|
|
|
+ this.segmentMax = this.segmentMap[OrderedSet.getAt(this.set, sMax)];
|
|
|
+ this.hasNext = this.segmentMax >= this.segmentMin;
|
|
|
}
|
|
|
|
|
|
setSegment(segment: Segs.Segment<T>) {
|