+fn adapt_loop(filt: &mut [i32], coeffs: &[i32], adapt: &[i32], val: i32) -> i32 {
+ let mut sum = 0i32;
+ for (coef, (res, adapt)) in filt.iter_mut().zip(coeffs.iter().zip(adapt.iter())) {
+ sum += *coef * *res;
+ if val < 0 {
+ *coef += *adapt;
+ } else if val > 0 {
+ *coef -= *adapt;
+ }
+ *coef = *coef << 16 >> 16;
+ }
+ sum
+}
+