@@ -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) ]
154177pub mod traits {
155178 use at_vec:: append;
@@ -281,3 +304,22 @@ pub fn test() {
281304pub 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