nalgebra_glm/ext/
scalar_common.rs

1use crate::traits::Number;
2
3/// Returns the maximum among two values.
4///
5/// # Examples:
6///
7/// ```
8/// # use nalgebra_glm as glm;
9/// assert_eq!(2.0, glm::max2_scalar(1.0, 2.0));
10/// assert_eq!(1, glm::max2_scalar(0, 1));
11/// ```
12///
13/// # See also:
14///
15/// * [`max4_scalar()`]
16/// * [`min3_scalar()`]
17/// * [`min4_scalar()`]
18pub fn max2_scalar<T: Number>(a: T, b: T) -> T {
19    if a >= b {
20        a
21    } else {
22        b
23    }
24}
25
26/// Returns the maximum among two values.
27///
28/// # Examples:
29///
30/// ```
31/// # use nalgebra_glm as glm;
32/// assert_eq!(1.0, glm::min2_scalar(1.0, 2.0));
33/// assert_eq!(0, glm::min2_scalar(0, 1));
34/// ```
35///
36/// # See also:
37///
38/// * [`max4_scalar()`]
39/// * [`min3_scalar()`]
40/// * [`min4_scalar()`]
41pub fn min2_scalar<T: Number>(a: T, b: T) -> T {
42    if a <= b {
43        a
44    } else {
45        b
46    }
47}
48
49/// Returns the maximum among three values.
50///
51/// # Examples:
52///
53/// ```
54/// # use nalgebra_glm as glm;
55/// assert_eq!(3.0, glm::max3_scalar(1.0, 2.0, 3.0));
56/// assert_eq!(2, glm::max3_scalar(0, 1, 2));
57/// ```
58///
59/// # See also:
60///
61/// * [`max4_scalar()`]
62/// * [`min3_scalar()`]
63/// * [`min4_scalar()`]
64pub fn max3_scalar<T: Number>(a: T, b: T, c: T) -> T {
65    max2_scalar(max2_scalar(a, b), c)
66}
67
68/// Returns the maximum among four values.
69///
70/// # Examples:
71///
72/// ```
73/// # use nalgebra_glm as glm;
74/// assert_eq!(4.0, glm::max4_scalar(2.0, 4.0, 1.0, 3.0));
75/// assert_eq!(7, glm::max4_scalar(1, 0, 7, 2));
76/// ```
77///
78/// # See also:
79///
80/// * [`max3_scalar()`]
81/// * [`min3_scalar()`]
82/// * [`min4_scalar()`]
83pub fn max4_scalar<T: Number>(a: T, b: T, c: T, d: T) -> T {
84    max2_scalar(max2_scalar(a, b), max2_scalar(c, d))
85}
86
87/// Returns the minimum among three values.
88///
89/// # Examples:
90///
91/// ```
92/// # use nalgebra_glm as glm;
93/// assert_eq!(1.0, glm::min3_scalar(1.0, 2.0, 3.0));
94/// assert_eq!(0, glm::min3_scalar(0, 1, 2));
95/// ```
96///
97/// # See also:
98///
99/// * [`max3_scalar()`]
100/// * [`max4_scalar()`]
101/// * [`min4_scalar()`]
102pub fn min3_scalar<T: Number>(a: T, b: T, c: T) -> T {
103    min2_scalar(min2_scalar(a, b), c)
104}
105
106/// Returns the minimum among four values.
107///
108/// # Examples:
109///
110/// ```
111/// # use nalgebra_glm as glm;
112/// assert_eq!(1.0, glm::min4_scalar(2.0, 4.0, 1.0, 3.0));
113/// assert_eq!(0, glm::min4_scalar(1, 0, 7, 2));
114/// ```
115///
116/// # See also:
117///
118/// * [`max3_scalar()`]
119/// * [`max4_scalar()`]
120/// * [`min3_scalar()`]
121pub fn min4_scalar<T: Number>(a: T, b: T, c: T, d: T) -> T {
122    min2_scalar(min2_scalar(a, b), min2_scalar(c, d))
123}