asparit/std/
hash_set.rs

1use std::collections::HashSet;
2use std::hash::BuildHasher;
3use std::iter::FromIterator;
4
5use crate::{IntoParallelIterator, ParallelDrainFull};
6
7impl<'a, I, S> IntoParallelIterator<'a> for HashSet<I, S>
8where
9    I: Send + 'a,
10    S: BuildHasher,
11{
12    type Iter = <Vec<I> as IntoParallelIterator<'a>>::Iter;
13    type Item = I;
14
15    fn into_par_iter(self) -> Self::Iter {
16        let vec = Vec::from_iter(self);
17
18        vec.into_par_iter()
19    }
20}
21
22impl<'a, I, S> IntoParallelIterator<'a> for &'a HashSet<I, S>
23where
24    I: Send + Sync + 'a,
25    S: BuildHasher,
26{
27    type Iter = <Vec<&'a I> as IntoParallelIterator<'a>>::Iter;
28    type Item = &'a I;
29
30    fn into_par_iter(self) -> Self::Iter {
31        let vec = Vec::<&'a I>::from_iter(self);
32
33        vec.into_par_iter()
34    }
35}
36
37impl<'a, I, S> ParallelDrainFull<'a> for &'a mut HashSet<I, S>
38where
39    I: Send + 'a,
40    S: BuildHasher,
41{
42    type Iter = <Vec<I> as IntoParallelIterator<'a>>::Iter;
43    type Item = I;
44
45    fn par_drain(self) -> Self::Iter {
46        let vec = self.drain().collect::<Vec<_>>();
47
48        vec.into_par_iter()
49    }
50}