From fc656262a905a50eff2be54a87295d2952d29106 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sat, 18 May 2013 04:48:22 -0400 Subject: [PATCH] iterator: use advance to implement FilterMapIterator --- src/libcore/iterator.rs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/libcore/iterator.rs b/src/libcore/iterator.rs index 0bf61b66f753..41f916f2d155 100644 --- a/src/libcore/iterator.rs +++ b/src/libcore/iterator.rs @@ -325,17 +325,13 @@ pub struct FilterMapIterator<'self, A, B, T> { impl<'self, A, B, T: Iterator> Iterator for FilterMapIterator<'self, A, B, T> { #[inline] fn next(&mut self) -> Option { - loop { - match self.iter.next() { - None => { return None; } - Some(a) => { - match (self.f)(a) { - Some(b) => { return Some(b); } - None => { loop; } - } - } + for self.iter.advance |x| { + match (self.f)(x) { + Some(y) => return Some(y), + None => () } } + None } }