Skip to main content

dope_runtime/executor/raw/
progress.rs

1use dope_core::driver::schedule::clock;
2use o3::base::cell::region;
3
4/// Read-only progress authority for one exact driver turn.
5#[derive(Clone, Copy)]
6#[must_use]
7pub struct Progress<'region, 'turn, 'd> {
8    region: &'region (
9        region::Token<region::Identity<'d>>,
10        region::Token<region::Identity<'d, 1>>,
11    ),
12    clock: clock::Clock<'turn, 'd>,
13}
14
15impl<'region, 'turn, 'd> Progress<'region, 'turn, 'd> {
16    pub(crate) const fn new(
17        region: &'region (
18            region::Token<region::Identity<'d>>,
19            region::Token<region::Identity<'d, 1>>,
20        ),
21        clock: clock::Clock<'turn, 'd>,
22    ) -> Self {
23        Self { region, clock }
24    }
25
26    pub const fn regions(
27        self,
28    ) -> &'region (
29        region::Token<region::Identity<'d>>,
30        region::Token<region::Identity<'d, 1>>,
31    ) {
32        self.region
33    }
34
35    pub const fn clock(self) -> clock::Clock<'turn, 'd> {
36        self.clock
37    }
38}
39
40const _: () = {
41    assert!(std::mem::size_of::<Progress<'_, '_, '_>>() == 2 * std::mem::size_of::<usize>());
42    assert!(std::mem::align_of::<Progress<'_, '_, '_>>() == std::mem::align_of::<usize>());
43};