haar_lib/algebra/
min_max.rs

1//! 最小値・最大値
2pub use crate::algebra::traits::*;
3use crate::impl_algebra;
4
5/// 最小値を演算とする代数的構造
6#[derive(Clone, Copy, Default, Debug, PartialEq, Eq)]
7pub struct Min<T>(pub T);
8
9/// 最大値を演算とする代数的構造
10#[derive(Clone, Copy, Default, Debug, PartialEq, Eq)]
11pub struct Max<T>(pub T);
12
13macro_rules! implement {
14    ($($t:tt),*) => {
15        $(impl_algebra!(Min<$t>; op: |a: Self, b: Self| Self(a.0.min(b.0)); id: Self($t::MAX); commu; assoc; idem;);)*
16        $(impl_algebra!(Max<$t>; op: |a: Self, b: Self| Self(a.0.max(b.0)); id: Self($t::MIN); commu; assoc; idem;);)*
17    };
18}
19
20implement!(i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize);