INNER CODE UNIT · Rust
allocate_range
gfx-rs/gfx · src/auxil/range-alloc/src/lib.rs:45
pub fn allocate_range(&mut self, length: T) -> Result<Range<T>, RangeAllocationError<T>> {
assert_ne!(length + length, length);
let mut best_fit: Option<(usize, Range<T>)> = None;
let mut fragmented_free_length = length - length;
for (index, range) in self.free_ranges.iter().cloned().enumerate() {
let range_length = range.end - range.start;
fragmented_free_length += range_length;
if range_length < length {
continue;
} else if range_length == length {
// Found a perfect fit, so stop looking.
best_fit = Some((index, range));
break;
}
best_fit = Some(match best_fit {
Some((best_index, best_range)) => {
// Find best fit for this allocation to reduce memory fragmentation.
if range_length < best_range.end - best_range.start {