Remove redundant Ord method impls.

Basically, generic containers should not use the default methods since a
type of elements may not guarantees total order. str could use them
since u8's Ord guarantees total order. Floating point numbers are also
broken with the default methods because of NaN. Thanks for @thestinger.

Timespec also guarantees total order AIUI. I'm unsure whether
extra::semver::Identifier does so I left it alone. Proof needed.

Signed-off-by: OGINO Masanori <masanori.ogino@gmail.com>
This commit is contained in:
OGINO Masanori 2013-08-08 10:03:34 +09:00
parent 7a1b61d631
commit b4d6ae5bb8
8 changed files with 3 additions and 57 deletions

View File

@ -57,9 +57,6 @@ impl Ord for Timespec {
self.sec < other.sec ||
(self.sec == other.sec && self.nsec < other.nsec)
}
fn le(&self, other: &Timespec) -> bool { !other.lt(self) }
fn ge(&self, other: &Timespec) -> bool { !self.lt(other) }
fn gt(&self, other: &Timespec) -> bool { !self.le(other) }
}
/**

View File

@ -284,12 +284,6 @@ impl Not<bool> for bool {
impl Ord for bool {
#[inline]
fn lt(&self, other: &bool) -> bool { to_bit(*self) < to_bit(*other) }
#[inline]
fn le(&self, other: &bool) -> bool { to_bit(*self) <= to_bit(*other) }
#[inline]
fn gt(&self, other: &bool) -> bool { to_bit(*self) > to_bit(*other) }
#[inline]
fn ge(&self, other: &bool) -> bool { to_bit(*self) >= to_bit(*other) }
}
#[cfg(not(test))]

View File

@ -322,12 +322,6 @@ impl Eq for char {
impl Ord for char {
#[inline]
fn lt(&self, other: &char) -> bool { *self < *other }
#[inline]
fn le(&self, other: &char) -> bool { *self <= *other }
#[inline]
fn gt(&self, other: &char) -> bool { *self > *other }
#[inline]
fn ge(&self, other: &char) -> bool { *self >= *other }
}
#[cfg(not(test))]

View File

@ -101,12 +101,6 @@ impl TotalOrd for Ordering {
impl Ord for Ordering {
#[inline]
fn lt(&self, other: &Ordering) -> bool { (*self as int) < (*other as int) }
#[inline]
fn le(&self, other: &Ordering) -> bool { (*self as int) <= (*other as int) }
#[inline]
fn gt(&self, other: &Ordering) -> bool { (*self as int) > (*other as int) }
#[inline]
fn ge(&self, other: &Ordering) -> bool { (*self as int) >= (*other as int) }
}
macro_rules! totalord_impl(
@ -174,8 +168,11 @@ pub fn lexical_ordering(o1: Ordering, o2: Ordering) -> Ordering {
#[lang="ord"]
pub trait Ord {
fn lt(&self, other: &Self) -> bool;
#[inline]
fn le(&self, other: &Self) -> bool { !other.lt(self) }
#[inline]
fn gt(&self, other: &Self) -> bool { other.lt(self) }
#[inline]
fn ge(&self, other: &Self) -> bool { !self.lt(other) }
}

View File

@ -33,12 +33,6 @@ impl Eq for () {
impl Ord for () {
#[inline]
fn lt(&self, _other: &()) -> bool { false }
#[inline]
fn le(&self, _other: &()) -> bool { true }
#[inline]
fn ge(&self, _other: &()) -> bool { true }
#[inline]
fn gt(&self, _other: &()) -> bool { false }
}
#[cfg(not(test))]

View File

@ -130,12 +130,6 @@ impl Num for $T {}
impl Ord for $T {
#[inline]
fn lt(&self, other: &$T) -> bool { return (*self) < (*other); }
#[inline]
fn le(&self, other: &$T) -> bool { return (*self) <= (*other); }
#[inline]
fn ge(&self, other: &$T) -> bool { return (*self) >= (*other); }
#[inline]
fn gt(&self, other: &$T) -> bool { return (*self) > (*other); }
}
#[cfg(not(test))]

View File

@ -131,12 +131,6 @@ impl Num for $T {}
impl Ord for $T {
#[inline]
fn lt(&self, other: &$T) -> bool { (*self) < (*other) }
#[inline]
fn le(&self, other: &$T) -> bool { (*self) <= (*other) }
#[inline]
fn ge(&self, other: &$T) -> bool { (*self) >= (*other) }
#[inline]
fn gt(&self, other: &$T) -> bool { (*self) > (*other) }
}
#[cfg(not(test))]

View File

@ -1050,34 +1050,16 @@ pub mod traits {
impl<'self> Ord for &'self str {
#[inline]
fn lt(&self, other: & &'self str) -> bool { self.cmp(other) == Less }
#[inline]
fn le(&self, other: & &'self str) -> bool { self.cmp(other) != Greater }
#[inline]
fn ge(&self, other: & &'self str) -> bool { self.cmp(other) != Less }
#[inline]
fn gt(&self, other: & &'self str) -> bool { self.cmp(other) == Greater }
}
impl Ord for ~str {
#[inline]
fn lt(&self, other: &~str) -> bool { self.cmp(other) == Less }
#[inline]
fn le(&self, other: &~str) -> bool { self.cmp(other) != Greater }
#[inline]
fn ge(&self, other: &~str) -> bool { self.cmp(other) != Less }
#[inline]
fn gt(&self, other: &~str) -> bool { self.cmp(other) == Greater }
}
impl Ord for @str {
#[inline]
fn lt(&self, other: &@str) -> bool { self.cmp(other) == Less }
#[inline]
fn le(&self, other: &@str) -> bool { self.cmp(other) != Greater }
#[inline]
fn ge(&self, other: &@str) -> bool { self.cmp(other) != Less }
#[inline]
fn gt(&self, other: &@str) -> bool { self.cmp(other) == Greater }
}
impl<'self, S: Str> Equiv<S> for &'self str {