mathru/analysis/integral/newton_cotes/
closedfixedintervaliterator.rs

1use crate::algebra::abstr::Real;
2
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7#[derive(Clone, Debug)]
8pub struct ClosedFixedIntervalIterator<T>
9where
10    T: Real,
11{
12    upper: T,
13    next: T,
14    h: T,
15}
16
17impl<T> ClosedFixedIntervalIterator<T>
18where
19    T: Real,
20{
21    pub fn new(lower: T, upper: T, num_intervals: u32) -> ClosedFixedIntervalIterator<T> {
22        ClosedFixedIntervalIterator {
23            upper,
24            next: lower,
25            h: (upper - lower) / T::from_u32(num_intervals),
26        }
27    }
28}
29
30impl<T> Iterator for ClosedFixedIntervalIterator<T>
31where
32    T: Real,
33{
34    type Item = T;
35
36    fn next(&mut self) -> Option<Self::Item> {
37        let ret_val: T = self.next;
38
39        self.next = ret_val + self.h;
40
41        if ret_val > self.upper {
42            None
43        } else {
44            Some(ret_val)
45        }
46    }
47}