None
PL
Non-interleaving Linear Sequence (LSeq) CRDT
[]
Bartosz Sypytkowski
#[derive(Debug, Clone, PartialEq, Eq, Ord, PartialOrd, Hash)] pub struct LSeq<K, V> { peer: PeerId, entries: BTreeMap<K, Option<V>>, } impl<K, V> LSeq<K, V> where K: FractionalIndex, { pub fn insert_range<R>(&mut self, index: usize, range: R) where R: IntoIterator<Item = V>, { let mut iter = self.entries.keys(); // pick starting left and right neighbours let mut left = if index > 0 { iter.nth(index - 1).cloned() } else { None }; let right = iter.next().cloned(); for value in range { // generate fractional index in between left/right let key = K::new(self.peer, left.as_ref(), right.as_ref()); self.entries.insert(key.clone(), Some(value)); // set newly generated key as a new left neighbor for the next // element left = Some(key); } } } #[derive(Clone, PartialEq, Eq, Ord, PartialOrd, Hash)]…