Scheduler

This commit is contained in:
2026-08-17 12:11:36 +02:00
parent 3e6f7ca46b
commit 0d8738cf9b
4 changed files with 77 additions and 20 deletions
View File
-13
View File
@@ -1,14 +1 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}
+76
View File
@@ -0,0 +1,76 @@
use std::{cmp::Ordering, collections::BinaryHeap};
#[derive(Copy, Debug, Clone)]
pub enum EventType {
Pause,
Stop,
Reset,
PIBusWriteComplete,
PIDMAComplete,
SIDMAComplete,
}
#[derive(Copy, Debug, Clone)]
pub struct Event {
time: u64,
event_type: EventType,
}
impl Eq for Event {}
impl PartialEq for Event {
fn eq(&self, other: &Self) -> bool {
self.time == other.time
&& matches!(
(self.event_type, other.event_type),
(EventType::Pause, EventType::Pause)
| (EventType::Stop, EventType::Stop)
| (EventType::Reset, EventType::Reset)
| (EventType::PIBusWriteComplete, EventType::PIBusWriteComplete)
| (EventType::PIDMAComplete, EventType::PIDMAComplete)
| (EventType::SIDMAComplete, EventType::SIDMAComplete)
)
}
}
impl Ord for Event {
fn cmp(&self, other: &Self) -> Ordering {
self.time.cmp(&other.time).reverse()
}
}
impl PartialOrd for Event {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
pub struct Scheduler {
events: BinaryHeap<Event>,
ticks: u64,
}
impl Scheduler {
pub fn new() -> Self {
Self {
events: BinaryHeap::new(),
ticks: 0,
}
}
pub fn enqueue_relative(&mut self, time: u64, event_type: EventType) {
self.enqueue_absolute(time + self.ticks, event_type)
}
pub fn enqueue_absolute(&mut self, time: u64, event_type: EventType) {
self.events.push(Event { time, event_type })
}
pub fn pop(&mut self) -> Option<Event> {
self.events.pop()
}
pub fn tick(&mut self, time: u64) {
self.ticks += time
}
}
+1 -7
View File
@@ -1,7 +1 @@
#![allow(unused_imports)]
use backend::add;
fn main() {
println!("Hello, world!");
}
fn main() {}