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}