mathru/analysis/integral/newton_cotes/
closedfixedintervaliterator.rs1use 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}