Skip to main content

fixed_bigint/fixeduint/
iter_impl.rs

1use super::{FixedUInt, MachineWord};
2use crate::personality::Personality;
3use num_traits::{One, Zero};
4
5impl<T: MachineWord, const N: usize, P: Personality> core::iter::Sum for FixedUInt<T, N, P> {
6    fn sum<I: Iterator<Item = Self>>(iter: I) -> Self {
7        iter.fold(Self::zero(), |acc, x| acc + x)
8    }
9}
10
11impl<'a, T: MachineWord, const N: usize, P: Personality> core::iter::Sum<&'a Self>
12    for FixedUInt<T, N, P>
13{
14    fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self {
15        iter.fold(Self::zero(), |acc, x| acc + *x)
16    }
17}
18
19impl<T: MachineWord, const N: usize, P: Personality> core::iter::Product for FixedUInt<T, N, P> {
20    fn product<I: Iterator<Item = Self>>(iter: I) -> Self {
21        iter.fold(Self::one(), |acc, x| acc * x)
22    }
23}
24
25impl<'a, T: MachineWord, const N: usize, P: Personality> core::iter::Product<&'a Self>
26    for FixedUInt<T, N, P>
27{
28    fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self {
29        iter.fold(Self::one(), |acc, x| acc * *x)
30    }
31}