Skip to content

Commit 46f6915

Browse files
committed
Override <Range as Iterator>::try_fold
1 parent 3e0cd6a commit 46f6915

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

src/libcore/iter/range.rs

+17
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,23 @@ impl<A: Step> Iterator for ops::Range<A> {
270270
fn max(mut self) -> Option<A> {
271271
self.next_back()
272272
}
273+
274+
#[inline]
275+
fn try_fold<B, F, R>(&mut self, init: B, mut f: F) -> R where
276+
Self: Sized, F: FnMut(B, Self::Item) -> R, R: Try<Ok=B>
277+
{
278+
let mut accum = init;
279+
if self.start >= self.end {
280+
return Try::from_ok(accum);
281+
}
282+
283+
while self.start < self.end {
284+
let n = self.start.add_one();
285+
accum = f(accum, mem::replace(&mut self.start, n))?;
286+
}
287+
288+
Try::from_ok(accum)
289+
}
273290
}
274291

275292
// These macros generate `ExactSizeIterator` impls for various range types.

0 commit comments

Comments
 (0)