#ifndef __SIMPLE_FFT__FFT_HPP__ #define __SIMPLE_FFT__FFT_HPP__ #include "copy_array.hpp" #include "fft_impl.hpp" namespace simple_fft { // in-place, complex, forward template bool FFT(TComplexArray1D & data, const size_t size, const char *& error_description) { return impl::CFFT::FFT_inplace(data, size, impl::FFT_FORWARD, error_description); } template bool FFT(TComplexArray2D & data, const size_t size1, const size_t size2, const char *& error_description) { return impl::CFFT::FFT_inplace(data, size1, size2, impl::FFT_FORWARD, error_description); } template bool FFT(TComplexArray3D & data, const size_t size1, const size_t size2, const size_t size3, const char *& error_description) { return impl::CFFT::FFT_inplace(data, size1, size2, size3, impl::FFT_FORWARD, error_description); } // in-place, complex, inverse template bool IFFT(TComplexArray1D & data, const size_t size, const char *& error_description) { return impl::CFFT::FFT_inplace(data, size, impl::FFT_BACKWARD, error_description); } template bool IFFT(TComplexArray2D & data, const size_t size1, const size_t size2, const char *& error_description) { return impl::CFFT::FFT_inplace(data, size1, size2, impl::FFT_BACKWARD, error_description); } template bool IFFT(TComplexArray3D & data, const size_t size1, const size_t size2, const size_t size3, const char *& error_description) { return impl::CFFT::FFT_inplace(data, size1, size2, size3, impl::FFT_BACKWARD, error_description); } // not-in-place, complex, forward template bool FFT(const TComplexArray1D & data_in, TComplexArray1D & data_out, const size_t size, const char *& error_description) { copy_array::copyArray(data_in, data_out, size); return impl::CFFT::FFT_inplace(data_out, size, impl::FFT_FORWARD, error_description); } template bool FFT(const TComplexArray2D & data_in, TComplexArray2D & data_out, const size_t size1, const size_t size2, const char *& error_description) { copy_array::copyArray(data_in, data_out, size1, size2); return impl::CFFT::FFT_inplace(data_out, size1, size2, impl::FFT_FORWARD, error_description); } template bool FFT(const TComplexArray3D & data_in, TComplexArray3D & data_out, const size_t size1, const size_t size2, const size_t size3, const char *& error_description) { copy_array::copyArray(data_in, data_out, size1, size2, size3); return impl::CFFT::FFT_inplace(data_out, size1, size2, size3, impl::FFT_FORWARD, error_description); } // not-in-place, complex, inverse template bool IFFT(const TComplexArray1D & data_in, TComplexArray1D & data_out, const size_t size, const char *& error_description) { copy_array::copyArray(data_in, data_out, size); return impl::CFFT::FFT_inplace(data_out, size, impl::FFT_BACKWARD, error_description); } template bool IFFT(const TComplexArray2D & data_in, TComplexArray2D & data_out, const size_t size1, const size_t size2, const char *& error_description) { copy_array::copyArray(data_in, data_out, size1, size2); return impl::CFFT::FFT_inplace(data_out, size1, size2, impl::FFT_BACKWARD, error_description); } template bool IFFT(const TComplexArray3D & data_in, TComplexArray3D & data_out, const size_t size1, const size_t size2, const size_t size3, const char *& error_description) { copy_array::copyArray(data_in, data_out, size1, size2, size3); return impl::CFFT::FFT_inplace(data_out, size1, size2, size3, impl::FFT_BACKWARD, error_description); } // not-in-place, real, forward template bool FFT(const TRealArray1D & data_in, TComplexArray1D & data_out, const size_t size, const char *& error_description) { copy_array::copyArray(data_in, data_out, size); return impl::CFFT::FFT_inplace(data_out, size, impl::FFT_FORWARD, error_description); } template bool FFT(const TRealArray2D & data_in, TComplexArray2D & data_out, const size_t size1, const size_t size2, const char *& error_description) { copy_array::copyArray(data_in, data_out, size1, size2); return impl::CFFT::FFT_inplace(data_out, size1, size2, impl::FFT_FORWARD, error_description); } template bool FFT(const TRealArray3D & data_in, TComplexArray3D & data_out, const size_t size1, const size_t size2, const size_t size3, const char *& error_description) { copy_array::copyArray(data_in, data_out, size1, size2, size3); return impl::CFFT::FFT_inplace(data_out, size1, size2, size3, impl::FFT_FORWARD, error_description); } } // simple_fft #endif // __SIMPLE_FFT__FFT_HPP__