haar_lib/algebra/act/
add_sum.rs

1//! Range Add Range Sum
2pub use crate::algebra::{act::Act, traits::*};
3use std::fmt::Debug;
4
5/// Range Add Range Sum 用のモノイド作用
6#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
7pub struct AddSum<S: Monoid + Additive>(pub S);
8
9impl<M, A> Act<M> for AddSum<A>
10where
11    M: Monoid + Additive,
12    A: Monoid + Additive,
13    M::Element: TryFrom<A::Element, Error: Debug>,
14{
15    type Monoid = A;
16    type Element = A::Element;
17
18    fn monoid(&self) -> &Self::Monoid {
19        &self.0
20    }
21    fn act(&self, m: &M, val: M::Element, a: Self::Element, len: usize) -> M::Element {
22        m.op(
23            val,
24            M::Element::try_from(Additive::times(&self.0, a, len as u64)).unwrap(),
25        )
26    }
27}