icentral-node-queue 0.1.0

Efficient and dependable queue management for node identifiers, ideal for graph operations such as BFS.
Documentation
crate::ix!();

///-----------------
#[derive(Debug)]
pub struct NodeIdQueue {
    name: String,
    data: Queue<NodeId>,
}

impl Named for NodeIdQueue {

    fn name(&self) -> Cow<'_, str> {
        Cow::Borrowed(&self.name)
    }
}

impl CreateNamedEmpty for NodeIdQueue {

    fn empty(name: &str) -> Self {
        Self {
            name: name.to_owned(),
            data: Queue::default(),
        }
    }
}

impl NodeIdQueue {

    pub fn len(&self) -> usize {
        self.data.len()
    }

    pub fn peek(&mut self) -> Option<NodeId> {

        debug!("peeking the NodeIdQueue {} of len: {}", self.name, self.len());

        self.data.peek()
    }

    pub fn is_empty(&self) -> bool {

        let is_empty = self.data.is_empty();

        debug!("checking whether the NodeIdQueue {} is empty? {}", self.name, is_empty);

        is_empty
    }

    pub fn new(first: NodeId, name: &str) -> Self {

        debug!("creating new NodeIdQueue named {} starting with node {}", name, first);

        let mut queue = NodeIdQueue::empty(name);

        queue.enqueue(first);

        queue
    }

    pub fn enqueue(&mut self, n: NodeId) {

        debug!("enqueuing NodeId {} into NodeIdQueue {}", n, self.name);

        self.data.queue(n);
    }

    pub fn dequeue(&mut self) -> Option<NodeId> {

        let maybe_node = self.data.dequeue();

        if let Some(node) = maybe_node {

            debug!("dequeued NodeId {:?} from NodeIdQueue {}", node, self.name);

        } else {

            debug!("attempted dequeue of NodeIdQueue {}, but there are no more nodes left on the queue!", self.name);
        }

        maybe_node
    }
}