pub mod evaluation {
use crate::Value;
use std::mem::transmute;
use types::ComplexF64;
#[doc(alias = "gsl_poly_eval")]
pub fn poly_eval(c: &[f64], x: f64) -> f64 {
unsafe { sys::gsl_poly_eval(c.as_ptr(), c.len() as i32, x) }
}
#[doc(alias = "gsl_poly_complex_eval")]
pub fn poly_complex_eval(c: &[f64], z: &ComplexF64) -> ComplexF64 {
unsafe {
transmute(sys::gsl_poly_complex_eval(
c.as_ptr(),
c.len() as i32,
transmute(*z),
))
}
}
#[doc(alias = "gsl_complex_poly_complex_eval")]
pub fn complex_poly_complex_eval(c: &[ComplexF64], z: &ComplexF64) -> ComplexF64 {
let mut tmp = Vec::new();
for it in c.iter() {
unsafe { tmp.push(transmute(*it)) };
}
unsafe {
transmute(sys::gsl_complex_poly_complex_eval(
tmp.as_ptr(),
tmp.len() as i32,
transmute(*z),
))
}
}
#[doc(alias = "gsl_poly_eval_derivs")]
pub fn poly_eval_derivs(c: &[f64], x: f64, res: &mut [f64]) -> Result<(), Value> {
let ret = unsafe {
sys::gsl_poly_eval_derivs(
c.as_ptr(),
c.len() as _,
x,
res.as_mut_ptr(),
res.len() as _,
)
};
result_handler!(ret, ())
}
}
pub mod divided_difference_representation {
use crate::Value;
#[doc(alias = "gsl_poly_dd_init")]
pub fn poly_dd_init(dd: &mut [f64], xa: &[f64], ya: &[f64]) -> Result<(), Value> {
let ret = unsafe {
sys::gsl_poly_dd_init(dd.as_mut_ptr(), xa.as_ptr(), ya.as_ptr(), dd.len() as _)
};
result_handler!(ret, ())
}
#[doc(alias = "gsl_poly_dd_eval")]
pub fn poly_dd_eval(dd: &[f64], xa: &[f64], x: f64) -> f64 {
unsafe { sys::gsl_poly_dd_eval(dd.as_ptr(), xa.as_ptr(), dd.len() as _, x) }
}
#[doc(alias = "gsl_poly_dd_taylor")]
pub fn poly_dd_taylor(
c: &mut [f64],
xp: f64,
dd: &[f64],
xa: &[f64],
w: &mut [f64],
) -> Result<(), Value> {
let ret = unsafe {
sys::gsl_poly_dd_taylor(
c.as_mut_ptr(),
xp,
dd.as_ptr(),
xa.as_ptr(),
dd.len() as _,
w.as_mut_ptr(),
)
};
result_handler!(ret, ())
}
#[doc(alias = "gsl_poly_dd_hermite_init")]
pub fn poly_dd_hermite_init(
dd: &mut [f64],
za: &mut [f64],
xa: &[f64],
ya: &[f64],
dya: &[f64],
) -> Result<(), Value> {
let ret = unsafe {
sys::gsl_poly_dd_hermite_init(
dd.as_mut_ptr(),
za.as_mut_ptr(),
xa.as_ptr(),
ya.as_ptr(),
dya.as_ptr(),
dd.len() as _,
)
};
result_handler!(ret, ())
}
}
pub mod quadratic_equations {
use crate::Value;
use std::mem::transmute;
use types::ComplexF64;
#[doc(alias = "gsl_poly_solve_quadratic")]
pub fn poly_solve_quadratic(a: f64, b: f64, c: f64) -> Result<(f64, f64), Value> {
let mut x0 = 0.;
let mut x1 = 0.;
let ret = unsafe { sys::gsl_poly_solve_quadratic(a, b, c, &mut x0, &mut x1) };
result_handler!(ret, (x0, x1))
}
#[doc(alias = "gsl_poly_complex_solve_quadratic")]
#[allow(unknown_lints, clippy::useless_transmute)]
pub fn poly_complex_solve_quadratic(
a: f64,
b: f64,
c: f64,
z0: &mut ComplexF64,
z1: &mut ComplexF64,
) -> Result<(), Value> {
let ret =
unsafe { sys::gsl_poly_complex_solve_quadratic(a, b, c, transmute(z0), transmute(z1)) };
result_handler!(ret, ())
}
}
pub mod cubic_equations {
use crate::Value;
use std::mem::transmute;
use types::ComplexF64;
#[doc(alias = "gsl_poly_solve_cubic")]
pub fn poly_solve_cubic(a: f64, b: f64, c: f64) -> Result<(f64, f64, f64), Value> {
let mut x0 = 0.;
let mut x1 = 0.;
let mut x2 = 0.;
let ret = unsafe { sys::gsl_poly_solve_cubic(a, b, c, &mut x0, &mut x1, &mut x2) };
result_handler!(ret, (x0, x1, x2))
}
#[doc(alias = "gsl_poly_complex_solve_cubic")]
#[allow(unknown_lints, clippy::useless_transmute)]
pub fn poly_complex_solve_cubic(
a: f64,
b: f64,
c: f64,
z0: &mut ComplexF64,
z1: &mut ComplexF64,
z2: &mut ComplexF64,
) -> Result<(), Value> {
let ret = unsafe {
sys::gsl_poly_complex_solve_cubic(a, b, c, transmute(z0), transmute(z1), transmute(z2))
};
result_handler!(ret, ())
}
}