From ce6ee7bb041044c3e236be7aefae97931e596407 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Sun, 14 Apr 2013 02:19:35 +1000 Subject: [PATCH] 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. --- src/libcore/core.rc | 2 +- src/libcore/num/num.rs | 22 +++++++++++++++++++++ src/libcore/prelude.rs | 2 +- src/test/run-pass/trait-inheritance-num.rs | 2 +- src/test/run-pass/trait-inheritance-num1.rs | 2 +- src/test/run-pass/trait-inheritance-num2.rs | 2 +- src/test/run-pass/trait-inheritance-num3.rs | 2 +- src/test/run-pass/trait-inheritance-num5.rs | 2 +- 8 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 3368f6df8709..41db07ca34c5 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 d200a68c4004..333c7ce02b28 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 9c3bf04b2a8f..e148493ca451 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 b800ffefeb69..0fb2a6b2e724 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 07b9772af297..d580b99012fa 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 66d7ee96bb25..b40f647814f0 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 67861709e76f..5f1fef80ef20 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 2efe5b23eb57..02cc9a3d221f 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 {}