in jflex/src/main/java/jflex/core/unicode/IntCharSet.java [151:205]
public void add(Interval interval) {
if (DEBUG) assert interval.invariants();
int size = intervals.size();
for (int i = 0; i < size; i++) {
Interval elem = intervals.get(i);
if (elem.end + 1 >= interval.start) {
if (elem.contains(interval)) {
if (DEBUG) assert invariants();
return;
}
if (elem.start > interval.end + 1) {
intervals.add(i, Interval.copyOf(interval));
if (DEBUG) assert invariants();
return;
}
if (interval.start < elem.start) {
elem.start = interval.start;
}
if (interval.end <= elem.end) {
if (DEBUG) assert invariants();
return;
}
elem.end = interval.end;
i++;
// delete all x with x.contains( interval.end )
while (i < size) {
Interval x = intervals.get(i);
if (x.start > elem.end + 1) {
if (DEBUG) assert invariants();
return;
}
if (x.end > elem.end) {
elem.end = x.end;
}
intervals.remove(i);
size--;
}
if (DEBUG) assert invariants();
return;
}
}
intervals.add(Interval.copyOf(interval));
if (DEBUG) assert invariants();
}