Add one and zero static methods

This commit is contained in:
Brendan Zabarauskas 2012-11-14 15:17:35 +10:00
parent bfe1a272ec
commit 5f8b30d993

View file

@ -8,11 +8,14 @@ trait NumCast {
static pure fn from<T:NumCast>(n: T) -> self;
pure fn cast<T:NumCast>() -> T;
static pure fn zero() -> self;
static pure fn one() -> self;
pure fn to_u8() -> u8;
pure fn to_u16() -> u16;
pure fn to_u32() -> u32;
pure fn to_u64() -> u64;
pure fn to_uint() -> uint;
pure fn to_uint() -> uint;
pure fn to_i8() -> i8;
pure fn to_i16() -> i16;
@ -32,6 +35,9 @@ pub impl u8: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> u8 { move n.to_u8() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> u8 { 0u8 }
#[inline(always)] static pure fn one() -> u8 { 1u8 }
#[inline(always)] pure fn to_u8() -> u8 { self }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }
@ -53,6 +59,9 @@ pub impl u16: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> u16 { move n.to_u16() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> u16 { 0u16 }
#[inline(always)] static pure fn one() -> u16 { 1u16 }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }
@ -74,6 +83,9 @@ pub impl u32: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> u32 { move n.to_u32() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> u32 { 0u32 }
#[inline(always)] static pure fn one() -> u32 { 1u32 }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self }
@ -95,6 +107,9 @@ pub impl u64: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> u64 { move n.to_u64() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> u64 { 0u64 }
#[inline(always)] static pure fn one() -> u64 { 1u64 }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }
@ -116,6 +131,9 @@ pub impl uint: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> uint { move n.to_uint() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> uint { 0u }
#[inline(always)] static pure fn one() -> uint { 1u }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }
@ -137,6 +155,9 @@ pub impl i8: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> i8 { move n.to_i8() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> i8 { 0i8 }
#[inline(always)] static pure fn one() -> i8 { 1i8 }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }
@ -158,6 +179,9 @@ pub impl i16: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> i16 { move n.to_i16() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> i16 { 0i16 }
#[inline(always)] static pure fn one() -> i16 { 1i16 }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }
@ -179,6 +203,9 @@ pub impl i32: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> i32 { move n.to_i32() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> i32 { 0i32 }
#[inline(always)] static pure fn one() -> i32 { 1i32 }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }
@ -200,6 +227,9 @@ pub impl i64: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> i64 { move n.to_i64() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> i64 { 0i64 }
#[inline(always)] static pure fn one() -> i64 { 1i64 }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }
@ -221,6 +251,9 @@ pub impl int: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> int { move n.to_int() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> int { 0 }
#[inline(always)] static pure fn one() -> int { 1 }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }
@ -242,6 +275,9 @@ pub impl f32: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> f32 { move n.to_f32() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> f32 { 0f32 }
#[inline(always)] static pure fn one() -> f32 { 1f32 }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }
@ -263,6 +299,9 @@ pub impl f64: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> f64 { move n.to_f64() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> f64 { 0f64 }
#[inline(always)] static pure fn one() -> f64 { 1f64 }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }
@ -284,6 +323,9 @@ pub impl float: NumCast {
#[inline(always)] static pure fn from<T:NumCast>(n: T) -> float { move n.to_float() }
#[inline(always)] pure fn cast<T:NumCast>() -> T { move from(self) }
#[inline(always)] static pure fn zero() -> float { 0f }
#[inline(always)] static pure fn one() -> float { 1f }
#[inline(always)] pure fn to_u8() -> u8 { self as u8 }
#[inline(always)] pure fn to_u16() -> u16 { self as u16 }
#[inline(always)] pure fn to_u32() -> u32 { self as u32 }