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}