1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
use sum::Sum2; use super::{Consumer, ConsumerMulti, DistributedIterator, DistributedIteratorMulti}; impl<A: DistributedIterator, B: DistributedIterator<Item = A::Item>> DistributedIterator for Sum2<A, B> { type Item = A::Item; type Task = Sum2<A::Task, B::Task>; fn size_hint(&self) -> (usize, Option<usize>) { match self { Self::A(i) => i.size_hint(), Self::B(i) => i.size_hint(), } } fn next_task(&mut self) -> Option<Self::Task> { match self { Self::A(i) => i.next_task().map(Sum2::A), Self::B(i) => i.next_task().map(Sum2::B), } } } impl< A: DistributedIteratorMulti<Source>, B: DistributedIteratorMulti<Source, Item = A::Item>, Source, > DistributedIteratorMulti<Source> for Sum2<A, B> { type Item = A::Item; type Task = Sum2<A::Task, B::Task>; fn task(&self) -> Self::Task { match self { Self::A(i) => Sum2::A(i.task()), Self::B(i) => Sum2::B(i.task()), } } } impl<A: Consumer, B: Consumer<Item = A::Item>> Consumer for Sum2<A, B> { type Item = A::Item; fn run(self, i: &mut impl FnMut(Self::Item) -> bool) -> bool { match self { Self::A(task) => task.run(i), Self::B(task) => task.run(i), } } } impl<A: ConsumerMulti<Source>, B: ConsumerMulti<Source, Item = A::Item>, Source> ConsumerMulti<Source> for Sum2<A, B> { type Item = A::Item; fn run(&self, source: Source, i: &mut impl FnMut(Self::Item) -> bool) -> bool { match self { Self::A(task) => task.run(source, i), Self::B(task) => task.run(source, i), } } }