1use crate::RantValue;
2
3#[inline]
5pub fn minmax<T: PartialEq + PartialOrd>(a: T, b: T) -> (T, T) {
6 if a <= b { (a, b) } else { (b, a) }
7}
8
9#[inline]
11pub fn clamp<T: PartialEq + PartialOrd>(val: T, a: T, b: T) -> T {
12 let (min, max) = minmax(a, b);
13 if val >= min && val <= max {
14 val
15 } else if val < min {
16 min
17 } else {
18 max
19 }
20}
21
22#[inline]
24pub fn saturate(val: f64) -> f64 {
25 if val < 0. {
26 0.
27 } else if val > 1. {
28 1.
29 } else {
30 val
31 }
32}
33
34#[inline(always)]
36pub fn bi64(val: bool) -> i64 {
37 if val { 1 } else { 0 }
38}
39
40#[inline(always)]
42pub fn bf64(val: bool) -> f64 {
43 if val { 1.0 } else { 0.0 }
44}
45
46#[inline]
47pub fn max_rant_value<'a>(mut iter: impl Iterator<Item = &'a RantValue>) -> Option<&'a RantValue> {
48 if let Some(mut max) = iter.next() {
49 for val in iter {
50 if val >= max {
51 max = val;
52 }
53 }
54 Some(max)
55 } else {
56 None
57 }
58}
59
60#[inline]
61pub fn min_rant_value<'a>(mut iter: impl Iterator<Item = &'a RantValue>) -> Option<&'a RantValue> {
62 if let Some(mut min) = iter.next() {
63 for val in iter {
64 if val < min {
65 min = val;
66 }
67 }
68 Some(min)
69 } else {
70 None
71 }
72}