use crate::ringbuffer::RingBuffer;
use cpu::{CachePadded, Cursor};
use std::sync::atomic::AtomicBool;
pub(super) struct Shared<T> {
pub(super) buffer: RingBuffer<T>,
pub(super) producer_cursor: Cursor,
pub(super) consumer_cursor: Cursor,
pub(super) closed: CachePadded<AtomicBool>,
}
impl<T> Drop for Shared<T> {
fn drop(&mut self) {
let consumer_seq = self.consumer_cursor.value();
let producer_seq = self.producer_cursor.value();
if producer_seq > consumer_seq {
for seq in (consumer_seq + 1)..=producer_seq {
unsafe {
let ptr = self.buffer.get_ptr_mut(seq);
core::ptr::drop_in_place(ptr);
}
}
}
}
}