[−][src]Struct open_vaf::data_structures::WorkQueue
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,
T: RefUnwindSafe,
impl<T> Send for WorkQueue<T> where
T: Send,
T: Send,
impl<T> Sync for WorkQueue<T> where
T: Sync,
T: Sync,
impl<T> Unpin for WorkQueue<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for WorkQueue<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,