@@ -150,6 +150,29 @@ pub pure fn from_elem<T: Copy>(n_elts: uint, t: T) -> @[T] {
150
150
}
151
151
}
152
152
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
+
153
176
#[ cfg( notest) ]
154
177
pub mod traits {
155
178
use at_vec:: append;
@@ -281,3 +304,22 @@ pub fn test() {
281
304
pub fn append_test ( ) {
282
305
assert @[ 1 , 2 , 3 ] + @[ 4 , 5 , 6 ] == @[ 1 , 2 , 3 , 4 , 5 , 6 ] ;
283
306
}
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