Skip to content

Commit 5aa0463

Browse files
committed
deque: avoid Copy in grow
1 parent a257329 commit 5aa0463

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

src/libstd/deque.rs

+5-8
Original file line numberDiff line numberDiff line change
@@ -98,17 +98,14 @@ impl<T: Copy> Deque<T> {
9898

9999
/// Grow is only called on full elts, so nelts is also len(elts), unlike
100100
/// elsewhere.
101-
fn grow<T: Copy>(nelts: uint, lo: uint, elts: &[Option<T>]) -> ~[Option<T>] {
101+
fn grow<T>(nelts: uint, lo: uint, elts: &mut [Option<T>]) -> ~[Option<T>] {
102102
assert nelts == elts.len();
103103
let mut rv = ~[];
104104

105-
let mut i = 0u;
106-
let nalloc = uint::next_power_of_two(nelts + 1u);
107-
while i < nalloc {
108-
if i < nelts {
109-
rv.push(elts[(lo + i) % nelts]);
110-
} else { rv.push(None); }
111-
i += 1u;
105+
do vec::grow_fn(&mut rv, nelts + 1) |i| {
106+
let mut element = None;
107+
element <-> elts[(lo + i) % nelts];
108+
element
112109
}
113110

114111
rv

0 commit comments

Comments
 (0)