diff options
| author | Graydon Hoare <[email protected]> | 2010-10-22 11:46:04 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-10-22 11:46:04 -0700 |
| commit | 05c9d885dd8793b507fad9aaf7d89a113d1b2389 (patch) | |
| tree | 31fe0211fd0925ce81f1da8ad2abae972b061461 /src | |
| parent | Add support for passing args to fns in rustc. (diff) | |
| download | rust-05c9d885dd8793b507fad9aaf7d89a113d1b2389.tar.xz rust-05c9d885dd8793b507fad9aaf7d89a113d1b2389.zip | |
Change vec slice to use uint, add push/pop/shift/unshift.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/_vec.rs | 35 | ||||
| -rw-r--r-- | src/test/run-pass/lib-vec.rs | 28 |
2 files changed, 43 insertions, 20 deletions
diff --git a/src/lib/_vec.rs b/src/lib/_vec.rs index 55020684..c67061c5 100644 --- a/src/lib/_vec.rs +++ b/src/lib/_vec.rs @@ -85,19 +85,42 @@ fn print_debug_info[T](vec[T] v) { } // Returns elements from [start..end) from v. -fn slice[T](vec[T] v, int start, int end) -> vec[T] { - check (0 <= start); +fn slice[T](vec[T] v, uint start, uint end) -> vec[T] { check (start <= end); - check (end <= (len[T](v) as int)); - auto result = alloc[T]((end - start) as uint); - let int i = start; + check (end <= len[T](v)); + auto result = alloc[T](end - start); + let uint i = start; while (i < end) { result += vec(v.(i)); - i += 1; + i += 1u; } ret result; } +fn shift[T](vec[T] v) -> vec[T] { + check(len[T](v) > 0u); + ret slice[T](v, 1u, len[T](v)); +} + +fn pop[T](vec[T] v) -> vec[T] { + check(len[T](v) > 0u); + ret slice[T](v, 0u, len[T](v) - 1u); +} + +fn push[T](vec[T] v, &T t) -> vec[T] { + v += t; + ret v; +} + +fn unshift[T](vec[T] v, &T t) -> vec[T] { + auto res = alloc[T](len[T](v) + 1u); + res += t; + for (T t_ in v) { + res += t_; + } + ret res; +} + fn grow[T](&mutable vec[T] v, int n, &T initval) { let int i = n; while (i > 0) { diff --git a/src/test/run-pass/lib-vec.rs b/src/test/run-pass/lib-vec.rs index ccd83d33..0f32fbc7 100644 --- a/src/test/run-pass/lib-vec.rs +++ b/src/test/run-pass/lib-vec.rs @@ -1,11 +1,11 @@ use std; fn test_init_elt() { - let vec[uint] v = std._vec.init_elt[uint](5 as uint, 3 as uint); - check (std._vec.len[uint](v) == (3 as uint)); - check (v.(0) == (5 as uint)); - check (v.(1) == (5 as uint)); - check (v.(2) == (5 as uint)); + let vec[uint] v = std._vec.init_elt[uint](5u, 3u); + check (std._vec.len[uint](v) == 3u); + check (v.(0) == 5u); + check (v.(1) == 5u); + check (v.(2) == 5u); } fn id(uint x) -> uint { @@ -13,19 +13,19 @@ fn id(uint x) -> uint { } fn test_init_fn() { let fn(uint)->uint op = id; - let vec[uint] v = std._vec.init_fn[uint](op, (5 as uint)); - check (std._vec.len[uint](v) == (5 as uint)); - check (v.(0) == (0 as uint)); - check (v.(1) == (1 as uint)); - check (v.(2) == (2 as uint)); - check (v.(3) == (3 as uint)); - check (v.(4) == (4 as uint)); + let vec[uint] v = std._vec.init_fn[uint](op, 5u); + check (std._vec.len[uint](v) == 5u); + check (v.(0) == 0u); + check (v.(1) == 1u); + check (v.(2) == 2u); + check (v.(3) == 3u); + check (v.(4) == 4u); } fn test_slice() { let vec[int] v = vec(1,2,3,4,5); - auto v2 = std._vec.slice[int](v, 2, 4); - check (std._vec.len[int](v2) == (2 as uint)); + auto v2 = std._vec.slice[int](v, 2u, 4u); + check (std._vec.len[int](v2) == 2u); check (v2.(0) == 3); check (v2.(1) == 4); } |