opencv/manual/core/
inplace.rs1use crate::boxed_ref::BoxedRefMut;
2use crate::traits::Boxed;
3
4pub trait ModifyInplace {
5 unsafe fn modify_inplace<Res>(&mut self, f: impl FnOnce(&Self, &mut Self) -> Res) -> Res;
14}
15
16impl<Mat: Boxed> ModifyInplace for Mat {
17 #[inline(always)]
18 unsafe fn modify_inplace<Res>(&mut self, f: impl FnOnce(&Self, &mut Self) -> Res) -> Res {
19 let mut m_alias = unsafe { Mat::from_raw(self.as_raw_mut()) };
20 let out = f(self, &mut m_alias);
21 let _ = m_alias.into_raw();
23 out
24 }
25}
26
27impl<Mat: Boxed> ModifyInplace for BoxedRefMut<'_, Mat> {
28 #[inline(always)]
29 unsafe fn modify_inplace<Res>(&mut self, f: impl FnOnce(&Self, &mut Self) -> Res) -> Res {
30 let mut m_alias = BoxedRefMut::from(unsafe { Mat::from_raw(self.reference.as_raw_mut()) });
31 let out = f(self, &mut m_alias);
32 let _ = m_alias.reference.into_raw();
34 out
35 }
36}