#![cfg_attr(feature="simd", feature(portable_simd))]
#![cfg_attr(doc, feature(doc_cfg))]
#![no_std]
#![allow(private_bounds)]
trait Captures<U> {}
impl<T: ?Sized, U> Captures<U> for T {}
pub trait AudioBufferIterator {
type Item;
fn chans<'a>(&'a self) -> impl Iterator<Item = impl Iterator<Item = &'a Self::Item>>
where Self::Item: 'a+Captures<&'a Self::Item>;
fn chans_mut<'a>(&'a mut self) -> impl Iterator<Item = impl Iterator<Item = &'a mut Self::Item>>
where Self::Item: 'a+Captures<&'a mut Self::Item>;
fn frames<'a>(&'a self) -> impl Iterator<Item = impl Iterator<Item = &'a Self::Item>>
where Self::Item: 'a+Captures<&'a Self::Item>;
fn frames_mut<'a>(&'a mut self) -> impl Iterator<Item = impl Iterator<Item = &'a mut Self::Item>>
where Self::Item: 'a+Captures<&'a mut Self::Item>;
}
#[cfg(feature="simd")]
mod simd {
use core::{ops::{Deref, DerefMut},
simd::{LaneCount, Simd, SimdElement, SupportedLaneCount}};
pub trait AudioBufferSimdIterator:
{
type Item: SimdElement;
fn simd_chans<const N: usize>(&self) -> impl Iterator<Item = impl Iterator<Item = impl Deref<Target = Simd<Self::Item, N>>>>
where LaneCount<N>: SupportedLaneCount;
fn simd_chans_mut<const N: usize>(&mut self) -> impl Iterator<Item = impl Iterator<Item = impl DerefMut<Target = Simd<Self::Item, N>>>>
where LaneCount<N>: SupportedLaneCount;
fn simd_frames<const N: usize>(&self) -> impl Iterator<Item = impl Iterator<Item = impl Deref<Target = Simd<Self::Item, N>>>>
where LaneCount<N>: SupportedLaneCount;
fn simd_frames_mut<const N: usize>(&mut self) -> impl Iterator<Item = impl Iterator<Item = impl DerefMut<Target = Simd<Self::Item, N>>>>
where LaneCount<N>: SupportedLaneCount;
}
}
#[cfg(any(feature="simd", doc))]
#[cfg_attr(doc, doc(cfg(simd)))]
pub use crate::simd::AudioBufferSimdIterator;