movable guarded_ptr: unit tests
[libcds.git] / tests / unit / map2 / map_delodd.cpp
index a63abd323069df01e3a3f03fe6fd6e8d88580b7a..e7ad25f83e52429c17f181d9f378e74cfb89edff 100644 (file)
@@ -101,8 +101,11 @@ namespace std {
     };
 } // namespace std
 
-/*
 namespace boost {
+    inline size_t hash_value( map2::key_thread const& k )
+    {
+        return std::hash<size_t>()( k.nKey );
+    }
     template <>
     struct hash<map2::key_thread>
     {
@@ -119,7 +122,6 @@ namespace boost {
         }
     };
 } // namespace boost
-*/
 
 namespace map2 {
 
@@ -358,7 +360,8 @@ 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;
@@ -372,7 +375,8 @@ 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;
@@ -433,22 +437,21 @@ 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( atomics::memory_order_acquire ) == 0 )
@@ -462,21 +465,21 @@ 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( atomics::memory_order_acquire ) == 0 )