MichaelList refactoring
[libcds.git] / tests / test-hdr / ordered_list / hdr_michael_kv_rcu_gpi.cpp
1 //$$CDS-header$$
2
3 #include "ordered_list/hdr_michael_kv.h"
4 #include <cds/urcu/general_instant.h>
5 #include <cds/container/michael_kvlist_rcu.h>
6
7 namespace ordlist {
8     namespace {
9         typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
10         struct RCU_GPI_cmp_traits : public cc::michael_list::traits
11         {
12             typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
13         };
14     }
15     void MichaelKVListTestHeader::RCU_GPI_cmp()
16     {
17         // traits-based version
18         typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPI_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_GPI_less_traits : public cc::michael_list::traits
33         {
34             typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
35         };
36     }
37     void MichaelKVListTestHeader::RCU_GPI_less()
38     {
39         // traits-based version
40         typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPI_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_GPI_cmpmix_traits : public cc::michael_list::traits
55         {
56             typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
57             typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>  less;
58         };
59     }
60     void MichaelKVListTestHeader::RCU_GPI_cmpmix()
61     {
62         // traits-based version
63         typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPI_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_GPI_ic_traits : public cc::michael_list::traits
79         {
80             typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
81             typedef cds::atomicity::item_counter item_counter;
82         };
83     }
84     void MichaelKVListTestHeader::RCU_GPI_ic()
85     {
86         // traits-based version
87         typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPI_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