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}