/*
    PIP - Platform Independent Primitives
    Class for FFT, IFFT and Hilbert transformations
    Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "pifft.h"

#include "pifft_p.h"


#define _PIFFTW_CPP(type)                                                                               \
	_PIFFTW_P_##type##_::_PIFFTW_P_##type##_() {                                                        \
		impl = new PIFFTW_Private<type>();                                                              \
		;                                                                                               \
	}                                                                                                   \
	_PIFFTW_P_##type##_::~_PIFFTW_P_##type##_() {                                                       \
		delete (PIFFTW_Private<type> *)impl;                                                            \
	}                                                                                                   \
	const PIVector<complex<type>> & _PIFFTW_P_##type##_::calcFFT(const PIVector<complex<type>> & in) {  \
		return ((PIFFTW_Private<type> *)impl)->calcFFT(in);                                             \
	}                                                                                                   \
	const PIVector<complex<type>> & _PIFFTW_P_##type##_::calcFFTR(const PIVector<type> & in) {          \
		return ((PIFFTW_Private<type> *)impl)->calcFFT(in);                                             \
	}                                                                                                   \
	const PIVector<complex<type>> & _PIFFTW_P_##type##_::calcFFTI(const PIVector<complex<type>> & in) { \
		return ((PIFFTW_Private<type> *)impl)->calcFFTinverse(in);                                      \
	}                                                                                                   \
	void _PIFFTW_P_##type##_::preparePlan(int size, int op) {                                           \
		return ((PIFFTW_Private<type> *)impl)->preparePlan(size, op);                                   \
	}

_PIFFTW_CPP(float)
_PIFFTW_CPP(double)
_PIFFTW_CPP(ldouble)
