Replaced a functor with lambda in TreiberStack
authorkhizmax <libcds.dev@gmail.com>
Fri, 12 Jun 2015 21:05:11 +0000 (00:05 +0300)
committerkhizmax <libcds.dev@gmail.com>
Fri, 12 Jun 2015 21:05:11 +0000 (00:05 +0300)
cds/intrusive/details/node_traits.h
cds/intrusive/treiber_stack.h

index df529608869e0c80121dc9aebe13b99dcf185bfb..bb14faccb5dc9ed54e8278e7d591e94b1725813a 100644 (file)
@@ -151,6 +151,7 @@ namespace cds { namespace intrusive {
 
     //@cond
     /// Functor converting container's node type to value type
+    //TODO: delete
     template <class Container>
     struct node_to_value {
         typename Container::value_type * operator()( typename Container::node_type * p ) const
index 74ca175cd168e6a6d07059b290efebaf1069dd27..aac61cd2ac044d17ae557c57e03fc79a693d5d01 100644 (file)
@@ -650,7 +650,6 @@ namespace cds { namespace intrusive {
         typedef treiber_stack::details::elimination_backoff<enable_elimination, value_type, traits> elimination_backoff;
         elimination_backoff m_Backoff;
 
-        typedef intrusive::node_to_value<TreiberStack>  node_to_value;
         typedef treiber_stack::operation< value_type >  operation_desc;
 
         // GC and node_type::gc must be the same
@@ -746,7 +745,10 @@ namespace cds { namespace intrusive {
             }
 
             while ( true ) {
-                node_type * t = guard.protect( m_Top, node_to_value() );
+                node_type * t = guard.protect( m_Top, 
+                    []( node_type * p ) -> value_type * {
+                        return node_traits::to_value_ptr( p );
+                    });
                 if ( t == nullptr )
                     return nullptr;    // stack is empty