2
2
3
3
use std:: cast;
4
4
use std:: vec;
5
+ use std:: vec_ng:: Vec ;
5
6
6
7
/// Information about a dimension of an array
7
8
#[ deriving( Eq , Clone , Show ) ]
@@ -71,8 +72,8 @@ trait InternalArray<T> : Array<T> {
71
72
/// A multi-dimensional array
72
73
#[ deriving( Eq , Clone ) ]
73
74
pub struct ArrayBase < T > {
74
- priv info : ~ [ DimensionInfo ] ,
75
- priv data : ~ [ T ] ,
75
+ priv info : Vec < DimensionInfo > ,
76
+ priv data : Vec < T > ,
76
77
}
77
78
78
79
impl < T > ArrayBase < T > {
@@ -85,7 +86,7 @@ impl<T> ArrayBase<T> {
85
86
///
86
87
/// Fails if there are 0 dimensions or the number of elements provided does
87
88
/// not match the number of elements specified.
88
- pub fn from_raw ( data : ~ [ T ] , info : ~ [ DimensionInfo ] )
89
+ pub fn from_raw ( data : Vec < T > , info : Vec < DimensionInfo > )
89
90
-> ArrayBase < T > {
90
91
assert ! ( !info. is_empty( ) , "Cannot create a 0x0 array" ) ;
91
92
assert ! ( data. len( ) == info. iter( ) . fold( 1 , |acc, i| acc * i. len) ,
@@ -97,12 +98,12 @@ impl<T> ArrayBase<T> {
97
98
}
98
99
99
100
/// Creates a new one-dimensional array from a vector.
100
- pub fn from_vec ( data : ~ [ T ] , lower_bound : int ) -> ArrayBase < T > {
101
+ pub fn from_vec ( data : Vec < T > , lower_bound : int ) -> ArrayBase < T > {
101
102
ArrayBase {
102
- info : ~ [ DimensionInfo {
103
+ info : vec ! ( DimensionInfo {
103
104
len: data. len( ) ,
104
105
lower_bound: lower_bound
105
- } ] ,
106
+ } ) ,
106
107
data : data
107
108
}
108
109
}
@@ -138,7 +139,7 @@ impl<T> ArrayBase<T> {
138
139
for ( info1, info2) in self . info . iter ( ) . skip ( 1 ) . zip ( other. info . iter ( ) ) {
139
140
assert ! ( info1 == info2, "Cannot join differently shaped arrays" ) ;
140
141
}
141
- self . info [ 0 ] . len += 1 ;
142
+ self . info . get_mut ( 0 ) . len += 1 ;
142
143
self . data . push_all_move ( other. data ) ;
143
144
}
144
145
@@ -174,7 +175,7 @@ impl<T> MutableArray<T> for ArrayBase<T> {}
174
175
175
176
impl < T > InternalArray < T > for ArrayBase < T > {
176
177
fn raw_get < ' a > ( & ' a self , idx : uint , _size : uint ) -> & ' a T {
177
- & self . data [ idx]
178
+ self . data . get ( idx)
178
179
}
179
180
}
180
181
@@ -252,7 +253,7 @@ mod tests {
252
253
253
254
#[ test]
254
255
fn test_from_vec ( ) {
255
- let a = ArrayBase :: from_vec ( ~ [ 0 , 1 , 2 ] , -1 ) ;
256
+ let a = ArrayBase :: from_vec ( vec ! ( 0 , 1 , 2 ) , -1 ) ;
256
257
assert ! ( [ DimensionInfo { len: 3 , lower_bound: -1 } ] ==
257
258
a. dimension_info( ) ) ;
258
259
assert_eq ! ( & 0 , a. get( -1 ) ) ;
@@ -263,30 +264,30 @@ mod tests {
263
264
#[ test]
264
265
#[ should_fail]
265
266
fn test_get_2d_fail ( ) {
266
- let mut a = ArrayBase :: from_vec ( ~ [ 0 , 1 , 2 ] , -1 ) ;
267
+ let mut a = ArrayBase :: from_vec ( vec ! ( 0 , 1 , 2 ) , -1 ) ;
267
268
a. wrap ( 1 ) ;
268
269
a. get ( 1 ) ;
269
270
}
270
271
271
272
#[ test]
272
273
#[ should_fail]
273
274
fn test_2d_slice_range_fail_low ( ) {
274
- let mut a = ArrayBase :: from_vec ( ~ [ 0 , 1 , 2 ] , -1 ) ;
275
+ let mut a = ArrayBase :: from_vec ( vec ! ( 0 , 1 , 2 ) , -1 ) ;
275
276
a. wrap ( 1 ) ;
276
277
a. slice ( 0 ) ;
277
278
}
278
279
279
280
#[ test]
280
281
#[ should_fail]
281
282
fn test_2d_slice_range_fail_high ( ) {
282
- let mut a = ArrayBase :: from_vec ( ~ [ 0 , 1 , 2 ] , -1 ) ;
283
+ let mut a = ArrayBase :: from_vec ( vec ! ( 0 , 1 , 2 ) , -1 ) ;
283
284
a. wrap ( 1 ) ;
284
285
a. slice ( 2 ) ;
285
286
}
286
287
287
288
#[ test]
288
289
fn test_2d_slice_get ( ) {
289
- let mut a = ArrayBase :: from_vec ( ~ [ 0 , 1 , 2 ] , -1 ) ;
290
+ let mut a = ArrayBase :: from_vec ( vec ! ( 0 , 1 , 2 ) , -1 ) ;
290
291
a. wrap ( 1 ) ;
291
292
let s = a. slice ( 1 ) ;
292
293
assert_eq ! ( & 0 , s. get( -1 ) ) ;
@@ -297,33 +298,33 @@ mod tests {
297
298
#[ test]
298
299
#[ should_fail]
299
300
fn test_push_move_wrong_lower_bound ( ) {
300
- let mut a = ArrayBase :: from_vec ( ~ [ 1 ] , -1 ) ;
301
- a. push_move ( ArrayBase :: from_vec ( ~ [ 2 ] , 0 ) ) ;
301
+ let mut a = ArrayBase :: from_vec ( vec ! ( 1 ) , -1 ) ;
302
+ a. push_move ( ArrayBase :: from_vec ( vec ! ( 2 ) , 0 ) ) ;
302
303
}
303
304
304
305
#[ test]
305
306
#[ should_fail]
306
307
fn test_push_move_wrong_dims ( ) {
307
- let mut a = ArrayBase :: from_vec ( ~ [ 1 ] , -1 ) ;
308
+ let mut a = ArrayBase :: from_vec ( vec ! ( 1 ) , -1 ) ;
308
309
a. wrap ( 1 ) ;
309
- a. push_move ( ArrayBase :: from_vec ( ~ [ 1 , 2 ] , -1 ) ) ;
310
+ a. push_move ( ArrayBase :: from_vec ( vec ! ( 1 , 2 ) , -1 ) ) ;
310
311
}
311
312
312
313
#[ test]
313
314
#[ should_fail]
314
315
fn test_push_move_wrong_dim_count ( ) {
315
- let mut a = ArrayBase :: from_vec ( ~ [ 1 ] , -1 ) ;
316
+ let mut a = ArrayBase :: from_vec ( vec ! ( 1 ) , -1 ) ;
316
317
a. wrap ( 1 ) ;
317
- let mut b = ArrayBase :: from_vec ( ~ [ 2 ] , -1 ) ;
318
+ let mut b = ArrayBase :: from_vec ( vec ! ( 2 ) , -1 ) ;
318
319
b. wrap ( 1 ) ;
319
320
a. push_move ( b) ;
320
321
}
321
322
322
323
#[ test]
323
324
fn test_push_move_ok ( ) {
324
- let mut a = ArrayBase :: from_vec ( ~ [ 1 , 2 ] , 0 ) ;
325
+ let mut a = ArrayBase :: from_vec ( vec ! ( 1 , 2 ) , 0 ) ;
325
326
a. wrap ( 0 ) ;
326
- a. push_move ( ArrayBase :: from_vec ( ~ [ 3 , 4 ] , 0 ) ) ;
327
+ a. push_move ( ArrayBase :: from_vec ( vec ! ( 3 , 4 ) , 0 ) ) ;
327
328
let s = a. slice ( 0 ) ;
328
329
assert_eq ! ( & 1 , s. get( 0 ) ) ;
329
330
assert_eq ! ( & 2 , s. get( 1 ) ) ;
@@ -334,13 +335,13 @@ mod tests {
334
335
335
336
#[ test]
336
337
fn test_3d ( ) {
337
- let mut a = ArrayBase :: from_vec ( ~ [ 0 , 1 ] , 0 ) ;
338
+ let mut a = ArrayBase :: from_vec ( vec ! ( 0 , 1 ) , 0 ) ;
338
339
a. wrap ( 0 ) ;
339
- a. push_move ( ArrayBase :: from_vec ( ~ [ 2 , 3 ] , 0 ) ) ;
340
+ a. push_move ( ArrayBase :: from_vec ( vec ! ( 2 , 3 ) , 0 ) ) ;
340
341
a. wrap ( 0 ) ;
341
- let mut b = ArrayBase :: from_vec ( ~ [ 4 , 5 ] , 0 ) ;
342
+ let mut b = ArrayBase :: from_vec ( vec ! ( 4 , 5 ) , 0 ) ;
342
343
b. wrap ( 0 ) ;
343
- b. push_move ( ArrayBase :: from_vec ( ~ [ 6 , 7 ] , 0 ) ) ;
344
+ b. push_move ( ArrayBase :: from_vec ( vec ! ( 6 , 7 ) , 0 ) ) ;
344
345
a. push_move ( b) ;
345
346
let s1 = a. slice ( 0 ) ;
346
347
let s2 = s1. slice ( 0 ) ;
@@ -360,7 +361,7 @@ mod tests {
360
361
361
362
#[ test]
362
363
fn test_mut ( ) {
363
- let mut a = ArrayBase :: from_vec ( ~ [ 1 , 2 ] , 0 ) ;
364
+ let mut a = ArrayBase :: from_vec ( vec ! ( 1 , 2 ) , 0 ) ;
364
365
a. wrap ( 0 ) ;
365
366
{
366
367
let mut s = a. slice_mut ( 0 ) ;
@@ -373,14 +374,14 @@ mod tests {
373
374
#[ test]
374
375
#[ should_fail]
375
376
fn test_base_overslice ( ) {
376
- let a = ArrayBase :: from_vec ( ~ [ 1 ] , 0 ) ;
377
+ let a = ArrayBase :: from_vec ( vec ! ( 1 ) , 0 ) ;
377
378
a. slice ( 0 ) ;
378
379
}
379
380
380
381
#[ test]
381
382
#[ should_fail]
382
383
fn test_slice_overslice ( ) {
383
- let mut a = ArrayBase :: from_vec ( ~ [ 1 ] , 0 ) ;
384
+ let mut a = ArrayBase :: from_vec ( vec ! ( 1 ) , 0 ) ;
384
385
a. wrap ( 0 ) ;
385
386
let s = a. slice ( 0 ) ;
386
387
s. slice ( 0 ) ;
0 commit comments