Remove cast method

This commit is contained in:
Brendan Zabarauskas 2012-12-08 21:11:08 +10:00
parent 2e0521f4e5
commit 5d7b3cfba4

View file

@ -7,10 +7,8 @@
* the `cast` function everywhere. * the `cast` function everywhere.
*/ */
pub trait NumConv { pub trait NumConv {
// TODO: the plan is to remove the `from` and `cast` methods and use the // TODO: remove and use `num::kinds::Number::from` instead
// `num::kinds::Number::from<T:Number(n: T)` method instead
static pure fn from<T:NumConv>(n: T) -> self; static pure fn from<T:NumConv>(n: T) -> self;
pure fn cast<T:NumConv>(&self) -> T;
pure fn to_u8(&self) -> u8; pure fn to_u8(&self) -> u8;
pure fn to_u16(&self) -> u16; pure fn to_u16(&self) -> u16;
@ -30,11 +28,10 @@ pub trait NumConv {
} }
#[inline(always)] #[inline(always)]
pub pure fn cast<T:NumConv, U:NumConv>(n: T) -> U { n.cast() } pub pure fn cast<T:NumConv, U:NumConv>(n: T) -> U { NumConv::from(move n) }
pub impl u8: NumConv { pub impl u8: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> u8 { n.to_u8() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> u8 { n.to_u8() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self } #[inline(always)] pure fn to_u8(&self) -> u8 { *self }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }
@ -55,7 +52,6 @@ pub impl u8: NumConv {
pub impl u16: NumConv { pub impl u16: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> u16 { n.to_u16() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> u16 { n.to_u16() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self } #[inline(always)] pure fn to_u16(&self) -> u16 { *self }
@ -76,7 +72,6 @@ pub impl u16: NumConv {
pub impl u32: NumConv { pub impl u32: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> u32 { n.to_u32() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> u32 { n.to_u32() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }
@ -97,7 +92,6 @@ pub impl u32: NumConv {
pub impl u64: NumConv { pub impl u64: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> u64 { n.to_u64() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> u64 { n.to_u64() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }
@ -118,7 +112,6 @@ pub impl u64: NumConv {
pub impl uint: NumConv { pub impl uint: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> uint { n.to_uint() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> uint { n.to_uint() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }
@ -139,7 +132,6 @@ pub impl uint: NumConv {
pub impl i8: NumConv { pub impl i8: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> i8 { n.to_i8() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> i8 { n.to_i8() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }
@ -160,7 +152,6 @@ pub impl i8: NumConv {
pub impl i16: NumConv { pub impl i16: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> i16 { n.to_i16() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> i16 { n.to_i16() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }
@ -181,7 +172,6 @@ pub impl i16: NumConv {
pub impl i32: NumConv { pub impl i32: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> i32 { n.to_i32() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> i32 { n.to_i32() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }
@ -202,7 +192,6 @@ pub impl i32: NumConv {
pub impl i64: NumConv { pub impl i64: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> i64 { n.to_i64() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> i64 { n.to_i64() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }
@ -223,7 +212,6 @@ pub impl i64: NumConv {
pub impl int: NumConv { pub impl int: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> int { n.to_int() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> int { n.to_int() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }
@ -244,7 +232,6 @@ pub impl int: NumConv {
pub impl f32: NumConv { pub impl f32: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> f32 { n.to_f32() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> f32 { n.to_f32() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }
@ -265,7 +252,6 @@ pub impl f32: NumConv {
pub impl f64: NumConv { pub impl f64: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> f64 { n.to_f64() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> f64 { n.to_f64() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }
@ -286,7 +272,6 @@ pub impl f64: NumConv {
pub impl float: NumConv { pub impl float: NumConv {
#[inline(always)] static pure fn from<T:NumConv>(n: T) -> float { n.to_float() } #[inline(always)] static pure fn from<T:NumConv>(n: T) -> float { n.to_float() }
#[inline(always)] pure fn cast<T:NumConv>(&self) -> T { NumConv::from(*self) }
#[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 } #[inline(always)] pure fn to_u8(&self) -> u8 { *self as u8 }
#[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 } #[inline(always)] pure fn to_u16(&self) -> u16 { *self as u16 }