remove method

void remove(
  1. int el
)

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]
    }
  }
}