poulpy/base2k/src/vec_znx_arithmetic.rs
base2k/src/vec_znx_arithmetic.rsRaw
1use crate::bindings::{vec_znx_add, vec_znx_automorphism, vec_znx_rotate, vec_znx_sub};
2use crate::{Module, VecZnx};
3
4impl Module {
5 // c <- a + b
6 pub fn vec_znx_add(&self, c: &mut VecZnx, a: &VecZnx, b: &VecZnx) {
7 unsafe {
8 vec_znx_add(
9 self.0,
10 c.as_mut_ptr(),
11 c.limbs() as u64,
12 c.n() as u64,
13 a.as_ptr(),
14 a.limbs() as u64,
15 a.n() as u64,
16 b.as_ptr(),
17 b.limbs() as u64,
18 b.n() as u64,
19 )
20 }
21 }
22
23 // b <- a + b
24 pub fn vec_znx_add_inplace(&self, b: &mut VecZnx, a: &VecZnx) {
25 unsafe {
26 vec_znx_add(
27 self.0,
28 b.as_mut_ptr(),
29 b.limbs() as u64,
30 b.n() as u64,
31 a.as_ptr(),
32 a.limbs() as u64,
33 a.n() as u64,
34 b.as_ptr(),
35 b.limbs() as u64,
36 b.n() as u64,
37 )
38 }
39 }
40
41 // c <- a + b
42 pub fn vec_znx_sub(&self, c: &mut VecZnx, a: &VecZnx, b: &VecZnx) {
43 unsafe {
44 vec_znx_sub(
45 self.0,
46 c.as_mut_ptr(),
47 c.limbs() as u64,
48 c.n() as u64,
49 a.as_ptr(),
50 a.limbs() as u64,
51 a.n() as u64,
52 b.as_ptr(),
53 b.limbs() as u64,
54 b.n() as u64,
55 )
56 }
57 }
58
59 // b <- a + b
60 pub fn vec_znx_sub_inplace(&self, b: &mut VecZnx, a: &VecZnx) {
61 unsafe {
62 vec_znx_sub(
63 self.0,
64 b.as_mut_ptr(),
65 b.limbs() as u64,
66 b.n() as u64,
67 a.as_ptr(),
68 a.limbs() as u64,
69 a.n() as u64,
70 b.as_ptr(),
71 b.limbs() as u64,
72 b.n() as u64,
73 )
74 }
75 }
76
77 pub fn vec_znx_rotate(&self, k: i64, a: &mut VecZnx, b: &VecZnx) {
78 unsafe {
79 vec_znx_rotate(
80 self.0,
81 k,
82 a.as_mut_ptr(),
83 a.limbs() as u64,
84 a.n() as u64,
85 b.as_ptr(),
86 b.limbs() as u64,
87 b.n() as u64,
88 )
89 }
90 }
91
92 pub fn vec_znx_rotate_inplace(&self, k: i64, a: &mut VecZnx) {
93 unsafe {
94 vec_znx_rotate(
95 self.0,
96 k,
97 a.as_mut_ptr(),
98 a.limbs() as u64,
99 a.n() as u64,
100 a.as_ptr(),
101 a.limbs() as u64,
102 a.n() as u64,
103 )
104 }
105 }
106
107 // b <- a(X^gal_el)
108 pub fn vec_znx_automorphism(&self, gal_el: i64, b: &mut VecZnx, a: &VecZnx) {
109 unsafe {
110 vec_znx_automorphism(
111 self.0,
112 gal_el,
113 b.as_mut_ptr(),
114 b.limbs() as u64,
115 b.n() as u64,
116 a.as_ptr(),
117 a.limbs() as u64,
118 a.n() as u64,
119 );
120 }
121 }
122
123 // a <- a(X^gal_el)
124 pub fn vec_znx_automorphism_inplace(&self, gal_el: i64, a: &mut VecZnx) {
125 unsafe {
126 vec_znx_automorphism(
127 self.0,
128 gal_el,
129 a.as_mut_ptr(),
130 a.limbs() as u64,
131 a.n() as u64,
132 a.as_ptr(),
133 a.limbs() as u64,
134 a.n() as u64,
135 );
136 }
137 }
138}