#![doc(html_root_url="https://docs.rs/fera-fun/0.1.0/")]
use std::borrow::Borrow;
use std::collections::HashSet;
use std::hash::Hash;
pub fn first<I>(iter: I) -> I::Item
where I: IntoIterator
{
iter.into_iter().next().unwrap()
}
pub fn position_of<I, T>(iter: I, item: &T) -> Option<usize>
where I: IntoIterator,
I::Item: Borrow<T>,
T: PartialEq
{
iter.into_iter()
.position(|x| x.borrow() == item)
}
pub fn position_max_by_key<I, F, X>(iter: I, mut f: F) -> Option<usize>
where I: IntoIterator,
X: Ord,
F: FnMut(&I::Item) -> X
{
iter.into_iter()
.enumerate()
.max_by_key(|x| f(&x.1))
.map(|x| x.0)
}
pub fn position_min_by_key<I, F, X>(iter: I, mut f: F) -> Option<usize>
where I: IntoIterator,
X: Ord,
F: FnMut(&I::Item) -> X
{
iter.into_iter()
.enumerate()
.min_by_key(|x| f(&x.1))
.map(|x| x.0)
}
pub fn vec<I>(iter: I) -> Vec<I::Item>
where I: IntoIterator
{
iter.into_iter().collect()
}
pub fn set<I>(iter: I) -> HashSet<I::Item>
where I: IntoIterator,
I::Item: Hash + Eq
{
iter.into_iter().collect()
}