bugfix in cds::gc::HP::guarded_ptr
[libcds.git] / tests / test-hdr / ordered_list / hdr_lazy_rcu_sht.cpp
1 //$$CDS-header$$
2
3 #include "ordered_list/hdr_lazy.h"
4 #include <cds/urcu/signal_threaded.h>
5 #include <cds/container/lazy_list_rcu.h>
6
7 namespace ordlist {
8 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
9     namespace {
10         typedef cds::urcu::gc< cds::urcu::signal_threaded<> >    rcu_type;
11
12         struct RCU_SHT_cmp_traits : public cc::lazy_list::traits
13         {
14             typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
15         };
16     }
17 #endif
18     void LazyListTestHeader::RCU_SHT_cmp()
19     {
20 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
21         // traits-based version
22         typedef cc::LazyList< rcu_type, item, RCU_SHT_cmp_traits > list;
23         test_rcu< list >();
24
25         // option-based version
26
27         typedef cc::LazyList< rcu_type, item,
28             cc::lazy_list::make_traits<
29                 cc::opt::compare< cmp<item> >
30             >::type
31         > opt_list;
32         test_rcu< opt_list >();
33 #endif
34     }
35
36 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
37     namespace {
38         struct RCU_SHT_less_traits : public cc::lazy_list::traits
39         {
40             typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
41         };
42     }
43 #endif
44     void LazyListTestHeader::RCU_SHT_less()
45     {
46 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
47         // traits-based version
48         typedef cc::LazyList< rcu_type, item, RCU_SHT_less_traits > list;
49         test_rcu< list >();
50
51         // option-based version
52
53         typedef cc::LazyList< rcu_type, item,
54             cc::lazy_list::make_traits<
55                 cc::opt::less< lt<item> >
56             >::type
57         > opt_list;
58         test_rcu< opt_list >();
59 #endif
60     }
61
62 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
63     namespace {
64         struct RCU_SHT_cmpmix_traits: public cc::lazy_list::traits
65         {
66             typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
67             typedef LazyListTestHeader::lt<LazyListTestHeader::item>  less;
68         };
69     }
70 #endif
71     void LazyListTestHeader::RCU_SHT_cmpmix()
72     {
73 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
74         // traits-based version
75         typedef cc::LazyList< rcu_type, item, RCU_SHT_cmpmix_traits > list;
76         test_rcu< list >();
77
78         // option-based version
79
80         typedef cc::LazyList< rcu_type, item,
81             cc::lazy_list::make_traits<
82                 cc::opt::compare< cmp<item> >
83                 ,cc::opt::less< lt<item> >
84             >::type
85         > opt_list;
86         test_rcu< opt_list >();
87 #endif
88     }
89
90 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
91     namespace {
92         struct RCU_SHT_ic_traits: public cc::lazy_list::traits
93         {
94             typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
95             typedef cds::atomicity::item_counter item_counter;
96         };
97     }
98 #endif
99     void LazyListTestHeader::RCU_SHT_ic()
100     {
101 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
102         // traits-based version
103         typedef cc::LazyList< rcu_type, item, RCU_SHT_ic_traits > list;
104         test_rcu< list >();
105
106         // option-based version
107
108         typedef cc::LazyList< rcu_type, item,
109             cc::lazy_list::make_traits<
110                 cc::opt::less< lt<item> >
111                 ,cc::opt::item_counter< cds::atomicity::item_counter >
112             >::type
113         > opt_list;
114         test_rcu< opt_list >();
115 #endif
116     }
117
118 }   // namespace ordlist
119