cmp: add Ord+TotalOrd impls for Ordering itself

This commit is contained in:
Daniel Micay 2013-04-07 00:49:10 -04:00
parent c47d80304e
commit a3f40184bd

View File

@ -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);
}
}