use crate::nodeversion::{LockGuard, NodeVersion};
use seize::LocalGuard;
use std::marker::PhantomData;
pub struct PropagationContext<'op> {
_marker: PhantomData<&'op LocalGuard<'op>>,
}
impl<'op> PropagationContext<'op> {
#[inline]
pub const fn new(_guard: &'op LocalGuard<'op>) -> Self {
Self {
_marker: PhantomData,
}
}
#[inline(always)]
#[allow(dead_code, reason = "Low-contention API; prefer lock_node_yielding")]
#[expect(clippy::unused_self, reason = "Binds output lifetime to context's 'op")]
pub unsafe fn lock_node(&self, version_ptr: *const NodeVersion) -> LockGuard<'op> {
let version: &'op NodeVersion = unsafe { &*version_ptr };
version.lock()
}
#[inline(always)]
#[expect(clippy::unused_self, reason = "Binds output lifetime to context's 'op")]
pub unsafe fn lock_node_yielding(&self, version_ptr: *const NodeVersion) -> LockGuard<'op> {
let version: &'op NodeVersion = unsafe { &*version_ptr };
version.lock_with_yield()
}
#[inline(always)]
#[expect(clippy::unused_self, reason = "Binds output lifetime to context's 'op")]
pub unsafe fn unify_guard<'a>(&self, guard: LockGuard<'a>) -> LockGuard<'op> {
unsafe { std::mem::transmute(guard) }
}
}