1#![doc = include_str!("../README.md")]
2
3mod bindings {
4 #![allow(warnings)]
5
6 use libc::{pthread_attr_t, pthread_mutex_t};
7 use urcu_sys::{RcuFlavorApi as rcu_flavor_struct, RcuHead as rcu_head};
8
9 include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
10}
11
12pub mod hlist {
13 pub use crate::bindings::{cds_hlist_head as Head, cds_hlist_node as Node};
14
15 pub use crate::bindings::{
16 cds_hlist_add_head as add_head,
17 cds_hlist_add_head_rcu as add_head_rcu,
18 cds_hlist_del as del,
19 cds_hlist_del_rcu as del_rcu,
20 CDS_INIT_HLIST_HEAD as init_head,
21 };
22}
23
24pub mod lfht {
25 pub use crate::bindings::{
26 cds_lfht as Handle,
27 cds_lfht_iter as Iter,
28 cds_lfht_mm_type as MemoryType,
29 cds_lfht_node as Node,
30 };
31
32 pub use crate::bindings::cds_lfht_match_fct as MatchFn;
33
34 pub use crate::bindings::{
35 _cds_lfht_new as _new,
36 cds_lfht_add as add,
37 cds_lfht_add_replace as add_replace,
38 cds_lfht_add_unique as add_unique,
39 cds_lfht_count_nodes as count_nodes,
40 cds_lfht_del as del,
41 cds_lfht_destroy as destroy,
42 cds_lfht_first as first,
43 cds_lfht_is_node_deleted as is_node_deleted,
44 cds_lfht_iter_get_node as iter_get_node,
45 cds_lfht_lookup as lookup,
46 cds_lfht_new_flavor as new_flavor,
47 cds_lfht_next as next,
48 cds_lfht_next_duplicate as next_duplicate,
49 cds_lfht_node_init as node_init,
50 cds_lfht_node_init_deleted as node_init_deleted,
51 cds_lfht_replace as replace,
52 cds_lfht_resize as resize,
53 };
54
55 pub use crate::bindings::{
56 cds_lfht_mm_chunk as MM_CHUNK,
57 cds_lfht_mm_mmap as MM_MMAP,
58 cds_lfht_mm_order as MM_ORDER,
59 CDS_LFHT_ACCOUNTING as ACCOUNTING,
60 CDS_LFHT_AUTO_RESIZE as AUTO_RESIZE,
61 };
62}
63
64pub mod lfq {
65 pub use crate::bindings::{cds_lfq_node_rcu as NodeRcu, cds_lfq_queue_rcu as QueueRcu};
66
67 pub use crate::bindings::{
68 cds_lfq_dequeue_rcu as dequeue_rcu,
69 cds_lfq_destroy_rcu as destroy_rcu,
70 cds_lfq_enqueue_rcu as enqueue_rcu,
71 cds_lfq_init_rcu as init_rcu,
72 cds_lfq_node_init_rcu as node_init_rcu,
73 };
74}
75
76pub mod lfs {
77 pub use crate::bindings::{
78 __cds_lfs_stack as __Stack,
79 cds_lfs_head as Head,
80 cds_lfs_node as Node,
81 cds_lfs_node_rcu as NodeRcu,
82 cds_lfs_stack as Stack,
83 cds_lfs_stack_ptr_t as StackPtr,
84 cds_lfs_stack_rcu as StackRcu,
85 };
86
87 pub use crate::bindings::{
88 __cds_lfs_init as __init,
89 __cds_lfs_pop as __pop,
90 __cds_lfs_pop_all as __pop_all,
91 cds_lfs_destroy as destroy,
92 cds_lfs_empty as empty,
93 cds_lfs_init as init,
94 cds_lfs_init_rcu as init_rcu,
95 cds_lfs_node_init as node_init,
96 cds_lfs_node_init_rcu as node_init_rcu,
97 cds_lfs_pop_all_blocking as pop_all_blocking,
98 cds_lfs_pop_blocking as pop_blocking,
99 cds_lfs_pop_lock as pop_lock,
100 cds_lfs_pop_rcu as pop_rcu,
101 cds_lfs_pop_unlock as pop_unlock,
102 cds_lfs_push as push,
103 cds_lfs_push_rcu as push_rcu,
104 };
105}
106
107pub mod list {
108 pub use crate::bindings::cds_list_head as Head;
109
110 pub use crate::bindings::{
111 __cds_list_del as __del,
112 cds_list_add as add,
113 cds_list_add_rcu as add_rcu,
114 cds_list_add_tail as add_tail,
115 cds_list_add_tail_rcu as add_tail_rcu,
116 cds_list_del as del,
117 cds_list_del_init as del_init,
118 cds_list_del_rcu as del_rcu,
119 cds_list_empty as empty,
120 cds_list_move as r#move,
121 cds_list_replace as replace,
122 cds_list_replace_init as replace_init,
123 cds_list_replace_rcu as replace_rcu,
124 cds_list_splice as splice,
125 };
126}
127
128pub mod wfcq {
129 pub use crate::bindings::{
130 __cds_wfcq_head as __Head,
131 cds_wfcq_head as Head,
132 cds_wfcq_head_ptr_t as HeadPtr,
133 cds_wfcq_node as Node,
134 cds_wfcq_ret as Ret,
135 cds_wfcq_state as State,
136 cds_wfcq_tail as Tail,
137 };
138
139 pub use crate::bindings::{
140 cds_wfcq_ret_CDS_WFCQ_RET_DEST_EMPTY as RET_DEST_EMPTY,
141 cds_wfcq_ret_CDS_WFCQ_RET_DEST_NON_EMPTY as RET_DEST_NON_EMPTY,
142 cds_wfcq_ret_CDS_WFCQ_RET_SRC_EMPTY as RET_SRC_EMPTY,
143 cds_wfcq_ret_CDS_WFCQ_RET_WOULDBLOCK as RET_WOULDBLOCK,
144 cds_wfcq_state_CDS_WFCQ_STATE_LAST as STATE_LAST,
145 };
146
147 pub use crate::bindings::{
148 __cds_wfcq_dequeue_blocking as __dequeue_blocking,
149 __cds_wfcq_dequeue_nonblocking as __dequeue_nonblocking,
150 __cds_wfcq_dequeue_with_state_blocking as __dequeue_with_state_blocking,
151 __cds_wfcq_dequeue_with_state_nonblocking as __dequeue_with_state_nonblocking,
152 __cds_wfcq_first_blocking as __first_blocking,
153 __cds_wfcq_first_nonblocking as __first_nonblocking,
154 __cds_wfcq_init as __init,
155 __cds_wfcq_next_blocking as __next_blocking,
156 __cds_wfcq_next_nonblocking as __next_nonblocking,
157 __cds_wfcq_splice_blocking as __splice_blocking,
158 __cds_wfcq_splice_nonblocking as __splice_nonblocking,
159 cds_wfcq_dequeue_blocking as dequeue_blocking,
160 cds_wfcq_dequeue_lock as dequeue_lock,
161 cds_wfcq_dequeue_unlock as dequeue_unlock,
162 cds_wfcq_dequeue_with_state_blocking as dequeue_with_state_blocking,
163 cds_wfcq_destroy as destroy,
164 cds_wfcq_empty as empty,
165 cds_wfcq_enqueue as enqueue,
166 cds_wfcq_init as init,
167 cds_wfcq_node_init as node_init,
168 cds_wfcq_splice_blocking as splice_blocking,
169 };
170}
171
172pub mod wfq {
173 pub use crate::bindings::{cds_wfq_node as Node, cds_wfq_queue as Queue};
174
175 pub use crate::bindings::{
176 __cds_wfq_dequeue_blocking as __dequeue_blocking,
177 cds_wfq_dequeue_blocking as dequeue_blocking,
178 cds_wfq_destroy as destroy,
179 cds_wfq_enqueue as enqueue,
180 cds_wfq_init as init,
181 cds_wfq_node_init as node_init,
182 };
183}
184
185pub mod wfs {
186 pub use crate::bindings::{
187 __cds_wfs_stack as __Stack,
188 cds_wfs_head as Head,
189 cds_wfs_node as Node,
190 cds_wfs_stack as Stack,
191 cds_wfs_stack_ptr_t as StackPtr,
192 cds_wfs_state as State,
193 };
194
195 pub use crate::bindings::cds_wfs_state_CDS_WFS_STATE_LAST as STATE_LAST;
196
197 pub use crate::bindings::{
198 __cds_wfs_init as __init,
199 __cds_wfs_pop_all as __pop_all,
200 __cds_wfs_pop_blocking as __pop_blocking,
201 __cds_wfs_pop_nonblocking as __pop_nonblocking,
202 __cds_wfs_pop_with_state_blocking as __pop_with_state_blocking,
203 __cds_wfs_pop_with_state_nonblocking as __pop_with_state_nonblocking,
204 cds_wfs_destroy as destroy,
205 cds_wfs_empty as empty,
206 cds_wfs_first as first,
207 cds_wfs_init as init,
208 cds_wfs_next_blocking as next_blocking,
209 cds_wfs_next_nonblocking as next_nonblocking,
210 cds_wfs_node_init as node_init,
211 cds_wfs_pop_all_blocking as pop_all_blocking,
212 cds_wfs_pop_blocking as pop_blocking,
213 cds_wfs_pop_lock as pop_lock,
214 cds_wfs_pop_unlock as pop_unlock,
215 cds_wfs_pop_with_state_blocking as pop_with_state_blocking,
216 cds_wfs_push as push,
217 };
218}
219
220#[test]
221fn symbols() {
222 macro_rules! print_symbol {
223 ($sym:expr) => {
224 println!("{:?}: {}", $sym as *const (), stringify!($sym))
225 };
226 }
227
228 print_symbol!(hlist::add_head);
229 print_symbol!(hlist::add_head_rcu);
230 print_symbol!(hlist::del);
231 print_symbol!(hlist::del_rcu);
232 print_symbol!(hlist::init_head);
233
234 print_symbol!(lfht::_new);
235 print_symbol!(lfht::add);
236 print_symbol!(lfht::add_replace);
237 print_symbol!(lfht::add_unique);
238 print_symbol!(lfht::count_nodes);
239 print_symbol!(lfht::del);
240 print_symbol!(lfht::destroy);
241 print_symbol!(lfht::first);
242 print_symbol!(lfht::is_node_deleted);
243 print_symbol!(lfht::iter_get_node);
244 print_symbol!(lfht::lookup);
245 print_symbol!(lfht::new_flavor);
246 print_symbol!(lfht::next);
247 print_symbol!(lfht::next_duplicate);
248 print_symbol!(lfht::node_init);
249 print_symbol!(lfht::node_init_deleted);
250 print_symbol!(lfht::replace);
251 print_symbol!(lfht::resize);
252
253 print_symbol!(lfq::dequeue_rcu);
254 print_symbol!(lfq::destroy_rcu);
255 print_symbol!(lfq::enqueue_rcu);
256 print_symbol!(lfq::init_rcu);
257 print_symbol!(lfq::node_init_rcu);
258
259 print_symbol!(lfs::__init);
260 print_symbol!(lfs::__pop);
261 print_symbol!(lfs::__pop_all);
262 print_symbol!(lfs::destroy);
263 print_symbol!(lfs::empty);
264 print_symbol!(lfs::init);
265 print_symbol!(lfs::init_rcu);
266 print_symbol!(lfs::node_init);
267 print_symbol!(lfs::node_init_rcu);
268 print_symbol!(lfs::pop_all_blocking);
269 print_symbol!(lfs::pop_blocking);
270 print_symbol!(lfs::pop_lock);
271 print_symbol!(lfs::pop_rcu);
272 print_symbol!(lfs::pop_unlock);
273 print_symbol!(lfs::push);
274 print_symbol!(lfs::push_rcu);
275
276 print_symbol!(list::__del);
277 print_symbol!(list::add);
278 print_symbol!(list::add_rcu);
279 print_symbol!(list::add_tail);
280 print_symbol!(list::add_tail_rcu);
281 print_symbol!(list::del);
282 print_symbol!(list::del_init);
283 print_symbol!(list::del_rcu);
284 print_symbol!(list::empty);
285 print_symbol!(list::r#move);
286 print_symbol!(list::replace);
287 print_symbol!(list::replace_init);
288 print_symbol!(list::replace_rcu);
289 print_symbol!(list::splice);
290
291 print_symbol!(wfcq::__dequeue_nonblocking);
292 print_symbol!(wfcq::__dequeue_blocking);
293 print_symbol!(wfcq::__dequeue_with_state_blocking);
294 print_symbol!(wfcq::__dequeue_with_state_nonblocking);
295 print_symbol!(wfcq::__first_blocking);
296 print_symbol!(wfcq::__first_nonblocking);
297 print_symbol!(wfcq::__init);
298 print_symbol!(wfcq::__next_blocking);
299 print_symbol!(wfcq::__next_nonblocking);
300 print_symbol!(wfcq::__splice_blocking);
301 print_symbol!(wfcq::__splice_nonblocking);
302 print_symbol!(wfcq::dequeue_blocking);
303 print_symbol!(wfcq::dequeue_lock);
304 print_symbol!(wfcq::dequeue_unlock);
305 print_symbol!(wfcq::dequeue_with_state_blocking);
306 print_symbol!(wfcq::destroy);
307 print_symbol!(wfcq::empty);
308 print_symbol!(wfcq::enqueue);
309 print_symbol!(wfcq::init);
310 print_symbol!(wfcq::node_init);
311 print_symbol!(wfcq::splice_blocking);
312
313 print_symbol!(wfq::__dequeue_blocking);
314 print_symbol!(wfq::dequeue_blocking);
315 print_symbol!(wfq::destroy);
316 print_symbol!(wfq::enqueue);
317 print_symbol!(wfq::init);
318 print_symbol!(wfq::node_init);
319
320 print_symbol!(wfs::__init);
321 print_symbol!(wfs::__pop_all);
322 print_symbol!(wfs::__pop_blocking);
323 print_symbol!(wfs::__pop_nonblocking);
324 print_symbol!(wfs::__pop_with_state_blocking);
325 print_symbol!(wfs::__pop_with_state_nonblocking);
326 print_symbol!(wfs::destroy);
327 print_symbol!(wfs::empty);
328 print_symbol!(wfs::first);
329 print_symbol!(wfs::init);
330 print_symbol!(wfs::next_blocking);
331 print_symbol!(wfs::next_nonblocking);
332 print_symbol!(wfs::node_init);
333 print_symbol!(wfs::pop_all_blocking);
334 print_symbol!(wfs::pop_blocking);
335 print_symbol!(wfs::pop_lock);
336 print_symbol!(wfs::pop_unlock);
337 print_symbol!(wfs::pop_with_state_blocking);
338 print_symbol!(wfs::push);
339}