orx_parallel/extendable/par_extend_impl/
hash_set.rs1use crate::extendable::par_extend_core::ParExtendCore;
2use alloc::vec::Vec;
3use core::hash::Hash;
4use std::collections::HashSet;
5
6impl<T: Hash + Eq + Send> ParExtendCore<T> for HashSet<T> {
7 type ThreadValues = Self;
8
9 type OrderedThreadValues = Self;
10
11 fn new_thread_values() -> Self::ThreadValues {
12 Default::default()
13 }
14
15 fn new_ordered_thread_values() -> Self::OrderedThreadValues {
16 Default::default()
17 }
18
19 fn add_thread_value(collected: &mut Self::ThreadValues, value: T) {
22 _ = collected.insert(value);
23 }
24
25 fn add_thread_values(collected: &mut Self::ThreadValues, values: impl IntoIterator<Item = T>) {
26 collected.extend(values)
27 }
28
29 fn add_ordered_thread_value(collected: &mut Self::OrderedThreadValues, _idx: usize, value: T) {
30 Self::add_thread_value(collected, value);
31 }
32
33 fn add_ordered_thread_values(
34 collected: &mut Self::OrderedThreadValues,
35 _idx: usize,
36 values: impl IntoIterator<Item = T>,
37 ) {
38 Self::add_thread_values(collected, values);
39 }
40
41 fn add_ordered_thread_optionals(
44 collected: &mut Self::OrderedThreadValues,
45 _idx: usize,
46 values: impl IntoIterator<Item = Option<T>>,
47 ) -> Option<()> {
48 for value in values {
49 _ = collected.insert(value?);
50 }
51 Some(())
52 }
53
54 fn add_ordered_thread_fallibles<E>(
57 collected: &mut Self::OrderedThreadValues,
58 _idx: usize,
59 values: impl IntoIterator<Item = Result<T, E>>,
60 ) -> Result<(), E> {
61 for value in values {
62 _ = collected.insert(value?);
63 }
64 Ok(())
65 }
66
67 fn add_one(&mut self, value: T) {
70 _ = self.insert(value);
71 }
72
73 fn extend_merge_infallibles(&mut self, results: Vec<Self::ThreadValues>) {
76 for result in results {
77 self.extend(result);
78 }
79 }
80
81 fn extend_merge_ordered_infallibles(&mut self, results: Vec<Self::OrderedThreadValues>) {
82 self.extend_merge_infallibles(results);
83 }
84}