use auto_impl::auto_impl;
use crate::time::{Duration, Service};
#[auto_impl(&, Box, Rc)]
pub trait SupplyBound {
fn provided_service(&self, delta: Duration) -> Service;
fn service_time(&self, demand: Service) -> Duration {
let mut t = Duration::from(demand);
loop {
let supply = self.provided_service(t);
if supply >= demand {
return t;
}
t += Duration::from(demand - supply);
}
}
}
mod constrained;
mod dedicated;
mod periodic;
pub use constrained::Constrained;
pub use dedicated::Dedicated;
pub use periodic::Periodic;
#[cfg(test)]
mod tests;