FNFT
fnft__poly_fmult.h
Go to the documentation of this file.
1 /*
2 * This file is part of FNFT.
3 *
4 * FNFT is free software; you can redistribute it and/or
5 * modify it under the terms of the version 2 of the GNU General
6 * Public License as published by the Free Software Foundation.
7 *
8 * FNFT is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Contributors:
17 * Sander Wahls (TU Delft) 2017-2018.
18 */
19 
26 #ifndef FNFT__POLY_FMULT_H
27 #define FNFT__POLY_FMULT_H
28 
30 
40 
69  const FNFT_UINT deg,
70  FNFT_COMPLEX const * const p1,
71  FNFT_COMPLEX const * const p2,
72  FNFT_COMPLEX * const result,
73  fnft__fft_wrapper_plan_t plan_fwd,
74  fnft__fft_wrapper_plan_t plan_inv,
75  FNFT_COMPLEX * const buf0,
76  FNFT_COMPLEX * const buf1,
77  FNFT_COMPLEX * const buf2,
78  const FNFT_INT add_flag);
79 
120  FNFT_COMPLEX const * const p1_11,
121  const FNFT_UINT p1_stride,
122  FNFT_COMPLEX const * const p2_11,
123  const FNFT_UINT p2_stride,
124  FNFT_COMPLEX * const result_11,
125  const FNFT_UINT result_stride,
126  fnft__fft_wrapper_plan_t plan_fwd,
127  fnft__fft_wrapper_plan_t plan_inv,
128  FNFT_COMPLEX * const buf0,
129  FNFT_COMPLEX * const buf1,
130  FNFT_COMPLEX * const buf2);
131 
145 
166  FNFT_INT * const W_ptr);
167 
182 
206  FNFT_COMPLEX * const result, FNFT_INT * const W_ptr);
207 
208 #ifdef FNFT_ENABLE_SHORT_NAMES
209 #define poly_fmult_two_polys_len(...) fnft__poly_fmult_two_polys_len(__VA_ARGS__)
210 #define poly_fmult_two_polys_lenmen(...) fnft__poly_fmult_two_polys_lenmen(__VA_ARGS__)
211 #define poly_fmult_two_polys(...) fnft__poly_fmult_two_polys(__VA_ARGS__)
212 #define poly_fmult_two_polys2x2(...) fnft__poly_fmult_two_polys2x2(__VA_ARGS__)
213 #define poly_fmult_numel(...) fnft__poly_fmult_numel(__VA_ARGS__)
214 #define poly_fmult2x2_numel(...) fnft__poly_fmult2x2_numel(__VA_ARGS__)
215 #define poly_fmult(...) fnft__poly_fmult(__VA_ARGS__)
216 #define poly_fmult2x2(...) fnft__poly_fmult2x2(__VA_ARGS__)
217 #endif
218 
219 #endif
fnft__poly_fmult2x2_numel
FNFT_UINT fnft__poly_fmult2x2_numel(const FNFT_UINT deg, const FNFT_UINT n)
Number of elements that the inputs p and result to fnft__poly_fmult2x2 should have.
FNFT_INT
int32_t FNFT_INT
Definition: fnft_numtypes.h:56
FNFT_UINT
size_t FNFT_UINT
Definition: fnft_numtypes.h:62
fnft__fft_wrapper_plan_t
kiss_fft_cfg fnft__fft_wrapper_plan_t
Stores information needed by fnft__fft_wrapper_execute_plan to perform a (inverse) FFT.
Definition: fnft__fft_wrapper_plan_t.h:41
fnft__poly_fmult_numel
FNFT_UINT fnft__poly_fmult_numel(const FNFT_UINT deg, const FNFT_UINT n)
Number of elements that the input p to fnft__poly_fmult should have.
fnft__poly_fmult_two_polys
FNFT_INT fnft__poly_fmult_two_polys(const FNFT_UINT deg, FNFT_COMPLEX const *const p1, FNFT_COMPLEX const *const p2, FNFT_COMPLEX *const result, fnft__fft_wrapper_plan_t plan_fwd, fnft__fft_wrapper_plan_t plan_inv, FNFT_COMPLEX *const buf0, FNFT_COMPLEX *const buf1, FNFT_COMPLEX *const buf2, const FNFT_INT add_flag)
Multiplies two polynomials.
FNFT_COMPLEX
double complex FNFT_COMPLEX
Definition: fnft_numtypes.h:47
fnft__poly_fmult_two_polys_len
FNFT_INT fnft__poly_fmult_two_polys_len(const FNFT_UINT deg)
Length of the FFTs used by fnft__poly_fmult_two_polys.
fnft__poly_fmult_two_polys2x2
FNFT_INT fnft__poly_fmult_two_polys2x2(const FNFT_UINT deg, FNFT_COMPLEX const *const p1_11, const FNFT_UINT p1_stride, FNFT_COMPLEX const *const p2_11, const FNFT_UINT p2_stride, FNFT_COMPLEX *const result_11, const FNFT_UINT result_stride, fnft__fft_wrapper_plan_t plan_fwd, fnft__fft_wrapper_plan_t plan_inv, FNFT_COMPLEX *const buf0, FNFT_COMPLEX *const buf1, FNFT_COMPLEX *const buf2)
Multiplies two 2x2 matrices of polynomials.
fnft__poly_fmult2x2
FNFT_INT fnft__poly_fmult2x2(FNFT_UINT *d, FNFT_UINT n, FNFT_COMPLEX *const p, FNFT_COMPLEX *const result, FNFT_INT *const W_ptr)
Fast multiplication of multiple 2x2 matrix-valued polynomials of the same degree.
fnft__fft_wrapper_plan_t.h
fnft__poly_fmult
FNFT_INT fnft__poly_fmult(FNFT_UINT *const d, FNFT_UINT n, FNFT_COMPLEX *const p, FNFT_INT *const W_ptr)
Fast multiplication of multiple polynomials of same degree.