1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
use im::OrdSet as ArcOrdSet;
use pergola::{ArcOrdSetWithUnion, DefTraits, LatticeElt, Tuple2};
pub type PeerSetLD<Peer> = ArcOrdSetWithUnion<Peer>;
pub type PeerSetLE<Peer> = LatticeElt<PeerSetLD<Peer>>;
pub type CfgLD<Peer> = Tuple2<PeerSetLD<Peer>, PeerSetLD<Peer>>;
pub type CfgLE<Peer> = LatticeElt<CfgLD<Peer>>;
pub trait CfgLEExt<Peer: DefTraits> {
fn added_peers_elt(&self) -> &PeerSetLE<Peer>;
fn added_peers_elt_mut(&mut self) -> &mut PeerSetLE<Peer>;
fn added_peers(&self) -> &ArcOrdSet<Peer>;
fn added_peers_mut(&mut self) -> &mut ArcOrdSet<Peer>;
fn removed_peers_elt(&self) -> &PeerSetLE<Peer>;
fn removed_peers_elt_mut(&mut self) -> &mut PeerSetLE<Peer>;
fn removed_peers(&self) -> &ArcOrdSet<Peer>;
fn removed_peers_mut(&mut self) -> &mut ArcOrdSet<Peer>;
fn members(&self) -> ArcOrdSet<Peer>;
}
impl<Peer: DefTraits> CfgLEExt<Peer> for CfgLE<Peer> {
fn added_peers_elt(&self) -> &PeerSetLE<Peer> {
&self.value.0
}
fn added_peers_elt_mut(&mut self) -> &mut PeerSetLE<Peer> {
&mut self.value.0
}
fn added_peers(&self) -> &ArcOrdSet<Peer> {
&self.added_peers_elt().value
}
fn added_peers_mut(&mut self) -> &mut ArcOrdSet<Peer> {
&mut self.added_peers_elt_mut().value
}
fn removed_peers_elt(&self) -> &PeerSetLE<Peer> {
&self.value.1
}
fn removed_peers_elt_mut(&mut self) -> &mut PeerSetLE<Peer> {
&mut self.value.1
}
fn removed_peers(&self) -> &ArcOrdSet<Peer> {
&self.removed_peers_elt().value
}
fn removed_peers_mut(&mut self) -> &mut ArcOrdSet<Peer> {
&mut self.removed_peers_elt_mut().value
}
fn members(&self) -> ArcOrdSet<Peer> {
self.added_peers()
.clone()
.difference(self.removed_peers().clone())
}
}