haar_lib/algebra/act/
mul_prod.rs

1//! Range Multiply Range Product
2pub use crate::algebra::{act::Act, traits::*};
3
4/// Range Multiply Range Product 用のモノイド作用
5#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
6pub struct MulProd<S: Monoid + Multiplicative>(pub S);
7
8impl<S> Act<S> for MulProd<S>
9where
10    S: Monoid + Multiplicative,
11    S::Element: Clone,
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: &S, val: S::Element, a: Self::Element, n: usize) -> S::Element {
20        self.0.op(val, self.0.times(a, n as u64))
21    }
22}