rodio/conversions/
sample.rs

1use dasp_sample::{FromSample, ToSample};
2use std::marker::PhantomData;
3
4/// Converts the samples data type to `O`.
5#[derive(Clone, Debug)]
6pub struct SampleTypeConverter<I, O> {
7    input: I,
8    marker: PhantomData<O>,
9}
10
11impl<I, O> SampleTypeConverter<I, O> {
12    /// Builds a new converter.
13    #[inline]
14    pub fn new(input: I) -> SampleTypeConverter<I, O> {
15        SampleTypeConverter {
16            input,
17            marker: PhantomData,
18        }
19    }
20
21    /// Destroys this iterator and returns the underlying iterator.
22    #[inline]
23    pub fn into_inner(self) -> I {
24        self.input
25    }
26
27    /// get mutable access to the iterator
28    #[inline]
29    pub fn inner_mut(&mut self) -> &mut I {
30        &mut self.input
31    }
32}
33
34impl<I, O> Iterator for SampleTypeConverter<I, O>
35where
36    I: Iterator,
37    I::Item: ToSample<O>,
38{
39    type Item = O;
40
41    #[inline]
42    fn next(&mut self) -> Option<Self::Item> {
43        self.input.next().map(|s| s.to_sample_())
44    }
45
46    #[inline]
47    fn size_hint(&self) -> (usize, Option<usize>) {
48        self.input.size_hint()
49    }
50}
51
52impl<I, O> ExactSizeIterator for SampleTypeConverter<I, O>
53where
54    I: ExactSizeIterator,
55    O: FromSample<I::Item>,
56{
57}