mergeByteRanges function
Sorts ranges and merges overlapping or adjacent non-empty ranges.
Implementation
List<ByteRange> mergeByteRanges(Iterable<ByteRange> ranges) {
final sorted = ranges.where((range) => !range.isEmpty).toList()..sort();
if (sorted.isEmpty) return const [];
final merged = <ByteRange>[];
var current = sorted.first;
for (final next in sorted.skip(1)) {
if (next.start <= current.end) {
if (next.end > current.end) {
current = ByteRange(current.start, next.end);
}
} else {
merged.add(current);
current = next;
}
}
merged.add(current);
return List.unmodifiable(merged);
}