use std::collections::HashMap;
#[derive(Debug, Clone, Default)]
pub struct SchedulingContext {
pub current_time_ms: i64,
pub remaining_work: HashMap<String, i64>,
pub next_queue_length: HashMap<String, usize>,
pub resource_utilization: HashMap<String, f64>,
pub arrival_times: HashMap<String, i64>,
pub average_processing_time: Option<f64>,
}
impl SchedulingContext {
pub fn at_time(current_time_ms: i64) -> Self {
Self {
current_time_ms,
..Default::default()
}
}
pub fn with_remaining_work(mut self, task_id: impl Into<String>, ms: i64) -> Self {
self.remaining_work.insert(task_id.into(), ms);
self
}
pub fn with_next_queue(mut self, task_id: impl Into<String>, length: usize) -> Self {
self.next_queue_length.insert(task_id.into(), length);
self
}
pub fn with_utilization(mut self, resource_id: impl Into<String>, load: f64) -> Self {
self.resource_utilization.insert(resource_id.into(), load);
self
}
pub fn with_arrival_time(mut self, task_id: impl Into<String>, time_ms: i64) -> Self {
self.arrival_times.insert(task_id.into(), time_ms);
self
}
pub fn with_average_processing_time(mut self, avg_ms: f64) -> Self {
self.average_processing_time = Some(avg_ms);
self
}
}