use crate::SpectralExecutor;
use crate::factory_dct2::Returning;
use std::sync::Arc;
pub(crate) trait Dct1Factory {
fn split_radix(
length: usize,
half_p1_dct1: SpectralExecutor<Self>,
half_dct3: SpectralExecutor<Self>,
) -> Returning<Self>;
fn dct1_fft(length: usize) -> Returning<Self>;
fn dct1_butterfly2() -> SpectralExecutor<Self>;
fn dct1_butterfly3() -> SpectralExecutor<Self>;
fn dct1_butterfly4() -> SpectralExecutor<Self>;
fn dct1_butterfly5() -> SpectralExecutor<Self>;
fn dct1_butterfly6() -> SpectralExecutor<Self>;
fn dct1_butterfly7() -> SpectralExecutor<Self>;
fn dct1_butterfly8() -> SpectralExecutor<Self>;
fn dct1_butterfly9() -> SpectralExecutor<Self>;
fn dct1_butterfly17() -> SpectralExecutor<Self>;
}
impl Dct1Factory for f32 {
fn split_radix(
length: usize,
half_p1_dct1: SpectralExecutor<Self>,
half_dct3: SpectralExecutor<Self>,
) -> Returning<f32> {
use crate::type1::SplitRadixDct1;
Ok(Arc::new(SplitRadixDct1::new(
length,
half_p1_dct1,
half_dct3,
)?))
}
fn dct1_fft(length: usize) -> Returning<Self> {
use crate::type1::Dct1Fft;
Ok(Arc::new(Dct1Fft::new(length)?))
}
fn dct1_butterfly2() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly2;
Arc::new(Dct1Butterfly2::default())
}
fn dct1_butterfly3() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly3;
Arc::new(Dct1Butterfly3::default())
}
fn dct1_butterfly4() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly4;
Arc::new(Dct1Butterfly4::default())
}
fn dct1_butterfly5() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly5;
Arc::new(Dct1Butterfly5::default())
}
fn dct1_butterfly6() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly6;
Arc::new(Dct1Butterfly6::default())
}
fn dct1_butterfly7() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly7;
Arc::new(Dct1Butterfly7::default())
}
fn dct1_butterfly8() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly8;
Arc::new(Dct1Butterfly8::default())
}
fn dct1_butterfly9() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly9;
Arc::new(Dct1Butterfly9::default())
}
fn dct1_butterfly17() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly17;
Arc::new(Dct1Butterfly17::default())
}
}
impl Dct1Factory for f64 {
fn split_radix(
length: usize,
half_p1_dct1: SpectralExecutor<Self>,
half_dct3: SpectralExecutor<Self>,
) -> Returning<f64> {
use crate::type1::SplitRadixDct1;
Ok(Arc::new(SplitRadixDct1::new(
length,
half_p1_dct1,
half_dct3,
)?))
}
fn dct1_fft(length: usize) -> Returning<Self> {
use crate::type1::Dct1Fft;
Ok(Arc::new(Dct1Fft::new(length)?))
}
fn dct1_butterfly2() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly2;
Arc::new(Dct1Butterfly2::default())
}
fn dct1_butterfly3() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly3;
Arc::new(Dct1Butterfly3::default())
}
fn dct1_butterfly4() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly4;
Arc::new(Dct1Butterfly4::default())
}
fn dct1_butterfly5() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly5;
Arc::new(Dct1Butterfly5::default())
}
fn dct1_butterfly6() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly6;
Arc::new(Dct1Butterfly6::default())
}
fn dct1_butterfly7() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly7;
Arc::new(Dct1Butterfly7::default())
}
fn dct1_butterfly8() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly8;
Arc::new(Dct1Butterfly8::default())
}
fn dct1_butterfly9() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly9;
Arc::new(Dct1Butterfly9::default())
}
fn dct1_butterfly17() -> SpectralExecutor<Self> {
use crate::type1::Dct1Butterfly17;
Arc::new(Dct1Butterfly17::default())
}
}