haar_lib/algebra/semiring/
add_mul_mod.rs1pub use crate::algebra::semiring::*;
3use crate::num::ff::*;
4
5#[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
7pub struct AddMulMod<T: ZZ>(pub T);
8
9impl<T: ZZ> Semiring for AddMulMod<T> {
10 type Element = T::Element;
11 fn zero(&self) -> Self::Element {
12 self.0.zero()
13 }
14 fn one(&self) -> Self::Element {
15 self.0.one()
16 }
17 fn add(&self, a: Self::Element, b: Self::Element) -> Self::Element {
18 a + b
19 }
20 fn mul(&self, a: Self::Element, b: Self::Element) -> Self::Element {
21 a * b
22 }
23 fn times(&self, a: Self::Element, n: u64) -> Self::Element {
24 a * self.0.from_u64(n)
25 }
26}
27
28impl<T: ZZ> Ring for AddMulMod<T> {
29 fn neg(&self, a: Self::Element) -> Self::Element {
30 -a
31 }
32}
33
34impl<T: FF> Field for AddMulMod<T>
35where
36 T::Element: FFElem,
37{
38 fn inv(&self, a: Self::Element) -> Self::Element {
39 a.inv()
40 }
41}