@@ -153,6 +153,101 @@ impl<T> Deque<T> {
153
153
pub fn reserve_at_least ( & mut self , n : uint ) {
154
154
vec:: reserve_at_least ( & mut self . elts , n) ;
155
155
}
156
+
157
+ /// Front-to-back iterator.
158
+ pub fn iter < ' a > ( & ' a self ) -> DequeIterator < ' a , T > {
159
+ DequeIterator { iter : self . elts . iter ( ) }
160
+ }
161
+
162
+ /// Front-to-back iterator which returns mutable values.
163
+ pub fn mut_iter < ' a > ( & ' a mut self ) -> DequeMutIterator < ' a , T > {
164
+ DequeMutIterator { iter : self . elts . mut_iter ( ) }
165
+ }
166
+
167
+ /// Back-to-front iterator.
168
+ pub fn rev_iter < ' a > ( & ' a self ) -> DequeRevIterator < ' a , T > {
169
+ DequeRevIterator { iter : self . elts . rev_iter ( ) }
170
+ }
171
+
172
+ /// Back-to-front iterator which returns mutable values.
173
+ pub fn mut_rev_iter < ' a > ( & ' a mut self ) -> DequeMutRevIterator < ' a , T > {
174
+ DequeMutRevIterator { iter : self . elts . mut_rev_iter ( ) }
175
+ }
176
+ }
177
+
178
+ /// Deque iterator
179
+ pub struct DequeIterator < ' self , T > {
180
+ priv iter : vec:: VecIterator < ' self , Option < T > >
181
+ }
182
+
183
+ /// Deque reverse iterator
184
+ pub struct DequeRevIterator < ' self , T > {
185
+ priv iter : vec:: VecRevIterator < ' self , Option < T > >
186
+ }
187
+ /// Deque mutable iterator
188
+ pub struct DequeMutIterator < ' self , T > {
189
+ priv iter : vec:: VecMutIterator < ' self , Option < T > >
190
+ }
191
+
192
+ /// Deque mutable reverse iterator
193
+ pub struct DequeMutRevIterator < ' self , T > {
194
+ priv iter : vec:: VecMutRevIterator < ' self , Option < T > >
195
+ }
196
+
197
+ /// Iterator visiting elements of the deque from front to back
198
+ impl < ' self , T > Iterator < & ' self T > for DequeIterator < ' self , T > {
199
+ #[ inline]
200
+ fn next ( & mut self ) -> Option < & ' self T > {
201
+ for self . iter. advance |elt| {
202
+ match elt {
203
+ & Some ( ref e) => return Some ( e) ,
204
+ & None => { } ,
205
+ }
206
+ }
207
+ None
208
+ }
209
+ }
210
+
211
+ /// Iterator visiting elements of the deque mutably from front to back
212
+ impl < ' self , T > Iterator < & ' self mut T > for DequeMutIterator < ' self , T > {
213
+ #[ inline]
214
+ fn next ( & mut self ) -> Option < & ' self mut T > {
215
+ for self . iter. advance |elt| {
216
+ match elt {
217
+ & Some ( ref mut e) => return Some ( e) ,
218
+ & None => { } ,
219
+ }
220
+ }
221
+ None
222
+ }
223
+ }
224
+
225
+ /// Iterator visiting elements of the deque from back to front
226
+ impl < ' self , T > Iterator < & ' self T > for DequeRevIterator < ' self , T > {
227
+ #[ inline]
228
+ fn next ( & mut self ) -> Option < & ' self T > {
229
+ for self . iter. advance |elt| {
230
+ match elt {
231
+ & Some ( ref e) => return Some ( e) ,
232
+ & None => { } ,
233
+ }
234
+ }
235
+ None
236
+ }
237
+ }
238
+
239
+ /// Iterator visiting elements of the deque mutably from back to front
240
+ impl < ' self , T > Iterator < & ' self mut T > for DequeMutRevIterator < ' self , T > {
241
+ #[ inline]
242
+ fn next ( & mut self ) -> Option < & ' self mut T > {
243
+ for self . iter. advance |elt| {
244
+ match elt {
245
+ & Some ( ref mut e) => return Some ( e) ,
246
+ & None => { } ,
247
+ }
248
+ }
249
+ None
250
+ }
156
251
}
157
252
158
253
/// Grow is only called on full elts, so nelts is also len(elts), unlike
0 commit comments