use ffi;
use enums;
pub struct LevinUWorkspace {
w: *mut ffi::gsl_sum_levin_u_workspace
}
impl LevinUWorkspace {
pub fn new(n: usize) -> Option<LevinUWorkspace> {
let tmp = unsafe { ffi::gsl_sum_levin_u_alloc(n) };
if tmp.is_null() {
None
} else {
Some(LevinUWorkspace {
w: tmp
})
}
}
pub fn accel(&mut self, array: &[f64], sum_accel: &mut f64, abserr: &mut f64) -> enums::Value {
enums::Value::from(unsafe {
ffi::gsl_sum_levin_u_accel(array.as_ptr(), array.len() as usize, self.w, sum_accel, abserr)
})
}
pub fn sum_plain(&self) -> f64 {
unsafe { (*self.w).sum_plain }
}
pub fn terms_used(&self) -> usize {
unsafe { (*self.w).terms_used }
}
pub fn size(&self) -> usize {
unsafe { (*self.w).size }
}
}
impl Drop for LevinUWorkspace {
fn drop(&mut self) {
unsafe { ffi::gsl_sum_levin_u_free(self.w) };
self.w = ::std::ptr::null_mut();
}
}
impl ffi::FFI<ffi::gsl_sum_levin_u_workspace> for LevinUWorkspace {
fn wrap(w: *mut ffi::gsl_sum_levin_u_workspace) -> LevinUWorkspace {
LevinUWorkspace {
w: w
}
}
fn soft_wrap(w: *mut ffi::gsl_sum_levin_u_workspace) -> LevinUWorkspace {
Self::wrap(w)
}
fn unwrap_shared(w: &LevinUWorkspace) -> *const ffi::gsl_sum_levin_u_workspace {
w.w as *const _
}
fn unwrap_unique(w: &mut LevinUWorkspace) -> *mut ffi::gsl_sum_levin_u_workspace {
w.w
}
}
pub struct LevinUTruncWorkspace {
w: *mut ffi::gsl_sum_levin_utrunc_workspace
}
impl LevinUTruncWorkspace {
pub fn new(n: usize) -> Option<LevinUTruncWorkspace> {
let tmp = unsafe { ffi::gsl_sum_levin_utrunc_alloc(n) };
if tmp.is_null() {
None
} else {
Some(LevinUTruncWorkspace {
w: tmp
})
}
}
pub fn accel(&mut self, array: &[f64], sum_accel: &mut f64, abserr_trunc: &mut f64) -> enums::Value {
enums::Value::from(unsafe {
ffi::gsl_sum_levin_utrunc_accel(array.as_ptr(), array.len() as _, self.w, sum_accel, abserr_trunc)
})
}
pub fn sum_plain(&self) -> f64 {
unsafe { (*self.w).sum_plain }
}
pub fn terms_used(&self) -> usize {
unsafe { (*self.w).terms_used }
}
pub fn size(&self) -> usize {
unsafe { (*self.w).size }
}
}
impl Drop for LevinUTruncWorkspace {
fn drop(&mut self) {
unsafe { ffi::gsl_sum_levin_utrunc_free(self.w) };
self.w = ::std::ptr::null_mut();
}
}
impl ffi::FFI<ffi::gsl_sum_levin_utrunc_workspace> for LevinUTruncWorkspace {
fn wrap(w: *mut ffi::gsl_sum_levin_utrunc_workspace) -> LevinUTruncWorkspace {
LevinUTruncWorkspace {
w: w
}
}
fn soft_wrap(w: *mut ffi::gsl_sum_levin_utrunc_workspace) -> LevinUTruncWorkspace {
Self::wrap(w)
}
fn unwrap_shared(w: &LevinUTruncWorkspace) -> *const ffi::gsl_sum_levin_utrunc_workspace {
w.w as *const _
}
fn unwrap_unique(w: &mut LevinUTruncWorkspace) -> *mut ffi::gsl_sum_levin_utrunc_workspace {
w.w
}
}