surge-biquad 0.2.12-alpha.0

biquad filters from the surge synthesizer
crate::ix!();

impl Init for BiquadFilter {

    fn init(&mut self) {
        self.a1        = Align16(VLag::new_x87());
        self.a2        = Align16(VLag::new_x87());
        self.b0        = Align16(VLag::new_x87());
        self.b1        = Align16(VLag::new_x87());
        self.b2        = Align16(VLag::new_x87());
        self.reg0      = Align16(VDouble::default());
        self.reg1      = Align16(VDouble::default());
        self.first_run = true;
    }
}

impl BiquadFilter {

    pub fn new(
        tuner:  & TunerHandle,
        tables: & TablesHandle,
        srunit: & SampleRateHandle,
    ) -> Self {

        Self {
            tuner:      tuner.clone(),
            tables:     tables.clone(),
            srunit:     srunit.clone(),
            a1:         Align16(VLag::new_x87()),
            a2:         Align16(VLag::new_x87()),
            b0:         Align16(VLag::new_x87()),
            b1:         Align16(VLag::new_x87()),
            b2:         Align16(VLag::new_x87()),
            reg0:       Align16(VDouble::default()),
            reg1:       Align16(VDouble::default()),
            first_run:  true
        }
    }

    pub fn new_with_blocksize<T: TryInto<i32>>(
        tuner:  & TunerHandle,
        tables: & TablesHandle,
        srunit: & SampleRateHandle,
        bs: T) -> Self 
        where <T as std::convert::TryInto<i32>>::Error: std::fmt::Debug
    {
        let mut x = Self::new(tuner,tables,srunit);
        x.set_blocksize(bs.try_into().unwrap());
        x
    }
}