diff options
| author | Daniel Micay <danielmicay@gmail.com> | 2013-02-16 21:34:09 -0500 |
|---|---|---|
| committer | Daniel Micay <danielmicay@gmail.com> | 2013-02-16 21:34:09 -0500 |
| commit | 5aa04635647287481ceca44cf557b698666fa939 (patch) | |
| tree | e6150f5a6bdbc2affae33bf4186607f211ece8e8 /src/libstd | |
| parent | a2573290710f4b3f14be475f4ef2af773de7b4c7 (diff) | |
| download | rust-5aa04635647287481ceca44cf557b698666fa939.tar.gz rust-5aa04635647287481ceca44cf557b698666fa939.zip | |
deque: avoid Copy in grow
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/deque.rs | 13 |
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 |
