Removed trailing whitespaces
[libcds.git] / tests / unit / map2 / map_type_bronson_avltree.h
1 //$$CDS-header$$
2
3 #ifndef CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
4 #define CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
5
6 #include "map2/map_type.h"
7
8 #include <cds/memory/vyukov_queue_pool.h>
9 #include <cds/sync/pool_monitor.h>
10 #include <cds/container/bronson_avltree_map_rcu.h>
11
12 #include "print_bronsonavltree_stat.h"
13 #include "print_sync_monitor_stat.h"
14
15 namespace map2 {
16
17     template <typename Key, typename Value>
18     struct map_type< cc::bronson_avltree::implementation_tag, Key, Value >: public map_type_base< Key, Value >
19     {
20         typedef map_type_base< Key, Value > base_class;
21         typedef typename base_class::compare    compare;
22         typedef typename base_class::less       less;
23
24         typedef cds::memory::vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_simple_pool;
25         typedef cds::memory::lazy_vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_lazy_pool;
26         typedef cds::memory::bounded_vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_bounded_pool;
27
28         struct BronsonAVLTreeMap_less: public
29             cc::bronson_avltree::make_traits<
30                 co::less< less >
31                 ,cc::bronson_avltree::relaxed_insert< false >
32                 ,co::item_counter< cds::atomicity::item_counter >
33             >::type
34         {};
35         typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpi_less;
36         typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpb_less;
37         typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpt_less;
38 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
39         typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_shb_less;
40         typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_sht_less;
41 #endif
42         struct BronsonAVLTreeMap_cmp_stat: public
43             cc::bronson_avltree::make_traits<
44                 co::compare< compare >
45                 ,cc::bronson_avltree::relaxed_insert< false >
46                 ,co::item_counter< cds::atomicity::item_counter >
47                 ,co::stat< cc::bronson_avltree::stat<>>
48             >::type
49         {};
50         typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpi_cmp_stat;
51         typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpb_cmp_stat;
52         typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpt_cmp_stat;
53 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
54         typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_shb_cmp_stat;
55         typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_sht_cmp_stat;
56 #endif
57
58         struct BronsonAVLTreeMap_less_pool_simple: public BronsonAVLTreeMap_less
59         {
60             typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool> sync_monitor;
61         };
62         typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpi_less_pool_simple;
63         typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpb_less_pool_simple;
64         typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpt_less_pool_simple;
65 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
66         typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_shb_less_pool_simple;
67         typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_sht_less_pool_simple;
68 #endif
69         struct BronsonAVLTreeMap_less_pool_simple_stat : public BronsonAVLTreeMap_less
70         {
71             typedef cc::bronson_avltree::stat<> stat;
72             typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool, cds::opt::none, true > sync_monitor;
73         };
74         typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat;
75         typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat;
76         typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat;
77 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
78         typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat;
79         typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat;
80 #endif
81         struct BronsonAVLTreeMap_less_pool_lazy: public BronsonAVLTreeMap_less
82         {
83             typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool> sync_monitor;
84             static CDS_CONSTEXPR bool const relaxed_insert = true;
85         };
86         typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy;
87         typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy;
88         typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy;
89 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
90         typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_shb_less_pool_lazy;
91         typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_sht_less_pool_lazy;
92 #endif
93         struct BronsonAVLTreeMap_less_pool_lazy_stat : public BronsonAVLTreeMap_less
94         {
95             typedef cc::bronson_avltree::stat<> stat;
96             typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool, cds::opt::none, true > sync_monitor;
97             static CDS_CONSTEXPR bool const relaxed_insert = true;
98         };
99         typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat;
100         typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat;
101         typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat;
102 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
103         typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat;
104         typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat;
105 #endif
106         struct BronsonAVLTreeMap_less_pool_bounded: public BronsonAVLTreeMap_less
107         {
108             typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool> sync_monitor;
109             static CDS_CONSTEXPR bool const relaxed_insert = true;
110         };
111         typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded;
112         typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded;
113         typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded;
114 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
115         typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_shb_less_pool_bounded;
116         typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_sht_less_pool_bounded;
117 #endif
118         struct BronsonAVLTreeMap_less_pool_bounded_stat : public BronsonAVLTreeMap_less
119         {
120             typedef cc::bronson_avltree::stat<> stat;
121             typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool, cds::opt::none, true > sync_monitor;
122             static CDS_CONSTEXPR bool const relaxed_insert = true;
123         };
124         typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded_stat;
125         typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded_stat;
126         typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded_stat;
127 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
128         typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_shb_less_pool_bounded_stat;
129         typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_sht_less_pool_bounded_stat;
130 #endif
131     };
132
133     template <typename GC, typename Key, typename T, typename Traits>
134     static inline void print_stat( cc::BronsonAVLTreeMap<GC, Key, T, Traits> const& m )
135     {
136         CPPUNIT_MSG( m.statistics() );
137         CPPUNIT_MSG( m.monitor().statistics() );
138     }
139
140     template <typename GC, typename Key, typename T, typename Traits>
141     static inline void check_before_cleanup( cc::BronsonAVLTreeMap<GC, Key, T, Traits>& m )
142     {
143         CPPUNIT_MSG( "  Check internal consistency (single-threaded)..." );
144         bool bOk = m.check_consistency([]( size_t nLevel, size_t hLeft, size_t hRight )
145             {
146                 CPPUNIT_MSG( "Tree violation on level=" << nLevel << ": hLeft=" << hLeft << ", hRight=" << hRight )
147             });
148         CPPUNIT_CHECK_CURRENT_EX( bOk, "check_consistency failed");
149     }
150
151 }   // namespace map2
152
153 #endif // ifndef CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H