urcu_cds_sys/
lib.rs

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}