poulpy/base2k/src/vec_znx_arithmetic.rs
base2k/src/vec_znx_arithmetic.rsRaw
1use crate::ffi::vec_znx::{
2 vec_znx_add, vec_znx_automorphism, vec_znx_negate, vec_znx_rotate, vec_znx_sub,
3};
4use crate::{Module, VecZnx};
5
6impl Module {
7 // c <- a + b
8 pub fn vec_znx_add(&self, c: &mut VecZnx, a: &VecZnx, b: &VecZnx) {
9 unsafe {
10 vec_znx_add(
11 self.0,
12 c.as_mut_ptr(),
13 c.limbs() as u64,
14 c.n() as u64,
15 a.as_ptr(),
16 a.limbs() as u64,
17 a.n() as u64,
18 b.as_ptr(),
19 b.limbs() as u64,
20 b.n() as u64,
21 )
22 }
23 }
24
25 // b <- a + b
26 pub fn vec_znx_add_inplace(&self, b: &mut VecZnx, a: &VecZnx) {
27 unsafe {
28 vec_znx_add(
29 self.0,
30 b.as_mut_ptr(),
31 b.limbs() as u64,
32 b.n() as u64,
33 a.as_ptr(),
34 a.limbs() as u64,
35 a.n() as u64,
36 b.as_ptr(),
37 b.limbs() as u64,
38 b.n() as u64,
39 )
40 }
41 }
42
43 // c <- a + b
44 pub fn vec_znx_sub(&self, c: &mut VecZnx, a: &VecZnx, b: &VecZnx) {
45 unsafe {
46 vec_znx_sub(
47 self.0,
48 c.as_mut_ptr(),
49 c.limbs() as u64,
50 c.n() as u64,
51 a.as_ptr(),
52 a.limbs() as u64,
53 a.n() as u64,
54 b.as_ptr(),
55 b.limbs() as u64,
56 b.n() as u64,
57 )
58 }
59 }
60
61 // b <- a + b
62 pub fn vec_znx_sub_inplace(&self, b: &mut VecZnx, a: &VecZnx) {
63 unsafe {
64 vec_znx_sub(
65 self.0,
66 b.as_mut_ptr(),
67 b.limbs() as u64,
68 b.n() as u64,
69 a.as_ptr(),
70 a.limbs() as u64,
71 a.n() as u64,
72 b.as_ptr(),
73 b.limbs() as u64,
74 b.n() as u64,
75 )
76 }
77 }
78
79 pub fn vec_znx_negate(&self, b: &mut VecZnx, a: &VecZnx) {
80 unsafe {
81 vec_znx_negate(
82 self.0,
83 b.as_mut_ptr(),
84 b.limbs() as u64,
85 b.n() as u64,
86 a.as_ptr(),
87 a.limbs() as u64,
88 a.n() as u64,
89 )
90 }
91 }
92
93 pub fn vec_znx_negate_inplace(&self, a: &mut VecZnx) {
94 unsafe {
95 vec_znx_negate(
96 self.0,
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 pub fn vec_znx_rotate(&self, k: i64, a: &mut VecZnx, b: &VecZnx) {
108 unsafe {
109 vec_znx_rotate(
110 self.0,
111 k,
112 a.as_mut_ptr(),
113 a.limbs() as u64,
114 a.n() as u64,
115 b.as_ptr(),
116 b.limbs() as u64,
117 b.n() as u64,
118 )
119 }
120 }
121
122 pub fn vec_znx_rotate_inplace(&self, k: i64, a: &mut VecZnx) {
123 unsafe {
124 vec_znx_rotate(
125 self.0,
126 k,
127 a.as_mut_ptr(),
128 a.limbs() as u64,
129 a.n() as u64,
130 a.as_ptr(),
131 a.limbs() as u64,
132 a.n() as u64,
133 )
134 }
135 }
136
137 // b <- a(X^gal_el)
138 pub fn vec_znx_automorphism(&self, gal_el: i64, b: &mut VecZnx, a: &VecZnx) {
139 unsafe {
140 vec_znx_automorphism(
141 self.0,
142 gal_el,
143 b.as_mut_ptr(),
144 b.limbs() as u64,
145 b.n() as u64,
146 a.as_ptr(),
147 a.limbs() as u64,
148 a.n() as u64,
149 );
150 }
151 }
152
153 // a <- a(X^gal_el)
154 pub fn vec_znx_automorphism_inplace(&self, gal_el: i64, a: &mut VecZnx) {
155 unsafe {
156 vec_znx_automorphism(
157 self.0,
158 gal_el,
159 a.as_mut_ptr(),
160 a.limbs() as u64,
161 a.n() as u64,
162 a.as_ptr(),
163 a.limbs() as u64,
164 a.n() as u64,
165 );
166 }
167 }
168}