mod broadcast;
mod receiver;
mod sender;
use std::sync::atomic::AtomicBool;
use std::sync::Arc;
use crate::buf::RingBuffer;
pub use broadcast::{broadcast, BroadcastReceiver, BroadcastSender};
pub use receiver::{DrainIter, Receiver};
pub use sender::Sender;
pub fn channel<T, const N: usize>() -> (Sender<T, N>, Receiver<T, N>) {
let buf = Arc::new(RingBuffer::<T, N>::new());
let closed = Arc::new(AtomicBool::new(false));
(
Sender::new_with_closed(buf.clone(), closed.clone()),
Receiver::new_with_closed(buf, closed),
)
}