crdt: Relax some of the type constraints

Signed-off-by: Alexis Sellier <alexis@radicle.xyz>
This commit is contained in:
Alexis Sellier 2022-11-26 21:50:27 +01:00
parent c7d5ffe51b
commit c5225c64cd
No known key found for this signature in database
2 changed files with 7 additions and 11 deletions

View File

@ -70,9 +70,7 @@ impl<K, V, C> Default for LWWMap<K, V, C> {
} }
} }
impl<K: Ord, V: Semilattice + PartialOrd + Eq, C: Copy + Ord> FromIterator<(K, V, C)> impl<K: Ord, V: Semilattice + PartialOrd + Eq, C: Ord> FromIterator<(K, V, C)> for LWWMap<K, V, C> {
for LWWMap<K, V, C>
{
fn from_iter<I: IntoIterator<Item = (K, V, C)>>(iter: I) -> Self { fn from_iter<I: IntoIterator<Item = (K, V, C)>>(iter: I) -> Self {
let mut map = LWWMap::default(); let mut map = LWWMap::default();
for (k, v, c) in iter.into_iter() { for (k, v, c) in iter.into_iter() {
@ -82,9 +80,7 @@ impl<K: Ord, V: Semilattice + PartialOrd + Eq, C: Copy + Ord> FromIterator<(K, V
} }
} }
impl<K: Ord, V: Semilattice + PartialOrd + Eq, C: Ord + Copy> Extend<(K, V, C)> impl<K: Ord, V: Semilattice + PartialOrd + Eq, C: Ord> Extend<(K, V, C)> for LWWMap<K, V, C> {
for LWWMap<K, V, C>
{
fn extend<I: IntoIterator<Item = (K, V, C)>>(&mut self, iter: I) { fn extend<I: IntoIterator<Item = (K, V, C)>>(&mut self, iter: I) {
for (k, v, c) in iter.into_iter() { for (k, v, c) in iter.into_iter() {
self.insert(k, v, c); self.insert(k, v, c);
@ -96,7 +92,7 @@ impl<K, V, C> Semilattice for LWWMap<K, V, C>
where where
K: Ord, K: Ord,
V: Semilattice + PartialOrd + Eq, V: Semilattice + PartialOrd + Eq,
C: Ord + Copy + Default, C: Ord + Default,
{ {
fn merge(&mut self, other: Self) { fn merge(&mut self, other: Self) {
for (k, v) in other.inner.into_iter() { for (k, v) in other.inner.into_iter() {

View File

@ -6,7 +6,7 @@ pub struct LWWSet<T, C> {
inner: LWWMap<T, (), C>, inner: LWWMap<T, (), C>,
} }
impl<T: Ord, C: Ord + Copy> LWWSet<T, C> { impl<T: Ord, C: Ord> LWWSet<T, C> {
pub fn singleton(value: T, clock: C) -> Self { pub fn singleton(value: T, clock: C) -> Self {
Self { Self {
inner: LWWMap::from_iter([(value, (), clock)]), inner: LWWMap::from_iter([(value, (), clock)]),
@ -38,7 +38,7 @@ impl<T, C> Default for LWWSet<T, C> {
} }
} }
impl<T: Ord, C: Copy + Ord> FromIterator<(T, C)> for LWWSet<T, C> { impl<T: Ord, C: Ord> FromIterator<(T, C)> for LWWSet<T, C> {
fn from_iter<I: IntoIterator<Item = (T, C)>>(iter: I) -> Self { fn from_iter<I: IntoIterator<Item = (T, C)>>(iter: I) -> Self {
let mut set = LWWSet::default(); let mut set = LWWSet::default();
for (v, c) in iter.into_iter() { for (v, c) in iter.into_iter() {
@ -48,7 +48,7 @@ impl<T: Ord, C: Copy + Ord> FromIterator<(T, C)> for LWWSet<T, C> {
} }
} }
impl<T: Ord, C: Ord + Copy> Extend<(T, C)> for LWWSet<T, C> { impl<T: Ord, C: Ord> Extend<(T, C)> for LWWSet<T, C> {
fn extend<I: IntoIterator<Item = (T, C)>>(&mut self, iter: I) { fn extend<I: IntoIterator<Item = (T, C)>>(&mut self, iter: I) {
for (v, c) in iter.into_iter() { for (v, c) in iter.into_iter() {
self.insert(v, c); self.insert(v, c);
@ -59,7 +59,7 @@ impl<T: Ord, C: Ord + Copy> Extend<(T, C)> for LWWSet<T, C> {
impl<T, C> Semilattice for LWWSet<T, C> impl<T, C> Semilattice for LWWSet<T, C>
where where
T: Ord, T: Ord,
C: Ord + Copy + Default, C: Ord + Default,
{ {
fn merge(&mut self, other: Self) { fn merge(&mut self, other: Self) {
self.inner.merge(other.inner); self.inner.merge(other.inner);