Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
crdt: Remove `Copy` bound on `LWWMap`
Alexis Sellier committed 3 years ago
commit d1360bbec0ff36caa2d5e6b2f0e2b47a5123a46f
parent 171b5a45f7486515b00d9e530f730962e003170a
1 file changed +9 -5
modified radicle-crdt/src/lwwmap.rs
@@ -10,7 +10,7 @@ pub struct LWWMap<K, V, C> {
    inner: BTreeMap<K, LWWReg<Option<V>, C>>,
}

-
impl<K: Ord, V: Semilattice + PartialOrd + Eq, C: PartialOrd + Ord + Copy> LWWMap<K, V, C> {
+
impl<K: Ord, V: Semilattice + PartialOrd + Eq, C: PartialOrd + Ord> LWWMap<K, V, C> {
    pub fn singleton(key: K, value: V, clock: C) -> Self {
        Self {
            inner: BTreeMap::from_iter([(key, LWWReg::new(Some(value), clock))]),
@@ -37,10 +37,14 @@ impl<K: Ord, V: Semilattice + PartialOrd + Eq, C: PartialOrd + Ord + Copy> LWWMa
    }

    pub fn remove(&mut self, key: K, clock: C) {
-
        self.inner
-
            .entry(key)
-
            .and_modify(|reg| reg.set(None, clock))
-
            .or_insert_with(|| LWWReg::new(None, clock));
+
        match self.inner.entry(key) {
+
            Entry::Occupied(mut e) => {
+
                e.get_mut().set(None, clock);
+
            }
+
            Entry::Vacant(e) => {
+
                e.insert(LWWReg::new(None, clock));
+
            }
+
        }
    }

    pub fn contains_key(&self, key: K) -> bool {