use crate::actors::mailbox::Mailbox;
use crate::actors::envelope::Envelope;
use std::collections::vec_deque::VecDeque;
use crate::actors::abstract_actor_ref::AbstractActorRef;
pub struct UnboundMailbox {
is_planned: bool,
queue: VecDeque<Envelope>
}
impl UnboundMailbox {
pub fn new() -> UnboundMailbox {
UnboundMailbox {
is_planned: false,
queue: VecDeque::new()
}
}
}
impl Mailbox for UnboundMailbox {
fn set_planned(self: &mut Self, planned: bool) {
self.is_planned = planned;
}
fn is_planned(self: &Self) -> bool {
self.is_planned
}
fn enqueue(self: &mut Self, envelope: Envelope) {
self.queue.push_back(envelope);
}
fn dequeue(self: &mut Self) -> Envelope {
self.queue.pop_front().unwrap()
}
fn has_messages(self: &Self) -> bool {
self.queue.len() > 0
}
fn clean_up(self: &mut Self, sender: Box<AbstractActorRef>, dead_letters: Box<AbstractActorRef>) {
let mut dead_letters = dead_letters;
while true {
if self.queue.len() > 0 {
dead_letters.tell(Box::new(self.queue.pop_front().unwrap()), Some(sender.clone()));
} else {
break;
}
}
}
}