use crate::ffi_apis::common::BincodeBuffer;
use crate::ffi_apis::common::from_bincode_buffer;
use crate::ffi_apis::common::to_bincode_buffer;
use crate::symbolic::special;
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_gamma_numerical(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::gamma_numerical(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_ln_gamma_numerical(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::ln_gamma_numerical(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_digamma_numerical(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::digamma_numerical(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_beta_numerical(
a_buf: BincodeBuffer,
b_buf: BincodeBuffer,
) -> BincodeBuffer {
let a: Option<f64> = from_bincode_buffer(&a_buf);
let b: Option<f64> = from_bincode_buffer(&b_buf);
if let (Some(val_a), Some(val_b)) = (a, b) {
to_bincode_buffer(&special::beta_numerical(val_a, val_b))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_ln_beta_numerical(
a_buf: BincodeBuffer,
b_buf: BincodeBuffer,
) -> BincodeBuffer {
let a: Option<f64> = from_bincode_buffer(&a_buf);
let b: Option<f64> = from_bincode_buffer(&b_buf);
if let (Some(val_a), Some(val_b)) = (a, b) {
to_bincode_buffer(&special::ln_beta_numerical(val_a, val_b))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_regularized_incomplete_beta(
a_buf: BincodeBuffer,
b_buf: BincodeBuffer,
x_buf: BincodeBuffer,
) -> BincodeBuffer {
let a: Option<f64> = from_bincode_buffer(&a_buf);
let b: Option<f64> = from_bincode_buffer(&b_buf);
let x: Option<f64> = from_bincode_buffer(&x_buf);
if let (Some(va), Some(vb), Some(vx)) = (a, b, x) {
to_bincode_buffer(&special::regularized_incomplete_beta(va, vb, vx))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_regularized_gamma_p(
a_buf: BincodeBuffer,
x_buf: BincodeBuffer,
) -> BincodeBuffer {
let a: Option<f64> = from_bincode_buffer(&a_buf);
let x: Option<f64> = from_bincode_buffer(&x_buf);
if let (Some(va), Some(vx)) = (a, x) {
to_bincode_buffer(&special::regularized_gamma_p(va, vx))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_regularized_gamma_q(
a_buf: BincodeBuffer,
x_buf: BincodeBuffer,
) -> BincodeBuffer {
let a: Option<f64> = from_bincode_buffer(&a_buf);
let x: Option<f64> = from_bincode_buffer(&x_buf);
if let (Some(va), Some(vx)) = (a, x) {
to_bincode_buffer(&special::regularized_gamma_q(va, vx))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_erf_numerical(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::erf_numerical(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_erfc_numerical(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::erfc_numerical(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_inverse_erf(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::inverse_erf(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_inverse_erfc(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::inverse_erfc(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_factorial(n_buf: BincodeBuffer) -> BincodeBuffer {
let n: Option<u64> = from_bincode_buffer(&n_buf);
if let Some(v) = n {
to_bincode_buffer(&special::factorial(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_double_factorial(n_buf: BincodeBuffer) -> BincodeBuffer {
let n: Option<u64> = from_bincode_buffer(&n_buf);
if let Some(v) = n {
to_bincode_buffer(&special::double_factorial(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_binomial(
n_buf: BincodeBuffer,
k_buf: BincodeBuffer,
) -> BincodeBuffer {
let n: Option<u64> = from_bincode_buffer(&n_buf);
let k: Option<u64> = from_bincode_buffer(&k_buf);
if let (Some(vn), Some(vk)) = (n, k) {
to_bincode_buffer(&special::binomial(vn, vk))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_rising_factorial(
x_buf: BincodeBuffer,
n_buf: BincodeBuffer,
) -> BincodeBuffer {
let x: Option<f64> = from_bincode_buffer(&x_buf);
let n: Option<u32> = from_bincode_buffer(&n_buf);
if let (Some(vx), Some(vn)) = (x, n) {
to_bincode_buffer(&special::rising_factorial(vx, vn))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_falling_factorial(
x_buf: BincodeBuffer,
n_buf: BincodeBuffer,
) -> BincodeBuffer {
let x: Option<f64> = from_bincode_buffer(&x_buf);
let n: Option<u32> = from_bincode_buffer(&n_buf);
if let (Some(vx), Some(vn)) = (x, n) {
to_bincode_buffer(&special::falling_factorial(vx, vn))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_ln_factorial(n_buf: BincodeBuffer) -> BincodeBuffer {
let n: Option<u64> = from_bincode_buffer(&n_buf);
if let Some(v) = n {
to_bincode_buffer(&special::ln_factorial(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_bessel_j0(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::bessel_j0(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_bessel_j1(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::bessel_j1(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_bessel_y0(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::bessel_y0(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_bessel_y1(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::bessel_y1(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_bessel_i0(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::bessel_i0(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_bessel_i1(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::bessel_i1(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_bessel_k0(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::bessel_k0(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_bessel_k1(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::bessel_k1(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_sinc(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::sinc(v))
} else {
BincodeBuffer::empty()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_zeta_numerical(val_buf: BincodeBuffer) -> BincodeBuffer {
let val: Option<f64> = from_bincode_buffer(&val_buf);
if let Some(v) = val {
to_bincode_buffer(&special::zeta(v))
} else {
BincodeBuffer::empty()
}
}