lust/
number.rs

1#![allow(dead_code)]
2
3#[cfg(feature = "std")]
4pub type LustInt = i64;
5#[cfg(not(feature = "std"))]
6pub type LustInt = i32;
7
8#[cfg(feature = "std")]
9pub type LustFloat = f64;
10#[cfg(not(feature = "std"))]
11pub type LustFloat = f32;
12
13#[cfg(feature = "std")]
14pub type FloatBits = u64;
15#[cfg(not(feature = "std"))]
16pub type FloatBits = u32;
17
18#[inline]
19pub const fn int_zero() -> LustInt {
20    0
21}
22
23#[inline]
24pub fn int_from_usize(value: usize) -> LustInt {
25    value as LustInt
26}
27
28#[inline]
29pub fn float_from_int(value: LustInt) -> LustFloat {
30    value as LustFloat
31}
32
33#[inline]
34pub fn int_from_float(value: LustFloat) -> LustInt {
35    value as LustInt
36}
37
38#[inline]
39pub fn float_to_hash_bits(value: LustFloat) -> u64 {
40    #[cfg(feature = "std")]
41    {
42        value.to_bits()
43    }
44    #[cfg(not(feature = "std"))]
45    {
46        value.to_bits() as u64
47    }
48}
49
50#[inline]
51pub fn float_is_nan(value: LustFloat) -> bool {
52    value.is_nan()
53}
54
55#[inline]
56pub fn parse_float(input: &str) -> Result<LustFloat, core::num::ParseFloatError> {
57    input.parse::<LustFloat>()
58}
59
60#[inline]
61pub fn float_abs(value: LustFloat) -> LustFloat {
62    value.abs()
63}
64
65#[inline]
66pub fn float_floor(value: LustFloat) -> LustFloat {
67    #[cfg(feature = "std")]
68    {
69        value.floor()
70    }
71    #[cfg(not(feature = "std"))]
72    {
73        libm::floorf(value)
74    }
75}
76
77#[inline]
78pub fn float_ceil(value: LustFloat) -> LustFloat {
79    #[cfg(feature = "std")]
80    {
81        value.ceil()
82    }
83    #[cfg(not(feature = "std"))]
84    {
85        libm::ceilf(value)
86    }
87}
88
89#[inline]
90pub fn float_round(value: LustFloat) -> LustFloat {
91    #[cfg(feature = "std")]
92    {
93        value.round()
94    }
95    #[cfg(not(feature = "std"))]
96    {
97        libm::roundf(value)
98    }
99}
100
101#[inline]
102pub fn float_sqrt(value: LustFloat) -> LustFloat {
103    #[cfg(feature = "std")]
104    {
105        value.sqrt()
106    }
107    #[cfg(not(feature = "std"))]
108    {
109        libm::sqrtf(value)
110    }
111}
112
113#[inline]
114pub fn float_clamp(value: LustFloat, min: LustFloat, max: LustFloat) -> LustFloat {
115    if value < min {
116        min
117    } else if value > max {
118        max
119    } else {
120        value
121    }
122}