fixed work with guarded_ptr in tests
[libcds.git] / tests / unit / map2 / map_delodd.cpp
index 6791b8e6ca71a86d175e6cc93ec6ab502edaeed8..2b6b74e8e38964fc8330c77656e856bf7180ff88 100644 (file)
@@ -83,32 +83,29 @@ namespace std {
             return false;
         }
     };
-} // namespace std
-
-CDS_BEGIN_STD_HASH_NAMESPACE
-template <>
-struct hash<map2::key_thread>
-{
-    typedef size_t              result_type;
-    typedef map2::key_thread    argument_type;
 
-    size_t operator()(map2::key_thread const& k) const
-    {
-        return CDS_STD_HASH_NAMESPACE::hash<size_t>()( k.nKey );
-    }
-    size_t operator()(size_t k) const
+    template <>
+    struct hash<map2::key_thread>
     {
-        return CDS_STD_HASH_NAMESPACE::hash<size_t>()( k );
-    }
-};
-CDS_END_STD_HASH_NAMESPACE
+        typedef size_t              result_type;
+        typedef map2::key_thread    argument_type;
+
+        size_t operator()( map2::key_thread const& k ) const
+        {
+            return std::hash<size_t>()(k.nKey);
+        }
+        size_t operator()( size_t k ) const
+        {
+            return std::hash<size_t>()(k);
+        }
+    };
+} // namespace std
 
 namespace boost {
     inline size_t hash_value( map2::key_thread const& k )
     {
-        return CDS_STD_HASH_NAMESPACE::hash<size_t>()( k.nKey );
+        return std::hash<size_t>()( k.nKey );
     }
-
     template <>
     struct hash<map2::key_thread>
     {
@@ -147,7 +144,7 @@ namespace map2 {
         typedef size_t      value_type;
         typedef std::pair<key_type const, value_type> pair_type;
 
-        CDS_ATOMIC::atomic<size_t>      m_nInsThreadCount;
+        atomics::atomic<size_t>      m_nInsThreadCount;
 
         // Inserts keys from [0..N)
         template <class Map>
@@ -210,7 +207,7 @@ namespace map2 {
                     }
                 }
 
-                getTest().m_nInsThreadCount.fetch_sub( 1, CDS_ATOMIC::memory_order_acquire );
+                getTest().m_nInsThreadCount.fetch_sub( 1, atomics::memory_order_acquire );
             }
         };
 
@@ -296,7 +293,7 @@ namespace map2 {
                                     ++m_nDeleteFailed;
                             }
                         }
-                        if ( getTest().m_nInsThreadCount.load( CDS_ATOMIC::memory_order_acquire ) == 0 )
+                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
                             break;
                     }
                 }
@@ -310,7 +307,7 @@ namespace map2 {
                                     ++m_nDeleteFailed;
                             }
                         }
-                        if ( getTest().m_nInsThreadCount.load( CDS_ATOMIC::memory_order_acquire ) == 0 )
+                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
                             break;
                     }
                 }
@@ -363,13 +360,15 @@ namespace map2 {
                     for ( size_t k = 0; k < c_nInsThreadCount; ++k ) {
                         for ( size_t i = 0; i < arrData.size(); ++i ) {
                             if ( arrData[i] & 1 ) {
-                                if ( rMap.extract_with( gp, arrData[i], key_less() ))
+                                gp = rMap.extract_with( arrData[i], key_less());
+                                if ( gp )
                                     ++m_nDeleteSuccess;
                                 else
                                     ++m_nDeleteFailed;
+                                gp.release();
                             }
                         }
-                        if ( getTest().m_nInsThreadCount.load( CDS_ATOMIC::memory_order_acquire ) == 0 )
+                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
                             break;
                     }
                 }
@@ -377,13 +376,15 @@ namespace map2 {
                     for ( size_t k = 0; k < c_nInsThreadCount; ++k ) {
                         for ( size_t i = arrData.size() - 1; i > 0; --i ) {
                             if ( arrData[i] & 1 ) {
-                                if ( rMap.extract_with( gp, arrData[i], key_less() ))
+                                gp = rMap.extract_with( arrData[i], key_less());
+                                if ( gp )
                                     ++m_nDeleteSuccess;
                                 else
                                     ++m_nDeleteFailed;
+                                gp.release();
                             }
                         }
-                        if ( getTest().m_nInsThreadCount.load( CDS_ATOMIC::memory_order_acquire ) == 0 )
+                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
                             break;
                     }
                 }
@@ -438,25 +439,24 @@ namespace map2 {
                                 if ( Map::c_bExtractLockExternal ) {
                                     {
                                         typename Map::rcu_lock l;
-                                        if ( rMap.extract_with( xp, arrData[i], key_less() )) {
+                                        xp = rMap.extract_with( arrData[i], key_less() );
+                                        if ( xp )
                                             ++m_nDeleteSuccess;
-                                        }
                                         else
                                             ++m_nDeleteFailed;
                                     }
-                                    xp.release();
                                 }
                                 else {
-                                    if ( rMap.extract_with( xp, arrData[i], key_less() )) {
+                                    xp = rMap.extract_with( arrData[i], key_less() );
+                                    if ( xp )
                                         ++m_nDeleteSuccess;
-                                        xp.release();
-                                    }
                                     else
                                         ++m_nDeleteFailed;
                                 }
+                                xp.release();
                             }
                         }
-                        if ( getTest().m_nInsThreadCount.load( CDS_ATOMIC::memory_order_acquire ) == 0 )
+                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
                             break;
                     }
                 }
@@ -467,24 +467,24 @@ namespace map2 {
                                 if ( Map::c_bExtractLockExternal ) {
                                     {
                                         typename Map::rcu_lock l;
-                                        if ( rMap.extract_with( xp, arrData[i], key_less() ))
+                                        xp = rMap.extract_with( arrData[i], key_less() );
+                                        if ( xp )
                                             ++m_nDeleteSuccess;
                                         else
                                             ++m_nDeleteFailed;
                                     }
-                                    xp.release();
                                 }
                                 else {
-                                    if ( rMap.extract_with( xp, arrData[i], key_less() )) {
+                                    xp = rMap.extract_with( arrData[i], key_less() );
+                                    if ( xp )
                                         ++m_nDeleteSuccess;
-                                        xp.release();
-                                    }
                                     else
                                         ++m_nDeleteFailed;
                                 }
+                                xp.release();
                             }
                         }
-                        if ( getTest().m_nInsThreadCount.load( CDS_ATOMIC::memory_order_acquire ) == 0 )
+                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
                             break;
                     }
                 }
@@ -512,7 +512,7 @@ namespace map2 {
             typedef InsertThread<Map> insert_thread;
             typedef DeleteThread<Map> delete_thread;
 
-            m_nInsThreadCount.store( c_nInsThreadCount, CDS_ATOMIC::memory_order_release );
+            m_nInsThreadCount.store( c_nInsThreadCount, atomics::memory_order_release );
 
             CppUnitMini::ThreadPool pool( *this );
             pool.add( new insert_thread( pool, testMap ), c_nInsThreadCount );
@@ -554,7 +554,7 @@ namespace map2 {
             typedef DeleteThread<Map> delete_thread;
             typedef ExtractThread< typename Map::gc, Map > extract_thread;
 
-            m_nInsThreadCount.store( c_nInsThreadCount, CDS_ATOMIC::memory_order_release );
+            m_nInsThreadCount.store( c_nInsThreadCount, atomics::memory_order_release );
 
             CppUnitMini::ThreadPool pool( *this );
             pool.add( new insert_thread( pool, testMap ), c_nInsThreadCount );