@@ -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