xsynth_core/
helpers.rs

1use std::sync::Arc;
2
3mod frequencies;
4pub use frequencies::*;
5
6mod simd;
7pub use simd::*;
8
9/// Take any f32 vec, set its length and fill it with the default value.
10pub fn prepapre_cache_vec<T: Copy>(vec: &mut Vec<T>, len: usize, default: T) {
11    if vec.len() < len {
12        vec.reserve(len - vec.len());
13    }
14    unsafe {
15        vec.set_len(len);
16    }
17    vec.fill(default);
18}
19
20/// Converts a dB value to 0-1 amplitude.
21pub fn db_to_amp(db: f32) -> f32 {
22    10f32.powf(db / 20.0)
23}
24
25/// Checks if two `Arc<T>` vecs are equal based on `Arc::ptr_eq`.
26pub fn are_arc_vecs_equal<T: ?Sized>(old: &[Arc<T>], new: &[Arc<T>]) -> bool {
27    // First, check if the lengths are the same
28    if old.len() != new.len() {
29        return false;
30    }
31
32    // Then, check each pair of elements using Arc::ptr_eq
33    for (old_item, new_item) in old.iter().zip(new.iter()) {
34        if !Arc::ptr_eq(old_item, new_item) {
35            return false;
36        }
37    }
38
39    true
40}