Skip to main content

parameterized_algorithm

Macro parameterized_algorithm 

Source
macro_rules! parameterized_algorithm {
    (
        $(#[$struct_meta:meta])*
        $vis:vis struct $name:ident<$($generic:ident: $bound:path),+> {
            params: {
                $(
                    $(#[$param_meta:meta])*
                    $param_name:ident : $param_type:ty = $param_default:expr
                ),* $(,)?
            },
            state: {
                $(
                    $(#[$state_meta:meta])*
                    $state_name:ident : $state_type:ty = $state_default:expr
                ),* $(,)?
            },
            update: $update:expr,
            process: $process:expr
        }
    ) => { ... };
}
Expand description

Макрос для создания алгоритма с параметрами

§Пример

use rill_core_dsp::parameterized_algorithm;
use rill_core::math::Transcendental;

parameterized_algorithm! {
    /// Фильтр с изменяемой частотой среза
    #[derive(Debug, Clone, Copy)]
    pub struct LowPass<T: Transcendental> {
        params: {
            /// Частота среза в Hz
            cutoff: T = T::from_f32(1000.0),
            /// Добротность
            q: T = T::from_f32(0.707),
        },
        state: {
            /// Внутреннее состояние фильтра
            y1: T = T::ZERO,
            y2: T = T::ZERO,
        },
        update: |this| {
            // Обновление коэффициентов при изменении параметров
        },
        process: |this, input| {
            // Процессинг с текущими параметрами
            input
        }
    }
}