apple-accelerate 0.2.0

Safe Rust bindings for Apple's Accelerate framework on macOS using a Swift bridge with optional raw C FFI
Documentation
#![allow(missing_docs, non_camel_case_types, non_upper_case_globals)]

use core::ffi::c_void;

pub type quadrature_function_array =
    Option<unsafe extern "C" fn(*mut c_void, usize, *const f64, *mut f64)>;

#[repr(i32)]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum quadrature_status {
    QUADRATURE_SUCCESS = 0,
    QUADRATURE_ERROR = -1,
    QUADRATURE_INVALID_ARG_ERROR = -2,
    QUADRATURE_ALLOC_ERROR = -3,
    QUADRATURE_INTERNAL_ERROR = -99,
    QUADRATURE_INTEGRATE_MAX_EVAL_ERROR = -101,
    QUADRATURE_INTEGRATE_BAD_BEHAVIOUR_ERROR = -102,
}

#[repr(i32)]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum quadrature_integrator {
    QUADRATURE_INTEGRATE_QNG = 0,
    QUADRATURE_INTEGRATE_QAG = 1,
    QUADRATURE_INTEGRATE_QAGS = 2,
}

#[repr(C)]
pub struct quadrature_integrate_function {
    pub fun: quadrature_function_array,
    pub fun_arg: *mut c_void,
}

#[repr(C)]
pub struct quadrature_integrate_options {
    pub integrator: quadrature_integrator,
    pub abs_tolerance: f64,
    pub rel_tolerance: f64,
    pub qag_points_per_interval: usize,
    pub max_intervals: usize,
}

#[link(name = "Accelerate", kind = "framework")]
unsafe extern "C" {
    pub fn quadrature_integrate(
        f: *const quadrature_integrate_function,
        a: f64,
        b: f64,
        options: *const quadrature_integrate_options,
        status: *mut quadrature_status,
        abs_error: *mut f64,
        workspace_size: usize,
        workspace: *mut c_void,
    ) -> f64;
}