map method

RangeSet<T> map(
  1. ChangeDesc changes
)

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);
}