use crate::SpectralExecutor;
use crate::factory_dct2::Returning;
use std::sync::Arc;
pub(crate) trait Dct7Factory {
fn dct7_fft(length: usize) -> Returning<Self>;
fn dct7_butterfly2() -> SpectralExecutor<Self>;
fn dct7_butterfly3() -> SpectralExecutor<Self>;
fn dct7_butterfly4() -> SpectralExecutor<Self>;
fn dct7_butterfly8() -> SpectralExecutor<Self>;
}
macro_rules! define_factory {
($for_type: ident) => {
impl Dct7Factory for $for_type {
fn dct7_fft(length: usize) -> Returning<Self> {
use crate::type7::Dct7Fft;
Ok(Arc::new(Dct7Fft::new(length)?))
}
fn dct7_butterfly2() -> SpectralExecutor<Self> {
use crate::type7::Dct7Butterfly2;
Arc::new(Dct7Butterfly2::default())
}
fn dct7_butterfly3() -> SpectralExecutor<Self> {
use crate::type7::Dct7Butterfly3;
Arc::new(Dct7Butterfly3::default())
}
fn dct7_butterfly4() -> SpectralExecutor<Self> {
use crate::type7::Dct7Butterfly4;
Arc::new(Dct7Butterfly4::default())
}
fn dct7_butterfly8() -> SpectralExecutor<Self> {
use crate::type7::Dct7Butterfly8;
Arc::new(Dct7Butterfly8::default())
}
}
};
}
define_factory!(f32);
define_factory!(f64);