Implement Ord manually for time::Lamport

This commit is contained in:
Max Brunsfeld 2021-06-03 15:33:43 -07:00
parent 33472ebf7e
commit f6bb1a9572

View file

@ -15,7 +15,7 @@ pub struct Local {
pub value: Seq,
}
#[derive(Clone, Copy, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[derive(Clone, Copy, Default, Eq, Hash, PartialEq)]
pub struct Lamport {
pub replica_id: ReplicaId,
pub value: Seq,
@ -139,6 +139,21 @@ impl PartialOrd for Global {
}
}
impl Ord for Lamport {
fn cmp(&self, other: &Self) -> Ordering {
// Use the replica id to break ties between concurrent events.
self.value
.cmp(&other.value)
.then_with(|| self.replica_id.cmp(&other.replica_id))
}
}
impl PartialOrd for Lamport {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
impl Lamport {
pub fn new(replica_id: ReplicaId) -> Self {
Self {