s2gpp 1.0.2

Algorithm for Highly Efficient Detection of Correlation Anomalies in Multivariate Time Series
Documentation
use actix::{Message, Recipient};
use actix_telepathy::RemoteMessage;

#[derive(Default, Clone)]
pub struct DirectProtocol<T: Message + RemoteMessage + Clone> {
    n_total: usize,
    pub n_received: usize,
    n_sent: usize,
    buffer: Vec<T>,
}

impl<T: Message + RemoteMessage + Clone> DirectProtocol<T> {
    pub fn start(&mut self, n_total: usize) {
        self.n_total = n_total;
    }

    pub fn received(&mut self, msg: &T) -> bool {
        if self.is_running() {
            self.n_received += 1;
            true
        } else {
            self.buffer.push(msg.clone());
            false
        }
    }

    pub fn sent(&mut self) {
        self.n_sent += 1;
    }

    pub fn is_running(&self) -> bool {
        (self.n_received < self.n_total) || (self.n_sent < self.n_total)
    }

    pub fn resolve_buffer(&mut self, rec: Recipient<T>)
    where
        T::Result: Send,
    {
        for _ in 0..self.buffer.len() {
            rec.do_send(self.buffer.remove(0)).unwrap();
        }
    }
}