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));