From a6b2a2cdb1c93971ae5925ad312043754680180f Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 21 Nov 2011 11:59:27 +0100 Subject: [PATCH] Separate vec::map and vec::map_mut The safe-reference checker requires a copy of each mapped-over element only when the vector is mutable. Let's not pay that cost for immutable vectors. --- src/lib/vec.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/lib/vec.rs b/src/lib/vec.rs index 77d4c10dbe05..896a3f9e6aad 100644 --- a/src/lib/vec.rs +++ b/src/lib/vec.rs @@ -384,7 +384,19 @@ Function: map Apply a function to each element of a vector and return the results */ -fn map(f: block(T) -> U, v: [const T]) -> [U] { +fn map(f: block(T) -> U, v: [T]) -> [U] { + let result = []; + reserve(result, len(v)); + for elem: T in v { result += [f(elem)]; } + ret result; +} + +/* +Function: map_mut + +Apply a function to each element of a mutable vector and return the results +*/ +fn map_mut(f: block(T) -> U, v: [const T]) -> [U] { let result = []; reserve(result, len(v)); for elem: T in v {