@@ -19,7 +19,7 @@ impl<T: fmt::Display> fmt::Display for Array<T> {
1919 try!( write ! ( fmt,
2020 "[{}:{}]" ,
2121 dim. lower_bound,
22- dim. lower_bound + dim. len as isize - 1 ) ) ;
22+ dim. lower_bound + dim. len - 1 ) ) ;
2323 }
2424 try!( write ! ( fmt, "=" ) ) ;
2525 }
@@ -61,7 +61,7 @@ impl<T> Array<T> {
6161 /// elements specified by the dimensions.
6262 pub fn from_parts ( data : Vec < T > , dimensions : Vec < Dimension > ) -> Array < T > {
6363 assert ! ( ( data. is_empty( ) && dimensions. is_empty( ) ) ||
64- data. len( ) == dimensions. iter( ) . fold( 1 , |acc, i| acc * i. len) ,
64+ data. len( ) as i32 == dimensions. iter( ) . fold( 1 , |acc, i| acc * i. len) ,
6565 "size mismatch" ) ;
6666 Array {
6767 dims : dimensions,
@@ -70,10 +70,10 @@ impl<T> Array<T> {
7070 }
7171
7272 /// Creates a new one-dimensional array.
73- pub fn from_vec ( data : Vec < T > , lower_bound : isize ) -> Array < T > {
73+ pub fn from_vec ( data : Vec < T > , lower_bound : i32 ) -> Array < T > {
7474 Array {
7575 dims : vec ! [ Dimension {
76- len: data. len( ) ,
76+ len: data. len( ) as i32 ,
7777 lower_bound: lower_bound,
7878 } ] ,
7979 data : data,
@@ -84,7 +84,7 @@ impl<T> Array<T> {
8484 ///
8585 /// For example, the one dimensional array `[1, 2]` would turn into the
8686 /// two-dimensional array `[[1, 2]]`.
87- pub fn wrap ( & mut self , lower_bound : isize ) {
87+ pub fn wrap ( & mut self , lower_bound : i32 ) {
8888 self . dims . insert ( 0 ,
8989 Dimension {
9090 len : 1 ,
@@ -120,7 +120,7 @@ impl<T> Array<T> {
120120 & self . dims
121121 }
122122
123- fn shift_idx ( & self , indices : & [ isize ] ) -> usize {
123+ fn shift_idx ( & self , indices : & [ i32 ] ) -> i32 {
124124 assert_eq ! ( self . dims. len( ) , indices. len( ) ) ;
125125 self . dims
126126 . iter ( )
@@ -144,6 +144,12 @@ impl<T> Array<T> {
144144 pub fn iter_mut < ' a > ( & ' a mut self ) -> IterMut < ' a , T > {
145145 IterMut { inner : self . data . iter_mut ( ) }
146146 }
147+
148+ /// Returns the underlying data vector for this Array in the
149+ /// higher-dimensional equivalent of row-major order.
150+ pub fn into_inner ( self ) -> Vec < T > {
151+ self . data
152+ }
147153}
148154
149155/// A trait implemented by types that can index into an `Array`.
@@ -155,51 +161,51 @@ pub trait ArrayIndex {
155161 ///
156162 /// Panics if the value of `self` does not correspond to an in-bounds
157163 /// element of the `Array`.
158- fn index < T > ( & self , array : & Array < T > ) -> usize ;
164+ fn index < T > ( & self , array : & Array < T > ) -> i32 ;
159165}
160166
161- impl < ' a > ArrayIndex for & ' a [ isize ] {
162- fn index < T > ( & self , array : & Array < T > ) -> usize {
167+ impl < ' a > ArrayIndex for & ' a [ i32 ] {
168+ fn index < T > ( & self , array : & Array < T > ) -> i32 {
163169 array. shift_idx ( * self )
164170 }
165171}
166172
167- impl ArrayIndex for isize {
168- fn index < T > ( & self , array : & Array < T > ) -> usize {
169- let slice: & [ isize ] = & [ * self ] ;
173+ impl ArrayIndex for i32 {
174+ fn index < T > ( & self , array : & Array < T > ) -> i32 {
175+ let slice: & [ i32 ] = & [ * self ] ;
170176 ArrayIndex :: index ( & slice, array)
171177 }
172178}
173179
174180macro_rules! tuple_impl {
175181 ( $( $name: ident : $t: ty) ,+) => {
176182 impl ArrayIndex for ( $( $t, ) +) {
177- fn index<T >( & self , array: & Array <T >) -> usize {
183+ fn index<T >( & self , array: & Array <T >) -> i32 {
178184 let ( $( $name, ) +) = * self ;
179- let slice: & [ isize ] = & [ $( $name) ,+] ;
185+ let slice: & [ i32 ] = & [ $( $name) ,+] ;
180186 ArrayIndex :: index( & slice, array)
181187 }
182188 }
183189 }
184190}
185191
186- tuple_impl ! ( a: isize ) ;
187- tuple_impl ! ( a: isize , b: isize ) ;
188- tuple_impl ! ( a: isize , b: isize , c: isize ) ;
189- tuple_impl ! ( a: isize , b: isize , c: isize , d: isize ) ;
190- tuple_impl ! ( a: isize , b: isize , c: isize , d: isize , e: isize ) ;
191- tuple_impl ! ( a: isize , b: isize , c: isize , d: isize , e: isize , f: isize ) ;
192- tuple_impl ! ( a: isize , b: isize , c: isize , d: isize , e: isize , f: isize , g: isize ) ;
193- tuple_impl ! ( a: isize , b: isize , c: isize , d: isize , e: isize , f: isize , g: isize , h: isize ) ;
194- tuple_impl ! ( a: isize , b: isize , c: isize , d: isize , e: isize , f: isize , g: isize , h: isize , i: isize ) ;
192+ tuple_impl ! ( a: i32 ) ;
193+ tuple_impl ! ( a: i32 , b: i32 ) ;
194+ tuple_impl ! ( a: i32 , b: i32 , c: i32 ) ;
195+ tuple_impl ! ( a: i32 , b: i32 , c: i32 , d: i32 ) ;
196+ tuple_impl ! ( a: i32 , b: i32 , c: i32 , d: i32 , e: i32 ) ;
197+ tuple_impl ! ( a: i32 , b: i32 , c: i32 , d: i32 , e: i32 , f: i32 ) ;
198+ tuple_impl ! ( a: i32 , b: i32 , c: i32 , d: i32 , e: i32 , f: i32 , g: i32 ) ;
199+ tuple_impl ! ( a: i32 , b: i32 , c: i32 , d: i32 , e: i32 , f: i32 , g: i32 , h: i32 ) ;
200+ tuple_impl ! ( a: i32 , b: i32 , c: i32 , d: i32 , e: i32 , f: i32 , g: i32 , h: i32 , i: i32 ) ;
195201
196202/// Indexes into the `Array`, retrieving a reference to the contained
197203/// value.
198204///
199205/// Since `Array`s can be multi-dimensional, the `Index` trait is
200206/// implemented for a variety of index types. In the most generic case, a
201- /// `&[isize ]` can be used. In addition, a bare `isize ` as well as tuples
202- /// of up to 10 `isize ` values may be used for convenience.
207+ /// `&[i32 ]` can be used. In addition, a bare `i32 ` as well as tuples
208+ /// of up to 10 `i32 ` values may be used for convenience.
203209///
204210/// # Panics
205211///
@@ -222,14 +228,14 @@ impl<T, I: ArrayIndex> Index<I> for Array<T> {
222228 type Output = T ;
223229 fn index ( & self , idx : I ) -> & T {
224230 let idx = idx. index ( self ) ;
225- & self . data [ idx]
231+ & self . data [ idx as usize ]
226232 }
227233}
228234
229235impl < T , I : ArrayIndex > IndexMut < I > for Array < T > {
230236 fn index_mut ( & mut self , idx : I ) -> & mut T {
231237 let idx = idx. index ( self ) ;
232- & mut self . data [ idx]
238+ & mut self . data [ idx as usize ]
233239 }
234240}
235241
0 commit comments