pub(crate) mod builder;
pub(crate) mod callback;
pub(crate) mod cleanup;
pub(crate) mod context;
pub(crate) mod flavor;
pub(crate) mod guard;
pub(crate) mod poller;
pub(crate) mod reference;
pub use crate::rcu::callback::{RcuCall, RcuCallFn, RcuDefer, RcuDeferFn};
pub use crate::rcu::reference::RcuRefBox;
pub unsafe fn dereference<T>(pointer: *const T) -> *const T {
unsafe { urcu_sys::rcu_dereference(pointer as *mut std::ffi::c_void) as *const T }
}
pub unsafe fn dereference_mut<T>(pointer: *mut T) -> *mut T {
unsafe { urcu_sys::rcu_dereference(pointer as *mut std::ffi::c_void) as *mut T }
}
#[cfg(feature = "flavor-bp")]
pub mod bp {
pub use crate::rcu::context::RcuContextBp;
pub use crate::rcu::flavor::RcuFlavorBp;
pub use crate::rcu::guard::RcuGuardBp;
pub use crate::rcu::poller::RcuPollerBp;
}
#[cfg(feature = "flavor-mb")]
pub mod mb {
pub use crate::rcu::context::RcuContextMb;
pub use crate::rcu::flavor::RcuFlavorMb;
pub use crate::rcu::guard::RcuGuardMb;
pub use crate::rcu::poller::RcuPollerMb;
}
#[cfg(feature = "flavor-memb")]
pub mod memb {
pub use crate::rcu::context::RcuContextMemb;
pub use crate::rcu::flavor::RcuFlavorMemb;
pub use crate::rcu::guard::RcuGuardMemb;
pub use crate::rcu::poller::RcuPollerMemb;
}
#[cfg(feature = "flavor-qsbr")]
pub mod qsbr {
pub use crate::rcu::context::RcuContextQsbr;
pub use crate::rcu::flavor::RcuFlavorQsbr;
pub use crate::rcu::guard::RcuGuardQsbr;
pub use crate::rcu::poller::RcuPollerQsbr;
}
pub mod default {
#[cfg(feature = "flavor-memb")]
mod memb {
pub type RcuDefaultFlavor = crate::rcu::flavor::RcuFlavorMemb;
pub type RcuDefaultGuard<'a> = crate::rcu::guard::RcuGuardMemb<'a>;
pub type RcuDefaultPoller<'a> = crate::rcu::poller::RcuPollerMemb<'a>;
pub type RcuDefaultContext<const READ: bool = false, const DEFER: bool = false> =
crate::rcu::context::RcuContextMemb<READ, DEFER>;
}
#[cfg(all(not(feature = "flavor-memb"), feature = "flavor-mb"))]
mod mb {
pub type RcuDefaultFlavor = crate::rcu::flavor::RcuFlavorMb;
pub type RcuDefaultGuard<'a> = crate::rcu::guard::RcuGuardMb<'a>;
pub type RcuDefaultPoller<'a> = crate::rcu::poller::RcuPollerMb<'a>;
pub type RcuDefaultContext<const READ: bool = false, const DEFER: bool = false> =
crate::rcu::context::RcuContextMb<READ, DEFER>;
}
#[cfg(all(
not(feature = "flavor-memb"),
not(feature = "flavor-mb"),
feature = "flavor-bp"
))]
mod bp {
pub type RcuDefaultFlavor = crate::rcu::flavor::RcuFlavorBp;
pub type RcuDefaultGuard<'a> = crate::rcu::guard::RcuGuardBp<'a>;
pub type RcuDefaultPoller<'a> = crate::rcu::poller::RcuPollerBp<'a>;
pub type RcuDefaultContext<const READ: bool = false, const DEFER: bool = false> =
crate::rcu::context::RcuContextBp<READ, DEFER>;
}
#[cfg(all(
not(feature = "flavor-memb"),
not(feature = "flavor-mb"),
not(feature = "flavor-bp"),
feature = "flavor-qsbr"
))]
mod qsbr {
pub type RcuDefaultFlavor = crate::rcu::flavor::RcuFlavorQsbr;
pub type RcuDefaultGuard<'a> = crate::rcu::guard::RcuGuardQsbr<'a>;
pub type RcuDefaultPoller<'a> = crate::rcu::poller::RcuPollerQsbr<'a>;
pub type RcuDefaultContext<const READ: bool = false, const DEFER: bool = false> =
crate::rcu::context::RcuContextQsbr<READ, DEFER>;
}
#[cfg(feature = "flavor-memb")]
pub use memb::*;
#[cfg(all(not(feature = "flavor-memb"), feature = "flavor-mb"))]
pub use mb::*;
#[cfg(all(
not(feature = "flavor-memb"),
not(feature = "flavor-mb"),
feature = "flavor-bp"
))]
pub use bp::*;
#[cfg(all(
not(feature = "flavor-memb"),
not(feature = "flavor-mb"),
not(feature = "flavor-bp"),
feature = "flavor-qsbr"
))]
pub use qsbr::*;
}