subtract method
Returns subtraction of SubRanges as an array of SubRanges. (There's a case where subtraction divides it in 2)
Implementation
List<SubRange> subtract(SubRange range) {
if (range.covers(this)) {
return [];
} else if (range.isInside(this)) {
return [
SubRange(low, range.low - 1),
SubRange(range.high + 1, high),
];
} else if (range.low <= low) {
return [SubRange(range.high + 1, high)];
} else {
return [SubRange(low, range.low - 1)];
}
}