opencv 0.5.3

Rust bindings for OpenCV
Documentation
extern "C" {
   #[doc(hidden)] fn cv_new_VectorOffloat() -> *mut c_void;
   #[doc(hidden)] fn cv_delete_VectorOffloat(ptr: *mut c_void);
   #[doc(hidden)] fn cv_push_VectorOffloat(ptr: *mut c_void, ptr2: *const c_void);
   #[doc(hidden)] fn cv_VectorOffloat_len(ptr: *mut c_void) -> i32;
   #[doc(hidden)] fn cv_VectorOffloat_get(ptr: *mut c_void, index: i32) -> *mut c_void;
}

#[allow(dead_code)]
pub struct VectorOffloat {
    pub(crate) ptr: *mut c_void
}

impl VectorOffloat {
    pub fn new() -> Self {
        unsafe { Self { ptr: cv_new_VectorOffloat() } }
    }

    pub fn len(&self) -> i32 {
        unsafe { cv_VectorOffloat_len(self.ptr) }
    }

    #[doc(hidden)]
    pub fn as_raw_VectorOffloat(&self) -> *mut c_void {
        self.ptr
    }
}

impl Drop for VectorOffloat {
    fn drop(&mut self) {
        unsafe { cv_delete_VectorOffloat(self.ptr) };
    }
}
impl VectorOffloat {
    pub fn push(&mut self, val: f32) {
        unsafe { cv_push_VectorOffloat(self.ptr, &val as *const _ as _) }
    }

    pub fn get(&self, index: i32) -> &mut f32 {
        unsafe { (cv_VectorOffloat_get(self.ptr, index) as *mut f32).as_mut().unwrap() }
    }
}
extern "C" { #[doc(hidden)] fn cv_VectorOffloat_data(ptr: *mut c_void) -> *mut c_void; }

impl ::std::ops::Deref for VectorOffloat {
    type Target = [f32];

    fn deref(&self) -> &Self::Target {
        unsafe {
            let length = cv_VectorOffloat_len(self.ptr) as usize;
            let data = cv_VectorOffloat_data(self.ptr);
            ::std::slice::from_raw_parts(::std::mem::transmute(data), length)
        }
    }
}