rtic_syntax/
optimize.rs
1use std::collections::{BTreeSet, HashMap};
2
3use crate::{ast::App, Settings};
4
5pub fn app(app: &mut App, settings: &Settings) {
6 if settings.optimize_priorities {
10 let priorities = app
12 .hardware_tasks
13 .values()
14 .map(|task| Some(task.args.priority))
15 .chain(
16 app.software_tasks
17 .values()
18 .map(|task| Some(task.args.priority)),
19 )
20 .collect::<BTreeSet<_>>();
21
22 let map = priorities
23 .iter()
24 .cloned()
25 .zip(1..)
26 .collect::<HashMap<_, _>>();
27
28 for task in app.hardware_tasks.values_mut() {
29 task.args.priority = map[&Some(task.args.priority)];
30 }
31
32 for task in app.software_tasks.values_mut() {
33 task.args.priority = map[&Some(task.args.priority)];
34 }
35 }
36}