issue#11: cds: changed __CDS_ guard prefix to CDSLIB_ for all .h files
[libcds.git] / cds / container / michael_map_rcu.h
index e06c318ecc4bda89975862a591e210c6b4c092d2..9f17bf3364fb4f18141c468d98d71ecfaaba0997 100644 (file)
@@ -1,7 +1,7 @@
 //$$CDS-header$$
 
-#ifndef __CDS_CONTAINER_MICHAEL_MAP_RCU_H
-#define __CDS_CONTAINER_MICHAEL_MAP_RCU_H
+#ifndef CDSLIB_CONTAINER_MICHAEL_MAP_RCU_H
+#define CDSLIB_CONTAINER_MICHAEL_MAP_RCU_H
 
 #include <cds/container/details/michael_map_base.h>
 #include <cds/details/allocator.h>
@@ -382,9 +382,9 @@ namespace cds { namespace container {
             synchronization.
         */
         template <typename K, typename Func>
-        bool insert_key( const K& key, Func func )
+        bool insert_with( const K& key, Func func )
         {
-            const bool bRet = bucket( key ).insert_key( key, func );
+            const bool bRet = bucket( key ).insert_with( key, func );
             if ( bRet )
                 ++m_ItemCounter;
             return bRet;
@@ -494,7 +494,6 @@ namespace cds { namespace container {
                 void operator()(value_type& item) { ... }
             };
             \endcode
-            The functor may be passed by reference using <tt>boost:ref</tt>
 
             RCU \p synchronize method can be called. RCU should not be locked.
 
@@ -528,8 +527,8 @@ namespace cds { namespace container {
         /// Extracts an item from the map
         /** \anchor cds_nonintrusive_MichaelHashMap_rcu_extract
             The function searches an item with key equal to \p key,
-            unlinks it from the map, places item pointer into \p dest argument, and returns \p true.
-            If the item is not found the function return \p false.
+            unlinks it from the map, and returns \ref cds::urcu::exempt_ptr "exempt_ptr" pointer to the item found.
+            If the item is not found the function return an empty \p exempt_ptr.
 
             @note The function does NOT call RCU read-side lock or synchronization,
             and does NOT dispose the item found. It just excludes the item from the map
@@ -556,7 +555,8 @@ namespace cds { namespace container {
 
                 // Now, you can apply extract function
                 // Note that you must not delete the item found inside the RCU lock
-                if ( theMap.extract( p, 10 )) {
+                p = theMap.extract( 10 );
+                if ( p ) {
                     // do something with p
                     ...
                 }
@@ -568,13 +568,12 @@ namespace cds { namespace container {
             \endcode
         */
         template <typename K>
-        bool extract( exempt_ptr& dest, K const& key )
+        exempt_ptr extract( K const& key )
         {
-            if ( bucket( key ).extract( dest, key )) {
+            exempt_ptr p = bucket( key ).extract( key );
+            if ( p )
                 --m_ItemCounter;
-                return true;
-            }
-            return false;
+            return p;
         }
 
         /// Extracts an item from the map using \p pred predicate for searching
@@ -585,13 +584,12 @@ namespace cds { namespace container {
             \p pred must imply the same element order as the comparator used for building the map.
         */
         template <typename K, typename Less>
-        bool extract_with( exempt_ptr& dest, K const& key, Less pred )
+        exempt_ptr extract_with( K const& key, Less pred )
         {
-            if ( bucket( key ).extract_with( dest, key, pred )) {
+            exempt_ptr p = bucket( key ).extract_with( key, pred );
+            if ( p )
                 --m_ItemCounter;
-                return true;
-            }
-            return false;
+            return p;
         }
 
         /// Finds the key \p key
@@ -756,4 +754,4 @@ namespace cds { namespace container {
     };
 }}  // namespace cds::container
 
-#endif // ifndef __CDS_CONTAINER_MICHAEL_MAP_RCU_H
+#endif // ifndef CDSLIB_CONTAINER_MICHAEL_MAP_RCU_H