dashmap/
iter_set.rs

1use crate::setref::multiple::RefMulti;
2use crate::t::Map;
3use core::hash::{BuildHasher, Hash};
4
5pub struct OwningIter<K, S> {
6    inner: crate::iter::OwningIter<K, (), S>,
7}
8
9impl<K: Eq + Hash, S: BuildHasher + Clone> OwningIter<K, S> {
10    pub(crate) fn new(inner: crate::iter::OwningIter<K, (), S>) -> Self {
11        Self { inner }
12    }
13}
14
15impl<K: Eq + Hash, S: BuildHasher + Clone> Iterator for OwningIter<K, S> {
16    type Item = K;
17
18    fn next(&mut self) -> Option<Self::Item> {
19        self.inner.next().map(|(k, _)| k)
20    }
21}
22
23unsafe impl<K, S> Send for OwningIter<K, S>
24where
25    K: Eq + Hash + Send,
26    S: BuildHasher + Clone + Send,
27{
28}
29
30unsafe impl<K, S> Sync for OwningIter<K, S>
31where
32    K: Eq + Hash + Sync,
33    S: BuildHasher + Clone + Sync,
34{
35}
36
37pub struct Iter<'a, K, S, M> {
38    inner: crate::iter::Iter<'a, K, (), S, M>,
39}
40
41unsafe impl<'a, 'i, K, S, M> Send for Iter<'i, K, S, M>
42where
43    K: 'a + Eq + Hash + Send,
44    S: 'a + BuildHasher + Clone,
45    M: Map<'a, K, (), S>,
46{
47}
48
49unsafe impl<'a, 'i, K, S, M> Sync for Iter<'i, K, S, M>
50where
51    K: 'a + Eq + Hash + Sync,
52    S: 'a + BuildHasher + Clone,
53    M: Map<'a, K, (), S>,
54{
55}
56
57impl<'a, K: Eq + Hash, S: 'a + BuildHasher + Clone, M: Map<'a, K, (), S>> Iter<'a, K, S, M> {
58    pub(crate) fn new(inner: crate::iter::Iter<'a, K, (), S, M>) -> Self {
59        Self { inner }
60    }
61}
62
63impl<'a, K: Eq + Hash, S: 'a + BuildHasher + Clone, M: Map<'a, K, (), S>> Iterator
64    for Iter<'a, K, S, M>
65{
66    type Item = RefMulti<'a, K>;
67
68    fn next(&mut self) -> Option<Self::Item> {
69        self.inner.next().map(RefMulti::new)
70    }
71}