1 #![cfg(feature = "use_alloc")]
2 use alloc::{vec, vec::Vec};
3 use std::cmp::Ordering;
4 
5 /// Implementation guts for `min_set`, `min_set_by`, and `min_set_by_key`.
min_set_impl<I, K, F, Compare>( mut it: I, mut key_for: F, mut compare: Compare, ) -> Vec<I::Item> where I: Iterator, F: FnMut(&I::Item) -> K, Compare: FnMut(&I::Item, &I::Item, &K, &K) -> Ordering,6 pub fn min_set_impl<I, K, F, Compare>(
7     mut it: I,
8     mut key_for: F,
9     mut compare: Compare,
10 ) -> Vec<I::Item>
11 where
12     I: Iterator,
13     F: FnMut(&I::Item) -> K,
14     Compare: FnMut(&I::Item, &I::Item, &K, &K) -> Ordering,
15 {
16     match it.next() {
17         None => Vec::new(),
18         Some(element) => {
19             let mut current_key = key_for(&element);
20             let mut result = vec![element];
21             it.for_each(|element| {
22                 let key = key_for(&element);
23                 match compare(&element, &result[0], &key, &current_key) {
24                     Ordering::Less => {
25                         result.clear();
26                         result.push(element);
27                         current_key = key;
28                     }
29                     Ordering::Equal => {
30                         result.push(element);
31                     }
32                     Ordering::Greater => {}
33                 }
34             });
35             result
36         }
37     }
38 }
39 
40 /// Implementation guts for `ax_set`, `max_set_by`, and `max_set_by_key`.
max_set_impl<I, K, F, Compare>(it: I, key_for: F, mut compare: Compare) -> Vec<I::Item> where I: Iterator, F: FnMut(&I::Item) -> K, Compare: FnMut(&I::Item, &I::Item, &K, &K) -> Ordering,41 pub fn max_set_impl<I, K, F, Compare>(it: I, key_for: F, mut compare: Compare) -> Vec<I::Item>
42 where
43     I: Iterator,
44     F: FnMut(&I::Item) -> K,
45     Compare: FnMut(&I::Item, &I::Item, &K, &K) -> Ordering,
46 {
47     min_set_impl(it, key_for, |it1, it2, key1, key2| {
48         compare(it2, it1, key2, key1)
49     })
50 }
51