|
1 | 1 | #![cfg(feature = "use_std")]
|
2 | 2 |
|
3 |
| -use crate::MinMaxResult; |
| 3 | +use crate::{ |
| 4 | + adaptors::map::{MapSpecialCase, MapSpecialCaseFn}, |
| 5 | + MinMaxResult, |
| 6 | +}; |
4 | 7 | use std::cmp::Ordering;
|
5 | 8 | use std::collections::HashMap;
|
6 |
| -use std::fmt; |
7 | 9 | use std::hash::Hash;
|
8 | 10 | use std::iter::Iterator;
|
9 | 11 | use std::ops::{Add, Mul};
|
10 | 12 |
|
11 | 13 | /// A wrapper to allow for an easy [`into_grouping_map_by`](crate::Itertools::into_grouping_map_by)
|
12 |
| -#[derive(Clone)] |
13 |
| -pub struct MapForGrouping<I, F>(I, F); |
| 14 | +pub type MapForGrouping<I, F> = MapSpecialCase<I, GroupingMapFn<F>>; |
14 | 15 |
|
15 |
| -impl<I: fmt::Debug, F> fmt::Debug for MapForGrouping<I, F> { |
16 |
| - debug_fmt_fields!(MapForGrouping, 0); |
17 |
| -} |
| 16 | +pub struct GroupingMapFn<F>(F); |
18 | 17 |
|
19 |
| -impl<I, F> MapForGrouping<I, F> { |
20 |
| - pub(crate) fn new(iter: I, key_mapper: F) -> Self { |
21 |
| - Self(iter, key_mapper) |
| 18 | +impl<V, K, F: FnMut(&V) -> K> MapSpecialCaseFn<V> for GroupingMapFn<F> { |
| 19 | + type Out = (K, V); |
| 20 | + fn call(&mut self, v: V) -> Self::Out { |
| 21 | + ((self.0)(&v), v) |
22 | 22 | }
|
23 | 23 | }
|
24 | 24 |
|
25 |
| -#[allow(clippy::missing_trait_methods)] |
26 |
| -impl<K, V, I, F> Iterator for MapForGrouping<I, F> |
27 |
| -where |
28 |
| - I: Iterator<Item = V>, |
29 |
| - K: Hash + Eq, |
30 |
| - F: FnMut(&V) -> K, |
31 |
| -{ |
32 |
| - type Item = (K, V); |
33 |
| - fn next(&mut self) -> Option<Self::Item> { |
34 |
| - self.0.next().map(|val| ((self.1)(&val), val)) |
35 |
| - } |
36 |
| - |
37 |
| - fn fold<B, G>(self, init: B, f: G) -> B |
38 |
| - where |
39 |
| - G: FnMut(B, Self::Item) -> B, |
40 |
| - { |
41 |
| - let mut key_mapper = self.1; |
42 |
| - self.0.map(|val| (key_mapper(&val), val)).fold(init, f) |
| 25 | +impl<K, I: Iterator, F: FnMut(&I::Item) -> K> MapForGrouping<I, F> { |
| 26 | + pub(crate) fn new(iter: I, key_mapper: F) -> Self { |
| 27 | + MapSpecialCase { |
| 28 | + iter, |
| 29 | + f: GroupingMapFn(key_mapper), |
| 30 | + } |
43 | 31 | }
|
44 | 32 | }
|
45 | 33 |
|
|
0 commit comments