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}