about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrendan Zabarauskas <bjzaba@yahoo.com.au>2013-04-14 02:19:35 +1000
committerBrendan Zabarauskas <bjzaba@yahoo.com.au>2013-04-14 02:19:35 +1000
commitce6ee7bb041044c3e236be7aefae97931e596407 (patch)
tree32077b5a247e5a07c34e1deff7b62b0da50d2ddf /src
parentfde6995229ff1bf99fccbcfee8b55e27afdb11ec (diff)
downloadrust-ce6ee7bb041044c3e236be7aefae97931e596407.tar.gz
rust-ce6ee7bb041044c3e236be7aefae97931e596407.zip
Restore Num trait
This restores the trait that was lost in 216e85fadf465c25fe7bc4a9f06f8162ec12b552. It will eventually be broken up into a more fine-grained trait hierarchy in the future once a design can be agreed upon.
Diffstat (limited to 'src')
-rw-r--r--src/libcore/core.rc2
-rw-r--r--src/libcore/num/num.rs22
-rw-r--r--src/libcore/prelude.rs2
-rw-r--r--src/test/run-pass/trait-inheritance-num.rs2
-rw-r--r--src/test/run-pass/trait-inheritance-num1.rs2
-rw-r--r--src/test/run-pass/trait-inheritance-num2.rs2
-rw-r--r--src/test/run-pass/trait-inheritance-num3.rs2
-rw-r--r--src/test/run-pass/trait-inheritance-num5.rs2
8 files changed, 29 insertions, 7 deletions
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<Self>
+             + Add<Self,Self>
+             + Sub<Self,Self>
+             + Mul<Self,Self>
+             + Div<Self,Self>
+             + Modulo<Self,Self> {}
+
+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<Self> {}
 
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<T:NumExt>(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 {}