diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2015-10-15 05:23:44 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2015-10-15 05:23:44 +0300 |
| commit | 6f3e84dbe9434b020da73d66275c3609a2b7bb1b (patch) | |
| tree | 461d44a5702638a25ef98f4a080f0393f126c0b4 /src/libcore/num | |
| parent | e38210b195a4aaf91f3daa37dfcfd7059bd22ddc (diff) | |
| download | rust-6f3e84dbe9434b020da73d66275c3609a2b7bb1b.tar.gz rust-6f3e84dbe9434b020da73d66275c3609a2b7bb1b.zip | |
Implement conversion traits for primitive integer types
Diffstat (limited to 'src/libcore/num')
| -rw-r--r-- | src/libcore/num/mod.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/libcore/num/mod.rs b/src/libcore/num/mod.rs index 340028b4beb..0b7dc216d41 100644 --- a/src/libcore/num/mod.rs +++ b/src/libcore/num/mod.rs @@ -17,6 +17,7 @@ use self::wrapping::OverflowingOps; use char::CharExt; use cmp::{Eq, PartialOrd}; +use convert::From; use fmt; use intrinsics; use marker::{Copy, Sized}; @@ -1471,3 +1472,45 @@ impl fmt::Display for ParseIntError { } pub use num::dec2flt::ParseFloatError; + +// Conversion traits for primitive integer types +// Conversions T -> T are covered by a blanket impl and therefore excluded +// Some conversions from and to usize/isize are not implemented due to portability concerns +macro_rules! impl_from { + ($Small: ty, $Large: ty) => { + #[stable(feature = "lossless_int_conv", since = "1.5.0")] + impl From<$Small> for $Large { + #[stable(feature = "lossless_int_conv", since = "1.5.0")] + #[inline] + fn from(small: $Small) -> $Large { + small as $Large + } + } + } +} + +// Unsigned -> Unsigned +impl_from! { u8, u16 } +impl_from! { u8, u32 } +impl_from! { u8, u64 } +impl_from! { u8, usize } +impl_from! { u16, u32 } +impl_from! { u16, u64 } +impl_from! { u32, u64 } + +// Signed -> Signed +impl_from! { i8, i16 } +impl_from! { i8, i32 } +impl_from! { i8, i64 } +impl_from! { i8, isize } +impl_from! { i16, i32 } +impl_from! { i16, i64 } +impl_from! { i32, i64 } + +// Unsigned -> Signed +impl_from! { u8, i16 } +impl_from! { u8, i32 } +impl_from! { u8, i64 } +impl_from! { u16, i32 } +impl_from! { u16, i64 } +impl_from! { u32, i64 } |
