1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
/// Print Slice
pub trait PrintSlice {
fn print_slice(&self, spaces: &str);
}
impl<T> PrintSlice for [T]
where
T: std::fmt::Display,
{
fn print_slice(&self, spaces: &str) {
for dir in self {
println!("{spaces}'{dir}'");
}
}
}
/**
Find the maximum value of `Vec<f64>`.
Example:
```
use wallswitch::FloatIterExt;
let vector: Vec<f64> = vec![4.2, -3.7, 8.1, 0.9];
let max = vector
.iter()
.cloned()
.float_max();
assert_eq!(max, 8.1);
```
<https://www.reddit.com/r/rust/comments/3fg0xr/how_do_i_find_the_max_value_in_a_vecf64/>
*/
pub trait FloatIterExt {
fn float_min(&mut self) -> f64;
fn float_max(&mut self) -> f64;
}
impl<T> FloatIterExt for T
where
T: Iterator<Item = f64>,
{
fn float_max(&mut self) -> f64 {
self.fold(f64::NAN, f64::max)
}
fn float_min(&mut self) -> f64 {
self.fold(f64::NAN, f64::min)
}
}
/**
Find the maximum value of `Vec<u32>`.
Example:
```
use wallswitch::IntegerIterExt;
let vector: Vec<u32> = vec![4, 3, 2, 8];
let min = vector
.iter()
.cloned()
.integer_min();
assert_eq!(min, 2);
```
*/
pub trait IntegerIterExt {
fn integer_min(&mut self) -> u32;
fn integer_max(&mut self) -> u32;
}
impl<T> IntegerIterExt for T
where
T: Iterator<Item = u32>,
{
fn integer_max(&mut self) -> u32 {
self.fold(u32::MIN, u32::max)
}
fn integer_min(&mut self) -> u32 {
self.fold(u32::MAX, u32::min)
}
}