normalizeRanges function
Normalizes ranges by sorting and merging overlapping or adjacent ones.
Returns a new list with the merged values sorted in ascending range order.
Implementation
Ranges normalizeRanges(Ranges ranges) {
if (ranges.isEmpty) {
return [];
}
// Validate range correctness
for (var i = 0; i < ranges.length; i++) {
if (ranges[i].$1 > ranges[i].$2) {
throw ArgumentError(
'Invalid range at index $i: (${ranges[i].$1}, ${ranges[i].$2})',
);
}
}
final sorted = sortRanges(ranges);
final result = <Range>[sorted.first];
for (var i = 1; i < sorted.length; i++) {
final current = sorted[i];
final last = result.last;
// If current range overlaps or is adjacent to the last merged range
if (current.$1 <= last.$2 + 1) {
result[result.length - 1] = (last.$1, max(last.$2, current.$2));
} else {
result.add(current);
}
}
return result;
}