1pub(crate) mod builder;
4pub(crate) mod callback;
5pub(crate) mod cleanup;
6pub(crate) mod context;
7pub(crate) mod flavor;
8pub(crate) mod guard;
9pub(crate) mod poller;
10pub(crate) mod reference;
11
12pub use crate::rcu::callback::{RcuCall, RcuCallFn, RcuDefer, RcuDeferFn};
13pub use crate::rcu::reference::RcuRefBox;
14
15pub unsafe fn dereference<T>(pointer: *const T) -> *const T {
25 unsafe { urcu_sys::rcu_dereference(pointer as *mut std::ffi::c_void) as *const T }
27}
28
29pub unsafe fn dereference_mut<T>(pointer: *mut T) -> *mut T {
39 unsafe { urcu_sys::rcu_dereference(pointer as *mut std::ffi::c_void) as *mut T }
41}
42
43#[cfg(feature = "flavor-bp")]
45pub mod bp {
46
47 pub use crate::rcu::context::RcuContextBp;
48 pub use crate::rcu::flavor::RcuFlavorBp;
49 pub use crate::rcu::guard::RcuGuardBp;
50 pub use crate::rcu::poller::RcuPollerBp;
51}
52
53#[cfg(feature = "flavor-mb")]
55pub mod mb {
56 pub use crate::rcu::context::RcuContextMb;
57 pub use crate::rcu::flavor::RcuFlavorMb;
58 pub use crate::rcu::guard::RcuGuardMb;
59 pub use crate::rcu::poller::RcuPollerMb;
60}
61
62#[cfg(feature = "flavor-memb")]
64pub mod memb {
65 pub use crate::rcu::context::RcuContextMemb;
66 pub use crate::rcu::flavor::RcuFlavorMemb;
67 pub use crate::rcu::guard::RcuGuardMemb;
68 pub use crate::rcu::poller::RcuPollerMemb;
69}
70
71#[cfg(feature = "flavor-qsbr")]
73pub mod qsbr {
74 pub use crate::rcu::context::RcuContextQsbr;
75 pub use crate::rcu::flavor::RcuFlavorQsbr;
76 pub use crate::rcu::guard::RcuGuardQsbr;
77 pub use crate::rcu::poller::RcuPollerQsbr;
78}
79
80pub mod default {
82 #[cfg(feature = "flavor-memb")]
83 mod memb {
84 pub type RcuDefaultFlavor = crate::rcu::flavor::RcuFlavorMemb;
86
87 pub type RcuDefaultGuard<'a> = crate::rcu::guard::RcuGuardMemb<'a>;
89
90 pub type RcuDefaultPoller<'a> = crate::rcu::poller::RcuPollerMemb<'a>;
92
93 pub type RcuDefaultContext<const READ: bool = false, const DEFER: bool = false> =
95 crate::rcu::context::RcuContextMemb<READ, DEFER>;
96 }
97
98 #[cfg(all(not(feature = "flavor-memb"), feature = "flavor-mb"))]
99 mod mb {
100 pub type RcuDefaultFlavor = crate::rcu::flavor::RcuFlavorMb;
102
103 pub type RcuDefaultGuard<'a> = crate::rcu::guard::RcuGuardMb<'a>;
105
106 pub type RcuDefaultPoller<'a> = crate::rcu::poller::RcuPollerMb<'a>;
108
109 pub type RcuDefaultContext<const READ: bool = false, const DEFER: bool = false> =
111 crate::rcu::context::RcuContextMb<READ, DEFER>;
112 }
113
114 #[cfg(all(
115 not(feature = "flavor-memb"),
116 not(feature = "flavor-mb"),
117 feature = "flavor-bp"
118 ))]
119 mod bp {
120 pub type RcuDefaultFlavor = crate::rcu::flavor::RcuFlavorBp;
122
123 pub type RcuDefaultGuard<'a> = crate::rcu::guard::RcuGuardBp<'a>;
125
126 pub type RcuDefaultPoller<'a> = crate::rcu::poller::RcuPollerBp<'a>;
128
129 pub type RcuDefaultContext<const READ: bool = false, const DEFER: bool = false> =
131 crate::rcu::context::RcuContextBp<READ, DEFER>;
132 }
133
134 #[cfg(all(
135 not(feature = "flavor-memb"),
136 not(feature = "flavor-mb"),
137 not(feature = "flavor-bp"),
138 feature = "flavor-qsbr"
139 ))]
140 mod qsbr {
141 pub type RcuDefaultFlavor = crate::rcu::flavor::RcuFlavorQsbr;
143
144 pub type RcuDefaultGuard<'a> = crate::rcu::guard::RcuGuardQsbr<'a>;
146
147 pub type RcuDefaultPoller<'a> = crate::rcu::poller::RcuPollerQsbr<'a>;
149
150 pub type RcuDefaultContext<const READ: bool = false, const DEFER: bool = false> =
152 crate::rcu::context::RcuContextQsbr<READ, DEFER>;
153 }
154
155 #[cfg(feature = "flavor-memb")]
156 pub use memb::*;
157
158 #[cfg(all(not(feature = "flavor-memb"), feature = "flavor-mb"))]
159 pub use mb::*;
160
161 #[cfg(all(
162 not(feature = "flavor-memb"),
163 not(feature = "flavor-mb"),
164 feature = "flavor-bp"
165 ))]
166 pub use bp::*;
167
168 #[cfg(all(
169 not(feature = "flavor-memb"),
170 not(feature = "flavor-mb"),
171 not(feature = "flavor-bp"),
172 feature = "flavor-qsbr"
173 ))]
174 pub use qsbr::*;
175}