Skip to content

Commit 01a55c3

Browse files
jedestepemberian
authored andcommitted
---
yaml --- r: 66299 b: refs/heads/master c: 4f7a742 h: refs/heads/master i: 66297: 2485439 66295: 38b0b06 v: v3
1 parent ed11d6b commit 01a55c3

File tree

2 files changed

+96
-1
lines changed

2 files changed

+96
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: f4621cab6859ee0f8ddacea0ece98e4a4c00d5a6
2+
refs/heads/master: 4f7a742a067dcd6e8dbcf1da2bbcf203147562cf
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 18e3db7392d2d0697b7e27d6d986139960144d85
55
refs/heads/try: 7b78b52e602bb3ea8174f9b2006bff3315f03ef9

trunk/src/libextra/deque.rs

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,101 @@ impl<T> Deque<T> {
153153
pub fn reserve_at_least(&mut self, n: uint) {
154154
vec::reserve_at_least(&mut self.elts, n);
155155
}
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+
}
156251
}
157252

158253
/// Grow is only called on full elts, so nelts is also len(elts), unlike

0 commit comments

Comments
 (0)