3 #ifndef CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
4 #define CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
6 #include "map2/map_type.h"
8 #include <cds/memory/vyukov_queue_pool.h>
9 #include <cds/sync/pool_monitor.h>
10 #include <cds/container/bronson_avltree_map_rcu.h>
12 #include "print_bronsonavltree_stat.h"
13 #include "print_sync_monitor_stat.h"
17 template <typename Key, typename Value>
18 struct map_type< cc::bronson_avltree::implementation_tag, Key, Value >: public map_type_base< Key, Value >
20 typedef map_type_base< Key, Value > base_class;
21 typedef typename base_class::compare compare;
22 typedef typename base_class::less less;
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;
28 struct BronsonAVLTreeMap_less: public
29 cc::bronson_avltree::make_traits<
31 ,cc::bronson_avltree::relaxed_insert< false >
32 ,co::item_counter< cds::atomicity::item_counter >
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;
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<>>
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;
58 struct BronsonAVLTreeMap_less_pool_simple: public BronsonAVLTreeMap_less
60 typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool> sync_monitor;
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;
69 struct BronsonAVLTreeMap_less_pool_simple_stat : public BronsonAVLTreeMap_less
71 typedef cc::bronson_avltree::stat<> stat;
72 typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool, cds::opt::none, true > sync_monitor;
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;
81 struct BronsonAVLTreeMap_less_pool_lazy: public BronsonAVLTreeMap_less
83 typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool> sync_monitor;
84 static CDS_CONSTEXPR bool const relaxed_insert = true;
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;
93 struct BronsonAVLTreeMap_less_pool_lazy_stat : public BronsonAVLTreeMap_less
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;
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;
106 struct BronsonAVLTreeMap_less_pool_bounded: public BronsonAVLTreeMap_less
108 typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool> sync_monitor;
109 static CDS_CONSTEXPR bool const relaxed_insert = true;
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;
118 struct BronsonAVLTreeMap_less_pool_bounded_stat : public BronsonAVLTreeMap_less
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;
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;
133 template <typename GC, typename Key, typename T, typename Traits>
134 static inline void print_stat( cc::BronsonAVLTreeMap<GC, Key, T, Traits> const& m )
136 CPPUNIT_MSG( m.statistics() );
137 CPPUNIT_MSG( m.monitor().statistics() );
140 template <typename GC, typename Key, typename T, typename Traits>
141 static inline void check_before_cleanup( cc::BronsonAVLTreeMap<GC, Key, T, Traits>& m )
143 CPPUNIT_MSG( " Check internal consistency (single-threaded)..." );
144 bool bOk = m.check_consistency([]( size_t nLevel, size_t hLeft, size_t hRight )
146 CPPUNIT_MSG( "Tree violation on level=" << nLevel << ": hLeft=" << hLeft << ", hRight=" << hRight )
148 CPPUNIT_CHECK_CURRENT_EX( bOk, "check_consistency failed");
153 #endif // ifndef CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H