use std::{collections::HashMap, sync::Arc};
use tokio::sync::Mutex;
use crate::{core::OutcomeTx, identity::TaskId};
mod slot;
pub(in crate::controller::engine) use slot::{
AdmissionTransition, PendingSubmission, ReplaceAction, SlotPhase, SlotState,
};
pub(in crate::controller::engine) struct CapacityPending {
pub(in crate::controller::engine) slot_name: Arc<str>,
pub(in crate::controller::engine) pending: PendingSubmission,
}
#[derive(Default)]
pub(in crate::controller::engine) struct ControllerState {
pub(in crate::controller::engine) slots: HashMap<Arc<str>, Arc<Mutex<SlotState>>>,
pub(in crate::controller::engine) queued_slots: HashMap<TaskId, Arc<str>>,
pub(in crate::controller::engine) capacity_pending: HashMap<TaskId, CapacityPending>,
pub(in crate::controller::engine) watchers: HashMap<TaskId, OutcomeTx>,
}
impl ControllerState {
pub(in crate::controller::engine) fn pending_len(&self) -> usize {
self.queued_slots.len() + self.capacity_pending.len()
}
}