arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/base2k/src/ffi/vmp.rs
base2k/src/ffi/vmp.rsRaw
  1use crate::ffi::module::MODULE;
  2use crate::ffi::vec_znx_big::VEC_ZNX_BIG;
  3use crate::ffi::vec_znx_dft::VEC_ZNX_DFT;
  4
  5#[repr(C)]
  6#[derive(Debug, Copy, Clone)]
  7pub struct vmp_pmat_t {
  8    _unused: [u8; 0],
  9}
 10
 11// [rows][cols] = [#Decomposition][#Limbs]
 12pub type VMP_PMAT = vmp_pmat_t;
 13
 14unsafe extern "C" {
 15    pub unsafe fn bytes_of_vmp_pmat(module: *const MODULE, nrows: u64, ncols: u64) -> u64;
 16}
 17unsafe extern "C" {
 18    pub unsafe fn new_vmp_pmat(module: *const MODULE, nrows: u64, ncols: u64) -> *mut VMP_PMAT;
 19}
 20unsafe extern "C" {
 21    pub unsafe fn delete_vmp_pmat(res: *mut VMP_PMAT);
 22}
 23
 24unsafe extern "C" {
 25    pub unsafe fn vmp_apply_dft(
 26        module: *const MODULE,
 27        res: *mut VEC_ZNX_DFT,
 28        res_size: u64,
 29        a: *const i64,
 30        a_size: u64,
 31        a_sl: u64,
 32        pmat: *const VMP_PMAT,
 33        nrows: u64,
 34        ncols: u64,
 35        tmp_space: *mut u8,
 36    );
 37}
 38
 39unsafe extern "C" {
 40    pub unsafe fn vmp_apply_dft_tmp_bytes(
 41        module: *const MODULE,
 42        res_size: u64,
 43        a_size: u64,
 44        nrows: u64,
 45        ncols: u64,
 46    ) -> u64;
 47}
 48
 49unsafe extern "C" {
 50    pub unsafe fn vmp_apply_dft_to_dft(
 51        module: *const MODULE,
 52        res: *mut VEC_ZNX_DFT,
 53        res_size: u64,
 54        a_dft: *const VEC_ZNX_DFT,
 55        a_size: u64,
 56        pmat: *const VMP_PMAT,
 57        nrows: u64,
 58        ncols: u64,
 59        tmp_space: *mut u8,
 60    );
 61}
 62
 63unsafe extern "C" {
 64    pub unsafe fn vmp_apply_dft_to_dft_tmp_bytes(
 65        module: *const MODULE,
 66        res_size: u64,
 67        a_size: u64,
 68        nrows: u64,
 69        ncols: u64,
 70    ) -> u64;
 71}
 72
 73unsafe extern "C" {
 74    pub unsafe fn vmp_prepare_contiguous(
 75        module: *const MODULE,
 76        pmat: *mut VMP_PMAT,
 77        mat: *const i64,
 78        nrows: u64,
 79        ncols: u64,
 80        tmp_space: *mut u8,
 81    );
 82}
 83
 84unsafe extern "C" {
 85    pub unsafe fn vmp_prepare_dblptr(
 86        module: *const MODULE,
 87        pmat: *mut VMP_PMAT,
 88        mat: *const *const i64,
 89        nrows: u64,
 90        ncols: u64,
 91        tmp_space: *mut u8,
 92    );
 93}
 94
 95unsafe extern "C" {
 96    pub unsafe fn vmp_prepare_row(
 97        module: *const MODULE,
 98        pmat: *mut VMP_PMAT,
 99        row: *const i64,
100        row_i: u64,
101        nrows: u64,
102        ncols: u64,
103        tmp_space: *mut u8,
104    );
105}
106
107unsafe extern "C" {
108    pub unsafe fn vmp_prepare_row_dft(
109        module: *const MODULE,
110        pmat: *mut VMP_PMAT,
111        row: *const VEC_ZNX_DFT,
112        row_i: u64,
113        nrows: u64,
114        ncols: u64,
115    );
116}
117
118unsafe extern "C" {
119    pub unsafe fn vmp_extract_row_dft(
120        module: *const MODULE,
121        res: *mut VEC_ZNX_DFT,
122        pmat: *const VMP_PMAT,
123        row_i: u64,
124        nrows: u64,
125        ncols: u64,
126    );
127}
128
129unsafe extern "C" {
130    pub unsafe fn vmp_extract_row(
131        module: *const MODULE,
132        res: *mut VEC_ZNX_BIG,
133        pmat: *const VMP_PMAT,
134        row_i: u64,
135        nrows: u64,
136        ncols: u64,
137    );
138}
139
140unsafe extern "C" {
141    pub unsafe fn vmp_prepare_tmp_bytes(module: *const MODULE, nrows: u64, ncols: u64) -> u64;
142}