about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2013-02-16 21:34:09 -0500
committerDaniel Micay <danielmicay@gmail.com>2013-02-16 21:34:09 -0500
commit5aa04635647287481ceca44cf557b698666fa939 (patch)
treee6150f5a6bdbc2affae33bf4186607f211ece8e8 /src/libstd
parenta2573290710f4b3f14be475f4ef2af773de7b4c7 (diff)
downloadrust-5aa04635647287481ceca44cf557b698666fa939.tar.gz
rust-5aa04635647287481ceca44cf557b698666fa939.zip
deque: avoid Copy in grow
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/deque.rs13
1 files 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<T: Copy> Deque<T> {
 
 /// Grow is only called on full elts, so nelts is also len(elts), unlike
 /// elsewhere.
-fn grow<T: Copy>(nelts: uint, lo: uint, elts: &[Option<T>]) -> ~[Option<T>] {
+fn grow<T>(nelts: uint, lo: uint, elts: &mut [Option<T>]) -> ~[Option<T>] {
     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