use std::ops::Range; pub trait ECoreSelector { fn next_core(&mut self) -> i32; } //TODO: better core selection e.g. try to keep task on the same core pub struct RoundRobinSelector { offset: u32, num_cores: u32, last_used: u32 } impl RoundRobinSelector { pub fn new(e_cores: Range) -> RoundRobinSelector { Self { offset: e_cores.start, num_cores: e_cores.len() as u32, last_used: 0, } } } impl ECoreSelector for RoundRobinSelector { fn next_core(&mut self) -> i32 { self.last_used += 1; (self.offset + (self.last_used % self.num_cores)) as i32 } }