From a051ba1dffa2648a9cd25d39f70fbb5089505762 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Wed, 3 Dec 2014 03:07:16 -0500 Subject: [PATCH] libcore: use unboxed closures in the fields of `FlatMap` --- src/libcore/iter.rs | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index 8a28988c2cbc..c0eae9294987 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -372,8 +372,10 @@ pub trait IteratorExt: Iterator { /// ``` #[inline] #[unstable = "waiting for unboxed closures"] - fn flat_map<'r, B, U: Iterator>(self, f: |A|: 'r -> U) - -> FlatMap<'r, A, Self, U> { + fn flat_map(self, f: F) -> FlatMap where + U: Iterator, + F: FnMut(A) -> U, + { FlatMap{iter: self, f: f, frontiter: None, backiter: None } } @@ -1864,15 +1866,19 @@ impl Iterator for Scan where /// #[must_use = "iterator adaptors are lazy and do nothing unless consumed"] #[unstable = "waiting for unboxed closures"] -pub struct FlatMap<'a, A, T, U> { - iter: T, - f: |A|: 'a -> U, +pub struct FlatMap where I: Iterator, U: Iterator, F: FnMut(A) -> U { + iter: I, + f: F, frontiter: Option, backiter: Option, } #[unstable = "trait is unstable"] -impl<'a, A, T: Iterator, B, U: Iterator> Iterator for FlatMap<'a, A, T, U> { +impl Iterator for FlatMap where + I: Iterator, + U: Iterator, + F: FnMut(A) -> U, +{ #[inline] fn next(&mut self) -> Option { loop { @@ -1901,10 +1907,11 @@ impl<'a, A, T: Iterator, B, U: Iterator> Iterator for FlatMap<'a, A, T, } #[unstable = "trait is unstable"] -impl<'a, - A, T: DoubleEndedIterator, - B, U: DoubleEndedIterator> DoubleEndedIterator - for FlatMap<'a, A, T, U> { +impl DoubleEndedIterator for FlatMap where + I: DoubleEndedIterator, + U: DoubleEndedIterator, + F: FnMut(A) -> U, +{ #[inline] fn next_back(&mut self) -> Option { loop {