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