apple-accelerate 0.2.1

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)]

pub type vDSP_Length = usize;
pub type vDSP_Stride = isize;
pub type FFTDirection = i32;
pub type FFTRadix = i32;

pub enum OpaqueFFTSetup {}
pub type FFTSetup = *mut OpaqueFFTSetup;

pub enum vDSP_biquad_SetupStruct {}
pub type vDSP_biquad_Setup = *mut vDSP_biquad_SetupStruct;

#[repr(C)]
pub struct DSPSplitComplex {
    pub realp: *mut f32,
    pub imagp: *mut f32,
}

#[link(name = "Accelerate", kind = "framework")]
unsafe extern "C" {
    pub fn vDSP_create_fftsetup(log2n: vDSP_Length, radix: FFTRadix) -> FFTSetup;
    pub fn vDSP_destroy_fftsetup(setup: FFTSetup);
    pub fn vDSP_fft_zip(
        setup: FFTSetup,
        split_complex: *const DSPSplitComplex,
        stride: vDSP_Stride,
        log2n: vDSP_Length,
        direction: FFTDirection,
    );
    pub fn vDSP_biquad_CreateSetup(
        coefficients: *const f64,
        sections: vDSP_Length,
    ) -> vDSP_biquad_Setup;
    pub fn vDSP_biquad_DestroySetup(setup: vDSP_biquad_Setup);
    pub fn vDSP_biquad(
        setup: vDSP_biquad_Setup,
        delay: *mut f32,
        input: *const f32,
        input_stride: vDSP_Stride,
        output: *mut f32,
        output_stride: vDSP_Stride,
        length: vDSP_Length,
    );
    pub fn vDSP_vadd(
        a: *const f32,
        a_stride: vDSP_Stride,
        b: *const f32,
        b_stride: vDSP_Stride,
        c: *mut f32,
        c_stride: vDSP_Stride,
        length: vDSP_Length,
    );
    pub fn vDSP_vaddD(
        a: *const f64,
        a_stride: vDSP_Stride,
        b: *const f64,
        b_stride: vDSP_Stride,
        c: *mut f64,
        c_stride: vDSP_Stride,
        length: vDSP_Length,
    );
    pub fn vDSP_vsub(
        b: *const f32,
        b_stride: vDSP_Stride,
        a: *const f32,
        a_stride: vDSP_Stride,
        c: *mut f32,
        c_stride: vDSP_Stride,
        length: vDSP_Length,
    );
    pub fn vDSP_vsubD(
        b: *const f64,
        b_stride: vDSP_Stride,
        a: *const f64,
        a_stride: vDSP_Stride,
        c: *mut f64,
        c_stride: vDSP_Stride,
        length: vDSP_Length,
    );
    pub fn vDSP_dotpr(
        a: *const f32,
        a_stride: vDSP_Stride,
        b: *const f32,
        b_stride: vDSP_Stride,
        result: *mut f32,
        length: vDSP_Length,
    );
    pub fn vDSP_dotprD(
        a: *const f64,
        a_stride: vDSP_Stride,
        b: *const f64,
        b_stride: vDSP_Stride,
        result: *mut f64,
        length: vDSP_Length,
    );
    pub fn vDSP_maxv(input: *const f32, stride: vDSP_Stride, result: *mut f32, length: vDSP_Length);
    pub fn vDSP_maxvD(
        input: *const f64,
        stride: vDSP_Stride,
        result: *mut f64,
        length: vDSP_Length,
    );
    pub fn vDSP_minv(input: *const f32, stride: vDSP_Stride, result: *mut f32, length: vDSP_Length);
    pub fn vDSP_minvD(
        input: *const f64,
        stride: vDSP_Stride,
        result: *mut f64,
        length: vDSP_Length,
    );
    pub fn vDSP_meanv(
        input: *const f32,
        stride: vDSP_Stride,
        result: *mut f32,
        length: vDSP_Length,
    );
    pub fn vDSP_meanvD(
        input: *const f64,
        stride: vDSP_Stride,
        result: *mut f64,
        length: vDSP_Length,
    );
    pub fn vDSP_sve(input: *const f32, stride: vDSP_Stride, result: *mut f32, length: vDSP_Length);
    pub fn vDSP_sveD(
        input: *const f64,
        stride: vDSP_Stride,
        result: *mut f64,
        length: vDSP_Length,
    );
    pub fn vDSP_hamm_window(output: *mut f32, length: vDSP_Length, flags: i32);
    pub fn vDSP_hamm_windowD(output: *mut f64, length: vDSP_Length, flags: i32);
    pub fn vDSP_blkman_window(output: *mut f32, length: vDSP_Length, flags: i32);
    pub fn vDSP_blkman_windowD(output: *mut f64, length: vDSP_Length, flags: i32);
}