use crate::demand::{self, RequestBound};
use crate::time::{Duration, Offset};
use crate::{fixed_point, supply};
#[allow(non_snake_case)]
pub fn dedicated_uniproc_rta<RBF>(tasks_rbf: &RBF, limit: Duration) -> fixed_point::SearchResult
where
RBF: RequestBound + ?Sized,
{
let proc = supply::Dedicated::new();
let L = fixed_point::search(&proc, limit, |L| tasks_rbf.service_needed(L))?;
let rta = |A: Offset| {
let total_service = tasks_rbf.service_needed(A.closed_since_time_zero());
Duration::from(total_service) - A.since_time_zero()
};
let max_offset = Offset::from_time_zero(L);
let search_space = demand::step_offsets(&tasks_rbf).take_while(|A| *A < max_offset);
Ok(search_space.map(rta).max().unwrap_or_else(Duration::zero))
}