use crate::VipsImage;
use crate::ffi;
use std::marker::PhantomData;
use std::os::raw::c_void;
use std::ptr::NonNull;
pub struct VipsRegion<'a> {
c: NonNull<vips_sys::VipsRegion>,
marker: PhantomData<&'a ()>,
}
impl<'a> VipsRegion<'a> {
pub fn new(image: &VipsImage<'a>) -> Option<VipsRegion<'a>> {
let c = unsafe { vips_sys::vips_region_new(image.as_ptr()) };
NonNull::new(c).map(|c| VipsRegion {
c,
marker: PhantomData,
})
}
#[inline]
pub fn as_ptr(&self) -> *mut vips_sys::VipsRegion {
self.c.as_ptr()
}
}
impl Drop for VipsRegion<'_> {
fn drop(&mut self) {
unsafe { ffi::unref(self.c.as_ptr().cast::<c_void>()) };
}
}