use super::{Signal, EQUILIBRIUM};
pub fn from_iter<I>(frames: I) -> FromIterator<I::IntoIter>
where
I: IntoIterator<Item = f32>,
{
let mut iter = frames.into_iter();
let next = iter.next();
FromIterator { iter, next }
}
#[derive(Clone)]
pub struct FromIterator<I>
where
I: Iterator,
{
iter: I,
next: Option<I::Item>,
}
impl<I> Signal for FromIterator<I>
where
I: Iterator<Item = f32>,
{
#[inline]
fn next(&mut self) -> f32 {
match self.next.take() {
Some(frame) => {
self.next = self.iter.next();
frame
}
None => EQUILIBRIUM,
}
}
}