nekolib/utils/
op_add_on_op_min.rs1use super::op_add;
2use super::op_min;
3use super::super::traits::action;
4use super::super::traits::additive;
5use super::super::traits::binop;
6use super::super::traits::max;
7use std::fmt::Debug;
8use std::ops::Add;
9
10use action::MonoidAction;
11use additive::{AddAssoc, Zero};
12use binop::Magma;
13use max::Max;
14use op_add::OpAdd;
15use op_min::OpMin;
16
17#[derive(Clone, Copy, Debug, Default)]
18pub struct OpAddOnOpMin<T> {
19 op_add: OpAdd<T>,
20 op_min: OpMin<T>,
21}
22
23impl<T: Ord + Eq + Add<Output = T> + AddAssoc + Zero + Max + Sized> MonoidAction
24 for OpAddOnOpMin<T>
25{
26 type Operand = OpMin<T>;
27 type Operator = OpAdd<T>;
28 fn operand(&self) -> &Self::Operand { &self.op_min }
29 fn operator(&self) -> &Self::Operator { &self.op_add }
30 fn act(&self, x: T, op: T) -> T { self.op_add.op(x, op) }
31}