Skip to content
Snippets Groups Projects
Commit 0f22f538 authored by Alexander Rose's avatar Alexander Rose
Browse files

segment iterator cleanup/revert

parent 430e5a2f
No related branches found
No related tags found
No related merge requests found
...@@ -52,22 +52,18 @@ export function projectValue({ segments }: Segmentation, set: OrderedSet, value: ...@@ -52,22 +52,18 @@ export function projectValue({ segments }: Segmentation, set: OrderedSet, value:
} }
export class SegmentIterator<T extends number = number> implements Iterator<Segs.Segment<T>> { export class SegmentIterator<T extends number = number> implements Iterator<Segs.Segment<T>> {
private _segmentMin = 0; private segmentMax = 0;
private _segmentMax = 0; private segmentMin = 0;
private segmentCur = 0;
private setRange = Interval.Empty; private setRange = Interval.Empty;
private value: Segs.Segment<T> = { index: 0, start: 0 as T, end: 0 as T }; private value: Segs.Segment<T> = { index: 0, start: 0 as T, end: 0 as T };
hasNext: boolean = false; hasNext: boolean = false;
get segmentMin() { return this._segmentMin }
get segmentMax() { return this._segmentMax }
move() { move() {
while (this.hasNext) { while (this.hasNext) {
if (this.updateValue()) { if (this.updateValue()) {
this.value.index = this.segmentCur++; this.value.index = this.segmentMin++;
this.hasNext = this._segmentMax >= this.segmentCur && Interval.size(this.setRange) > 0; this.hasNext = this.segmentMax >= this.segmentMin && Interval.size(this.setRange) > 0;
break; break;
} else { } else {
this.updateSegmentRange(); this.updateSegmentRange();
...@@ -77,7 +73,7 @@ export class SegmentIterator<T extends number = number> implements Iterator<Segs ...@@ -77,7 +73,7 @@ export class SegmentIterator<T extends number = number> implements Iterator<Segs
} }
private updateValue() { private updateValue() {
const segmentEnd = this.segments[this.segmentCur + 1]; const segmentEnd = this.segments[this.segmentMin + 1];
// TODO: add optimized version for interval and array? // TODO: add optimized version for interval and array?
const setEnd = OrderedSet.findPredecessorIndexInInterval(this.set, segmentEnd, this.setRange); const setEnd = OrderedSet.findPredecessorIndexInInterval(this.set, segmentEnd, this.setRange);
this.value.start = Interval.start(this.setRange) as T; this.value.start = Interval.start(this.setRange) as T;
...@@ -92,12 +88,9 @@ export class SegmentIterator<T extends number = number> implements Iterator<Segs ...@@ -92,12 +88,9 @@ export class SegmentIterator<T extends number = number> implements Iterator<Segs
this.hasNext = false; this.hasNext = false;
return; return;
} }
this.segmentMin = this.segmentMap[OrderedSet.getAt(this.set, sMin)];
this.segmentCur = this.segmentMap[OrderedSet.getAt(this.set, sMin)]; this.segmentMax = this.segmentMap[OrderedSet.getAt(this.set, sMax)];
this._segmentMax = this.segmentMap[OrderedSet.getAt(this.set, sMax)]; this.hasNext = this.segmentMax >= this.segmentMin;
this._segmentMin = this.segmentCur
this.hasNext = this._segmentMax >= this.segmentCur;
} }
setSegment(segment: Segs.Segment<T>) { setSegment(segment: Segs.Segment<T>) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment