poulpy/spqlios/src/module.rs
spqlios/src/module.rsRaw
1use crate::bindings::{
2 module_info_t, new_module_info, svp_ppol_t, vec_znx_bigcoeff_t, vec_znx_dft_t, MODULE,
3};
4
5pub type MODULETYPE = u8;
6pub const FFT64: u8 = 0;
7pub const NTT120: u8 = 1;
8
9pub struct Module(pub *mut MODULE);
10
11impl Module {
12 // Instantiates a new module.
13 pub fn new<const MODULETYPE: MODULETYPE>(n: usize) -> Self {
14 unsafe {
15 let m: *mut module_info_t = new_module_info(n as u64, MODULETYPE as u32);
16 if m.is_null() {
17 panic!("Failed to create module.");
18 }
19 Self(m)
20 }
21 }
22}
23
24pub struct SVPPOL(pub *mut svp_ppol_t);
25
26pub struct VECZNXBIG(pub *mut vec_znx_bigcoeff_t, pub usize);
27
28// Stores a vector of
29impl VECZNXBIG {
30 pub fn as_vec_znx_dft(&mut self) -> VECZNXDFT {
31 VECZNXDFT(self.0 as *mut vec_znx_dft_t, self.1)
32 }
33 pub fn limbs(&self) -> usize {
34 self.1
35 }
36}
37
38pub struct VECZNXDFT(pub *mut vec_znx_dft_t, pub usize);
39
40impl VECZNXDFT {
41 pub fn as_vec_znx_big(&mut self) -> VECZNXBIG {
42 VECZNXBIG(self.0 as *mut vec_znx_bigcoeff_t, self.1)
43 }
44 pub fn limbs(&self) -> usize {
45 self.1
46 }
47}