diff options
| author | Alex Burka <aburka@seas.upenn.edu> | 2016-03-04 18:57:43 -0500 |
|---|---|---|
| committer | Alex Burka <aburka@seas.upenn.edu> | 2016-03-04 18:57:43 -0500 |
| commit | 430b3e19606cf76288a383b89428107756d4aa61 (patch) | |
| tree | 52d8d22e59ea92784314871900ec0675e52fe3df | |
| parent | a928c8360c14660c6eeb4bfa29d6ad54ac0029f4 (diff) | |
| download | rust-430b3e19606cf76288a383b89428107756d4aa61.tar.gz rust-430b3e19606cf76288a383b89428107756d4aa61.zip | |
remove under/overflow from next_back/next
| -rw-r--r-- | src/libcore/iter.rs | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index 64933d0acf5..e37e52c6dc3 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -4605,8 +4605,10 @@ impl<A: Step + One> Iterator for ops::RangeInclusive<A> where Empty { .. } => (None, None), // empty iterators yield no values NonEmpty { ref mut start, ref mut end } => { - let one = A::one(); - if start <= end { + if start == end { + (Some(mem::replace(end, A::one())), Some(mem::replace(start, A::one()))) + } else if start < end { + let one = A::one(); let mut n = &*start + &one; mem::swap(&mut n, start); @@ -4620,7 +4622,7 @@ impl<A: Step + One> Iterator for ops::RangeInclusive<A> where // ^ are we done yet? Some(n)) // < the value to output } else { - (Some(mem::replace(start, one)), None) + (Some(mem::replace(start, A::one())), None) } } }; @@ -4664,15 +4666,17 @@ impl<A: Step + One> DoubleEndedIterator for ops::RangeInclusive<A> where Empty { .. } => return None, NonEmpty { ref mut start, ref mut end } => { - let one = A::one(); - if start <= end { + if start == end { + (Some(mem::replace(start, A::one())), Some(mem::replace(end, A::one()))) + } else if start < end { + let one = A::one(); let mut n = &*end - &one; mem::swap(&mut n, end); (if n == *start { Some(mem::replace(start, one)) } else { None }, Some(n)) } else { - (Some(mem::replace(end, one)), None) + (Some(mem::replace(end, A::one())), None) } } }; |
