diff options
author | 2023-02-04 16:47:17 +0100 | |
---|---|---|
committer | 2023-03-01 00:35:13 +0100 | |
commit | 9e445b3583c15c7701f3167eaa8dfe4afd541691 (patch) | |
tree | 167565d51598f42c0454d60b34e1170589ae1056 /rtic-macros/src/syntax/optimize.rs | |
parent | 4124fbdd61ff823c6217a2a16ebb4d813146116c (diff) | |
download | rtic-9e445b3583c15c7701f3167eaa8dfe4afd541691.tar.gz rtic-9e445b3583c15c7701f3167eaa8dfe4afd541691.tar.zst rtic-9e445b3583c15c7701f3167eaa8dfe4afd541691.zip |
Move rtic macros to repo root, tune xtask
Diffstat (limited to 'rtic-macros/src/syntax/optimize.rs')
-rw-r--r-- | rtic-macros/src/syntax/optimize.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/rtic-macros/src/syntax/optimize.rs b/rtic-macros/src/syntax/optimize.rs new file mode 100644 index 00000000..e83ba31b --- /dev/null +++ b/rtic-macros/src/syntax/optimize.rs @@ -0,0 +1,36 @@ +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)]; + } + } +} |