diff options
Diffstat (limited to 'src/e_core_selector.rs')
| -rw-r--r-- | src/e_core_selector.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/e_core_selector.rs b/src/e_core_selector.rs new file mode 100644 index 0000000..76d8233 --- /dev/null +++ b/src/e_core_selector.rs @@ -0,0 +1,30 @@ +use std::ops::Range; + +pub trait ECoreSelector { + fn next_core(&mut self) -> i32; +} + +//TODO: better core selection e.g. try to leave task on the same core +pub struct RoundRobinSelector { + offset: u32, + num_cores: u32, + last_used: u32 +} + +impl RoundRobinSelector { + //TODO: use range instead + pub fn new(e_cores: Range<u32>) -> 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.last_used % self.num_cores) as i32 + } +}
\ No newline at end of file |
