src/types.rs

Thu, 01 May 2025 12:29:18 -0500

author
Tuomo Valkonen <tuomov@iki.fi>
date
Thu, 01 May 2025 12:29:18 -0500
branch
dev
changeset 123
acc344c20fa3
parent 62
d8305c9b6fdf
permissions
-rw-r--r--

numseal

5
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
1 /*!
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
2 Some useful (numerical) types and traits.
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
3
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
4 The traits are based on corresponding ones in [`num_traits`], but try to fill some gaps in the
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
5 super-traits and available constants.
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
6
5
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
7 As [`nalgebra`] unnecessarily provides many of the same methods as [`num_traits`], to avoid having
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
8 to refer to the methods with the full path, it is often necesary to use [`ToNalgebraRealField`][crate::nalgebra_support::ToNalgebraRealField] to hide the nalgebra implementations until
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
9 absolutely necessary to use nalgebra.
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
10 */
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
11
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
12 //use trait_set::trait_set;
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
13 pub use num_traits::cast::AsPrimitive;
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
14 pub use num_traits::Float as NumTraitsFloat; // needed to re-export functions.
62
d8305c9b6fdf Move origin stuff to AXPY form Euclidean
Tuomo Valkonen <tuomov@iki.fi>
parents: 59
diff changeset
15
59
9226980e45a7 Significantly simplify Mapping / Apply through Instance
Tuomo Valkonen <tuomov@iki.fi>
parents: 32
diff changeset
16 pub use simba::scalar::{
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
17 ClosedAdd, ClosedAddAssign, ClosedDiv, ClosedDivAssign, ClosedMul, ClosedMulAssign, ClosedNeg,
59
9226980e45a7 Significantly simplify Mapping / Apply through Instance
Tuomo Valkonen <tuomov@iki.fi>
parents: 32
diff changeset
18 ClosedSub, ClosedSubAssign,
9226980e45a7 Significantly simplify Mapping / Apply through Instance
Tuomo Valkonen <tuomov@iki.fi>
parents: 32
diff changeset
19 };
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
20
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
21 /// Typical integer type
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
22 #[allow(non_camel_case_types)]
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
23 pub type int = i64;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
24
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
25 /// Typical unsigned integer type
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
26 #[allow(non_camel_case_types)]
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
27 pub type uint = u64;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
28
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
29 /// Typical floating point number type
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
30 #[allow(non_camel_case_types)]
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
31 pub type float = f64;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
32
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
33 /// Casts of abstract numerical types to others via the standard `as` keyword.
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
34 pub trait CastFrom<T: 'static + Copy>: num_traits::cast::AsPrimitive<T> {
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
35 fn cast_from(other: T) -> Self;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
36 }
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
37
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
38 mod private {
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
39 pub trait NumSeal {}
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
40 }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
41
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
42 macro_rules! impl_casts {
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
43 ($($type:ty)*) => { $(
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
44 impl_casts!(@phase2, $type,
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
45 u8 u16 u32 u64 u128 usize
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
46 i8 i16 i32 i64 i128 isize
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
47 f32 f64);
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
48 )* };
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
49 (@phase2, $type:ty, $($type2:ty)*) => { $(
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
50 impl CastFrom<$type2> for $type {
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
51 #[inline]
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
52 fn cast_from(other : $type2) -> Self { other as $type }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
53 }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
54 )* };
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
55 }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
56
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
57 impl_casts!(u8 u16 u32 u64 u128 usize
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
58 i8 i16 i32 i64 i128 isize
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
59 f32 f64);
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
60
5
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
61 /// Trait for general numeric types
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
62 pub trait Num:
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
63 'static
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
64 + Copy
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
65 + Sync
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
66 + Send
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
67 + num::Num
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
68 + num_traits::NumAssign
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
69 + std::iter::Sum
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
70 + std::iter::Product
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
71 + std::fmt::Debug
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
72 + std::fmt::Display
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
73 + serde::Serialize
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
74 + CastFrom<u8>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
75 + CastFrom<u16>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
76 + CastFrom<u32>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
77 + CastFrom<u64>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
78 + CastFrom<u128>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
79 + CastFrom<usize>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
80 + CastFrom<i8>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
81 + CastFrom<i16>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
82 + CastFrom<i32>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
83 + CastFrom<i64>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
84 + CastFrom<i128>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
85 + CastFrom<isize>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
86 + CastFrom<f32>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
87 + CastFrom<f64>
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
88 + crate::instance::Space
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
89 + private::NumSeal
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
90 {
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
91 const ZERO: Self;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
92 const ONE: Self;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
93 const TWO: Self;
8
4e09b7829b51 Multithreaded bisection tree operations
Tuomo Valkonen <tuomov@iki.fi>
parents: 5
diff changeset
94 /// Generic version of `Self::MAX`
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
95 const RANGE_MAX: Self;
8
4e09b7829b51 Multithreaded bisection tree operations
Tuomo Valkonen <tuomov@iki.fi>
parents: 5
diff changeset
96 /// Generic version of `Self::MIN`
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
97 const RANGE_MIN: Self;
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
98 }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
99
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
100 /// Trait for signed numeric types
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
101 pub trait SignedNum: Num + num::Signed + std::ops::Neg<Output = Self> {}
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
102 impl<U: Num + num::Signed + std::ops::Neg<Output = Self>> SignedNum for U {}
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
103
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
104 /// Trait for floating point numbers
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
105 pub trait Float: SignedNum + num::Float /*+ From<Self::CompatibleSize>*/ {
5
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
106 // An unsigned integer that can be used for indexing operations and
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
107 // converted to F without loss.
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
108 //type CompatibleSize : CompatibleUnsigned<Self>;
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
109
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
110 const PI: Self;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
111 const E: Self;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
112 const EPSILON: Self;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
113 const SQRT_2: Self;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
114 const INFINITY: Self;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
115 const NEG_INFINITY: Self;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
116 const NAN: Self;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
117 const FRAC_2_SQRT_PI: Self;
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
118 }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
119
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
120 /// Trait for integers
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
121 pub trait Integer: Num + num::Integer {}
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
122
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
123 /// Trait for unsigned integers
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
124 pub trait Unsigned: Num + Integer + num::Unsigned {}
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
125
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
126 /// Trait for signed integers
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
127 pub trait Signed: SignedNum + Integer {}
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
128
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
129 macro_rules! impl_num_consts {
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
130 ($($type:ty)*) => { $(
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
131 impl Num for $type {
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
132 const ZERO : Self = 0 as $type;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
133 const ONE : Self = 1 as $type;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
134 const TWO : Self = 2 as $type;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
135 const RANGE_MAX : Self = <$type>::MAX;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
136 const RANGE_MIN : Self = <$type>::MIN;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
137 }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
138 )* }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
139 }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
140
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
141 macro_rules! impl_integers {
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
142 ($signed:ty : $($type:ty)*) => { $(
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
143 impl_num_consts!($type);
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
144 impl Integer for $type {}
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
145 impl $signed for $type {}
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
146 impl private::NumSeal for $type {}
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
147 )* }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
148 }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
149
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
150 impl_integers!(Signed: i8 i16 i32 i64 i128 isize);
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
151 impl_integers!(Unsigned: u8 u16 u32 u64 u128 usize);
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
152
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
153 impl_num_consts!(f32 f64);
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
154
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
155 impl Float for f64 {
5
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
156 /*#[cfg(any(target_pointer_width = "128", target_pointer_width = "64"))]
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
157 type CompatibleSize = u32;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
158 #[cfg(any(target_pointer_width = "32", target_pointer_width = "16"))]
5
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
159 type CompatibleSize = usize;*/
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
160
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
161 const PI: Self = std::f64::consts::PI;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
162 const E: Self = std::f64::consts::E;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
163 const EPSILON: Self = std::f64::EPSILON;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
164 const SQRT_2: Self = std::f64::consts::SQRT_2;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
165 const INFINITY: Self = std::f64::INFINITY;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
166 const NEG_INFINITY: Self = std::f64::NEG_INFINITY;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
167 const NAN: Self = std::f64::NAN;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
168 const FRAC_2_SQRT_PI: Self = std::f64::consts::FRAC_2_SQRT_PI;
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
169 }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
170
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
171 impl Float for f32 {
5
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
172 /*
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
173 #[cfg(any(target_pointer_width = "128", target_pointer_width = "64", target_pointer_width = "32"))]
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
174 type CompatibleSize = u16;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
175 #[cfg(any(target_pointer_width = "16"))]
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
176 type CompatibleSize = usize;
5
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
177 */
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
178
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
179 const PI: Self = std::f32::consts::PI;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
180 const E: Self = std::f32::consts::E;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
181 const EPSILON: Self = std::f32::EPSILON;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
182 const SQRT_2: Self = std::f32::consts::SQRT_2;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
183 const INFINITY: Self = std::f32::INFINITY;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
184 const NEG_INFINITY: Self = std::f32::NEG_INFINITY;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
185 const NAN: Self = std::f32::NAN;
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
186 const FRAC_2_SQRT_PI: Self = std::f32::consts::FRAC_2_SQRT_PI;
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
187 }
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
188
123
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
189 impl private::NumSeal for f32 {}
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
190 impl private::NumSeal for f64 {}
acc344c20fa3 numseal
Tuomo Valkonen <tuomov@iki.fi>
parents: 62
diff changeset
191
5
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
192 /*
0
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
193 trait_set! {
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
194 pub trait CompatibleUnsigned<F : Float> = Unsigned + Into<F>;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
195 pub trait CompatibleSigned<F : Float> = Signed + Into<F>;
9f27689eb130 Initialise new clean repository
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
196 }
5
59dc4c5883f4 Improve documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
197 */

mercurial