cmp: add Ord+TotalOrd impls for Ordering itself
This commit is contained in:
parent
c47d80304e
commit
a3f40184bd
@ -65,13 +65,31 @@ totaleq_impl!(int)
|
||||
totaleq_impl!(uint)
|
||||
|
||||
#[deriving(Clone, Eq)]
|
||||
pub enum Ordering { Less, Equal, Greater }
|
||||
pub enum Ordering { Less = -1, Equal = 0, Greater = 1 }
|
||||
|
||||
/// Trait for types that form a total order
|
||||
pub trait TotalOrd: TotalEq {
|
||||
fn cmp(&self, other: &Self) -> Ordering;
|
||||
}
|
||||
|
||||
impl TotalOrd for Ordering {
|
||||
#[inline(always)]
|
||||
fn cmp(&self, other: &Ordering) -> Ordering {
|
||||
(*self as int).cmp(&(*other as int))
|
||||
}
|
||||
}
|
||||
|
||||
impl Ord for Ordering {
|
||||
#[inline(always)]
|
||||
fn lt(&self, other: &Ordering) -> bool { (*self as int) < (*other as int) }
|
||||
#[inline(always)]
|
||||
fn le(&self, other: &Ordering) -> bool { (*self as int) <= (*other as int) }
|
||||
#[inline(always)]
|
||||
fn gt(&self, other: &Ordering) -> bool { (*self as int) > (*other as int) }
|
||||
#[inline(always)]
|
||||
fn ge(&self, other: &Ordering) -> bool { (*self as int) >= (*other as int) }
|
||||
}
|
||||
|
||||
macro_rules! totalord_impl(
|
||||
($t:ty) => {
|
||||
impl TotalOrd for $t {
|
||||
@ -180,4 +198,10 @@ mod test {
|
||||
assert!(5.equals(&5));
|
||||
assert!(!2.equals(&17));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_ordering_order() {
|
||||
assert!(Less < Equal);
|
||||
assert_eq!(Greater.cmp(&Less), Greater);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user