haar_lib/algebra/act/
mul_sum.rs

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