aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/_vec.rs15
1 files changed, 15 insertions, 0 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] {