arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-backend/src/implementation/cpu_spqlios/svp_ppol_ntt120.rs
poulpy-backend/src/implementation/cpu_spqlios/svp_ppol_ntt120.rsRaw
 1use crate::{
 2    hal::{
 3        api::{ZnxInfos, ZnxSliceSize, ZnxView},
 4        layouts::{Data, DataRef, SvpPPol, SvpPPolBytesOf, SvpPPolOwned},
 5        oep::{SvpPPolAllocBytesImpl, SvpPPolAllocImpl, SvpPPolFromBytesImpl},
 6    },
 7    implementation::cpu_spqlios::module_ntt120::NTT120,
 8};
 9
10const SVP_PPOL_NTT120_WORD_SIZE: usize = 4;
11
12impl<D: Data> SvpPPolBytesOf for SvpPPol<D, NTT120> {
13    fn bytes_of(n: usize, cols: usize) -> usize {
14        SVP_PPOL_NTT120_WORD_SIZE * n * cols * size_of::<i64>()
15    }
16}
17
18impl<D: Data> ZnxSliceSize for SvpPPol<D, NTT120> {
19    fn sl(&self) -> usize {
20        SVP_PPOL_NTT120_WORD_SIZE * self.n()
21    }
22}
23
24impl<D: DataRef> ZnxView for SvpPPol<D, NTT120> {
25    type Scalar = i64;
26}
27
28unsafe impl SvpPPolFromBytesImpl<Self> for NTT120 {
29    fn svp_ppol_from_bytes_impl(n: usize, cols: usize, bytes: Vec<u8>) -> SvpPPolOwned<NTT120> {
30        SvpPPolOwned::from_bytes(n, cols, bytes)
31    }
32}
33
34unsafe impl SvpPPolAllocImpl<Self> for NTT120 {
35    fn svp_ppol_alloc_impl(n: usize, cols: usize) -> SvpPPolOwned<NTT120> {
36        SvpPPolOwned::alloc(n, cols)
37    }
38}
39
40unsafe impl SvpPPolAllocBytesImpl<Self> for NTT120 {
41    fn svp_ppol_alloc_bytes_impl(n: usize, cols: usize) -> usize {
42        SvpPPol::<Vec<u8>, Self>::bytes_of(n, cols)
43    }
44}