pub(crate) struct Scheduler {
items: BinaryHeap<PriorityQueueItem<Time, CommandType>>,
queued_commands: HashMap<CommandType, (Command, Time)>,
latest_time: Time,
last_time: Time,
delta_times: Histogram<Duration>,
cmd_type_counts: Counter<SimpleCommandType>,
}
Expand description
The priority queue driving the discrete event simulation. Different pieces of the simulation schedule Commands to happen at a specific time, and the Scheduler hands out the commands in order.
Fields§
§items: BinaryHeap<PriorityQueueItem<Time, CommandType>>
§queued_commands: HashMap<CommandType, (Command, Time)>
§latest_time: Time
§last_time: Time
§delta_times: Histogram<Duration>
§cmd_type_counts: Counter<SimpleCommandType>
Implementations§
source§impl Scheduler
impl Scheduler
pub fn new() -> Scheduler
pub fn push(&mut self, time: Time, cmd: Command)
pub fn update(&mut self, new_time: Time, cmd: Command)
pub fn cancel(&mut self, cmd: Command)
sourcepub fn peek_next_time(&self) -> Option<Time>
pub fn peek_next_time(&self) -> Option<Time>
This next command might’ve actually been rescheduled to a later time; the caller won’t know that here.
pub fn get_last_time(&self) -> Time
sourcepub fn get_next(&mut self) -> Option<Command>
pub fn get_next(&mut self) -> Option<Command>
This API is safer than handing out a batch of items at a time, because while processing one item, we might change the priority of other items or add new items. Don’t make the caller reconcile those changes – just keep pulling items from here, one at a time.
pub fn describe_stats(&self) -> Vec<String>
Trait Implementations§
source§impl<'de> Deserialize<'de> for Scheduler
impl<'de> Deserialize<'de> for Scheduler
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for Scheduler
impl RefUnwindSafe for Scheduler
impl Send for Scheduler
impl Sync for Scheduler
impl Unpin for Scheduler
impl UnwindSafe for Scheduler
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.