Revised noexcept expressions in back-off strategies
[libcds.git] / cds / intrusive / treiber_stack.h
index 076afbc058b16523f198fb42079bbdfed904456c..9ccaa87e6b02fd4f7ba9046f0d761cb6d5318289 100644 (file)
@@ -25,7 +25,7 @@ namespace cds { namespace intrusive {
             - Tag - a \ref cds_intrusive_hook_tag "tag"
         */
         template <class GC, typename Tag = opt::none >
-        using node = cds::intrusive::single_link::node< GC, Tag > ;
+        using node = cds::intrusive::single_link::node< GC, Tag >;
 
         /// Base hook
         /**
@@ -123,7 +123,7 @@ namespace cds { namespace intrusive {
                 else
                     ++m_PassivePopCollision;
             }
-            void onEliminationFailed() 
+            void onEliminationFailed()
             {
                 ++m_EliminationFailed;
             }
@@ -160,7 +160,7 @@ namespace cds { namespace intrusive {
             typedef cds::atomicity::empty_item_counter   item_counter;
 
             /// C++ memory ordering model
-            /** 
+            /**
                 Can be \p opt::v::relaxed_ordering (relaxed memory model, the default)
                 or \p opt::v::sequential_consistent (sequentially consisnent memory model).
             */
@@ -174,7 +174,7 @@ namespace cds { namespace intrusive {
             typedef treiber_stack::empty_stat       stat;
 
             /// Link checking, see \p cds::opt::link_checker
-            static CDS_CONSTEXPR_CONST opt::link_check_type link_checker = opt::debug_check_link;
+            static CDS_CONSTEXPR const opt::link_check_type link_checker = opt::debug_check_link;
 
             /** @name Elimination back-off traits
                 The following traits is used only if elimination enabled
@@ -182,7 +182,7 @@ namespace cds { namespace intrusive {
             ///@{
 
             /// Enable elimination back-off; by default, it is disabled
-            static CDS_CONSTEXPR_CONST bool enable_elimination = false;
+            static CDS_CONSTEXPR const bool enable_elimination = false;
 
             /// Back-off strategy to wait for elimination, default is cds::backoff::delay<>
             typedef cds::backoff::delay<>          elimination_backoff;
@@ -207,9 +207,7 @@ namespace cds { namespace intrusive {
 
         /// Metafunction converting option list to \p treiber_stack::traits
         /**
-            This is a wrapper for <tt> cds::opt::make_options< type_traits, Options...> </tt>
             Supported \p Options are:
-
             - opt::hook - hook used. Possible hooks are: \p treiber_stack::base_hook, \p treiber_stack::member_hook, \p treiber_stack::traits_hook.
                 If the option is not specified, \p %treiber_stack::base_hook<> is used.
             - opt::back_off - back-off strategy used. If the option is not specified, the \p cds::backoff::Default is used.
@@ -237,7 +235,7 @@ namespace cds { namespace intrusive {
 
             Example: declare \p %TreiberStack with elimination enabled and internal statistics
             \code
-            typedef cds::intrusive::TreiberStack< cds::gc::HP, Foo, 
+            typedef cds::intrusive::TreiberStack< cds::gc::HP, Foo,
                 typename cds::intrusive::treiber_stack::make_traits<
                     cds::opt::enable_elimination< true >,
                     cds::opt::stat< cds::intrusive::treiber_stack::stat<> >
@@ -393,7 +391,7 @@ namespace cds { namespace intrusive {
                     }
 
                     // Wait for colliding operation
-                    bkoff( [&op]() -> bool { return op.nStatus.load( atomics::memory_order_acquire ) != op_busy; } );
+                    bkoff( [&op]() CDS_NOEXCEPT -> bool { return op.nStatus.load( atomics::memory_order_acquire ) != op_busy; } );
                     {
                         slot_scoped_lock l( slot.lock );
                         if ( slot.pRec == myRec )
@@ -438,7 +436,7 @@ namespace cds { namespace intrusive {
         Template arguments:
         - \p GC - garbage collector type: \p gc::HP, \p gc::DHP.
             Garbage collecting schema must be the same as \p treiber_stack::node GC.
-        - \p T - a type the stack contains. A value of type \p T must be derived 
+        - \p T - a type the stack contains. A value of type \p T must be derived
             from \p treiber_stack::node for \p treiber_stack::base_hook,
             or it should have a member of type \p %treiber_stack::node for \p treiber_stack::member_hook,
             or it should be convertible to \p %treiber_stack::node for \p treiber_stack::traits_hook.
@@ -451,9 +449,9 @@ namespace cds { namespace intrusive {
             typedef cds::intrusive::TreiberStack< cds::gc::HP, Foo, myTraits > myStack;
 
             // Equivalent make_traits example:
-            typedef cds::intrusive::TreiberStack< cds::gc::HP, Foo, 
-                typename cds::intrusive::treiber_stack::make_traits< 
-                    cds::opt::stat< cds::intrusive::treiber_stack::stat<> > 
+            typedef cds::intrusive::TreiberStack< cds::gc::HP, Foo,
+                typename cds::intrusive::treiber_stack::make_traits<
+                    cds::opt::stat< cds::intrusive::treiber_stack::stat<> >
                 >::type
             > myStack;
             \endcode
@@ -488,7 +486,7 @@ namespace cds { namespace intrusive {
         // Stack with elimination back-off enabled
         typedef ci::TreiberStack< gc,
             myData,
-            typename ci::treiber_stack::make_traits< 
+            typename ci::treiber_stack::make_traits<
                 ci::opt::hook< ci::treiber_stack::base_hook< gc > >,
                 cds::opt::enable_elimination< true >
             >::type
@@ -514,15 +512,15 @@ namespace cds { namespace intrusive {
             // ...
         };
 
-        typedef ci::TreiberStack< gc, 
-            myData, 
-            typename ci::treiber_stack::make_traits< 
+        typedef ci::TreiberStack< gc,
+            myData,
+            typename ci::treiber_stack::make_traits<
                 ci::opt::hook< ci::treiber_stack::base_hook< gc, tag1 > >
-            >::type 
+            >::type
         > stack1_t;
 
-        typedef ci::TreiberStack< gc, 
-            myData, 
+        typedef ci::TreiberStack< gc,
+            myData,
             typename ci::treiber_stack::make_traits<
                 ci::opt::hook< ci::treiber_stack::base_hook< gc, tag2 > >
             >::type
@@ -565,7 +563,7 @@ namespace cds { namespace intrusive {
             // ...
         };
 
-        typedef ci::TreiberStack< gc, 
+        typedef ci::TreiberStack< gc,
             myData,
             typename ci::treiber_stack::make_traits<
                 ci::opt::hook< ci::treiber_stack::member_hook< offsetof(myData, member_hook_), gc >>
@@ -574,9 +572,9 @@ namespace cds { namespace intrusive {
         \endcode
     */
     template <
-        typename GC, 
-        typename T, 
-        typename Traits = treiber_stack::traits 
+        typename GC,
+        typename T,
+        typename Traits = treiber_stack::traits
     >
     class TreiberStack
     {
@@ -605,7 +603,7 @@ namespace cds { namespace intrusive {
     public: // related to elimination back-off
 
         /// Elimination back-off is enabled or not
-        static CDS_CONSTEXPR_CONST bool enable_elimination = traits::enable_elimination;
+        static CDS_CONSTEXPR const bool enable_elimination = traits::enable_elimination;
         /// back-off strategy used to wait for elimination
         typedef typename traits::elimination_backoff elimination_backoff_type;
         /// Lock type used in elimination back-off