From 5aa04635647287481ceca44cf557b698666fa939 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sat, 16 Feb 2013 21:34:09 -0500 Subject: [PATCH] deque: avoid Copy in grow --- src/libstd/deque.rs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) 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