use core::ops::{Add, Mul, Sub};
use num_traits::MulAdd;
#[cfg(not(target_os = "emscripten"))]
#[inline]
pub(crate) fn linear<T>(a: T, b: T, x: T) -> T
where
T: MulAdd<Output = T> + Sub<Output = T> + Copy,
{
x.mul_add(b - a, a)
}
#[cfg(target_os = "emscripten")]
#[inline]
pub(crate) fn linear<T>(a: T, b: T, x: T) -> T
where
T: MulAdd<Output = T> + Sub<Output = T> + Copy,
{
(x * (b - a)) + a
}
#[inline]
pub(crate) fn cubic<T>(n0: T, n1: T, n2: T, n3: T, alpha: T) -> T
where
T: Add<Output = T> + Mul<Output = T> + Sub<Output = T> + Copy,
{
let p = (n3 - n2) - (n0 - n1);
let q = (n0 - n1) - p;
let r = n2 - n0;
let s = n1;
p * alpha * alpha * alpha + q * alpha * alpha + r * alpha + s
}