use std::mem; use std::ops::Deref; use std::cmp::PartialOrd; /// A pair of elements sorted in increasing order. #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SortedPair([T; 2]); impl SortedPair { /// Sorts two elements in increasing order into a new pair. pub fn new(element1: T, element2: T) -> Self { if element1 > element2 { SortedPair([element2, element1]) } else { SortedPair([element1, element2]) } } } impl Deref for SortedPair { type Target = (T, T); fn deref(&self) -> &(T, T) { unsafe { mem::transmute(self) } } }