ixa::plan

Struct Queue

Source
pub struct Queue<T, P: Eq + PartialEq + Ord> { /* private fields */ }
Expand description

A priority queue that stores arbitrary data sorted by time

Items of type T are stored in order by f64 time and called Plan<T>. Plans can have priorities given by some specified orderable type P. When plans are created they are sequentially assigned a PlanId that is a wrapped u64. If two plans are scheduled for the same time then the plan with the lowest priority is placed earlier. If two plans have the same time and priority then the plan that is scheduled first (i.e., that has the lowest id) is placed earlier.

The time, plan id, and priority are stored in a binary heap of Entry<P> objects. The data payload of the event is stored in a hash map by plan id. Plan cancellation occurs by removing the corresponding entry from the data hash map.

Implementations§

Source§

impl<T, P: Eq + PartialEq + Ord> Queue<T, P>

Source

pub fn new() -> Queue<T, P>

Create a new empty Queue<T>

Source

pub fn add_plan(&mut self, time: f64, data: T, priority: P) -> PlanId

Add a plan to the queue at the specified time

Returns a PlanId for the newly-added plan that can be used to cancel it if needed.

Source

pub fn cancel_plan(&mut self, plan_id: &PlanId) -> Option<T>

Cancel a plan that has been added to the queue

Source

pub fn is_empty(&self) -> bool

Source

pub fn next_time(&self) -> Option<f64>

Source

pub fn get_next_plan(&mut self) -> Option<Plan<T>>

Retrieve the earliest plan in the queue

Returns the next plan if it exists or else None if the queue is empty

Source

pub fn list_schedules(&self, at_most: usize) -> Vec<&PlanSchedule<P>>

Returns a list of length at_most, or unbounded if at_most=0, of active scheduled PlanSchedules ordered as they are in the queue itself.

Trait Implementations§

Source§

impl<T, P: Eq + PartialEq + Ord> Default for Queue<T, P>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<T, P> Freeze for Queue<T, P>

§

impl<T, P> RefUnwindSafe for Queue<T, P>

§

impl<T, P> Send for Queue<T, P>
where T: Send, P: Send,

§

impl<T, P> Sync for Queue<T, P>
where T: Sync, P: Sync,

§

impl<T, P> Unpin for Queue<T, P>
where P: Unpin, T: Unpin,

§

impl<T, P> UnwindSafe for Queue<T, P>
where T: UnwindSafe, P: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more