use std::sync::Arc;
use crate::seqlock::lock::SeqLock;
pub struct Reader<T: bytemuck::AnyBitPattern> {
inner: Arc<SeqLock<T>>,
}
impl<T: bytemuck::AnyBitPattern> std::fmt::Debug for Reader<T> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Reader").finish_non_exhaustive()
}
}
impl<T: bytemuck::AnyBitPattern> Clone for Reader<T> {
fn clone(&self) -> Self {
Self {
inner: self.inner.clone(),
}
}
}
impl<T: bytemuck::AnyBitPattern> Reader<T> {
pub(super) fn new(seqlock: Arc<SeqLock<T>>) -> Self {
Self { inner: seqlock }
}
#[inline]
#[must_use]
pub fn read(&self) -> T {
self.inner.read()
}
}
#[cfg(test)]
mod tests {
use super::*;
static_assertions::assert_impl_all!(Reader<u32>: Send, Sync);
static_assertions::assert_impl_all!(Arc<Reader<u32>>: Send, Clone);
}