diff options
| author | Jeffrey Yasskin <[email protected]> | 2010-07-12 05:51:02 +0800 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-07-16 08:13:08 +0800 |
| commit | 765a2b3ecffb68a18849de6db54a680a1fd6eee4 (patch) | |
| tree | 98f7e50eb0645feba63432e0ea584f876e212b73 | |
| parent | Add a test for std._vec.init_elt, and an XFAILed test for std._vec.init_fn. (diff) | |
| download | rust-765a2b3ecffb68a18849de6db54a680a1fd6eee4.tar.xz rust-765a2b3ecffb68a18849de6db54a680a1fd6eee4.zip | |
Add a _vec.slice function that'll hold us over until .(a,b) syntax is
implemented. This could actually replace .(a,b) syntax if the language grows
optional function parameters.
| -rw-r--r-- | src/lib/_vec.rs | 15 | ||||
| -rw-r--r-- | src/test/run-pass/vec-lib.rs | 13 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/lib/_vec.rs b/src/lib/_vec.rs index 06e738f5..1b9f5aaa 100644 --- a/src/lib/_vec.rs +++ b/src/lib/_vec.rs @@ -48,6 +48,21 @@ fn buf[T](vec[T] v) -> vbuf { ret rustrt.vec_buf[T](v); } +// Returns elements from [start..end) from v. +fn slice[T](vec[T] v, int start, int end) -> vec[T] { + check(0 <= start); + check(start <= end); + // FIXME #108: This doesn't work yet. + //check(end <= int(len[T](v))); + auto result = alloc[T](uint(end - start)); + let mutable int i = start; + while (i < end) { + result += vec(v.(i)); + i += 1; + } + ret result; +} + // Ought to take mutable &vec[T] v and just mutate it instead of copy // and return. Blocking on issue #89 for this. fn grow[T](mutable vec[T] v, int n, T initval) -> vec[T] { diff --git a/src/test/run-pass/vec-lib.rs b/src/test/run-pass/vec-lib.rs index 32e01b96..11dd2ffd 100644 --- a/src/test/run-pass/vec-lib.rs +++ b/src/test/run-pass/vec-lib.rs @@ -24,7 +24,18 @@ fn test_init_fn() { check (v.(4) == uint(4)); } +fn test_slice() { + let vec[int] v = vec(1,2,3,4,5); + auto v2 = std._vec.slice[int](v, 2, 4); + // FIXME #108: Can't call templated function twice in the same + // program, at the moment. + //check (std._vec.len[int](v2) == uint(2)); + check (v2.(0) == 3); + check (v2.(1) == 4); +} + fn main() { test_init_elt(); //XFAIL: test_init_fn(); // Segfaults. -}
\ No newline at end of file + test_slice(); +} |