ncollide3d/utils/
sort.rs

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