parry3d/utils/
sort.rs

1#[cfg(feature = "dim3")]
2#[inline]
3/// Sorts a set of two values in increasing order.
4pub fn sort2<T: PartialOrd + Copy>(a: T, b: T) -> (T, T) {
5    if a > b {
6        (b, a)
7    } else {
8        (a, b)
9    }
10}
11
12/// Sorts a set of three values in increasing order.
13#[inline]
14pub fn sort3<'a, T: PartialOrd + Copy>(a: &'a T, b: &'a T, c: &'a T) -> (&'a T, &'a T, &'a T) {
15    let a_b = *a > *b;
16    let a_c = *a > *c;
17    let b_c = *b > *c;
18
19    let sa;
20    let sb;
21    let sc;
22
23    // Sort the three values.
24    if a_b {
25        // a > b
26        if a_c {
27            // a > c
28            sc = a;
29
30            if b_c {
31                // b > c
32                sa = c;
33                sb = b;
34            } else {
35                // b <= c
36                sa = b;
37                sb = c;
38            }
39        } else {
40            // a <= c
41            sa = b;
42            sb = a;
43            sc = c;
44        }
45    } else {
46        // a < b
47        if !a_c {
48            // a <= c
49            sa = a;
50
51            if b_c {
52                // b > c
53                sb = c;
54                sc = b;
55            } else {
56                sb = b;
57                sc = c;
58            }
59        } else {
60            // a > c
61            sa = c;
62            sb = a;
63            sc = b;
64        }
65    }
66
67    (sa, sb, sc)
68}