Move libcds 1.6.0 from SVN
[libcds.git] / tests / test-hdr / ordered_list / hdr_michael_kv_rcu_gpb.cpp
1 //$$CDS-header$$
2
3 #include "ordered_list/hdr_michael_kv.h"
4 #include <cds/urcu/general_buffered.h>
5 #include <cds/container/michael_kvlist_rcu.h>
6
7 namespace ordlist {
8     namespace {
9         typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
10         struct RCU_GPB_cmp_traits: public cc::michael_list::type_traits
11         {
12             typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
13         };
14     }
15     void MichaelKVListTestHeader::RCU_GPB_cmp()
16     {
17         // traits-based version
18         typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPB_cmp_traits > list;
19         test_rcu< list >();
20
21         // option-based version
22
23         typedef cc::MichaelKVList< rcu_type, key_type, value_type,
24             cc::michael_list::make_traits<
25                 cc::opt::compare< cmp<key_type> >
26             >::type
27         > opt_list;
28         test_rcu< opt_list >();
29     }
30
31     namespace {
32         struct RCU_GPB_less_traits: public cc::michael_list::type_traits
33         {
34             typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
35         };
36     }
37     void MichaelKVListTestHeader::RCU_GPB_less()
38     {
39         // traits-based version
40         typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPB_less_traits > list;
41         test_rcu< list >();
42
43         // option-based version
44
45         typedef cc::MichaelKVList< rcu_type, key_type, value_type,
46             cc::michael_list::make_traits<
47                 cc::opt::less< lt<key_type> >
48             >::type
49         > opt_list;
50         test_rcu< opt_list >();
51     }
52
53     namespace {
54         struct RCU_GPB_cmpmix_traits: public cc::michael_list::type_traits
55         {
56             typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
57             typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>  less;
58         };
59     }
60     void MichaelKVListTestHeader::RCU_GPB_cmpmix()
61     {
62         // traits-based version
63         typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPB_cmpmix_traits > list;
64         test_rcu< list >();
65
66         // option-based version
67
68         typedef cc::MichaelKVList< rcu_type, key_type, value_type,
69             cc::michael_list::make_traits<
70                 cc::opt::compare< cmp<key_type> >
71                 ,cc::opt::less< lt<key_type> >
72             >::type
73         > opt_list;
74         test_rcu< opt_list >();
75     }
76
77     namespace {
78         struct RCU_GPB_ic_traits: public cc::michael_list::type_traits
79         {
80             typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
81             typedef cds::atomicity::item_counter item_counter;
82         };
83     }
84     void MichaelKVListTestHeader::RCU_GPB_ic()
85     {
86         // traits-based version
87         typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPB_ic_traits > list;
88         test_rcu< list >();
89
90         // option-based version
91
92         typedef cc::MichaelKVList< rcu_type, key_type, value_type,
93             cc::michael_list::make_traits<
94                 cc::opt::less< lt<key_type> >
95                 ,cc::opt::item_counter< cds::atomicity::item_counter >
96             >::type
97         > opt_list;
98         test_rcu< opt_list >();
99     }
100
101 }   // namespace ordlist
102