aboutsummaryrefslogtreecommitdiff
path: root/src/lib/_vec.rs
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2011-03-16 14:58:02 -0700
committerGraydon Hoare <[email protected]>2011-03-16 14:58:02 -0700
commit54587bdccb7b6771cfc704a30fc0ef2c65824a15 (patch)
tree6f154f9b038e9542b364e87ae887858a96bdb4a9 /src/lib/_vec.rs
parentAdd some more dlopen-related suppressions for the Mac (diff)
downloadrust-54587bdccb7b6771cfc704a30fc0ef2c65824a15.tar.xz
rust-54587bdccb7b6771cfc704a30fc0ef2c65824a15.zip
Switch all vases of vec += elt to vec += vec. Prohibit former in rustboot. Tweak std lib vec fns in process.
Diffstat (limited to 'src/lib/_vec.rs')
-rw-r--r--src/lib/_vec.rs36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/lib/_vec.rs b/src/lib/_vec.rs
index 680c8884..80cd242d 100644
--- a/src/lib/_vec.rs
+++ b/src/lib/_vec.rs
@@ -103,28 +103,32 @@ fn slice[T](vec[T] v, uint start, uint end) -> vec[T] {
ret result;
}
-fn shift[T](vec[T] v) -> vec[T] {
- check(len[T](v) > 0u);
- ret slice[T](v, 1u, len[T](v));
+fn shift[T](&mutable vec[T] v) -> T {
+ auto ln = len[T](v);
+ check(ln > 0u);
+ auto e = v.(0);
+ v = slice[T](v, 1u, ln);
+ ret e;
}
-fn pop[T](vec[T] v) -> vec[T] {
- check(len[T](v) > 0u);
- ret slice[T](v, 0u, len[T](v) - 1u);
+fn pop[T](&mutable vec[T] v) -> T {
+ auto ln = len[T](v);
+ check(ln > 0u);
+ ln -= 1u;
+ auto e = v.(ln);
+ v = slice[T](v, 0u, ln);
+ ret e;
}
-fn push[T](vec[T] v, &T t) -> vec[T] {
- v += t;
- ret v;
+fn push[T](&mutable vec[T] v, &T t) {
+ v += vec(t);
}
-fn unshift[T](vec[T] v, &T t) -> vec[T] {
+fn unshift[T](&mutable vec[T] v, &T t) {
auto res = alloc[T](len[T](v) + 1u);
- res += t;
- for (T t_ in v) {
- res += t_;
- }
- ret res;
+ res += vec(t);
+ res += v;
+ v = res;
}
fn grow[T](&mutable vec[T] v, int n, &T initval) {
@@ -152,7 +156,7 @@ fn map2[T,U,V](&operator2[T,U,V] f, &vec[T] v0, &vec[U] v1) -> vec[V] {
let vec[V] u = alloc[V](v0_len);
auto i = 0u;
while (i < v0_len) {
- u += f(v0.(i), v1.(i));
+ u += vec(f(v0.(i), v1.(i)));
i += 1u;
}