aurum_numeric/
raw.rs

1// Copyright (c) 2016-2017 <daggerbot@gmail.com>
2// This software is available under the terms of the zlib license.
3// See COPYING.md for more information.
4
5/// Trait for raw conversion using the `as` operator.
6pub trait RawFrom<F: Sized>: Sized {
7    fn raw_from (other: F) -> Self;
8}
9
10macro_rules! impl_raw_from {
11    { $($($f:ty),* => $t:ty;)* } => { $($(
12        impl RawFrom<$f> for $t {
13            #[inline(always)]
14            fn raw_from (other: $f) -> $t { other as $t }
15        }
16    )*)* };
17}
18
19impl_raw_from! {
20    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => i8;
21    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => i16;
22    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => i32;
23    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => i64;
24    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => isize;
25    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => u8;
26    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => u16;
27    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => u32;
28    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => u64;
29    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => usize;
30    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => f32;
31    i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => f64;
32}
33
34/// Trait for raw conversion using the `as` operator.
35///
36/// Wraps `RawFrom`.
37pub trait RawInto<T: Sized>: Sized {
38    fn raw_into (self) -> T;
39}
40
41impl<F: Sized, T: RawFrom<F>> RawInto<T> for F {
42    #[inline(always)]
43    fn raw_into (self) -> T { T::raw_from(self) }
44}