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