dope_core/driver/schedule/
progress.rs1use std::{mem, time};
2
3use o3::cell::region;
4
5use crate::driver::schedule;
6
7#[must_use]
9#[derive(Clone, Copy, Debug, PartialEq, Eq)]
10pub enum Progress<'d> {
11 Runnable,
12 Waiting(schedule::Wait<'d>),
13 Quiescent,
14}
15
16impl<'d> Progress<'d> {
17 pub fn waiting(region: ®ion::Token<'d>) -> Self {
18 Self::Waiting(schedule::Wait::event(region))
19 }
20
21 pub fn until(region: ®ion::Token<'d>, deadline: time::Instant) -> Self {
22 Self::Waiting(schedule::Wait::until(region, deadline))
23 }
24
25 pub fn reduce(self, other: Self) -> Self {
26 match (self, other) {
27 (Self::Runnable, _) | (_, Self::Runnable) => Self::Runnable,
28 (Self::Waiting(left), Self::Waiting(right)) => Self::Waiting(left.reduce(right)),
29 (waiting @ Self::Waiting(_), Self::Quiescent)
30 | (Self::Quiescent, waiting @ Self::Waiting(_)) => waiting,
31 (Self::Quiescent, Self::Quiescent) => Self::Quiescent,
32 }
33 }
34}
35
36const _: () = assert!(mem::size_of::<Progress<'static>>() <= 24);