remove method
Implementation
void remove(int el) {
if (readonly) throw StateError("can't alter readonly IntervalSet");
final n = intervals.length;
for (var i = 0; i < n; i++) {
final I = intervals[i];
final a = I.a;
final b = I.b;
if (el < a) {
break; // list is sorted and el is before this interval; not here
}
// if whole interval x..x, rm
if (el == a && el == b) {
intervals.removeAt(i);
break;
}
// if on left edge x..b, adjust left
if (el == a) {
I.a++;
break;
}
// if on right edge a..x, adjust right
if (el == b) {
I.b--;
break;
}
// if in middle a..x..b, split interval
if (el > a && el < b) {
// found in this interval
final oldb = I.b;
I.b = el - 1; // [a..x-1]
addRange(el + 1, oldb); // add [x+1..b]
}
}
}