aboutsummaryrefslogtreecommitdiff
path: root/rtic-macros/src/syntax/optimize.rs
diff options
context:
space:
mode:
authorGravatar Henrik Tjäder <henrik@tjaders.com> 2023-02-04 16:47:17 +0100
committerGravatar Henrik Tjäder <henrik@tjaders.com> 2023-03-01 00:35:13 +0100
commit9e445b3583c15c7701f3167eaa8dfe4afd541691 (patch)
tree167565d51598f42c0454d60b34e1170589ae1056 /rtic-macros/src/syntax/optimize.rs
parent4124fbdd61ff823c6217a2a16ebb4d813146116c (diff)
downloadrtic-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.rs36
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)];
+ }
+ }
+}