diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs index 1857d5eeaf9..c182aa8caa0 100644 --- a/src/libstd/deque.rs +++ b/src/libstd/deque.rs @@ -98,17 +98,14 @@ impl Deque { /// Grow is only called on full elts, so nelts is also len(elts), unlike /// elsewhere. -fn grow(nelts: uint, lo: uint, elts: &[Option]) -> ~[Option] { +fn grow(nelts: uint, lo: uint, elts: &mut [Option]) -> ~[Option] { assert nelts == elts.len(); let mut rv = ~[]; - let mut i = 0u; - let nalloc = uint::next_power_of_two(nelts + 1u); - while i < nalloc { - if i < nelts { - rv.push(elts[(lo + i) % nelts]); - } else { rv.push(None); } - i += 1u; + do vec::grow_fn(&mut rv, nelts + 1) |i| { + let mut element = None; + element <-> elts[(lo + i) % nelts]; + element } rv