arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/backend/src/hal/oep/svp_ppol.rs
backend/src/hal/oep/svp_ppol.rsRaw
 1use crate::hal::layouts::{
 2    Backend, Module, ScalarZnxToRef, SvpPPolOwned, SvpPPolToMut, SvpPPolToRef, VecZnxDftToMut, VecZnxDftToRef,
 3};
 4
 5pub unsafe trait SvpPPolFromBytesImpl<B: Backend> {
 6    fn svp_ppol_from_bytes_impl(n: usize, cols: usize, bytes: Vec<u8>) -> SvpPPolOwned<B>;
 7}
 8
 9pub unsafe trait SvpPPolAllocImpl<B: Backend> {
10    fn svp_ppol_alloc_impl(n: usize, cols: usize) -> SvpPPolOwned<B>;
11}
12
13pub unsafe trait SvpPPolAllocBytesImpl<B: Backend> {
14    fn svp_ppol_alloc_bytes_impl(n: usize, cols: usize) -> usize;
15}
16
17pub unsafe trait SvpPrepareImpl<B: Backend> {
18    fn svp_prepare_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
19    where
20        R: SvpPPolToMut<B>,
21        A: ScalarZnxToRef;
22}
23
24pub unsafe trait SvpApplyImpl<B: Backend> {
25    fn svp_apply_impl<R, A, C>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
26    where
27        R: VecZnxDftToMut<B>,
28        A: SvpPPolToRef<B>,
29        C: VecZnxDftToRef<B>;
30}
31
32pub unsafe trait SvpApplyInplaceImpl: Backend {
33    fn svp_apply_inplace_impl<R, A>(module: &Module<Self>, res: &mut R, res_col: usize, a: &A, a_col: usize)
34    where
35        R: VecZnxDftToMut<Self>,
36        A: SvpPPolToRef<Self>;
37}