eryon_core/traits/
scalar.rs

1/*
2    Appellation: scalar <module>
3    Contrib: @FL03
4*/
5
6pub trait Scalar: Clone + 'static + core::fmt::Debug + core::fmt::Display {
7    private!();
8}
9
10pub trait ScalarExt
11where
12    Self: Scalar
13        + Clone
14        + Copy
15        + PartialEq
16        + PartialOrd
17        + Send
18        + Sync
19        + 'static
20        + core::fmt::Debug
21        + core::fmt::Display
22        + core::iter::Sum
23        + core::ops::Neg
24        + num_traits::One
25        + num_traits::Zero
26        + num_traits::NumOps
27        + num_traits::NumAssignOps
28        + num_traits::FromPrimitive
29        + num_traits::ToPrimitive,
30{
31}
32
33macro_rules! impl_scalar {
34    (@impl $t:ty) => {
35        impl Scalar for $t {
36            seal!();
37        }
38    };
39    (@impl ext: $t:ty) => {
40        impl ScalarExt for $t {}
41    };
42    (@impl $(ext:)? $t:ty) => {
43        impl_scalar!(@impl $(ext:)? $t);
44    };
45    ($($t:ty),* $(,)?) => {
46        $(
47            impl_scalar!(@impl $t);
48        )*
49    };
50    (ext: $($t:ty),* $(,)?) => {
51        $(
52            impl_scalar!(@impl $t);
53            impl_scalar!(@impl ext: $t);
54        )*
55    };
56}
57impl_scalar!(u8, u16, u32, u64, u128, usize);
58impl_scalar!(ext: f32, f64, i8, i16, i32, i64, i128, isize,);