diff options
| author | Tim Chevalier <chevalier@alum.wellesley.edu> | 2013-01-22 15:24:12 -0800 |
|---|---|---|
| committer | Tim Chevalier <chevalier@alum.wellesley.edu> | 2013-01-22 15:24:12 -0800 |
| commit | 519b60f313766d840123b48fbc9fc4b42948e6c0 (patch) | |
| tree | 298784a65a7727d6feccb56565ba647dc4396edc | |
| parent | 10260bee38fc41b5e089d0be0a217e5eb6ad9d12 (diff) | |
| parent | 9b27ec868450d240dfb308cef204bfa12f23abbd (diff) | |
Merge pull request #4580 from Dretch/atvec-constructors
Add more constructors for managed vectors (as proposed in issue #4553)
| -rw-r--r-- | src/libcore/at_vec.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/libcore/at_vec.rs b/src/libcore/at_vec.rs index 1d964edd537..c6285f62377 100644 --- a/src/libcore/at_vec.rs +++ b/src/libcore/at_vec.rs @@ -150,6 +150,29 @@ pub pure fn from_elem<T: Copy>(n_elts: uint, t: T) -> @[T] { } } +/** + * Creates and initializes an immutable managed vector by moving all the + * elements from an owned vector. + */ +fn from_owned<T>(v: ~[T]) -> @[T] { + let mut av = @[]; + unsafe { + raw::reserve(&mut av, v.len()); + do vec::consume(v) |_i, x| { + raw::push(&mut av, x); + } + transmute(av) + } +} + +/** + * Creates and initializes an immutable managed vector by copying all the + * elements of a slice. + */ +fn from_slice<T:Copy>(v: &[T]) -> @[T] { + from_fn(v.len(), |i| v[i]) +} + #[cfg(notest)] pub mod traits { use at_vec::append; @@ -281,3 +304,22 @@ pub fn test() { pub fn append_test() { assert @[1,2,3] + @[4,5,6] == @[1,2,3,4,5,6]; } + +#[test] +pub fn test_from_owned() { + assert from_owned::<int>(~[]) == @[]; + assert from_owned(~[true]) == @[true]; + assert from_owned(~[1, 2, 3, 4, 5]) == @[1, 2, 3, 4, 5]; + assert from_owned(~[~"abc", ~"123"]) == @[~"abc", ~"123"]; + assert from_owned(~[~[42]]) == @[~[42]]; +} + +#[test] +pub fn test_from_slice() { + assert from_slice::<int>([]) == @[]; + assert from_slice([true]) == @[true]; + assert from_slice([1, 2, 3, 4, 5]) == @[1, 2, 3, 4, 5]; + assert from_slice([@"abc", @"123"]) == @[@"abc", @"123"]; + assert from_slice([@[42]]) == @[@[42]]; +} + |
