From b6ea93e46410cccf8d115e57283d1df5968dd0f2 Mon Sep 17 00:00:00 2001 From: kennytm Date: Sat, 23 Jun 2018 01:42:29 +0800 Subject: [PATCH] Upgrade implementation of StepBy>. --- src/libcore/iter/mod.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libcore/iter/mod.rs b/src/libcore/iter/mod.rs index 86b297557dd..32134783516 100644 --- a/src/libcore/iter/mod.rs +++ b/src/libcore/iter/mod.rs @@ -787,17 +787,19 @@ impl StepBySpecIterator for StepBy> #[inline] fn spec_next(&mut self) -> Option { self.first_take = false; - if !(self.iter.start <= self.iter.end) { + if self.iter.is_empty() { + self.iter.is_iterating = Some(false); return None; } // add 1 to self.step to get original step size back // it was decremented for the general case on construction if let Some(n) = self.iter.start.add_usize(self.step+1) { + self.iter.is_iterating = Some(n <= self.iter.end); let next = mem::replace(&mut self.iter.start, n); Some(next) } else { - let last = self.iter.start.replace_one(); - self.iter.end.replace_zero(); + let last = self.iter.start.clone(); + self.iter.is_iterating = Some(false); Some(last) } } -- 2.44.0