ncollide3d/utils/
sorted_pair.rs

1use std::cmp::PartialOrd;
2use std::mem;
3use std::ops::Deref;
4
5/// A pair of elements sorted in increasing order.
6#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
7pub struct SortedPair<T: PartialOrd>([T; 2]);
8
9impl<T: PartialOrd> SortedPair<T> {
10    /// Sorts two elements in increasing order into a new pair.
11    pub fn new(element1: T, element2: T) -> Self {
12        if element1 > element2 {
13            SortedPair([element2, element1])
14        } else {
15            SortedPair([element1, element2])
16        }
17    }
18}
19
20impl<T: PartialOrd> Deref for SortedPair<T> {
21    type Target = (T, T);
22
23    fn deref(&self) -> &(T, T) {
24        unsafe { mem::transmute(self) }
25    }
26}