Fixed: set_DelOdd and map_DelOdd tests for FeldmanHashSet/Map now use correct compare...
authorkhizmax <khizmax@gmail.com>
Mon, 14 Nov 2016 09:31:32 +0000 (12:31 +0300)
committerkhizmax <khizmax@gmail.com>
Mon, 14 Nov 2016 09:31:32 +0000 (12:31 +0300)
test/stress/map/map_type_feldman_hashmap.h
test/stress/set/set_type.h
test/stress/set/set_type_feldman_hashset.h

index 674b9ac872b1d556e7940578e7a4174ebfe56f2e..fabf3769acd8c06832ee813b944ece49a344483b 100644 (file)
@@ -76,6 +76,7 @@ namespace map {
         struct traits_FeldmanHashMap_stdhash : public cc::feldman_hashmap::traits
         {
             typedef std::hash< Key > hash;
         struct traits_FeldmanHashMap_stdhash : public cc::feldman_hashmap::traits
         {
             typedef std::hash< Key > hash;
+            typedef map::cmp<Key>    compare;
         };
 
         typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_hp_stdhash;
         };
 
         typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_hp_stdhash;
@@ -91,6 +92,7 @@ namespace map {
         struct traits_FeldmanHashMap_stdhash_stat: traits_FeldmanHashMap_stdhash
         {
             typedef cc::feldman_hashmap::stat<> stat;
         struct traits_FeldmanHashMap_stdhash_stat: traits_FeldmanHashMap_stdhash
         {
             typedef cc::feldman_hashmap::stat<> stat;
+            typedef map::less<Key> less;
         };
 
         typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_hp_stdhash_stat;
         };
 
         typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_hp_stdhash_stat;
@@ -166,28 +168,33 @@ namespace map {
 
 
         // for fixed-sized keys - no hash functor required
 
 
         // for fixed-sized keys - no hash functor required
-        typedef FeldmanHashMap< cds::gc::HP, Key, Value >    FeldmanHashMap_hp_fixed;
-        typedef FeldmanHashMap< cds::gc::DHP, Key, Value >   FeldmanHashMap_dhp_fixed;
-        typedef FeldmanHashMap< rcu_gpi, Key, Value >    FeldmanHashMap_rcu_gpi_fixed;
-        typedef FeldmanHashMap< rcu_gpb, Key, Value >    FeldmanHashMap_rcu_gpb_fixed;
-        typedef FeldmanHashMap< rcu_gpt, Key, Value >    FeldmanHashMap_rcu_gpt_fixed;
+        struct traits_FeldmanHashMap_fixed: public cc::feldman_hashmap::traits
+        {
+            typedef map::cmp<Key>    compare;
+        };
+
+        typedef FeldmanHashMap< cds::gc::HP, Key, Value,  traits_FeldmanHashMap_fixed >    FeldmanHashMap_hp_fixed;
+        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_fixed >   FeldmanHashMap_dhp_fixed;
+        typedef FeldmanHashMap< rcu_gpi, Key, Value,      traits_FeldmanHashMap_fixed >    FeldmanHashMap_rcu_gpi_fixed;
+        typedef FeldmanHashMap< rcu_gpb, Key, Value,      traits_FeldmanHashMap_fixed >    FeldmanHashMap_rcu_gpb_fixed;
+        typedef FeldmanHashMap< rcu_gpt, Key, Value,      traits_FeldmanHashMap_fixed >    FeldmanHashMap_rcu_gpt_fixed;
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashMap< rcu_shb, Key, Value >    FeldmanHashMap_rcu_shb_fixed;
-        typedef FeldmanHashMap< rcu_sht, Key, Value >    FeldmanHashMap_rcu_sht_fixed;
+        typedef FeldmanHashMap< rcu_shb, Key, Value,      traits_FeldmanHashMap_fixed >    FeldmanHashMap_rcu_shb_fixed;
+        typedef FeldmanHashMap< rcu_sht, Key, Value,      traits_FeldmanHashMap_fixed >    FeldmanHashMap_rcu_sht_fixed;
 #endif
 
 #endif
 
-        struct traits_FeldmanHashMap_stat : public cc::feldman_hashmap::traits
+        struct traits_FeldmanHashMap_fixed_stat : public traits_FeldmanHashMap_fixed
         {
             typedef cc::feldman_hashmap::stat<> stat;
         };
         {
             typedef cc::feldman_hashmap::stat<> stat;
         };
-        typedef FeldmanHashMap< cds::gc::HP, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_hp_fixed_stat;
-        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_stat >   FeldmanHashMap_dhp_fixed_stat;
-        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_gpi_fixed_stat;
-        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_gpb_fixed_stat;
-        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_gpt_fixed_stat;
+        typedef FeldmanHashMap< cds::gc::HP, Key, Value,    traits_FeldmanHashMap_fixed_stat >  FeldmanHashMap_hp_fixed_stat;
+        typedef FeldmanHashMap< cds::gc::DHP, Key, Value,   traits_FeldmanHashMap_fixed_stat >  FeldmanHashMap_dhp_fixed_stat;
+        typedef FeldmanHashMap< rcu_gpi, Key, Value,        traits_FeldmanHashMap_fixed_stat >  FeldmanHashMap_rcu_gpi_fixed_stat;
+        typedef FeldmanHashMap< rcu_gpb, Key, Value,        traits_FeldmanHashMap_fixed_stat >  FeldmanHashMap_rcu_gpb_fixed_stat;
+        typedef FeldmanHashMap< rcu_gpt, Key, Value,        traits_FeldmanHashMap_fixed_stat >  FeldmanHashMap_rcu_gpt_fixed_stat;
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_shb_fixed_stat;
-        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_sht_fixed_stat;
+        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_fixed_stat > FeldmanHashMap_rcu_shb_fixed_stat;
+        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_fixed_stat > FeldmanHashMap_rcu_sht_fixed_stat;
 #endif
 
     };
 #endif
 
     };
index 0fa5182bb1a4e342b460bf6a16383d279b96a470..3d0edd7c5730f08b99fad774106b2b0cea958b57 100644 (file)
@@ -183,7 +183,7 @@ namespace set {
             key_type    key;
             value_type  val;
 
             key_type    key;
             value_type  val;
 
-            /*explicit*/ key_val( key_type const& k ): key(k), val() {}
+            explicit key_val( key_type const& k ): key(k), val() {}
             key_val( key_type const& k, value_type const& v ): key(k), val(v) {}
 
             template <typename K>
             key_val( key_type const& k, value_type const& v ): key(k), val(v) {}
 
             template <typename K>
index ab20e1f638e9972509d87f9b8215c908af6527f5..a0e3527cc7d8b8cf4890a3f2be861474ee3f6fd8 100644 (file)
@@ -256,11 +256,11 @@ namespace set {
             {
                 typedef typename set_type_base< Key, Val >::key_val base_class;
 
             {
                 typedef typename set_type_base< Key, Val >::key_val base_class;
 
-                /*explicit*/ key_val(key_type const& k) : base_class(k) {}
+                explicit key_val(key_type const& k) : base_class(k) {}
                 key_val(key_type const& k, value_type const& v) : base_class(k, v) {}
 
                 template <typename K>
                 key_val(key_type const& k, value_type const& v) : base_class(k, v) {}
 
                 template <typename K>
-                /*explicit*/ key_val(K const& k) : base_class(k) {}
+                explicit key_val(K const& k) : base_class(k) {}
 
                 template <typename K, typename T>
                 key_val(K const& k, T const& v) : base_class(k, v) {}
 
                 template <typename K, typename T>
                 key_val(K const& k, T const& v) : base_class(k, v) {}
@@ -272,17 +272,34 @@ namespace set {
                     {
                         return key_type( k );
                     }
                     {
                         return key_type( k );
                     }
+
+                    key_type const& operator()( key_val const& kv ) const
+                    {
+                        return kv.key;
+                    }
+
+                    key_type const& operator()( key_type const& k ) const
+                    {
+                        return k;
+                    }
                 };
             };
 
             struct traits : public cc::feldman_hashset::traits
             {
                 struct hash_accessor {
                 };
             };
 
             struct traits : public cc::feldman_hashset::traits
             {
                 struct hash_accessor {
-                    key_type operator()(key_val const& kv)
+                    key_type const& operator()( key_val const& kv ) const
                     {
                         return kv.key;
                     }
                     {
                         return kv.key;
                     }
+
+                    key_type const& operator()( key_type const& k ) const
+                    {
+                        return k;
+                    }
                 };
                 };
+
+                typedef set::cmp<Key>   compare;
             };
 
             struct traits_stat : public traits
             };
 
             struct traits_stat : public traits