map method
Map this range set through a set of changes, return the new set.
Implementation
RangeSet<T> map(ChangeDesc changes) {
if (changes.empty || isEmpty) return this;
final chunks = <Chunk<T>>[];
final positions = <int>[];
var maxPt = -1;
for (var i = 0; i < chunk.length; i++) {
final start = chunkPos[i];
final c = chunk[i];
final touch = changes.touchesRange(start, start + c.length);
if (touch == false) {
maxPt = maxPt > c.maxPoint ? maxPt : c.maxPoint;
chunks.add(c);
positions.add(changes.mapPos(start)!);
} else if (touch == true) {
final result = c.map(start, changes);
if (result.mapped != null) {
maxPt = maxPt > result.mapped!.maxPoint ? maxPt : result.mapped!.maxPoint;
chunks.add(result.mapped!);
positions.add(result.pos);
}
}
}
final next = nextLayer.map(changes);
return chunks.isEmpty
? next
: RangeSet._(positions, chunks, next, maxPt);
}