haar_lib/algebra/act/
update_sum.rs

1//! Range Update Range Sum
2pub use crate::algebra::{act::Act, first_last::Last, traits::*};
3
4/// Range Update Range Sum 用のモノイド作用
5#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
6pub struct UpdateSum<T>(pub Last<T>);
7
8impl<T, M> Act<M> for UpdateSum<T>
9where
10    M: Monoid<Element = T> + Additive,
11{
12    type Monoid = Last<T>;
13    type Element = Option<T>;
14
15    fn monoid(&self) -> &Self::Monoid {
16        &self.0
17    }
18    fn act(&self, m: &M, val: <M>::Element, a: Self::Element, len: usize) -> <M>::Element {
19        match a {
20            Some(a) => Additive::times(m, a, len as u64),
21            _ => val,
22        }
23    }
24}