diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 3368f6df870..41db07ca34c 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -99,7 +99,7 @@ pub use vec::{OwnedVector, OwnedCopyableVector}; pub use iter::{BaseIter, ExtendedIter, EqIter, CopyableIter}; pub use iter::{CopyableOrderedIter, CopyableNonstrictIter, Times}; -pub use num::NumCast; +pub use num::{Num, NumCast}; pub use ptr::Ptr; pub use to_str::ToStr; pub use clone::Clone; diff --git a/src/libcore/num/num.rs b/src/libcore/num/num.rs index d200a68c400..333c7ce02b2 100644 --- a/src/libcore/num/num.rs +++ b/src/libcore/num/num.rs @@ -16,6 +16,28 @@ use kinds::Copy; pub mod strconv; +pub trait Num: Eq + Zero + One + + Neg + + Add + + Sub + + Mul + + Div + + Modulo {} + +impl Num for u8 {} +impl Num for u16 {} +impl Num for u32 {} +impl Num for u64 {} +impl Num for uint {} +impl Num for i8 {} +impl Num for i16 {} +impl Num for i32 {} +impl Num for i64 {} +impl Num for int {} +impl Num for f32 {} +impl Num for f64 {} +impl Num for float {} + pub trait IntConvertible { fn to_int(&self) -> int; fn from_int(n: int) -> Self; diff --git a/src/libcore/prelude.rs b/src/libcore/prelude.rs index 9c3bf04b2a8..e148493ca45 100644 --- a/src/libcore/prelude.rs +++ b/src/libcore/prelude.rs @@ -34,7 +34,7 @@ pub use hash::Hash; pub use iter::{BaseIter, ReverseIter, MutableIter, ExtendedIter, EqIter}; pub use iter::{CopyableIter, CopyableOrderedIter, CopyableNonstrictIter}; pub use iter::Times; -pub use num::NumCast; +pub use num::{Num, NumCast}; pub use path::GenericPath; pub use path::Path; pub use path::PosixPath; diff --git a/src/test/run-pass/trait-inheritance-num.rs b/src/test/run-pass/trait-inheritance-num.rs index b800ffefeb6..0fb2a6b2e72 100644 --- a/src/test/run-pass/trait-inheritance-num.rs +++ b/src/test/run-pass/trait-inheritance-num.rs @@ -16,7 +16,7 @@ use core::cmp::{Eq, Ord}; use core::num::NumCast::from; use std::cmp::FuzzyEq; -pub trait NumExt: NumCast + Eq + Ord {} +pub trait NumExt: Num + NumCast + Eq + Ord {} pub trait FloatExt: NumExt + FuzzyEq {} diff --git a/src/test/run-pass/trait-inheritance-num1.rs b/src/test/run-pass/trait-inheritance-num1.rs index 07b9772af29..d580b99012f 100644 --- a/src/test/run-pass/trait-inheritance-num1.rs +++ b/src/test/run-pass/trait-inheritance-num1.rs @@ -11,7 +11,7 @@ use core::cmp::Ord; use core::num::NumCast::from; -pub trait NumExt: NumCast + Ord { } +pub trait NumExt: Num + NumCast + Ord { } fn greater_than_one(n: &T) -> bool { *n > from(1) diff --git a/src/test/run-pass/trait-inheritance-num2.rs b/src/test/run-pass/trait-inheritance-num2.rs index 66d7ee96bb2..b40f647814f 100644 --- a/src/test/run-pass/trait-inheritance-num2.rs +++ b/src/test/run-pass/trait-inheritance-num2.rs @@ -38,7 +38,7 @@ impl TypeExt for f64 {} impl TypeExt for float {} -pub trait NumExt: TypeExt + Eq + Ord + NumCast {} +pub trait NumExt: TypeExt + Eq + Ord + Num + NumCast {} impl NumExt for u8 {} impl NumExt for u16 {} diff --git a/src/test/run-pass/trait-inheritance-num3.rs b/src/test/run-pass/trait-inheritance-num3.rs index 67861709e76..5f1fef80ef2 100644 --- a/src/test/run-pass/trait-inheritance-num3.rs +++ b/src/test/run-pass/trait-inheritance-num3.rs @@ -11,7 +11,7 @@ use core::cmp::{Eq, Ord}; use core::num::NumCast::from; -pub trait NumExt: Eq + Ord + NumCast {} +pub trait NumExt: Eq + Ord + Num + NumCast {} impl NumExt for f32 {} diff --git a/src/test/run-pass/trait-inheritance-num5.rs b/src/test/run-pass/trait-inheritance-num5.rs index 2efe5b23eb5..02cc9a3d221 100644 --- a/src/test/run-pass/trait-inheritance-num5.rs +++ b/src/test/run-pass/trait-inheritance-num5.rs @@ -11,7 +11,7 @@ use core::cmp::{Eq, Ord}; use core::num::NumCast::from; -pub trait NumExt: Eq + NumCast {} +pub trait NumExt: Eq + Num + NumCast {} impl NumExt for f32 {} impl NumExt for int {}