mirror of
https://github.com/rtic-rs/rtic.git
synced 2025-12-19 06:15:45 +01:00
36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
use std::collections::{BTreeSet, HashMap};
|
|
|
|
use crate::syntax::ast::App;
|
|
|
|
pub fn app(app: &mut App, settings: &Settings) {
|
|
// "compress" priorities
|
|
// If the user specified, for example, task priorities of "1, 3, 6",
|
|
// compress them into "1, 2, 3" as to leave no gaps
|
|
if settings.optimize_priorities {
|
|
// all task priorities ordered in ascending order
|
|
let priorities = app
|
|
.hardware_tasks
|
|
.values()
|
|
.map(|task| Some(task.args.priority))
|
|
.chain(
|
|
app.software_tasks
|
|
.values()
|
|
.map(|task| Some(task.args.priority)),
|
|
)
|
|
.collect::<BTreeSet<_>>();
|
|
|
|
let map = priorities
|
|
.iter()
|
|
.cloned()
|
|
.zip(1..)
|
|
.collect::<HashMap<_, _>>();
|
|
|
|
for task in app.hardware_tasks.values_mut() {
|
|
task.args.priority = map[&Some(task.args.priority)];
|
|
}
|
|
|
|
for task in app.software_tasks.values_mut() {
|
|
task.args.priority = map[&Some(task.args.priority)];
|
|
}
|
|
}
|
|
}
|