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}