3 #include "set/hdr_intrusive_striped_set.h"
4 #include <cds/intrusive/striped_set/boost_unordered_set.h>
5 #include <cds/intrusive/striped_set.h>
8 namespace bi = boost::intrusive;
11 typedef IntrusiveStripedSetHdrTest::base_item< bi::unordered_set_base_hook<> > base_item_type;
12 typedef IntrusiveStripedSetHdrTest::member_item< bi::unordered_set_member_hook<> > member_item_type;
14 struct hasher: private IntrusiveStripedSetHdrTest::hash_int
16 typedef IntrusiveStripedSetHdrTest::hash_int base_class;
18 size_t operator()( int i ) const
20 return ~( base_class::operator()(i));
22 template <typename Item>
23 size_t operator()( const Item& i ) const
25 return ~( base_class::operator()(i));
27 size_t operator()( IntrusiveStripedSetHdrTest::find_key const& i) const
29 return ~( base_class::operator()(i));
34 struct is_equal: private IntrusiveStripedSetHdrTest::cmp<T>
36 typedef IntrusiveStripedSetHdrTest::cmp<T> base_class;
38 bool operator ()(const T& v1, const T& v2 ) const
40 return base_class::operator()( v1, v2 ) == 0;
44 bool operator ()(const T& v1, const Q& v2 ) const
46 return base_class::operator()( v1, v2 ) == 0;
50 bool operator ()(const Q& v1, const T& v2 ) const
52 return base_class::operator()( v1, v2 ) == 0;
56 template <size_t Capacity, typename T, class Alloc = CDS_DEFAULT_ALLOCATOR>
57 struct dyn_buffer: public co::v::dynamic_buffer< T, Alloc >
59 typedef co::v::dynamic_buffer< T, Alloc > base_class;
63 typedef dyn_buffer<Capacity, Q, Alloc> other ; ///< Rebinding result type
67 : base_class( Capacity )
72 void IntrusiveStripedSetHdrTest::Striped_unordered_set_basehook()
74 typedef ci::StripedSet<
75 bi::unordered_set<base_item_type
77 , bi::equal< is_equal<base_item_type> >
78 , bi::power_2_buckets<true>
79 , bi::incremental<true>
81 ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
87 void IntrusiveStripedSetHdrTest::Striped_unordered_set_basehook_bucket_threshold()
89 typedef ci::StripedSet<
90 bi::unordered_set<base_item_type
92 , bi::equal< is_equal<base_item_type> >
93 , bi::power_2_buckets<true>
94 , bi::incremental<true>
96 ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
97 ,co::buffer< co::v::static_buffer< cds::any_type, 64 > >
98 ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
104 void IntrusiveStripedSetHdrTest::Striped_unordered_set_basehook_bucket_threshold_rt()
106 typedef ci::StripedSet<
107 bi::unordered_set<base_item_type
109 , bi::equal< is_equal<base_item_type> >
110 , bi::power_2_buckets<true>
111 , bi::incremental<true>
113 ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
114 ,co::buffer< dyn_buffer< 256, cds::any_type, std::allocator<int> > >
115 ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
118 set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(512) );
122 void IntrusiveStripedSetHdrTest::Striped_unordered_set_memberhook()
124 typedef ci::StripedSet<
125 bi::unordered_set<member_item_type
126 , bi::member_hook< member_item_type, bi::unordered_set_member_hook<>, &member_item_type::hMember>
128 , bi::equal< is_equal<member_item_type> >
129 , bi::power_2_buckets<true>
130 , bi::incremental<true>
132 ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
138 void IntrusiveStripedSetHdrTest::Striped_unordered_set_memberhook_bucket_threshold()
140 typedef ci::StripedSet<
141 bi::unordered_set<member_item_type
142 , bi::member_hook< member_item_type, bi::unordered_set_member_hook<>, &member_item_type::hMember>
144 , bi::equal< is_equal<member_item_type> >
145 , bi::power_2_buckets<true>
146 , bi::incremental<true>
148 ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
149 ,co::buffer< dyn_buffer< 64, cds::any_type, std::allocator<int> > >
150 ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
151 ,co::mutex_policy< ci::striped_set::striping<> >
157 void IntrusiveStripedSetHdrTest::Striped_unordered_set_memberhook_bucket_threshold_rt()
159 typedef ci::StripedSet<
160 bi::unordered_set<member_item_type
161 , bi::member_hook< member_item_type, bi::unordered_set_member_hook<>, &member_item_type::hMember>
163 , bi::equal< is_equal<member_item_type> >
164 , bi::power_2_buckets<true>
165 , bi::incremental<true>
167 ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
168 ,co::buffer< co::v::static_buffer< cds::any_type, 128 > >
169 ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
172 set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );