haar_lib/algebra/
bit.rs

1//! 論理積・論理和・排他的論理和
2pub use crate::algebra::traits::*;
3use crate::impl_algebra;
4
5/// 論理積を演算とする代数的構造
6#[derive(Clone, Copy, Default, Debug, PartialEq, Eq)]
7pub struct BitAnd<T>(pub T);
8
9/// 論理和を演算とする代数的構造
10#[derive(Clone, Copy, Default, Debug, PartialEq, Eq)]
11pub struct BitOr<T>(pub T);
12
13/// 排他的論理和を演算とする代数的構造
14#[derive(Clone, Copy, Default, Debug, PartialEq, Eq)]
15pub struct BitXor<T>(pub T);
16
17macro_rules! implement {
18    ($($t:tt),*) => {
19        $(impl_algebra!(BitAnd<$t>; op: |a: Self, b: Self| Self(a.0 & b.0); id: Self(!0); commu; assoc; idem;);)*
20        $(impl_algebra!(BitOr<$t>; op: |a: Self, b: Self| Self(a.0 | b.0); id: Self(0); commu; assoc; idem;);)*
21        $(impl_algebra!(BitXor<$t>; op: |a: Self, b: Self| Self(a.0 ^ b.0); id: Self(0); inv: |a| a; commu; assoc;);)*
22    };
23}
24
25implement!(u8, u16, u32, u64, u128, usize);