1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
#![feature(op_assign_traits)] #![feature(zero_one)] use std::num::*; use std::default::*; use std::ops::*; pub trait Scalar: Copy + PartialEq + PartialOrd +One + Zero +Default +Add<Self, Output=Self> + AddAssign<Self> +Sub<Self, Output=Self> + SubAssign<Self> +Mul<Self, Output=Self> + MulAssign<Self> +Div<Self, Output=Self> + DivAssign<Self> +Rem<Self,Output=Self> + RemAssign<Self> +Neg<Output=Self> +Abs {} impl<S> Scalar for S where S: Copy + PartialEq + PartialOrd +One + Zero +Default +Add<S, Output=S> + AddAssign<S> +Sub<S, Output=S> + SubAssign<S> +Mul<S, Output=S> + MulAssign<S> +Div<S, Output=S> + DivAssign<S> +Rem<S,Output=S> + RemAssign<S> +Neg<Output=S> +Abs {} pub trait Abs { fn abs(self) -> Self; } impl Abs for f32 { fn abs(self) -> f32 { self.abs() } } impl Abs for f64 { fn abs(self) -> f64 { self.abs() } } impl Abs for i8 { fn abs(self) -> i8 { self.abs() } } impl Abs for i16 { fn abs(self) -> i16 { self.abs() } } impl Abs for i32 { fn abs(self) -> i32 { self.abs() } } impl Abs for i64 { fn abs(self) -> i64 { self.abs() } } impl Abs for u8 { fn abs(self) -> u8 { self } } impl Abs for u16 { fn abs(self) -> u16 { self } } impl Abs for u32 { fn abs(self) -> u32 { self } } impl Abs for u64 { fn abs(self) -> u64 { self } }