]> git.lizzy.rs Git - rust.git/commitdiff
Upgrade implementation of StepBy<RangeInclusive<_>>.
authorkennytm <kennytm@gmail.com>
Fri, 22 Jun 2018 17:42:29 +0000 (01:42 +0800)
committerkennytm <kennytm@gmail.com>
Fri, 13 Jul 2018 01:53:37 +0000 (09:53 +0800)
src/libcore/iter/mod.rs

index 86b297557dddb3961e98fbe33d4549485b59b513..32134783516db8f9927c1ec57a7d8197f062870c 100644 (file)
@@ -787,17 +787,19 @@ impl<T> StepBySpecIterator for StepBy<ops::RangeInclusive<T>>
     #[inline]
     fn spec_next(&mut self) -> Option<Self::Item> {
         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)
         }
     }