1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
ix!();

use crate::{
    DualDelay,
    DUAL_DELAY_MAX_DELAY_LENGTH,
};

impl DualDelay {

    pub fn dualdelay_set_buffer(&mut self) {

        if self.wpos + (BLOCK_SIZE as i32) >= (DUAL_DELAY_MAX_DELAY_LENGTH as i32) {

            for k in 0..BLOCK_SIZE
            {
                unsafe {
                    self.buffer[[0, ((self.wpos + k as i32) & (DUAL_DELAY_MAX_DELAY_LENGTH as i32 - 1)) as usize]] = 
                        *self.wetblock.li(k as isize);

                    self.buffer[[1, ((self.wpos + k as i32) & (DUAL_DELAY_MAX_DELAY_LENGTH as i32 - 1)) as usize]] = 
                        *self.wetblock.ri(k as isize);
                }
            }

        } else {

            copy_block(self.wetblock.l(), &mut self.buffer[[0, self.wpos as usize]], BLOCK_SIZE_QUAD);
            copy_block(self.wetblock.r(), &mut self.buffer[[1, self.wpos as usize]], BLOCK_SIZE_QUAD);
        }

        if self.wpos == 0 {

            for k in 0..FIR_IPOL_N
            {
                self.buffer[[0, k + DUAL_DELAY_MAX_DELAY_LENGTH]] =
                    self.buffer[[0, k]]; // copy buffer so FIR-core doesn't have to wrap

                self.buffer[[1, k + DUAL_DELAY_MAX_DELAY_LENGTH]] = self.buffer[[1,k]];
            }
        }
    }
}