replace method
Replaces the existing selection with a selection range from start
to
end
so that no changes are notified for the overlapping range.
Implementation
void replace(int start, [int? end]) {
end ??= start;
final newTree = IntervalTree([start, end]);
final overlap = _tree.intersection(newTree);
final removal = IntervalTree.of(_tree);
removal.removeAll(newTree);
for (final range in removal) {
for (int i = range.start; i <= range.end; ++i) {
if (!overlap.contains([i, i])) {
notifyListeners(i, false);
}
}
}
final addition = IntervalTree.of(newTree);
addition.removeAll(removal);
for (final range in addition) {
for (int i = range.start; i <= range.end; ++i) {
if (!overlap.contains([i, i])) {
notifyListeners(i, true);
}
}
}
_tree = newTree;
}