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 adjacent ranges are merged and deduplicated.

Panics if the input ranges are not sorted by their start address, or if ranges overlap.

§Example

let ranges = [
    MemoryRange::new(0x1000..0x2000),
    MemoryRange::new(0x2000..0x5000),
    MemoryRange::new(0x5000..0x6000),
    MemoryRange::new(0x8000..0x9000),
];
let flattened = [
    MemoryRange::new(0x1000..0x6000),
    MemoryRange::new(0x8000..0x9000),
];
assert!(flatten_ranges(ranges).eq(flattened));