sim_expr_tree_calc/calc/
scheduler.rs1use sim_incremental_core::ContinuationToken;
2
3use super::{CalcLimits, RequestId};
4
5#[derive(Clone, Copy, Debug, Eq, PartialEq)]
7pub struct AutomaticBudget {
8 pub max_requests: usize,
10 pub limits: CalcLimits,
12}
13
14impl AutomaticBudget {
15 #[must_use]
17 pub const fn new(max_requests: usize, limits: CalcLimits) -> Self {
18 Self {
19 max_requests,
20 limits,
21 }
22 }
23}
24
25impl Default for AutomaticBudget {
26 fn default() -> Self {
27 Self::new(16, CalcLimits::default())
28 }
29}
30
31#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
33pub struct AutomaticContinuation {
34 generation: u64,
35}
36
37impl AutomaticContinuation {
38 pub(super) const fn new(generation: u64) -> Self {
39 Self { generation }
40 }
41
42 #[must_use]
44 pub const fn generation(self) -> u64 {
45 self.generation
46 }
47}
48
49#[derive(Clone, Debug, Eq, PartialEq)]
51pub struct QueuedCalculation {
52 pub request_id: RequestId,
54 pub cell: String,
56 pub ready_at_ms: u64,
58 pub priority: i16,
60 pub sequence: u64,
62 pub bypasses: u8,
64 pub incremental_continuation: Option<ContinuationToken>,
66}
67
68#[derive(Clone, Debug, Eq, PartialEq)]
70pub struct AutomaticQueueSnapshot {
71 pub generation: u64,
73 pub next_sequence: u64,
75 pub entries: Vec<QueuedCalculation>,
77}
78
79#[derive(Clone, Debug, Eq, PartialEq)]
81pub struct AutomaticRun {
82 pub completed: Vec<RequestId>,
84 pub budget_exhausted: Vec<RequestId>,
86 pub continuation: Option<AutomaticContinuation>,
88}
89
90pub(super) const MAX_READY_BYPASSES: u8 = 3;