use karlcommon::{Condition, Schedule}; use crate::TASKS; pub fn schedule_dynamic() { let mut tasks = TASKS.write().unwrap(); let mut colliders = vec![]; let mut dynamic = vec![]; for t in tasks.values_mut() { if t.schedule.is_dynamic() { dynamic.push(t) } else { colliders.push(t) } } dynamic.sort_by_key(|t| { if let Schedule::Dynamic { priority, .. } = t.schedule { // TODO increase precision by using floats (priority * 1000.0) as i64 } else { 0 } }); let cond = Condition::Invert(box Condition::Or( colliders .iter() .map(|c| match &c.schedule { Schedule::Never => Condition::Never, Schedule::Condition(c) => c.clone(), Schedule::Static(r) => Condition::Range { min: r.start, max: r.end, modulus: None, prop: karlcommon::Property::Unix, }, Schedule::Dynamic { .. } => unreachable!(), }) .collect(), )); println!("{:?}", cond); while dynamic.len() != 0 { todo!() } }