@@ -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.
6262pub fn from_parts ( data : Vec < T > , dimensions : Vec < Dimension > ) -> Array < T > {
6363assert ! ( ( 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" ) ;
6666Array {
6767dims : 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 > {
7474Array {
7575dims : vec ! [ Dimension {
76- len: data. len( ) ,
76+ len: data. len( ) as i32 ,
7777 lower_bound: lower_bound,
7878} ] ,
7979data : 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 ) {
8888self . dims . insert ( 0 ,
8989Dimension {
9090len : 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 {
124124assert_eq ! ( self . dims. len( ) , indices. len( ) ) ;
125125self . dims
126126. iter ( )
@@ -144,6 +144,12 @@ impl<T> Array<T>{
144144pub fn iter_mut < ' a > ( & ' a mut self ) -> IterMut < ' a , T > {
145145IterMut { 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 ] ;
170176ArrayIndex :: index ( & slice, array)
171177}
172178}
173179
174180macro_rules! tuple_impl {
175181( $( $name: ident : $t: ty) ,+) => {
176182impl ArrayIndex for ( $( $t, ) +) {
177- fn index<T >( & self , array: & Array <T >) -> usize {
183+ fn index<T >( & self , array: & Array <T >) -> i32 {
178184let ( $( $name, ) +) = * self ;
179- let slice: & [ isize ] = & [ $( $name) ,+] ;
185+ let slice: & [ i32 ] = & [ $( $name) ,+] ;
180186ArrayIndex :: 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>{
222228type Output = T ;
223229fn index ( & self , idx : I ) -> & T {
224230let idx = idx. index ( self ) ;
225- & self . data [ idx]
231+ & self . data [ idxas usize ]
226232}
227233}
228234
229235impl < T , I : ArrayIndex > IndexMut < I > for Array < T > {
230236fn index_mut ( & mut self , idx : I ) -> & mut T {
231237let idx = idx. index ( self ) ;
232- & mut self . data [ idx]
238+ & mut self . data [ idxas usize ]
233239}
234240}
235241
0 commit comments