1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*!
Typenum!
*/
use std::cmp::{Ordering};

pub mod consts;
pub mod bit;
pub mod uint;
pub mod int;
pub mod __private;

/// Only things that aren't zero should impl this.
pub trait NonZero {}

pub trait Same<Rhs = Self> {
    /// `Output` should always be `Self`
    type Output;
}

pub trait Pow<Rhs = Self> {
    type Output;
}

pub trait Ord {
    fn to_ordering() -> Ordering;
}

pub struct Greater;
pub struct Less;
pub struct Equal;

impl Ord for Greater {
    fn to_ordering() -> Ordering { Ordering::Greater }
}
impl Ord for Less {
    fn to_ordering() -> Ordering { Ordering::Less }
}
impl Ord for Equal {
    fn to_ordering() -> Ordering { Ordering::Equal }
}

/// Compares `Self` and `Rhs`. Should only ever return one of `Greater`, `Less`, or `Equal`.
pub trait Cmp<Rhs = Self> {
    type Output;
}

/// Gives the size of a type number in bits as a `UInt`
pub trait SizeOf {
    type Output;
}