Rollup merge of #138945 - DaniPopes:override-partialord-bool, r=scottmcm
Override PartialOrd methods for bool I noticed that `PartialOrd` implementation for `bool` does not override the individual operator methods, unlike the other primitive types like `char` and integers. This commit extracts these `PartialOrd` overrides shared by the other primitive types into a macro and calls it on `bool` too. CC `@scottmcm` for our recent adventures in `PartialOrd` land
This commit is contained in:
commit
deb987b69d
1 changed files with 21 additions and 25 deletions
|
@ -1810,9 +1810,9 @@ mod impls {
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
impl PartialEq for $t {
|
impl PartialEq for $t {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn eq(&self, other: &$t) -> bool { (*self) == (*other) }
|
fn eq(&self, other: &Self) -> bool { *self == *other }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn ne(&self, other: &$t) -> bool { (*self) != (*other) }
|
fn ne(&self, other: &Self) -> bool { *self != *other }
|
||||||
}
|
}
|
||||||
)*)
|
)*)
|
||||||
}
|
}
|
||||||
|
@ -1842,8 +1842,18 @@ mod impls {
|
||||||
|
|
||||||
eq_impl! { () bool char usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
|
eq_impl! { () bool char usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
|
||||||
|
|
||||||
macro_rules! chaining_methods_impl {
|
#[rustfmt::skip]
|
||||||
($t:ty) => {
|
macro_rules! partial_ord_methods_primitive_impl {
|
||||||
|
() => {
|
||||||
|
#[inline(always)]
|
||||||
|
fn lt(&self, other: &Self) -> bool { *self < *other }
|
||||||
|
#[inline(always)]
|
||||||
|
fn le(&self, other: &Self) -> bool { *self <= *other }
|
||||||
|
#[inline(always)]
|
||||||
|
fn gt(&self, other: &Self) -> bool { *self > *other }
|
||||||
|
#[inline(always)]
|
||||||
|
fn ge(&self, other: &Self) -> bool { *self >= *other }
|
||||||
|
|
||||||
// These implementations are the same for `Ord` or `PartialOrd` types
|
// These implementations are the same for `Ord` or `PartialOrd` types
|
||||||
// because if either is NAN the `==` test will fail so we end up in
|
// because if either is NAN the `==` test will fail so we end up in
|
||||||
// the `Break` case and the comparison will correctly return `false`.
|
// the `Break` case and the comparison will correctly return `false`.
|
||||||
|
@ -1876,7 +1886,7 @@ mod impls {
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
impl PartialOrd for $t {
|
impl PartialOrd for $t {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn partial_cmp(&self, other: &$t) -> Option<Ordering> {
|
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
||||||
match (*self <= *other, *self >= *other) {
|
match (*self <= *other, *self >= *other) {
|
||||||
(false, false) => None,
|
(false, false) => None,
|
||||||
(false, true) => Some(Greater),
|
(false, true) => Some(Greater),
|
||||||
|
@ -1884,16 +1894,8 @@ mod impls {
|
||||||
(true, true) => Some(Equal),
|
(true, true) => Some(Equal),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline(always)]
|
|
||||||
fn lt(&self, other: &$t) -> bool { (*self) < (*other) }
|
|
||||||
#[inline(always)]
|
|
||||||
fn le(&self, other: &$t) -> bool { (*self) <= (*other) }
|
|
||||||
#[inline(always)]
|
|
||||||
fn ge(&self, other: &$t) -> bool { (*self) >= (*other) }
|
|
||||||
#[inline(always)]
|
|
||||||
fn gt(&self, other: &$t) -> bool { (*self) > (*other) }
|
|
||||||
|
|
||||||
chaining_methods_impl!($t);
|
partial_ord_methods_primitive_impl!();
|
||||||
}
|
}
|
||||||
)*)
|
)*)
|
||||||
}
|
}
|
||||||
|
@ -1912,6 +1914,8 @@ mod impls {
|
||||||
fn partial_cmp(&self, other: &bool) -> Option<Ordering> {
|
fn partial_cmp(&self, other: &bool) -> Option<Ordering> {
|
||||||
Some(self.cmp(other))
|
Some(self.cmp(other))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
partial_ord_methods_primitive_impl!();
|
||||||
}
|
}
|
||||||
|
|
||||||
partial_ord_impl! { f16 f32 f64 f128 }
|
partial_ord_impl! { f16 f32 f64 f128 }
|
||||||
|
@ -1921,25 +1925,17 @@ mod impls {
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
impl PartialOrd for $t {
|
impl PartialOrd for $t {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn partial_cmp(&self, other: &$t) -> Option<Ordering> {
|
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
||||||
Some(crate::intrinsics::three_way_compare(*self, *other))
|
Some(crate::intrinsics::three_way_compare(*self, *other))
|
||||||
}
|
}
|
||||||
#[inline(always)]
|
|
||||||
fn lt(&self, other: &$t) -> bool { (*self) < (*other) }
|
|
||||||
#[inline(always)]
|
|
||||||
fn le(&self, other: &$t) -> bool { (*self) <= (*other) }
|
|
||||||
#[inline(always)]
|
|
||||||
fn ge(&self, other: &$t) -> bool { (*self) >= (*other) }
|
|
||||||
#[inline(always)]
|
|
||||||
fn gt(&self, other: &$t) -> bool { (*self) > (*other) }
|
|
||||||
|
|
||||||
chaining_methods_impl!($t);
|
partial_ord_methods_primitive_impl!();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
impl Ord for $t {
|
impl Ord for $t {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn cmp(&self, other: &$t) -> Ordering {
|
fn cmp(&self, other: &Self) -> Ordering {
|
||||||
crate::intrinsics::three_way_compare(*self, *other)
|
crate::intrinsics::three_way_compare(*self, *other)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue