haar_lib/algebra/act/
add_min_count.rs

1//! Range Add Range Min-Count
2pub use crate::algebra::{act::Act, min_count::MinCount, sum::Sum, traits::*};
3
4/// Range Add Range Min-Count用のモノイド作用
5#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
6pub struct AddMinCount<S: Monoid + Additive>(pub S);
7
8impl<T, U, A> Act<MinCount<T, U>> for AddMinCount<A>
9where
10    A: Monoid<Element = T> + Additive,
11    MinCount<T, U>: Monoid<Element = (Option<T>, U)>,
12{
13    type Monoid = A;
14    type Element = A::Element;
15
16    fn monoid(&self) -> &Self::Monoid {
17        &self.0
18    }
19    fn act(&self, _m: &MinCount<T, U>, val: (Option<T>, U), a: T, _len: usize) -> (Option<T>, U) {
20        (val.0.map(|x| self.0.op(x, a)), val.1)
21    }
22}