bugfix in cds::gc::HP::guarded_ptr
[libcds.git] / tests / test-hdr / set / hdr_intrusive_michael_set_rcu_shb_lazy.cpp
1 //$$CDS-header$$
2
3 #include "set/hdr_intrusive_set.h"
4 #include <cds/urcu/signal_buffered.h>
5 #include <cds/intrusive/lazy_list_rcu.h>
6 #include <cds/intrusive/michael_set_rcu.h>
7
8 namespace set {
9
10 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
11     namespace {
12         typedef cds::urcu::gc< cds::urcu::signal_buffered<> >   RCU;
13     }
14 #endif
15
16     void IntrusiveHashSetHdrTest::RCU_SHB_base_cmp_lazy()
17     {
18 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
19         typedef base_int_item< ci::lazy_list::node<RCU> > item;
20         typedef ci::LazyList< RCU
21             ,item
22             ,ci::lazy_list::make_traits<
23                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
24                 ,co::compare< cmp<item> >
25                 ,ci::opt::disposer< faked_disposer >
26                 ,ci::opt::back_off< cds::backoff::pause >
27             >::type
28         >    bucket_type;
29
30         typedef ci::MichaelHashSet< RCU, bucket_type,
31             ci::michael_set::make_traits<
32                 co::hash< hash_int >
33             >::type
34         > set;
35
36         test_rcu_int<set>();
37 #endif
38     }
39
40     void IntrusiveHashSetHdrTest::RCU_SHB_base_less_lazy()
41     {
42 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
43         typedef base_int_item< ci::lazy_list::node<RCU> > item;
44         typedef ci::LazyList< RCU
45             ,item
46             ,ci::lazy_list::make_traits<
47                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
48                 ,co::less< less<item> >
49                 ,ci::opt::disposer< faked_disposer >
50             >::type
51         >    bucket_type;
52
53         typedef ci::MichaelHashSet< RCU, bucket_type,
54             ci::michael_set::make_traits<
55                 co::hash< hash_int >
56             >::type
57         > set;
58
59         test_rcu_int<set>();
60 #endif
61     }
62
63     void IntrusiveHashSetHdrTest::RCU_SHB_base_cmpmix_lazy()
64     {
65 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
66         typedef base_int_item< ci::lazy_list::node<RCU> > item;
67         typedef ci::LazyList< RCU
68             ,item
69             ,ci::lazy_list::make_traits<
70                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
71                 ,co::less< less<item> >
72                 ,co::compare< cmp<item> >
73                 ,ci::opt::disposer< faked_disposer >
74             >::type
75         >    bucket_type;
76
77         typedef ci::MichaelHashSet< RCU, bucket_type,
78             ci::michael_set::make_traits<
79                 co::hash< hash_int >
80                 ,co::item_counter< simple_item_counter >
81             >::type
82         > set;
83
84         test_rcu_int<set>();
85 #endif
86     }
87
88     void IntrusiveHashSetHdrTest::RCU_SHB_member_cmp_lazy()
89     {
90 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
91         typedef member_int_item< ci::lazy_list::node<RCU> > item;
92         typedef ci::LazyList< RCU
93             ,item
94             ,ci::lazy_list::make_traits<
95                 ci::opt::hook< ci::lazy_list::member_hook<
96                     offsetof( item, hMember ),
97                     co::gc<RCU>
98                 > >
99                 ,co::compare< cmp<item> >
100                 ,ci::opt::disposer< faked_disposer >
101             >::type
102         >    bucket_type;
103
104         typedef ci::MichaelHashSet< RCU, bucket_type,
105             ci::michael_set::make_traits<
106                 co::hash< hash_int >
107             >::type
108         > set;
109
110         test_rcu_int<set>();
111 #endif
112     }
113
114     void IntrusiveHashSetHdrTest::RCU_SHB_member_less_lazy()
115     {
116 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
117         typedef member_int_item< ci::lazy_list::node<RCU> > item;
118         typedef ci::LazyList< RCU
119             ,item
120             ,ci::lazy_list::make_traits<
121                 ci::opt::hook< ci::lazy_list::member_hook<
122                     offsetof( item, hMember ),
123                     co::gc<RCU>
124                 > >
125                 ,co::less< less<item> >
126                 ,ci::opt::disposer< faked_disposer >
127             >::type
128         >    bucket_type;
129
130         typedef ci::MichaelHashSet< RCU, bucket_type,
131             ci::michael_set::make_traits<
132                 co::hash< hash_int >
133             >::type
134         > set;
135
136         test_rcu_int<set>();
137 #endif
138     }
139
140     void IntrusiveHashSetHdrTest::RCU_SHB_member_cmpmix_lazy()
141     {
142 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
143         typedef member_int_item< ci::lazy_list::node<RCU> > item;
144         typedef ci::LazyList< RCU
145             ,item
146             ,ci::lazy_list::make_traits<
147                 ci::opt::hook< ci::lazy_list::member_hook<
148                     offsetof( item, hMember ),
149                     co::gc<RCU>
150                 > >
151                 ,co::compare< cmp<item> >
152                 ,co::less< less<item> >
153                 ,ci::opt::disposer< faked_disposer >
154             >::type
155         >    bucket_type;
156
157         typedef ci::MichaelHashSet< RCU, bucket_type,
158             ci::michael_set::make_traits<
159                 co::hash< hash_int >
160                 ,co::item_counter< simple_item_counter >
161             >::type
162         > set;
163
164         test_rcu_int<set>();
165 #endif
166     }
167
168 } // namespace set