use core::marker::PhantomData;
use crate::{sync::Arc, ReadHandle, Stele};
#[derive(Debug)]
pub struct WriteHandle<T> {
pub(crate) handle: Arc<Stele<T>>,
pub(crate) _unsync: PhantomData<*mut T>,
}
unsafe impl<T> Send for WriteHandle<T> where T: Send + Sync {}
impl<T> WriteHandle<T> {
pub fn push(&self, val: T) {
unsafe {
self.handle.push(val);
};
}
#[must_use]
pub fn new_read_handle(&self) -> ReadHandle<T> {
ReadHandle::from(&self.handle)
}
#[must_use]
pub fn read(&self, idx: usize) -> &T {
self.handle.read(idx)
}
#[must_use]
pub fn try_read(&self, idx: usize) -> Option<&T> {
self.handle.try_read(idx)
}
#[must_use]
pub fn len(&self) -> usize {
self.handle.len()
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.handle.is_empty()
}
}
impl<T: Copy> WriteHandle<T> {
#[must_use]
pub fn get(&self, idx: usize) -> T {
self.handle.get(idx)
}
}