use crate::prelude::*;
use std::marker::PhantomData;
#[derive(Copy, Clone, Debug, Default)]
pub struct Flip;
impl Map for Flip {
type Input = smp::Stereo;
type Output = smp::Stereo;
fn eval(&self, x: smp::Stereo) -> smp::Stereo {
x.flip()
}
}
#[derive(Clone, Copy, Debug, Default)]
pub struct Pw<S: smp::Sample, F: Map<Input = f64, Output = f64>> {
pub func: F,
phantom: PhantomData<S>,
}
impl<S: smp::Sample, F: Map<Input = f64, Output = f64>> Pw<S, F> {
pub const fn new(func: F) -> Self {
Self {
func,
phantom: PhantomData,
}
}
}
impl<S: smp::Sample, F: Map<Input = f64, Output = f64>> Map for Pw<S, F> {
type Input = S;
type Output = S;
fn eval(&self, x: S) -> S {
x.map(|y| self.func.eval(*y))
}
}