pub const BUFFER_SIZE: u32 = 128;
pub const MAX_CHANNELS: usize = 32;
pub mod alloc;
pub mod buffer;
pub mod context;
pub mod control;
pub mod media;
pub mod node;
pub mod param;
pub mod process;
pub mod spatial;
#[cfg(not(test))]
mod io;
mod analysis;
mod graph;
mod message;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct SampleRate(pub u32);
#[derive(Debug, Clone, Copy)]
pub struct IndexSizeError {}
use std::fmt;
use std::sync::atomic::{AtomicU64, Ordering};
impl fmt::Display for IndexSizeError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{:?}", self)
}
}
impl std::error::Error for IndexSizeError {}
#[derive(Debug, Clone, Copy)]
pub struct BufferDepletedError {}
impl fmt::Display for BufferDepletedError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{:?}", self)
}
}
impl std::error::Error for BufferDepletedError {}
#[derive(Debug)]
pub(crate) struct AtomicF64 {
inner: AtomicU64,
}
impl AtomicF64 {
pub fn new(v: f64) -> Self {
Self {
inner: AtomicU64::new(u64::from_ne_bytes(v.to_ne_bytes())),
}
}
pub fn load(&self) -> f64 {
f64::from_ne_bytes(self.inner.load(Ordering::SeqCst).to_ne_bytes())
}
pub fn store(&self, v: f64) {
self.inner
.store(u64::from_ne_bytes(v.to_ne_bytes()), Ordering::SeqCst)
}
pub fn swap(&self, v: f64) -> f64 {
let prev = self
.inner
.swap(u64::from_ne_bytes(v.to_ne_bytes()), Ordering::SeqCst);
f64::from_ne_bytes(prev.to_ne_bytes())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_atomic_f64() {
let f = AtomicF64::new(2.0);
assert_eq!(f.load(), 2.0);
f.store(3.0);
assert_eq!(f.load(), 3.0);
let prev = f.swap(4.0);
assert_eq!(prev, 3.0);
assert_eq!(f.load(), 4.0);
}
}