| 159 | } |
| 160 | |
| 161 | private addWrittenRange(start: number, end: number): void { |
| 162 | if (start > end) return; |
| 163 | |
| 164 | let i = 0; |
| 165 | let ranges = this.received; |
| 166 | while (i < ranges.length && ranges[i].end < start - 1) i++; |
| 167 | |
| 168 | let mergeStart = start, |
| 169 | mergeEnd = end; |
| 170 | let removeCount = 0; |
| 171 | |
| 172 | while (i + removeCount < ranges.length && ranges[i + removeCount].start <= end + 1) { |
| 173 | mergeStart = Math.min(mergeStart, ranges[i + removeCount].start); |
| 174 | mergeEnd = Math.max(mergeEnd, ranges[i + removeCount].end); |
| 175 | removeCount++; |
| 176 | } |
| 177 | |
| 178 | ranges.splice(i, removeCount, { start: mergeStart, end: mergeEnd }); |
| 179 | } |
| 180 | |
| 181 | private isFullyCovered(): boolean { |
| 182 | return ( |