use crate::Value;
use ffi::FFI;
use types::VectorF64;
ffi_wrapper!(
BSpLineWorkspace,
*mut sys::gsl_bspline_workspace,
gsl_bspline_free
);
impl BSpLineWorkspace {
#[doc(alias = "gsl_bspline_alloc")]
pub fn new(k: usize, nbreak: usize) -> Option<Self> {
let tmp = unsafe { sys::gsl_bspline_alloc(k, nbreak) };
if tmp.is_null() {
None
} else {
Some(Self::wrap(tmp))
}
}
#[doc(alias = "gsl_bspline_knots")]
pub fn knots(&mut self, breakpts: &VectorF64) -> Result<(), Value> {
let ret = unsafe { sys::gsl_bspline_knots(breakpts.unwrap_shared(), self.unwrap_unique()) };
result_handler!(ret, ())
}
#[doc(alias = "gsl_bspline_knots_uniform")]
pub fn knots_uniform(&mut self, a: f64, b: f64) -> Result<(), Value> {
let ret = unsafe { sys::gsl_bspline_knots_uniform(a, b, self.unwrap_unique()) };
result_handler!(ret, ())
}
#[doc(alias = "gsl_bspline_eval")]
pub fn eval(&mut self, x: f64, B: &mut VectorF64) -> Result<(), Value> {
let ret = unsafe { sys::gsl_bspline_eval(x, B.unwrap_unique(), self.unwrap_unique()) };
result_handler!(ret, ())
}
#[doc(alias = "gsl_bspline_eval_nonzero")]
pub fn eval_non_zero(&mut self, x: f64, Bk: &mut VectorF64) -> Result<(usize, usize), Value> {
let mut istart = 0;
let mut iend = 0;
let ret = unsafe {
sys::gsl_bspline_eval_nonzero(
x,
Bk.unwrap_unique(),
&mut istart,
&mut iend,
self.unwrap_unique(),
)
};
result_handler!(ret, (istart, iend))
}
#[doc(alias = "gsl_bspline_ncoeffs")]
pub fn ncoeffs(&mut self) -> usize {
unsafe { sys::gsl_bspline_ncoeffs(self.unwrap_unique()) }
}
#[doc(alias = "gsl_bspline_greville_abscissa")]
pub fn greville_abscissa(&mut self, i: usize) -> f64 {
unsafe { sys::gsl_bspline_greville_abscissa(i, self.unwrap_unique()) }
}
}