diff --git a/src/iter.rs b/src/iter.rs index ce50e739..4063862f 100644 --- a/src/iter.rs +++ b/src/iter.rs @@ -118,9 +118,13 @@ pub struct Iter<'a, K, V, S = RandomState, M = DashMap> { current: Option>, } -impl<'i, K: Clone + Hash + Eq, V: Clone, S: Clone + BuildHasher> Clone for Iter<'i, K, V, S> { +impl<'i, K, V, S, M> Clone for Iter<'i, K, V, S, M> { fn clone(&self) -> Self { - Iter::new(self.map) + Iter { + map: self.map, + shard_i: self.shard_i, + current: self.current.clone(), + } } } diff --git a/src/iter_set.rs b/src/iter_set.rs index 619a5b50..64af6f8d 100644 --- a/src/iter_set.rs +++ b/src/iter_set.rs @@ -1,5 +1,6 @@ use crate::setref::multiple::RefMulti; use crate::t::Map; +use crate::DashMap; use core::hash::{BuildHasher, Hash}; pub struct OwningIter { @@ -34,10 +35,18 @@ where { } -pub struct Iter<'a, K, S, M> { +pub struct Iter<'a, K, S, M = DashMap> { inner: crate::iter::Iter<'a, K, (), S, M>, } +impl<'i, K, S, M> Clone for Iter<'i, K, S, M> { + fn clone(&self) -> Self { + Iter { + inner: Clone::clone(&self.inner), + } + } +} + unsafe impl<'a, 'i, K, S, M> Send for Iter<'i, K, S, M> where K: 'a + Eq + Hash + Send,