use base2k::{Backend, MatZnxDft, MatZnxDftAlloc, MatZnxDftToMut, MatZnxDftToRef, Module}; use crate::{elem::Infos, utils::derive_size}; pub struct GRLWECt { pub data: MatZnxDft, pub log_base2k: usize, pub log_k: usize, } impl GRLWECt, B> { pub fn new(module: &Module, log_base2k: usize, log_k: usize, rows: usize) -> Self { Self { data: module.new_mat_znx_dft(rows, 1, 2, derive_size(log_base2k, log_k)), log_base2k: log_base2k, log_k: log_k, } } } impl Infos for GRLWECt { type Inner = MatZnxDft; fn inner(&self) -> &Self::Inner { &self.data } fn log_base2k(&self) -> usize { self.log_base2k } fn log_k(&self) -> usize { self.log_k } } impl MatZnxDftToMut for GRLWECt where MatZnxDft: MatZnxDftToMut, { fn to_mut(&mut self) -> MatZnxDft<&mut [u8], B> { self.data.to_mut() } } impl MatZnxDftToRef for GRLWECt where MatZnxDft: MatZnxDftToRef, { fn to_ref(&self) -> MatZnxDft<&[u8], B> { self.data.to_ref() } }