dashu_int/
iter.rs

1//! Implementation of core::iter traits
2
3use crate::{ibig::IBig, ubig::UBig};
4use core::{
5    iter::{Product, Sum},
6    ops::{Add, Mul},
7};
8
9macro_rules! impl_fold_iter {
10    ($t:ty, $fold_trait:ident, $fold:ident, $op_trait:ident, $op:ident, $init:ident) => {
11        impl<T> $fold_trait<T> for $t
12        where
13            $t: $op_trait<T, Output = $t>,
14        {
15            fn $fold<I: Iterator<Item = T>>(iter: I) -> Self {
16                iter.fold(<$t>::$init, <$t>::$op)
17            }
18        }
19    };
20}
21
22impl_fold_iter!(UBig, Sum, sum, Add, add, ZERO);
23impl_fold_iter!(IBig, Sum, sum, Add, add, ZERO);
24impl_fold_iter!(UBig, Product, product, Mul, mul, ONE);
25impl_fold_iter!(IBig, Product, product, Mul, mul, ONE);