Skip to content

Commit 519b60f

Browse files
committed
Merge pull request #4580 from Dretch/atvec-constructors
Add more constructors for managed vectors (as proposed in issue #4553)
2 parents 10260be + 9b27ec8 commit 519b60f

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

src/libcore/at_vec.rs

+42
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,29 @@ pub pure fn from_elem<T: Copy>(n_elts: uint, t: T) -> @[T] {
150150
}
151151
}
152152

153+
/**
154+
* Creates and initializes an immutable managed vector by moving all the
155+
* elements from an owned vector.
156+
*/
157+
fn from_owned<T>(v: ~[T]) -> @[T] {
158+
let mut av = @[];
159+
unsafe {
160+
raw::reserve(&mut av, v.len());
161+
do vec::consume(v) |_i, x| {
162+
raw::push(&mut av, x);
163+
}
164+
transmute(av)
165+
}
166+
}
167+
168+
/**
169+
* Creates and initializes an immutable managed vector by copying all the
170+
* elements of a slice.
171+
*/
172+
fn from_slice<T:Copy>(v: &[T]) -> @[T] {
173+
from_fn(v.len(), |i| v[i])
174+
}
175+
153176
#[cfg(notest)]
154177
pub mod traits {
155178
use at_vec::append;
@@ -281,3 +304,22 @@ pub fn test() {
281304
pub fn append_test() {
282305
assert @[1,2,3] + @[4,5,6] == @[1,2,3,4,5,6];
283306
}
307+
308+
#[test]
309+
pub fn test_from_owned() {
310+
assert from_owned::<int>(~[]) == @[];
311+
assert from_owned(~[true]) == @[true];
312+
assert from_owned(~[1, 2, 3, 4, 5]) == @[1, 2, 3, 4, 5];
313+
assert from_owned(~[~"abc", ~"123"]) == @[~"abc", ~"123"];
314+
assert from_owned(~[~[42]]) == @[~[42]];
315+
}
316+
317+
#[test]
318+
pub fn test_from_slice() {
319+
assert from_slice::<int>([]) == @[];
320+
assert from_slice([true]) == @[true];
321+
assert from_slice([1, 2, 3, 4, 5]) == @[1, 2, 3, 4, 5];
322+
assert from_slice([@"abc", @"123"]) == @[@"abc", @"123"];
323+
assert from_slice([@[42]]) == @[@[42]];
324+
}
325+

0 commit comments

Comments
 (0)