geng_utils/
conversions.rs1use geng::prelude::{mat3, r32, vec2, Float, R32, R64};
2
3pub trait RealConversions {
5 fn as_r32(&self) -> R32;
6}
7
8impl<T: Float> RealConversions for T {
9 fn as_r32(&self) -> R32 {
10 r32(self.as_f32())
11 }
12}
13
14pub trait Vec2RealConversions {
16 fn as_f32(&self) -> vec2<f32>;
17 fn as_r32(&self) -> vec2<R32>;
18}
19
20pub trait Mat3RealConversions {
22 fn as_f32(&self) -> mat3<f32>;
23 fn as_r32(&self) -> mat3<R32>;
24}
25
26macro_rules! impl_vec2_lossy {
36 ($t:ident) => {
37 impl Vec2RealConversions for vec2<$t> {
38 fn as_f32(&self) -> vec2<f32> {
39 self.map(|x| x as f32)
40 }
41 fn as_r32(&self) -> vec2<R32> {
42 self.map(|x| r32(x as f32))
43 }
44 }
45 };
46}
47
48macro_rules! impl_vec2_float {
49 ($t:ident) => {
50 impl Vec2RealConversions for vec2<$t> {
51 fn as_f32(&self) -> vec2<f32> {
52 self.map(|x| x.as_f32())
53 }
54 fn as_r32(&self) -> vec2<R32> {
55 self.map(|x| r32(x.as_f32()))
56 }
57 }
58 };
59}
60
61impl_vec2_lossy!(usize);
62impl_vec2_lossy!(u8);
63impl_vec2_lossy!(u16);
64impl_vec2_lossy!(u32);
65impl_vec2_lossy!(u64);
66impl_vec2_lossy!(u128);
67impl_vec2_lossy!(isize);
68impl_vec2_lossy!(i8);
69impl_vec2_lossy!(i16);
70impl_vec2_lossy!(i32);
71impl_vec2_lossy!(i64);
72impl_vec2_lossy!(i128);
73
74impl_vec2_float!(f32);
75impl_vec2_float!(f64);
76impl_vec2_float!(R32);
77impl_vec2_float!(R64);
78
79impl<T: Float> Mat3RealConversions for mat3<T> {
80 fn as_f32(&self) -> mat3<f32> {
81 self.map(|x| x.as_f32())
82 }
83 fn as_r32(&self) -> mat3<R32> {
84 self.map(|x| r32(x.as_f32()))
85 }
86}