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}