use crate::spectrum::{impls::{FFTImpl, IFFTImpl}, base::{FFTApply, FFTFactory, IFFTApply}};
use num_traits::{Float, FromPrimitive, Zero, One};

pub struct DefaultFFTFactory;

impl<T> FFTFactory<T> for DefaultFFTFactory
where
    T: Float + FromPrimitive + Clone + Zero + One + 'static,
{
    fn create_fft(&self) -> Box<dyn FFTApply<T>> {
        Box::new(FFTImpl)
    }

    fn create_ifft(&self) -> Box<dyn IFFTApply<T>> {
        Box::new(IFFTImpl)
    }
}
