blob: 166438e78cfe4d1aa31c161c8c8f74afe17e7a53 [file] [log] [blame]
use task::Task;
use std::sync::Arc;
use crossbeam_channel::{unbounded, Receiver, Sender};
#[derive(Debug)]
pub(crate) struct Queue {
// TODO(stjepang): Use a custom, faster MPMC queue implementation that supports `steal_many()`.
chan: (Sender<Arc<Task>>, Receiver<Arc<Task>>),
}
// ===== impl Queue =====
impl Queue {
/// Create a new, empty, `Queue`.
pub fn new() -> Queue {
Queue {
chan: unbounded(),
}
}
/// Push a task onto the queue.
#[inline]
pub fn push(&self, task: Arc<Task>) {
self.chan.0.send(task).unwrap();
}
/// Pop a task from the queue.
#[inline]
pub fn pop(&self) -> Option<Arc<Task>> {
self.chan.1.try_recv().ok()
}
}