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}