#ifndef FFT #define FFT #include #include #include #include #include "params.h" using namespace std; //TODO: description class FFT_engine { int fft_dim; int fft_dim2; fftw_plan plan_to_fft; fftw_plan plan_from_fft; double* in_array; fftw_complex* out_array; public: //map> x_powers; vector pos_powers; vector neg_powers; FFT_engine() = delete; FFT_engine(const int dim); void to_fft(FFTPoly& out, const ModQPoly& in) const; void from_fft(vector& out, const FFTPoly& in) const; ~FFT_engine(); }; FFTPoly operator *(const FFTPoly& a, const FFTPoly& b); void operator *=(FFTPoly& a, const FFTPoly& b); FFTPoly operator *(const FFTPoly& a, const int b); FFTPoly operator +(const FFTPoly& a, const FFTPoly& b); void operator +=(FFTPoly& a, const FFTPoly& b); void operator +=(FFTPoly& a, const complex b); FFTPoly operator -(const FFTPoly& a, const FFTPoly& b); void operator -=(FFTPoly& a, const FFTPoly& b); // global FFT engine of dimension N const FFT_engine fftN(Param::N); #endif