diff options
| author | Simon Sapin <simon.sapin@exyr.org> | 2017-07-06 00:10:40 +0200 |
|---|---|---|
| committer | Simon Sapin <simon.sapin@exyr.org> | 2017-07-08 08:55:55 +0200 |
| commit | d1ec6c22d1895eb42fbf20bd9b577b6a721c6b5f (patch) | |
| tree | 59e135f2328d41c2b6467c361e3a87576eead4e1 /src/libcore | |
| parent | 4b2f40dfdf5ff2bcbcc8105246a8c32054c40cb7 (diff) | |
| download | rust-d1ec6c22d1895eb42fbf20bd9b577b6a721c6b5f.tar.gz rust-d1ec6c22d1895eb42fbf20bd9b577b6a721c6b5f.zip | |
Remove Step::steps_between, rename steps_between_by_one to steps_between
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/iter/range.rs | 61 |
1 files changed, 10 insertions, 51 deletions
diff --git a/src/libcore/iter/range.rs b/src/libcore/iter/range.rs index db3fc1155c3..4d6eca06db2 100644 --- a/src/libcore/iter/range.rs +++ b/src/libcore/iter/range.rs @@ -27,10 +27,7 @@ pub trait Step: PartialOrd + Sized { /// /// Returns `None` if it is not possible to calculate `steps_between` /// without overflow. - fn steps_between(start: &Self, end: &Self, by: &Self) -> Option<usize>; - - /// Same as `steps_between`, but with a `by` of 1 - fn steps_between_by_one(start: &Self, end: &Self) -> Option<usize>; + fn steps_between(start: &Self, end: &Self) -> Option<usize>; /// Replaces this step with `1`, returning itself fn replace_one(&mut self) -> Self; @@ -53,17 +50,10 @@ macro_rules! step_impl_unsigned { impl Step for $t { #[inline] #[allow(trivial_numeric_casts)] - fn steps_between(start: &$t, end: &$t, by: &$t) -> Option<usize> { - if *by == 0 { return None; } + fn steps_between(start: &$t, end: &$t) -> Option<usize> { if *start < *end { // Note: We assume $t <= usize here - let diff = (*end - *start) as usize; - let by = *by as usize; - if diff % by > 0 { - Some(diff / by + 1) - } else { - Some(diff / by) - } + Some((*end - *start) as usize) } else { Some(0) } @@ -88,11 +78,6 @@ macro_rules! step_impl_unsigned { fn sub_one(&self) -> Self { Sub::sub(*self, 1) } - - #[inline] - fn steps_between_by_one(start: &Self, end: &Self) -> Option<usize> { - Self::steps_between(start, end, &1) - } } )*) } @@ -104,30 +89,14 @@ macro_rules! step_impl_signed { impl Step for $t { #[inline] #[allow(trivial_numeric_casts)] - fn steps_between(start: &$t, end: &$t, by: &$t) -> Option<usize> { - if *by == 0 { return None; } - let diff: usize; - let by_u: usize; - if *by > 0 { - if *start >= *end { - return Some(0); - } + fn steps_between(start: &$t, end: &$t) -> Option<usize> { + if *start < *end { // Note: We assume $t <= isize here // Use .wrapping_sub and cast to usize to compute the // difference that may not fit inside the range of isize. - diff = (*end as isize).wrapping_sub(*start as isize) as usize; - by_u = *by as usize; - } else { - if *start <= *end { - return Some(0); - } - diff = (*start as isize).wrapping_sub(*end as isize) as usize; - by_u = (*by as isize).wrapping_mul(-1) as usize; - } - if diff % by_u > 0 { - Some(diff / by_u + 1) + Some((*end as isize).wrapping_sub(*start as isize) as usize) } else { - Some(diff / by_u) + Some(0) } } @@ -150,11 +119,6 @@ macro_rules! step_impl_signed { fn sub_one(&self) -> Self { Sub::sub(*self, 1) } - - #[inline] - fn steps_between_by_one(start: &Self, end: &Self) -> Option<usize> { - Self::steps_between(start, end, &1) - } } )*) } @@ -166,7 +130,7 @@ macro_rules! step_impl_no_between { issue = "42168")] impl Step for $t { #[inline] - fn steps_between(_a: &$t, _b: &$t, _by: &$t) -> Option<usize> { + fn steps_between(_start: &Self, _end: &Self) -> Option<usize> { None } @@ -189,11 +153,6 @@ macro_rules! step_impl_no_between { fn sub_one(&self) -> Self { Sub::sub(*self, 1) } - - #[inline] - fn steps_between_by_one(start: &Self, end: &Self) -> Option<usize> { - Self::steps_between(start, end, &1) - } } )*) } @@ -259,7 +218,7 @@ impl<A: Step> Iterator for ops::Range<A> { #[inline] fn size_hint(&self) -> (usize, Option<usize>) { - match Step::steps_between_by_one(&self.start, &self.end) { + match Step::steps_between(&self.start, &self.end) { Some(hint) => (hint, Some(hint)), None => (0, None) } @@ -344,7 +303,7 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> { return (0, Some(0)); } - match Step::steps_between_by_one(&self.start, &self.end) { + match Step::steps_between(&self.start, &self.end) { Some(hint) => (hint.saturating_add(1), hint.checked_add(1)), None => (0, None), } |
