arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/base2k/src/free.rs
base2k/src/free.rsRaw
 1use crate::ffi::svp;
 2use crate::ffi::vec_znx_big;
 3use crate::ffi::vec_znx_dft;
 4use crate::ffi::vmp;
 5use crate::{SvpPPol, VecZnxBig, VecZnxDft, VmpPMat};
 6
 7/// This trait should be implemented by structs that point to
 8/// memory allocated through C.
 9pub trait Free {
10    // Frees the memory and self destructs.
11    fn free(self);
12}
13
14impl Free for VmpPMat {
15    /// Frees the C allocated memory of the [VmpPMat] and self destructs the struct.
16    fn free(self) {
17        unsafe { vmp::delete_vmp_pmat(self.data) };
18        drop(self);
19    }
20}
21
22impl Free for VecZnxDft {
23    fn free(self) {
24        unsafe { vec_znx_dft::delete_vec_znx_dft(self.0) };
25        drop(self);
26    }
27}
28
29impl Free for VecZnxBig {
30    fn free(self) {
31        unsafe {
32            vec_znx_big::delete_vec_znx_big(self.0);
33        }
34        drop(self);
35    }
36}
37
38impl Free for SvpPPol {
39    fn free(self) {
40        unsafe { svp::delete_svp_ppol(self.0) };
41        let _ = drop(self);
42    }
43}