// codesnip-guard: Comparator #[cfg_attr(any(),rustfmt::skip)]pub use self::comparator::Comparator;#[cfg_attr(any(),rustfmt::skip)]pub mod comparator{use std::cmp::Ordering;pub trait Comparator{fn compare(&mut self,a:&T,b:&T)->Ordering;}implComparatorfor F where F:FnMut(&T,&T)->Ordering{fn compare(&mut self,a:&T,b:&T)->Ordering{(self)(a,b)}}#[derive(Debug,Clone,Copy,Default,PartialEq,Eq,PartialOrd,Ord,Hash)]pub struct Less;implComparatorfor Less where T:Ord{fn compare(&mut self,a:&T,b:&T)->Ordering{a.cmp(b)}}#[derive(Debug,Clone,Copy,Default,PartialEq,Eq,PartialOrd,Ord,Hash)]pub struct Greater;implComparatorfor Greater where T:Ord{fn compare(&mut self,a:&T,b:&T)->Ordering{b.cmp(a)}}#[derive(Debug,Clone,Copy,Default,PartialEq,Eq,PartialOrd,Ord,Hash)]pub struct ByKey(pub F);implComparatorfor ByKeywhere F:FnMut(&T)->K,K:Ord{fn compare(&mut self,a:&T,b:&T)->Ordering{(self.0)(a).cmp(&(self.0)(b))}}}