CiFEr
vec.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018 XLAB d.o.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef CIFER_VECTOR_H
18 #define CIFER_VECTOR_H
19 
20 #include <stdbool.h>
21 #include <gmp.h>
22 
36 typedef struct cfe_mat cfe_mat;
37 
41 typedef struct cfe_vec {
42  mpz_t *vec;
43  size_t size;
44 } cfe_vec;
45 
52 void cfe_vec_init(cfe_vec *v, size_t size);
53 
58 void cfe_vec_inits(size_t size, cfe_vec *v, ...);
59 
66 void cfe_vec_set_const(cfe_vec *vec, mpz_t c);
67 
76 void cfe_vec_copy(cfe_vec *res, cfe_vec *v);
77 
81 void cfe_vec_free(cfe_vec *v);
82 
87 void cfe_vec_frees(cfe_vec *v, ...);
88 
92 void cfe_vec_print(cfe_vec *v);
93 
97 void cfe_vec_add(cfe_vec *res, cfe_vec *v1, cfe_vec *v2);
98 
102 void cfe_vec_dot(mpz_t res, cfe_vec *v1, cfe_vec *v2);
103 
107 void cfe_vec_mod(cfe_vec *res, cfe_vec *v, mpz_t modulo);
108 
112 void cfe_vec_mul(cfe_vec *res, cfe_vec *v1, cfe_vec *v2);
113 
118 bool cfe_vec_check_bound(cfe_vec *v, mpz_t bound);
119 
123 void cfe_vec_get(mpz_t res, cfe_vec *v, size_t i);
124 
128 void cfe_vec_set(cfe_vec *v, mpz_t el, size_t i);
129 
133 void cfe_vec_join(cfe_vec *res, cfe_vec *v1, cfe_vec *v2);
134 
138 void cfe_vec_extract(cfe_vec *res, cfe_vec *v, size_t from, size_t n);
139 
143 void cfe_vec_append(cfe_vec *res, cfe_vec *v, mpz_t el);
144 
148 void cfe_vec_mul_matrix(cfe_vec *res, cfe_vec *v, cfe_mat *m);
149 
153 void cfe_vec_mul_scalar(cfe_vec *res, cfe_vec *v, mpz_t s);
154 
158 void cfe_vec_poly_mul(cfe_vec *res, cfe_vec *v1, cfe_vec *v2);
159 
163 void cfe_vec_neg(cfe_vec *res, cfe_vec *v);
164 
168 void cfe_vec_fdiv_q_scalar(cfe_vec *res, cfe_vec *v, mpz_t s);
169 
173 void cfe_vec_FFT(cfe_vec *y, cfe_vec *a, mpz_t root, mpz_t q);
174 
178 void cfe_vec_poly_mul_FFT(cfe_vec *res, cfe_vec *v1, cfe_vec *v2, mpz_t root, mpz_t inv_root, mpz_t inv_n, mpz_t q);
179 
180 #endif
cfe_vec_mul_matrix
void cfe_vec_mul_matrix(cfe_vec *res, cfe_vec *v, cfe_mat *m)
cfe_vec
struct cfe_vec cfe_vec
cfe_vec_FFT
void cfe_vec_FFT(cfe_vec *y, cfe_vec *a, mpz_t root, mpz_t q)
cfe_vec
Definition: vec.h:41
cfe_vec_poly_mul_FFT
void cfe_vec_poly_mul_FFT(cfe_vec *res, cfe_vec *v1, cfe_vec *v2, mpz_t root, mpz_t inv_root, mpz_t inv_n, mpz_t q)
cfe_vec::size
size_t size
Definition: vec.h:43
cfe_vec_copy
void cfe_vec_copy(cfe_vec *res, cfe_vec *v)
cfe_vec_join
void cfe_vec_join(cfe_vec *res, cfe_vec *v1, cfe_vec *v2)
cfe_vec_set
void cfe_vec_set(cfe_vec *v, mpz_t el, size_t i)
cfe_vec_check_bound
bool cfe_vec_check_bound(cfe_vec *v, mpz_t bound)
cfe_vec_get
void cfe_vec_get(mpz_t res, cfe_vec *v, size_t i)
cfe_vec_fdiv_q_scalar
void cfe_vec_fdiv_q_scalar(cfe_vec *res, cfe_vec *v, mpz_t s)
cfe_vec_print
void cfe_vec_print(cfe_vec *v)
cfe_vec_set_const
void cfe_vec_set_const(cfe_vec *vec, mpz_t c)
cfe_vec_init
void cfe_vec_init(cfe_vec *v, size_t size)
cfe_vec_append
void cfe_vec_append(cfe_vec *res, cfe_vec *v, mpz_t el)
cfe_vec_neg
void cfe_vec_neg(cfe_vec *res, cfe_vec *v)
cfe_vec_add
void cfe_vec_add(cfe_vec *res, cfe_vec *v1, cfe_vec *v2)
cfe_vec_free
void cfe_vec_free(cfe_vec *v)
cfe_vec_dot
void cfe_vec_dot(mpz_t res, cfe_vec *v1, cfe_vec *v2)
cfe_vec_mul
void cfe_vec_mul(cfe_vec *res, cfe_vec *v1, cfe_vec *v2)
cfe_vec_frees
void cfe_vec_frees(cfe_vec *v,...)
cfe_vec_inits
void cfe_vec_inits(size_t size, cfe_vec *v,...)
cfe_vec_extract
void cfe_vec_extract(cfe_vec *res, cfe_vec *v, size_t from, size_t n)
cfe_vec_mul_scalar
void cfe_vec_mul_scalar(cfe_vec *res, cfe_vec *v, mpz_t s)
cfe_vec_mod
void cfe_vec_mod(cfe_vec *res, cfe_vec *v, mpz_t modulo)
cfe_mat
Definition: mat.h:44
cfe_vec_poly_mul
void cfe_vec_poly_mul(cfe_vec *res, cfe_vec *v1, cfe_vec *v2)