audio_core/
interleaved_buf.rs

1/// A trait describing a buffer that is interleaved.
2///
3/// This allows for accessing the raw underlying interleaved buffer.
4pub trait InterleavedBuf {
5    /// The type of a single sample.
6    type Sample;
7
8    /// Access the underlying raw interleaved buffer.
9    ///
10    /// # Examples
11    ///
12    /// ```
13    /// use audio::InterleavedBuf;
14    ///
15    /// fn test(buf: impl InterleavedBuf<Sample = i16>) {
16    ///     assert_eq!(buf.as_interleaved(), &[1, 1, 2, 2, 3, 3, 4, 4]);
17    /// }
18    ///
19    /// test(audio::interleaved![[1, 2, 3, 4]; 2]);
20    /// ```
21    fn as_interleaved(&self) -> &[Self::Sample];
22}
23
24impl<B> InterleavedBuf for &B
25where
26    B: ?Sized + InterleavedBuf,
27{
28    type Sample = B::Sample;
29
30    #[inline]
31    fn as_interleaved(&self) -> &[Self::Sample] {
32        (**self).as_interleaved()
33    }
34}
35
36impl<B> InterleavedBuf for &mut B
37where
38    B: ?Sized + InterleavedBuf,
39{
40    type Sample = B::Sample;
41
42    #[inline]
43    fn as_interleaved(&self) -> &[Self::Sample] {
44        (**self).as_interleaved()
45    }
46}