Function memory_range::flatten_ranges
source · pub fn flatten_ranges(
ranges: impl IntoIterator<Item = MemoryRange>,
) -> impl Iterator<Item = MemoryRange>
Expand description
Takes a sequence of memory ranges, sorted by their start address, and returns an iterator over the flattened ranges, where overlapping and adjacent ranges are merged and deduplicated.
Panics if the input ranges are not sorted by their start address.
§Example
let ranges = [
MemoryRange::new(0x1000..0x2000),
MemoryRange::new(0x2000..0x5000),
MemoryRange::new(0x4000..0x6000),
MemoryRange::new(0x5000..0x6000),
MemoryRange::new(0x8000..0x9000),
];
let flattened = [
MemoryRange::new(0x1000..0x6000),
MemoryRange::new(0x8000..0x9000),
];
assert!(flatten_ranges(ranges).eq(flattened));