Sha256: 7e0d92ca1aafc1221e08d0297087b35373463d03228a0e65628cfd1734273e90
Contents?: true
Size: 1.49 KB
Versions: 13
Compression:
Stored size: 1.49 KB
Contents
#![cfg(feature = "use_alloc")] use alloc::{vec, vec::Vec}; use std::cmp::Ordering; /// Implementation guts for `min_set`, `min_set_by`, and `min_set_by_key`. pub fn 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, { match it.next() { None => Vec::new(), Some(element) => { let mut current_key = key_for(&element); let mut result = vec![element]; it.for_each(|element| { let key = key_for(&element); match compare(&element, &result[0], &key, ¤t_key) { Ordering::Less => { result.clear(); result.push(element); current_key = key; } Ordering::Equal => { result.push(element); } Ordering::Greater => {} } }); result } } } /// Implementation guts for `ax_set`, `max_set_by`, and `max_set_by_key`. pub fn 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, { min_set_impl(it, key_for, |it1, it2, key1, key2| { compare(it2, it1, key2, key1) }) }
Version data entries
13 entries across 13 versions & 1 rubygems