minerva 0.2.0

Causal ordering for distributed systems
use crate::metis::{Dot, DotSet, Dotted, Retired};

mod branching;
mod hazards;
mod lifecycle;
mod linear;

use super::Seq;

fn claim(dots: &[Dot]) -> DotSet {
    let mut set = DotSet::new();
    for &dot in dots {
        let _ = set.insert(dot);
    }
    set
}

fn condense(replica: &mut Seq, retired: &DotSet) -> usize {
    let mut rhapsody = replica.store().clone();
    let excised = rhapsody.condense(&Retired::trust(retired.clone()));
    *replica = Dotted::try_new(rhapsody, replica.context().clone()).unwrap();
    excised
}