mod counter;
mod parker;
mod stack;
mod tagged;
pub use counter::Counter;
pub use parker::Parker;
pub use stack::Stack;
pub use tagged::{untagged, AtomicPtrFetchOps, StrictProvenance, Tagged, Unpack};
pub trait VerifiedGuard: seize::Guard {}
#[repr(transparent)]
pub struct MapGuard<G>(G);
impl<G> MapGuard<G> {
pub unsafe fn new(guard: G) -> MapGuard<G> {
MapGuard(guard)
}
pub unsafe fn from_ref(guard: &G) -> &MapGuard<G> {
unsafe { &*(guard as *const G as *const MapGuard<G>) }
}
}
impl<G> VerifiedGuard for MapGuard<G> where G: seize::Guard {}
impl<G> seize::Guard for MapGuard<G>
where
G: seize::Guard,
{
#[inline]
fn refresh(&mut self) {
self.0.refresh();
}
#[inline]
fn flush(&self) {
self.0.flush();
}
#[inline]
fn collector(&self) -> &seize::Collector {
self.0.collector()
}
#[inline]
fn thread_id(&self) -> usize {
self.0.thread_id()
}
#[inline]
unsafe fn defer_retire<T>(&self, ptr: *mut T, reclaim: unsafe fn(*mut T, &seize::Collector)) {
unsafe { self.0.defer_retire(ptr, reclaim) };
}
}
#[derive(Clone, Copy, Default, Hash, PartialEq, Eq)]
#[cfg_attr(
any(
target_arch = "x86_64",
target_arch = "aarch64",
target_arch = "arm64ec",
target_arch = "powerpc64",
),
repr(align(128))
)]
#[cfg_attr(
any(
target_arch = "arm",
target_arch = "mips",
target_arch = "mips32r6",
target_arch = "mips64",
target_arch = "mips64r6",
target_arch = "sparc",
target_arch = "hexagon",
),
repr(align(32))
)]
#[cfg_attr(target_arch = "m68k", repr(align(16)))]
#[cfg_attr(target_arch = "s390x", repr(align(256)))]
#[cfg_attr(
not(any(
target_arch = "x86_64",
target_arch = "aarch64",
target_arch = "arm64ec",
target_arch = "powerpc64",
target_arch = "arm",
target_arch = "mips",
target_arch = "mips32r6",
target_arch = "mips64",
target_arch = "mips64r6",
target_arch = "sparc",
target_arch = "hexagon",
target_arch = "m68k",
target_arch = "s390x",
)),
repr(align(64))
)]
pub struct CachePadded<T> {
value: T,
}