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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//! # Router Trait — сигнальная маршрутизация
//!
//! `Router` — семантически отдельный тип графовых узлов, предназначенных
//! исключительно для маршрутизации сигналов (микшеры, матричные коммутаторы,
//! селекторы). В отличие от `Processor`, который выполняет DSP-преобразование
//! сигнала, `Router` только перераспределяет входные сигналы по выходам
//! с возможностью динамического изменения топологии соединений.
//!
//! ## Различия с Processor
//!
//! | Характеристика | Processor | Router |
//! |---|---|---|
//! | Количество I/O | Фиксированное | Динамическое N→M |
//! | DSP | Есть (фильтр, эффект) | Нет (только сумма/коммутация) |
//! | Топология | Известна на этапе сборки | Может меняться runtime |
//! | Визуализация | Прямоугольник (Р-схема) | Ромб (Р-схема, условие) |
use crateClockTick;
use crateSignalNode;
use crateProcessResult;
use crateTranscendental;
/// Маршрутизатор сигналов — N входов, M выходов, конфигурируемая матрица.
///
/// В отличие от `Processor::process()`, который выполняет DSP, `Router`
/// только перераспределяет входные сигналы по выходам. Маршрутизатор
/// сам управляет своими выходными портами через `SignalNode::output_port_mut()`.
///
/// `TapeLoop` получается не через этот трейт, а через реестр ресурсов графа
/// — см. `GraphBuilder::add_resource()` и `SignalNode::init()`.