Skip to content

Commit e8102e7

Browse files
committed
core: Add a Zero and One trait to num
I believe these are the last traits we need in order to start grouping our numerical types into mathematical groups and rings.
1 parent 8554d5e commit e8102e7

File tree

6 files changed

+48
-0
lines changed

6 files changed

+48
-0
lines changed

src/libcore/f32.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,14 @@ impl f32: num::Num {
174174
static pure fn from_int(n: int) -> f32 { return n as f32; }
175175
}
176176

177+
impl f32: num::Zero {
178+
static pure fn zero() -> f32 { 0.0 }
179+
}
180+
181+
impl f32: num::One {
182+
static pure fn one() -> f32 { 1.0 }
183+
}
184+
177185
//
178186
// Local Variables:
179187
// mode: rust

src/libcore/f64.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,14 @@ impl f64: num::Num {
193193
static pure fn from_int(n: int) -> f64 { return n as f64; }
194194
}
195195

196+
impl f64: num::Zero {
197+
static pure fn zero() -> f64 { 0.0 }
198+
}
199+
200+
impl f64: num::One {
201+
static pure fn one() -> f64 { 1.0 }
202+
}
203+
196204
//
197205
// Local Variables:
198206
// mode: rust

src/libcore/float.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,14 @@ impl float: num::Num {
443443
static pure fn from_int(&self, n: int) -> float { return n as float; }
444444
}
445445

446+
impl float: num::Zero {
447+
static pure fn zero() -> float { 0.0 }
448+
}
449+
450+
impl float: num::One {
451+
static pure fn one() -> float { 1.0 }
452+
}
453+
446454
#[test]
447455
pub fn test_from_str() {
448456
assert from_str(~"3") == Some(3.);

src/libcore/int-template.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,14 @@ impl T: num::Num {
9191
static pure fn from_int(n: int) -> T { return n as T; }
9292
}
9393

94+
impl T: num::Zero {
95+
static pure fn zero() -> T { 0 }
96+
}
97+
98+
impl T: num::One {
99+
static pure fn one() -> T { 1 }
100+
}
101+
94102
impl T: iter::Times {
95103
#[inline(always)]
96104
#[doc = "A convenience form for basic iteration. Given a variable `x` \

src/libcore/num.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,11 @@ pub trait Num {
2222
pure fn to_int(&self) -> int;
2323
static pure fn from_int(n: int) -> self;
2424
}
25+
26+
pub trait Zero {
27+
static pure fn zero() -> self;
28+
}
29+
30+
pub trait One {
31+
static pure fn one() -> self;
32+
}

src/libcore/uint-template.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,14 @@ impl T: num::Num {
8585
static pure fn from_int(n: int) -> T { return n as T; }
8686
}
8787

88+
impl T: num::Zero {
89+
static pure fn zero() -> T { 0 }
90+
}
91+
92+
impl T: num::One {
93+
static pure fn one() -> T { 1 }
94+
}
95+
8896
impl T: iter::Times {
8997
#[inline(always)]
9098
#[doc = "A convenience form for basic iteration. Given a variable `x` \

0 commit comments

Comments
 (0)