@@ -7,6 +7,7 @@ extern crate byteorder;
7
7
8
8
use std:: mem;
9
9
use std:: slice;
10
+ use std:: vec;
10
11
11
12
mod impls;
12
13
@@ -157,6 +158,26 @@ impl<T> ArrayBase<T> {
157
158
}
158
159
}
159
160
161
+ impl < T > IntoIterator for ArrayBase < T > {
162
+ type Item = T ;
163
+ type IntoIter = ArrayBaseIntoIter < T > ;
164
+
165
+ fn into_iter ( self ) -> ArrayBaseIntoIter < T > {
166
+ ArrayBaseIntoIter {
167
+ inner : self . data . into_iter ( )
168
+ }
169
+ }
170
+ }
171
+
172
+ impl < ' a , T > IntoIterator for & ' a ArrayBase < T > {
173
+ type Item = & ' a T ;
174
+ type IntoIter = slice:: Iter < ' a , T > ;
175
+
176
+ fn into_iter ( self ) -> slice:: Iter < ' a , T > {
177
+ self . values ( )
178
+ }
179
+ }
180
+
160
181
impl < T > Array < T > for ArrayBase < T > {
161
182
fn dimension_info < ' a > ( & ' a self ) -> & ' a [ DimensionInfo ] {
162
183
& * self . info
@@ -208,6 +229,26 @@ impl<T> InternalMutableArray<T> for ArrayBase<T> {
208
229
}
209
230
}
210
231
232
+ /// An iterator over values of an `ArrayBase` in the higher-dimensional
233
+ /// equivalent of row major order.
234
+ pub struct ArrayBaseIntoIter < T > {
235
+ inner : vec:: IntoIter < T > ,
236
+ }
237
+
238
+ impl < T > Iterator for ArrayBaseIntoIter < T > {
239
+ type Item = T ;
240
+
241
+ fn next ( & mut self ) -> Option < T > {
242
+ self . inner . next ( )
243
+ }
244
+ }
245
+
246
+ impl < T > DoubleEndedIterator for ArrayBaseIntoIter < T > {
247
+ fn next_back ( & mut self ) -> Option < T > {
248
+ self . inner . next_back ( )
249
+ }
250
+ }
251
+
211
252
enum ArrayParent < ' parent , T : ' static > {
212
253
Slice ( & ' parent ArraySlice < ' static , T > ) ,
213
254
MutSlice ( & ' parent MutArraySlice < ' static , T > ) ,
0 commit comments