mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-26 02:58:32 -06:00
62 lines
1.2 KiB
Rust
62 lines
1.2 KiB
Rust
// Note that these polyfills can be very imprecise, but hopefully good enough
|
|
// for the vast majority of cases.
|
|
|
|
#[cfg(feature = "images")]
|
|
#[inline(always)]
|
|
pub(crate) fn round_f32(x: f32) -> f32 {
|
|
#[cfg(feature = "std")]
|
|
{
|
|
x.round()
|
|
}
|
|
#[cfg(not(feature = "std"))]
|
|
{
|
|
if x >= 0.0 {
|
|
floor_f32(x + 0.5)
|
|
} else {
|
|
-floor_f32(-x + 0.5)
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(all(feature = "images", not(feature = "std")))]
|
|
#[inline(always)]
|
|
fn floor_f32(x: f32) -> f32 {
|
|
let xi = x as i32;
|
|
let xf = xi as f32;
|
|
if x < xf { xf - 1.0 } else { xf }
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn trunc_f64(x: f64) -> f64 {
|
|
#[cfg(feature = "std")]
|
|
{
|
|
x.trunc()
|
|
}
|
|
#[cfg(not(feature = "std"))]
|
|
{
|
|
x as i64 as f64
|
|
}
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn powi_f64(x: f64, n: u32) -> f64 {
|
|
#[cfg(feature = "std")]
|
|
{
|
|
x.powi(n as i32)
|
|
}
|
|
#[cfg(not(feature = "std"))]
|
|
{
|
|
let mut result = 1.0;
|
|
let mut base = x;
|
|
let mut exp = n;
|
|
while exp > 0 {
|
|
if exp & 1 == 1 {
|
|
result *= base;
|
|
}
|
|
base *= base;
|
|
exp >>= 1;
|
|
}
|
|
result
|
|
}
|
|
}
|