orx_parallel/extendable/par_extend_impl/
hash_map.rs1use crate::extendable::par_extend_core::ParExtendCore;
2use alloc::vec::Vec;
3use core::hash::Hash;
4use std::collections::HashMap;
5
6impl<K: Hash + Eq + Send, V: Send> ParExtendCore<(K, V)> for HashMap<K, V> {
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, (key, value): (K, V)) {
22 _ = collected.insert(key, value);
23 }
24
25 fn add_thread_values(
26 collected: &mut Self::ThreadValues,
27 values: impl IntoIterator<Item = (K, V)>,
28 ) {
29 collected.extend(values)
30 }
31
32 fn add_ordered_thread_value(
33 collected: &mut Self::OrderedThreadValues,
34 _idx: usize,
35 value: (K, V),
36 ) {
37 Self::add_thread_value(collected, value);
38 }
39
40 fn add_ordered_thread_values(
41 collected: &mut Self::OrderedThreadValues,
42 _idx: usize,
43 values: impl IntoIterator<Item = (K, V)>,
44 ) {
45 Self::add_thread_values(collected, values);
46 }
47
48 fn add_ordered_thread_optionals(
51 collected: &mut Self::OrderedThreadValues,
52 _idx: usize,
53 values: impl IntoIterator<Item = Option<(K, V)>>,
54 ) -> Option<()> {
55 for value in values {
56 let (key, value) = value?;
57 _ = collected.insert(key, value);
58 }
59 Some(())
60 }
61
62 fn add_ordered_thread_fallibles<E>(
65 collected: &mut Self::OrderedThreadValues,
66 _idx: usize,
67 values: impl IntoIterator<Item = Result<(K, V), E>>,
68 ) -> Result<(), E> {
69 for value in values {
70 let (key, value) = value?;
71 collected.insert(key, value);
72 }
73 Ok(())
74 }
75
76 fn add_one(&mut self, (key, value): (K, V)) {
79 _ = self.insert(key, value);
80 }
81
82 fn extend_merge_infallibles(&mut self, results: Vec<Self::ThreadValues>) {
85 for result in results {
86 self.extend(result);
87 }
88 }
89
90 fn extend_merge_ordered_infallibles(&mut self, results: Vec<Self::OrderedThreadValues>) {
91 self.extend_merge_infallibles(results);
92 }
93}