use std::marker::PhantomData;
#[derive(Clone, Copy, Debug, PartialEq)]
#[repr(u8)]
pub enum SignalKind {
Mark,
Root,
Unroot,
}
pub struct Signal<'arena, T: Trace<'arena, T>> {
kind: SignalKind,
safety: PhantomData<&'arena T>,
}
impl<'arena, T: Trace<'arena, T>> Signal<'arena, T> {
#[inline]
pub(crate) fn new(kind: SignalKind) -> Self {
Self { kind, safety: PhantomData }
}
#[inline]
pub fn kind(&self) -> SignalKind {
self.kind
}
}
pub unsafe trait Trace<'arena, T: Trace<'arena, T>>: 'arena {
#[inline]
unsafe fn send(&self, _signal: &Signal<'arena, T>) {}
#[inline]
unsafe fn finalize(&mut self) {}
}