[][src]Struct open_vaf::data_structures::WorkQueue

pub struct WorkQueue<T: Idx + From<usize>> {
    pub deque: VecDeque<T>,
    pub set: BitSet<T>,
}

A work queue is a handy data structure for tracking work left to do. (For example, basic blocks left to process.) It is basically a de-duplicating queue; so attempting to insert X if X is already enqueued has no effect. This implementation assumes that the elements are dense indices, so it can allocate the queue to size and also use a bit set to track occupancy.

Fields

deque: VecDeque<T>set: BitSet<T>

Implementations

impl<T: Idx + From<usize>> WorkQueue<T>[src]

pub fn with_all(len_idx: T) -> Self[src]

Creates a new work queue with all the elements from (0..len).

pub fn with_none(len_idx: T) -> Self[src]

Creates a new work queue that starts empty, where elements range from (0..len).

pub fn insert(&mut self, element: T) -> bool[src]

Attempt to enqueue element in the work queue. Returns false if it was already present.

pub fn pop(&mut self) -> Option<T>[src]

Attempt to pop an element from the work queue.

pub fn take(&mut self) -> Option<T>[src]

Attempt to take an element from from the work queue This function does not remove the item from the iternal set As such any element removed using take can never be inserted again. For must use cases [pop]should be used

This is useful when you want to write a worklist based algorithm that processes every element exactly one

pub fn is_empty(&self) -> bool[src]

Returns true if nothing is enqueued.

Trait Implementations

impl<I: Idx + From<usize> + Debug> Debug for WorkQueue<I>[src]

impl<I: Idx + From<usize>> From<BitSet<I>> for WorkQueue<I>[src]

Auto Trait Implementations

impl<T> RefUnwindSafe for WorkQueue<T> where
    T: RefUnwindSafe

impl<T> Send for WorkQueue<T> where
    T: Send

impl<T> Sync for WorkQueue<T> where
    T: Sync

impl<T> Unpin for WorkQueue<T> where
    T: Unpin

impl<T> UnwindSafe for WorkQueue<T> where
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.