cds::container::TreiberStack refactoring
authorkhizmax <khizmax@gmail.com>
Fri, 3 Oct 2014 14:14:10 +0000 (18:14 +0400)
committerkhizmax <khizmax@gmail.com>
Fri, 3 Oct 2014 14:14:10 +0000 (18:14 +0400)
change PTB -> DHP in TreiberStack tests
Remove HRC tests

25 files changed:
cds/container/treiber_stack.h
cds/gc/dhp.h [new file with mode: 0644]
projects/Win/vc12/cds.vcxproj
projects/Win/vc12/cds.vcxproj.filters
projects/Win/vc12/hdr-test-stack.vcxproj
projects/source.test-hdr.mk
projects/source.test-hdr.offsetof.mk
tests/test-hdr/stack/hdr_elimination_stack_dhp.cpp [new file with mode: 0644]
tests/test-hdr/stack/hdr_elimination_stack_hp.cpp
tests/test-hdr/stack/hdr_elimination_stack_hrc.cpp [deleted file]
tests/test-hdr/stack/hdr_elimination_stack_ptb.cpp [deleted file]
tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp [new file with mode: 0644]
tests/test-hdr/stack/hdr_intrusive_elimination_stack_ptb.cpp [deleted file]
tests/test-hdr/stack/hdr_intrusive_treiber_stack.h
tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp [new file with mode: 0644]
tests/test-hdr/stack/hdr_intrusive_treiber_stack_ptb.cpp [deleted file]
tests/test-hdr/stack/hdr_treiber_stack.h
tests/test-hdr/stack/hdr_treiber_stack_dhp.cpp [new file with mode: 0644]
tests/test-hdr/stack/hdr_treiber_stack_hp.cpp
tests/test-hdr/stack/hdr_treiber_stack_hrc.cpp [deleted file]
tests/test-hdr/stack/hdr_treiber_stack_ptb.cpp [deleted file]
tests/unit/stack/intrusive_stack_defs.h
tests/unit/stack/intrusive_stack_type.h
tests/unit/stack/stack_defs.h
tests/unit/stack/stack_type.h

index 37348aad552db45361eba53c52d96a8a3a885265..32954b7e11c32ce53a846fe79087c0e8f91bef06 100644 (file)
@@ -266,7 +266,7 @@ namespace cds { namespace container {
         ~TreiberStack()
         {}
 
-        /// Push the item \p val on the stack
+        /// Pushes copy of \p val on the stack
         bool push( value_type const& val )
         {
             scoped_node_ptr p( alloc_node(val));
@@ -289,19 +289,42 @@ namespace cds { namespace container {
             return false;
         }
 
-        /// Pop an item from the stack
+        /// Pops an item from the stack
         /**
-            The value of popped item is stored in \p val.
+            The value of popped item is stored in \p val using assignment operator.
             On success functions returns \p true, \p val contains value popped from the stack.
             If stack is empty the function returns \p false, \p val is unchanged.
         */
         bool pop( value_type& val )
+        {
+            return pop_with( [&val]( value_type& src ) { val = src; } );
+        }
+
+        /// Pops an item from the stack with functor
+        /**
+            \p Func interface is:
+            \code
+            void func( value_type& src );
+            \endcond
+            where \p src - item popped.
+
+            The \p %pop_with can be used to move item from the stack to user-provided storage:
+            \code
+            cds::container::TreiberStack<cds::gc::HP, std::string > myStack;
+            //...
+
+            std::string dest;
+            myStack.pop_with( [&dest]( std::string& src ) { dest = std::move( src ); } );
+            \endcode
+        */
+        template <typename Func>
+        bool pop_with( Func f )
         {
             node_type * p = base_class::pop();
             if ( !p )
                 return false;
 
-            val = p->m_value;
+            f( p->m_value );
             retire_node( p );
 
             return true;
diff --git a/cds/gc/dhp.h b/cds/gc/dhp.h
new file mode 100644 (file)
index 0000000..89abde5
--- /dev/null
@@ -0,0 +1,14 @@
+//$$CDS-header$$
+
+#ifndef __CDS_GC_DHP_H
+#define __CDS_GC_DHP_H
+
+#include <cds/gc/ptb.h>
+
+//@cond
+namespace cds { namespace gc {
+    typedef PTB DHP;
+}} // namespace cds::gc
+//@endcond
+
+#endif // #ifndef __CDS_GC_DHP_H
index e1264db17496c3e9a576e8cf903f6d6fccf32b70..12a608d20bbeb8ff2b8bc7bfdd9f16f8ae4f04d4 100644 (file)
     <ClInclude Include="..\..\..\cds\details\lib.h" />\r
     <ClInclude Include="..\..\..\cds\details\static_functor.h" />\r
     <ClInclude Include="..\..\..\cds\gc\all.h" />\r
+    <ClInclude Include="..\..\..\cds\gc\dhp.h" />\r
     <ClInclude Include="..\..\..\cds\gc\exception.h" />\r
     <ClInclude Include="..\..\..\cds\gc\gc_fwd.h" />\r
     <ClInclude Include="..\..\..\cds\gc\guarded_ptr.h" />\r
index 09abae895dc17e8363068a4878d9fce59e2f6eab..f6a65148140cd8429d91ce5945501551003bbef4 100644 (file)
     <ClInclude Include="..\..\..\cds\container\details\split_list_base.h">\r
       <Filter>Header Files\cds\container\details</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\cds\gc\dhp.h">\r
+      <Filter>Header Files\cds\gc</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
 </Project>
\ No newline at end of file
index f9098a5b1060febc50d31d714e5979792af901e7..2f1dea80937c228e76da3305dddf131241a8729a 100644 (file)
     <ClInclude Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack.h" />\r
   </ItemGroup>\r
   <ItemGroup>\r
+    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_dhp.cpp" />\r
     <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_hrc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_ptb.cpp" />\r
     <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_fcstack.cpp" />\r
+    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_elimination_stack_dhp.cpp" />\r
     <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_elimination_stack_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_elimination_stack_ptb.cpp" />\r
     <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_fcstack.cpp" />\r
+    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack_dhp.cpp" />\r
     <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack_ptb.cpp" />\r
+    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_dhp.cpp" />\r
     <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_hrc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_ptb.cpp" />\r
   </ItemGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
   <ImportGroup Label="ExtensionTargets">\r
index 4013baf948157aeb10a2075ee33e0b02400e3ad5..15995c76296e6e9c43edddb67ab0752cca2519d3 100644 (file)
@@ -244,11 +244,9 @@ CDS_TESTHDR_SET := \
 CDS_TESTHDR_STACK := \
     tests/test-hdr/stack/hdr_intrusive_fcstack.cpp \
     tests/test-hdr/stack/hdr_treiber_stack_hp.cpp \
-    tests/test-hdr/stack/hdr_treiber_stack_hrc.cpp \
-    tests/test-hdr/stack/hdr_treiber_stack_ptb.cpp \
+    tests/test-hdr/stack/hdr_treiber_stack_dhp.cpp \
     tests/test-hdr/stack/hdr_elimination_stack_hp.cpp \
-    tests/test-hdr/stack/hdr_elimination_stack_hrc.cpp \
-    tests/test-hdr/stack/hdr_elimination_stack_ptb.cpp \
+    tests/test-hdr/stack/hdr_elimination_stack_dhp.cpp \
     tests/test-hdr/stack/hdr_fcstack.cpp
 
 CDS_TESTHDR_TREE := \
index f7e651749bfd11237359cea56bddd27d38814ce2..2c48c35be3958d7dc6557a622cff23d13858886d 100644 (file)
@@ -78,9 +78,9 @@ CDS_TESTHDR_OFFSETOF_QUEUE := \
 
 CDS_TESTHDR_OFFSETOF_STACK := \
     tests/test-hdr/stack/hdr_intrusive_treiber_stack_hp.cpp \
-    tests/test-hdr/stack/hdr_intrusive_treiber_stack_ptb.cpp \
+    tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp \
     tests/test-hdr/stack/hdr_intrusive_elimination_stack_hp.cpp \
-    tests/test-hdr/stack/hdr_intrusive_elimination_stack_ptb.cpp 
+    tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp 
 
 CDS_TESTHDR_OFFSETOF_TREE := \
     tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp_member.cpp \
diff --git a/tests/test-hdr/stack/hdr_elimination_stack_dhp.cpp b/tests/test-hdr/stack/hdr_elimination_stack_dhp.cpp
new file mode 100644 (file)
index 0000000..9532461
--- /dev/null
@@ -0,0 +1,86 @@
+//$$CDS-header$$
+
+#include "hdr_treiber_stack.h"
+#include <cds/gc/dhp.h>
+#include <cds/container/treiber_stack.h>
+
+namespace stack {
+#define TEST(X)     void TestStack::X() { test<defs::X>(); }
+#define TEST_DYN(X)     void TestStack::X() { test_elimination<defs::X>(); }
+    namespace cs = cds::container;
+
+    namespace defs { namespace {
+
+        typedef cs::TreiberStack< cds::gc::DHP, int
+            ,typename cs::treiber_stack::make_traits< 
+                cds::opt::enable_elimination<true> 
+            >::type
+        > Elimination_DHP;
+
+
+        typedef cs::TreiberStack< cds::gc::DHP, int
+            ,typename cs::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
+            >::type
+        > Elimination_DHP_dyn;
+
+        typedef cs::TreiberStack< cds::gc::DHP, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+                ,cds::opt::stat< cs::treiber_stack::stat<> >
+                ,cds::opt::enable_elimination<true>
+            >::type
+        > Elimination_DHP_stat;
+
+        typedef cs::TreiberStack< cds::gc::DHP, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+                ,cds::opt::enable_elimination<true>
+            >::type
+        > Elimination_DHP_relaxed;
+
+        typedef cs::TreiberStack< cds::gc::DHP, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::yield>
+                ,cds::opt::enable_elimination<true>
+            >::type
+        > Elimination_DHP_yield;
+
+        typedef cs::TreiberStack< cds::gc::DHP, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::yield>
+                ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+                ,cds::opt::enable_elimination<true>
+            >::type
+        > Elimination_DHP_yield_relaxed;
+
+        typedef cs::TreiberStack< cds::gc::DHP, int
+            , typename cs::treiber_stack::make_traits<
+                ,cds::opt::back_off< cds::backoff::pause>
+                ,cds::opt::allocator< std::allocator< bool * > >
+                ,cds::opt::enable_elimination<true>
+            >::type
+        > Elimination_DHP_pause_alloc;
+
+        typedef cs::TreiberStack< cds::gc::DHP, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+                ,cds::opt::back_off< cds::backoff::pause>
+                ,cds::opt::allocator< std::allocator< bool * > >
+                ,cds::opt::enable_elimination<true>
+            >::type
+        > Elimination_DHP_pause_alloc_relaxed;
+    }}
+
+    TEST(Elimination_DHP)
+    TEST_DYN(Elimination_DHP_dyn)
+    TEST_DYN(Elimination_DHP_stat)
+    TEST(Elimination_DHP_yield)
+    TEST(Elimination_DHP_pause_alloc)
+
+    TEST(Elimination_DHP_relaxed)
+    TEST(Elimination_DHP_yield_relaxed)
+    TEST(Elimination_DHP_pause_alloc_relaxed)
+
+}
index 793e8ac956af104960cf6f88c1fc09c989c39375..4f3b5a388e28ceafed51fd06b11ee00bf761a923 100644 (file)
@@ -5,7 +5,7 @@
 #include <cds/container/treiber_stack.h>
 
 namespace stack {
-#define TEST(X)     void TestStack::X() { test<defs::X>(); }
+#define TEST(X)         void TestStack::X() { test<defs::X>(); }
 #define TEST_DYN(X)     void TestStack::X() { test_elimination<defs::X>(); }
 
     namespace cs = cds::container;
@@ -13,47 +13,63 @@ namespace stack {
     namespace defs { namespace {
 
         typedef cs::TreiberStack< cds::gc::HP, int
-            ,cds::opt::enable_elimination<true>
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+            >::type
         > Elimination_HP;
 
         typedef cs::TreiberStack< cds::gc::HP, int
-            ,cds::opt::enable_elimination<true>
-            , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
+            >::type
         > Elimination_HP_dyn;
 
         typedef cs::TreiberStack< cds::gc::HP, int
-            ,cds::opt::enable_elimination<true>
-            , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
-            , cds::opt::stat< cs::treiber_stack::stat<> >
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
+                , cds::opt::stat< cs::treiber_stack::stat<> >
+            >::type
         > Elimination_HP_stat;
 
         typedef cs::TreiberStack< cds::gc::HP, int
-            ,cds::opt::enable_elimination<true>
-            , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            >::type
         > Elimination_HP_relaxed;
 
         typedef cs::TreiberStack< cds::gc::HP, int
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off< cds::backoff::yield>
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,cds::opt::back_off< cds::backoff::yield>
+            >::type
         > Elimination_HP_yield;
 
         typedef cs::TreiberStack< cds::gc::HP, int
-            , cds::opt::back_off< cds::backoff::yield>
-            ,cds::opt::enable_elimination<true>
-            , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::yield>
+                ,cds::opt::enable_elimination<true>
+                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            >::type
         > Elimination_HP_yield_relaxed;
 
         typedef cs::TreiberStack< cds::gc::HP, int
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::allocator< std::allocator< bool * > >
-            ,cds::opt::enable_elimination<true>
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::pause>
+                ,cds::opt::allocator< std::allocator< bool * > >
+                ,cds::opt::enable_elimination<true>
+            >::type
         > Elimination_HP_pause_alloc;
 
         typedef cs::TreiberStack< cds::gc::HP, int
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            ,cds::opt::allocator< std::allocator< bool * > >
-            ,cds::opt::enable_elimination<true>
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::pause>
+                ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+                ,cds::opt::allocator< std::allocator< bool * > >
+                ,cds::opt::enable_elimination<true>
+            >::type
         > Elimination_HP_pause_alloc_relaxed;
 
     }}
diff --git a/tests/test-hdr/stack/hdr_elimination_stack_hrc.cpp b/tests/test-hdr/stack/hdr_elimination_stack_hrc.cpp
deleted file mode 100644 (file)
index c5395ab..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-//$$CDS-header$$
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/hrc.h>
-#include <cds/container/treiber_stack.h>
-
-namespace stack {
-#define TEST(X)     void TestStack::X() { test<defs::X>(); }
-#define TEST_DYN(X)     void TestStack::X() { test_elimination<defs::X>(); }
-
-    namespace cs = cds::container;
-
-    namespace defs { namespace {
-
-        typedef cs::TreiberStack< cds::gc::HRC, int
-            ,cds::opt::enable_elimination<true>
-        > Elimination_HRC;
-
-        typedef cs::TreiberStack< cds::gc::HRC, int
-            , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
-            ,cds::opt::enable_elimination<true>
-        > Elimination_HRC_dyn;
-
-        typedef cs::TreiberStack< cds::gc::HRC, int
-            , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
-            , cds::opt::stat< cs::treiber_stack::stat<> >
-            ,cds::opt::enable_elimination<true>
-        > Elimination_HRC_stat;
-
-        typedef cs::TreiberStack< cds::gc::HRC, int
-            , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            ,cds::opt::enable_elimination<true>
-        > Elimination_HRC_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::HRC, int
-            , cds::opt::back_off< cds::backoff::yield>
-            ,cds::opt::enable_elimination<true>
-        > Elimination_HRC_yield;
-
-        typedef cs::TreiberStack< cds::gc::HRC, int
-            ,cds::opt::back_off< cds::backoff::yield>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            ,cds::opt::enable_elimination<true>
-        > Elimination_HRC_yield_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::HRC, int
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::allocator< std::allocator< bool * > >
-            ,cds::opt::enable_elimination<true>
-        > Elimination_HRC_pause_alloc;
-
-        typedef cs::TreiberStack< cds::gc::HRC, int
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::allocator< std::allocator< bool * > >
-        > Elimination_HRC_pause_alloc_relaxed;
-    }}
-
-    TEST(Elimination_HRC)
-    TEST_DYN(Elimination_HRC_dyn)
-    TEST_DYN(Elimination_HRC_stat)
-    TEST(Elimination_HRC_yield)
-    TEST(Elimination_HRC_pause_alloc)
-
-    TEST(Elimination_HRC_relaxed)
-    TEST(Elimination_HRC_yield_relaxed)
-    TEST(Elimination_HRC_pause_alloc_relaxed)
-}
diff --git a/tests/test-hdr/stack/hdr_elimination_stack_ptb.cpp b/tests/test-hdr/stack/hdr_elimination_stack_ptb.cpp
deleted file mode 100644 (file)
index 27aa334..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-//$$CDS-header$$
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/ptb.h>
-#include <cds/container/treiber_stack.h>
-
-namespace stack {
-#define TEST(X)     void TestStack::X() { test<defs::X>(); }
-#define TEST_DYN(X)     void TestStack::X() { test_elimination<defs::X>(); }
-    namespace cs = cds::container;
-
-    namespace defs { namespace {
-
-        typedef cs::TreiberStack< cds::gc::PTB, int
-            ,cds::opt::enable_elimination<true>
-        > Elimination_PTB;
-
-        typedef cs::TreiberStack< cds::gc::PTB, int
-            ,cds::opt::enable_elimination<true>
-            , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
-        > Elimination_PTB_dyn;
-
-        typedef cs::TreiberStack< cds::gc::PTB, int
-            , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-            , cds::opt::stat< cs::treiber_stack::stat<> >
-            ,cds::opt::enable_elimination<true>
-        > Elimination_PTB_stat;
-
-        typedef cs::TreiberStack< cds::gc::PTB, int
-            , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            ,cds::opt::enable_elimination<true>
-        > Elimination_PTB_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::PTB, int
-            , cds::opt::back_off< cds::backoff::yield>
-            ,cds::opt::enable_elimination<true>
-        > Elimination_PTB_yield;
-
-        typedef cs::TreiberStack< cds::gc::PTB, int
-            ,cds::opt::back_off< cds::backoff::yield>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            ,cds::opt::enable_elimination<true>
-        > Elimination_PTB_yield_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::PTB, int
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::allocator< std::allocator< bool * > >
-            ,cds::opt::enable_elimination<true>
-        > Elimination_PTB_pause_alloc;
-
-        typedef cs::TreiberStack< cds::gc::PTB, int
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::allocator< std::allocator< bool * > >
-            ,cds::opt::enable_elimination<true>
-        > Elimination_PTB_pause_alloc_relaxed;
-    }}
-
-    TEST(Elimination_PTB)
-    TEST_DYN(Elimination_PTB_dyn)
-    TEST_DYN(Elimination_PTB_stat)
-    TEST(Elimination_PTB_yield)
-    TEST(Elimination_PTB_pause_alloc)
-
-    TEST(Elimination_PTB_relaxed)
-    TEST(Elimination_PTB_yield_relaxed)
-    TEST(Elimination_PTB_pause_alloc_relaxed)
-
-}
diff --git a/tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp b/tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp
new file mode 100644 (file)
index 0000000..7ad4c17
--- /dev/null
@@ -0,0 +1,156 @@
+//$$CDS-header$$
+
+#include "hdr_intrusive_treiber_stack.h"
+#include <cds/gc/dhp.h>
+#include <cds/intrusive/treiber_stack.h>
+
+namespace stack {
+
+#define TEST(X)     void TestIntrusiveStack::X() { test<defs::X>(); }
+#define TEST_DYN(X) void TestIntrusiveStack::X() { test_elimination<defs::X>(); }
+
+    namespace defs {
+        // DHP GC + base hook
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+                >
+            >::type
+        > Elimination_DHP_base;
+
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+                >
+                ,cds::opt::enable_elimination<true>
+                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
+            >::type
+        > Elimination_DHP_base_dyn;
+
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+                >
+                ,cds::opt::enable_elimination<true>
+                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+            >::type
+        > Elimination_DHP_base_relaxed;
+
+        // DHP GC + base hook + disposer
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+                >
+                ,cds::opt::enable_elimination<true>
+                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+            >::type
+        > Elimination_DHP_base_disposer;
+
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+                >
+                ,cds::opt::enable_elimination<true>
+                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+            >::type
+        > Elimination_DHP_base_disposer_relaxed;
+
+        // DHP GC + member hook
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::member_hook<
+                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+                        ci::opt::gc<cds::gc::DHP>
+                    >
+                >
+                ,cds::opt::enable_elimination<true>
+            >::type
+        > Elimination_DHP_member;
+
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::member_hook<
+                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+                        ci::opt::gc<cds::gc::DHP>
+                    >
+                >
+                ,cds::opt::enable_elimination<true>
+                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
+            >::type
+        > Elimination_DHP_member_dyn;
+
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::member_hook<
+                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+                        ci::opt::gc<cds::gc::DHP>
+                    >
+                >
+                ,cds::opt::enable_elimination<true>
+                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+            >::type
+        > Elimination_DHP_member_relaxed;
+
+        // DHP GC + member hook + disposer
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::member_hook<
+                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+                        ci::opt::gc<cds::gc::DHP>
+                    >
+                >
+                ,cds::opt::enable_elimination<true>
+                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+            >::type
+        > Elimination_DHP_member_disposer;
+
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::member_hook<
+                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+                        ci::opt::gc<cds::gc::DHP>
+                    >
+                >
+                ,cds::opt::enable_elimination<true>
+                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+            >::type
+        > Elimination_DHP_member_disposer_relaxed;
+    }
+
+    TEST(Elimination_DHP_base)
+    TEST_DYN(Elimination_DHP_base_dyn)
+    TEST(Elimination_DHP_base_disposer)
+    TEST(Elimination_DHP_member)
+    TEST_DYN(Elimination_DHP_member_dyn)
+    TEST(Elimination_DHP_member_disposer)
+
+    TEST(Elimination_DHP_base_relaxed)
+    TEST(Elimination_DHP_base_disposer_relaxed)
+    TEST(Elimination_DHP_member_relaxed)
+    TEST(Elimination_DHP_member_disposer_relaxed)
+
+} // namespace stack
+
diff --git a/tests/test-hdr/stack/hdr_intrusive_elimination_stack_ptb.cpp b/tests/test-hdr/stack/hdr_intrusive_elimination_stack_ptb.cpp
deleted file mode 100644 (file)
index 351f55b..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-//$$CDS-header$$
-
-#include "hdr_intrusive_treiber_stack.h"
-#include <cds/gc/ptb.h>
-#include <cds/intrusive/treiber_stack.h>
-
-namespace stack {
-
-#define TEST(X)     void TestIntrusiveStack::X() { test<defs::X>(); }
-#define TEST_DYN(X) void TestIntrusiveStack::X() { test_elimination<defs::X>(); }
-
-    namespace defs {
-        // PTB GC + base hook
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::base_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
-                >
-            >::type
-        > Elimination_PTB_base;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::base_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
-            >::type
-        > Elimination_PTB_base_dyn;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::base_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_PTB_base_relaxed;
-
-        // PTB GC + base hook + disposer
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::base_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        > Elimination_PTB_base_disposer;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::base_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_PTB_base_disposer_relaxed;
-
-        // PTB GC + member hook
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::member_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
-                        ci::opt::gc<cds::gc::PTB>
-                    >
-                >
-                ,cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_PTB_member;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::member_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
-                        ci::opt::gc<cds::gc::PTB>
-                    >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
-            >::type
-        > Elimination_PTB_member_dyn;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::member_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
-                        ci::opt::gc<cds::gc::PTB>
-                    >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_PTB_member_relaxed;
-
-        // PTB GC + member hook + disposer
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::member_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
-                        ci::opt::gc<cds::gc::PTB>
-                    >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        > Elimination_PTB_member_disposer;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::member_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
-                        ci::opt::gc<cds::gc::PTB>
-                    >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_PTB_member_disposer_relaxed;
-    }
-
-    TEST(Elimination_PTB_base)
-    TEST_DYN(Elimination_PTB_base_dyn)
-    TEST(Elimination_PTB_base_disposer)
-    TEST(Elimination_PTB_member)
-    TEST_DYN(Elimination_PTB_member_dyn)
-    TEST(Elimination_PTB_member_disposer)
-
-    TEST(Elimination_PTB_base_relaxed)
-    TEST(Elimination_PTB_base_disposer_relaxed)
-    TEST(Elimination_PTB_member_relaxed)
-    TEST(Elimination_PTB_member_disposer_relaxed)
-
-} // namespace stack
-
index 6e86196fbd79d8f8d38fd7e33a890cdb0374c0b6..1370d152214e331b94d694f04c1355d7d8f660b6 100644 (file)
@@ -115,20 +115,20 @@ namespace stack {
         void Treiber_HP_base_disposer();
         void Treiber_HP_member();
         void Treiber_HP_member_disposer();
-        void Treiber_PTB_base();
-        void Treiber_PTB_base_disposer();
-        void Treiber_PTB_member();
-        void Treiber_PTB_member_disposer();
+        void Treiber_DHP_base();
+        void Treiber_DHP_base_disposer();
+        void Treiber_DHP_member();
+        void Treiber_DHP_member_disposer();
 
         void Treiber_HP_default_relaxed();
         void Treiber_HP_base_relaxed();
         void Treiber_HP_base_disposer_relaxed();
         void Treiber_HP_member_relaxed();
         void Treiber_HP_member_disposer_relaxed();
-        void Treiber_PTB_base_relaxed();
-        void Treiber_PTB_base_disposer_relaxed();
-        void Treiber_PTB_member_relaxed();
-        void Treiber_PTB_member_disposer_relaxed();
+        void Treiber_DHP_base_relaxed();
+        void Treiber_DHP_base_disposer_relaxed();
+        void Treiber_DHP_member_relaxed();
+        void Treiber_DHP_member_disposer_relaxed();
 
         void Elimination_HP_default();
         void Elimination_HP_base();
@@ -137,22 +137,22 @@ namespace stack {
         void Elimination_HP_member();
         void Elimination_HP_member_dyn();
         void Elimination_HP_member_disposer();
-        void Elimination_PTB_base();
-        void Elimination_PTB_base_dyn();
-        void Elimination_PTB_base_disposer();
-        void Elimination_PTB_member();
-        void Elimination_PTB_member_dyn();
-        void Elimination_PTB_member_disposer();
+        void Elimination_DHP_base();
+        void Elimination_DHP_base_dyn();
+        void Elimination_DHP_base_disposer();
+        void Elimination_DHP_member();
+        void Elimination_DHP_member_dyn();
+        void Elimination_DHP_member_disposer();
 
         void Elimination_HP_default_relaxed();
         void Elimination_HP_base_relaxed();
         void Elimination_HP_base_disposer_relaxed();
         void Elimination_HP_member_relaxed();
         void Elimination_HP_member_disposer_relaxed();
-        void Elimination_PTB_base_relaxed();
-        void Elimination_PTB_base_disposer_relaxed();
-        void Elimination_PTB_member_relaxed();
-        void Elimination_PTB_member_disposer_relaxed();
+        void Elimination_DHP_base_relaxed();
+        void Elimination_DHP_base_disposer_relaxed();
+        void Elimination_DHP_member_relaxed();
+        void Elimination_DHP_member_disposer_relaxed();
 
         CPPUNIT_TEST_SUITE(TestIntrusiveStack)
             CPPUNIT_TEST(Treiber_HP_default)
@@ -165,14 +165,14 @@ namespace stack {
             CPPUNIT_TEST(Treiber_HP_member_relaxed)
             CPPUNIT_TEST(Treiber_HP_member_disposer)
             CPPUNIT_TEST(Treiber_HP_member_disposer_relaxed)
-            CPPUNIT_TEST(Treiber_PTB_base)
-            CPPUNIT_TEST(Treiber_PTB_base_relaxed)
-            CPPUNIT_TEST(Treiber_PTB_base_disposer)
-            CPPUNIT_TEST(Treiber_PTB_base_disposer_relaxed)
-            CPPUNIT_TEST(Treiber_PTB_member)
-            CPPUNIT_TEST(Treiber_PTB_member_relaxed)
-            CPPUNIT_TEST(Treiber_PTB_member_disposer)
-            CPPUNIT_TEST(Treiber_PTB_member_disposer_relaxed)
+            CPPUNIT_TEST(Treiber_DHP_base)
+            CPPUNIT_TEST(Treiber_DHP_base_relaxed)
+            CPPUNIT_TEST(Treiber_DHP_base_disposer)
+            CPPUNIT_TEST(Treiber_DHP_base_disposer_relaxed)
+            CPPUNIT_TEST(Treiber_DHP_member)
+            CPPUNIT_TEST(Treiber_DHP_member_relaxed)
+            CPPUNIT_TEST(Treiber_DHP_member_disposer)
+            CPPUNIT_TEST(Treiber_DHP_member_disposer_relaxed)
 
             CPPUNIT_TEST(Elimination_HP_default)
             CPPUNIT_TEST(Elimination_HP_default_relaxed)
@@ -186,16 +186,16 @@ namespace stack {
             CPPUNIT_TEST(Elimination_HP_member_relaxed)
             CPPUNIT_TEST(Elimination_HP_member_disposer)
             CPPUNIT_TEST(Elimination_HP_member_disposer_relaxed)
-            CPPUNIT_TEST(Elimination_PTB_base)
-            CPPUNIT_TEST(Elimination_PTB_base_dyn)
-            CPPUNIT_TEST(Elimination_PTB_base_relaxed)
-            CPPUNIT_TEST(Elimination_PTB_base_disposer)
-            CPPUNIT_TEST(Elimination_PTB_base_disposer_relaxed)
-            CPPUNIT_TEST(Elimination_PTB_member)
-            CPPUNIT_TEST(Elimination_PTB_member_dyn)
-            CPPUNIT_TEST(Elimination_PTB_member_relaxed)
-            CPPUNIT_TEST(Elimination_PTB_member_disposer)
-            CPPUNIT_TEST(Elimination_PTB_member_disposer_relaxed)
+            CPPUNIT_TEST(Elimination_DHP_base)
+            CPPUNIT_TEST(Elimination_DHP_base_dyn)
+            CPPUNIT_TEST(Elimination_DHP_base_relaxed)
+            CPPUNIT_TEST(Elimination_DHP_base_disposer)
+            CPPUNIT_TEST(Elimination_DHP_base_disposer_relaxed)
+            CPPUNIT_TEST(Elimination_DHP_member)
+            CPPUNIT_TEST(Elimination_DHP_member_dyn)
+            CPPUNIT_TEST(Elimination_DHP_member_relaxed)
+            CPPUNIT_TEST(Elimination_DHP_member_disposer)
+            CPPUNIT_TEST(Elimination_DHP_member_disposer_relaxed)
         CPPUNIT_TEST_SUITE_END()
     };
 
diff --git a/tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp b/tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp
new file mode 100644 (file)
index 0000000..37a90bd
--- /dev/null
@@ -0,0 +1,120 @@
+//$$CDS-header$$
+
+#include "hdr_intrusive_treiber_stack.h"
+#include <cds/gc/ptb.h>
+#include <cds/intrusive/treiber_stack.h>
+
+namespace stack {
+
+#define TEST(X)     void TestIntrusiveStack::X() { test<defs::X>(); }
+
+    namespace defs {
+        // DHP GC + base hook
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+            ,typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+                >
+            >::type
+        > Treiber_DHP_base;
+
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+            ,typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+                >
+                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+            >::type
+        > Treiber_DHP_base_relaxed;
+
+        // DHP GC + base hook + disposer
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+            ,typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+                >
+                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+            >::type
+        > Treiber_DHP_base_disposer;
+
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+            ,typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+                >
+                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+            >::type
+        > Treiber_DHP_base_disposer_relaxed;
+
+        // DHP GC + member hook
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+            ,typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::member_hook<
+                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+                        ci::opt::gc<cds::gc::DHP>
+                    >
+                >
+            >::type
+        > Treiber_DHP_member;
+
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+            ,typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::member_hook<
+                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+                        ci::opt::gc<cds::gc::DHP>
+                    >
+                >
+                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+            >::type
+        > Treiber_DHP_member_relaxed;
+
+        // DHP GC + member hook + disposer
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::member_hook<
+                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+                        ci::opt::gc<cds::gc::DHP>
+                    >
+                >
+                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+            >::type
+        > Treiber_DHP_member_disposer;
+
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::single_link::member_hook<
+                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+                        ci::opt::gc<cds::gc::DHP>
+                    >
+                >
+                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+            >::type
+        > Treiber_DHP_member_disposer_relaxed;
+    }
+
+    TEST(Treiber_DHP_base)
+    TEST(Treiber_DHP_base_disposer)
+    TEST(Treiber_DHP_member)
+    TEST(Treiber_DHP_member_disposer)
+
+    TEST(Treiber_DHP_base_relaxed)
+    TEST(Treiber_DHP_base_disposer_relaxed)
+    TEST(Treiber_DHP_member_relaxed)
+    TEST(Treiber_DHP_member_disposer_relaxed)
+
+} // namespace stack
+
diff --git a/tests/test-hdr/stack/hdr_intrusive_treiber_stack_ptb.cpp b/tests/test-hdr/stack/hdr_intrusive_treiber_stack_ptb.cpp
deleted file mode 100644 (file)
index b1cdb51..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-//$$CDS-header$$
-
-#include "hdr_intrusive_treiber_stack.h"
-#include <cds/gc/ptb.h>
-#include <cds/intrusive/treiber_stack.h>
-
-namespace stack {
-
-#define TEST(X)     void TestIntrusiveStack::X() { test<defs::X>(); }
-
-    namespace defs {
-        // PTB GC + base hook
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::base_hook_item<cds::gc::PTB>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
-                >
-            >::type
-        > Treiber_PTB_base;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::base_hook_item<cds::gc::PTB>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
-                >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Treiber_PTB_base_relaxed;
-
-        // PTB GC + base hook + disposer
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::base_hook_item<cds::gc::PTB>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        > Treiber_PTB_base_disposer;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::base_hook_item<cds::gc::PTB>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Treiber_PTB_base_disposer_relaxed;
-
-        // PTB GC + member hook
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::member_hook_item<cds::gc::PTB>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
-                        ci::opt::gc<cds::gc::PTB>
-                    >
-                >
-            >::type
-        > Treiber_PTB_member;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::member_hook_item<cds::gc::PTB>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
-                        ci::opt::gc<cds::gc::PTB>
-                    >
-                >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Treiber_PTB_member_relaxed;
-
-        // PTB GC + member hook + disposer
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::member_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
-                        ci::opt::gc<cds::gc::PTB>
-                    >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        > Treiber_PTB_member_disposer;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB,
-            TestIntrusiveStack::member_hook_item<cds::gc::PTB>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::single_link::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
-                        ci::opt::gc<cds::gc::PTB>
-                    >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Treiber_PTB_member_disposer_relaxed;
-    }
-
-    TEST(Treiber_PTB_base)
-    TEST(Treiber_PTB_base_disposer)
-    TEST(Treiber_PTB_member)
-    TEST(Treiber_PTB_member_disposer)
-
-    TEST(Treiber_PTB_base_relaxed)
-    TEST(Treiber_PTB_base_disposer_relaxed)
-    TEST(Treiber_PTB_member_relaxed)
-    TEST(Treiber_PTB_member_disposer_relaxed)
-
-} // namespace stack
-
index 51ad47e90816e0ec818f66bbcd0e3dce77b2432f..33e43b76fb5b23b195bc68c05d5d687e9ed4d50f 100644 (file)
@@ -65,95 +65,67 @@ namespace stack {
         }
 
         void Treiber_HP();
-        void Treiber_HRC();
-        void Treiber_PTB();
+        void Treiber_DHP();
         void Treiber_HP_yield();
-        void Treiber_HRC_yield();
-        void Treiber_PTB_yield();
+        void Treiber_DHP_yield();
         void Treiber_HP_pause_alloc();
-        void Treiber_HRC_pause_alloc();
-        void Treiber_PTB_pause_alloc();
+        void Treiber_DHP_pause_alloc();
 
         void Treiber_HP_relaxed();
-        void Treiber_HRC_relaxed();
-        void Treiber_PTB_relaxed();
+        void Treiber_DHP_relaxed();
         void Treiber_HP_yield_relaxed();
-        void Treiber_HRC_yield_relaxed();
-        void Treiber_PTB_yield_relaxed();
+        void Treiber_DHP_yield_relaxed();
         void Treiber_HP_pause_alloc_relaxed();
-        void Treiber_HRC_pause_alloc_relaxed();
-        void Treiber_PTB_pause_alloc_relaxed();
+        void Treiber_DHP_pause_alloc_relaxed();
 
         void Elimination_HP();
         void Elimination_HP_dyn();
         void Elimination_HP_stat();
-        void Elimination_HRC();
-        void Elimination_HRC_dyn();
-        void Elimination_HRC_stat();
-        void Elimination_PTB();
-        void Elimination_PTB_dyn();
-        void Elimination_PTB_stat();
+        void Elimination_DHP();
+        void Elimination_DHP_dyn();
+        void Elimination_DHP_stat();
         void Elimination_HP_yield();
-        void Elimination_HRC_yield();
-        void Elimination_PTB_yield();
+        void Elimination_DHP_yield();
         void Elimination_HP_pause_alloc();
-        void Elimination_HRC_pause_alloc();
-        void Elimination_PTB_pause_alloc();
+        void Elimination_DHP_pause_alloc();
 
         void Elimination_HP_relaxed();
-        void Elimination_HRC_relaxed();
-        void Elimination_PTB_relaxed();
+        void Elimination_DHP_relaxed();
         void Elimination_HP_yield_relaxed();
-        void Elimination_HRC_yield_relaxed();
-        void Elimination_PTB_yield_relaxed();
+        void Elimination_DHP_yield_relaxed();
         void Elimination_HP_pause_alloc_relaxed();
-        void Elimination_HRC_pause_alloc_relaxed();
-        void Elimination_PTB_pause_alloc_relaxed();
+        void Elimination_DHP_pause_alloc_relaxed();
 
         CPPUNIT_TEST_SUITE(TestStack);
             CPPUNIT_TEST(Treiber_HP)
             CPPUNIT_TEST(Treiber_HP_relaxed)
-            CPPUNIT_TEST(Treiber_HRC)
-            CPPUNIT_TEST(Treiber_HRC_relaxed)
-            CPPUNIT_TEST(Treiber_PTB)
-            CPPUNIT_TEST(Treiber_PTB_relaxed)
+            CPPUNIT_TEST(Treiber_DHP)
+            CPPUNIT_TEST(Treiber_DHP_relaxed)
             CPPUNIT_TEST(Treiber_HP_yield)
             CPPUNIT_TEST(Treiber_HP_yield_relaxed)
-            CPPUNIT_TEST(Treiber_HRC_yield)
-            CPPUNIT_TEST(Treiber_HRC_yield_relaxed)
-            CPPUNIT_TEST(Treiber_PTB_yield)
-            CPPUNIT_TEST(Treiber_PTB_yield_relaxed)
+            CPPUNIT_TEST(Treiber_DHP_yield)
+            CPPUNIT_TEST(Treiber_DHP_yield_relaxed)
             CPPUNIT_TEST(Treiber_HP_pause_alloc)
             CPPUNIT_TEST(Treiber_HP_pause_alloc_relaxed)
-            CPPUNIT_TEST(Treiber_HRC_pause_alloc)
-            CPPUNIT_TEST(Treiber_HRC_pause_alloc_relaxed)
-            CPPUNIT_TEST(Treiber_PTB_pause_alloc)
-            CPPUNIT_TEST(Treiber_PTB_pause_alloc_relaxed)
+            CPPUNIT_TEST(Treiber_DHP_pause_alloc)
+            CPPUNIT_TEST(Treiber_DHP_pause_alloc_relaxed)
 
             CPPUNIT_TEST(Elimination_HP)
             CPPUNIT_TEST(Elimination_HP_dyn)
             CPPUNIT_TEST(Elimination_HP_stat)
             CPPUNIT_TEST(Elimination_HP_relaxed)
-            CPPUNIT_TEST(Elimination_HRC)
-            CPPUNIT_TEST(Elimination_HRC_dyn)
-            CPPUNIT_TEST(Elimination_HRC_stat)
-            CPPUNIT_TEST(Elimination_HRC_relaxed)
-            CPPUNIT_TEST(Elimination_PTB)
-            CPPUNIT_TEST(Elimination_PTB_dyn)
-            CPPUNIT_TEST(Elimination_PTB_stat)
-            CPPUNIT_TEST(Elimination_PTB_relaxed)
+            CPPUNIT_TEST(Elimination_DHP)
+            CPPUNIT_TEST(Elimination_DHP_dyn)
+            CPPUNIT_TEST(Elimination_DHP_stat)
+            CPPUNIT_TEST(Elimination_DHP_relaxed)
             CPPUNIT_TEST(Elimination_HP_yield)
             CPPUNIT_TEST(Elimination_HP_yield_relaxed)
-            CPPUNIT_TEST(Elimination_HRC_yield)
-            CPPUNIT_TEST(Elimination_HRC_yield_relaxed)
-            CPPUNIT_TEST(Elimination_PTB_yield)
-            CPPUNIT_TEST(Elimination_PTB_yield_relaxed)
+            CPPUNIT_TEST(Elimination_DHP_yield)
+            CPPUNIT_TEST(Elimination_DHP_yield_relaxed)
             CPPUNIT_TEST(Elimination_HP_pause_alloc)
             CPPUNIT_TEST(Elimination_HP_pause_alloc_relaxed)
-            CPPUNIT_TEST(Elimination_HRC_pause_alloc)
-            CPPUNIT_TEST(Elimination_HRC_pause_alloc_relaxed)
-            CPPUNIT_TEST(Elimination_PTB_pause_alloc)
-            CPPUNIT_TEST(Elimination_PTB_pause_alloc_relaxed)
+            CPPUNIT_TEST(Elimination_DHP_pause_alloc)
+            CPPUNIT_TEST(Elimination_DHP_pause_alloc_relaxed)
         CPPUNIT_TEST_SUITE_END();
     };
 }   // namespace stack
diff --git a/tests/test-hdr/stack/hdr_treiber_stack_dhp.cpp b/tests/test-hdr/stack/hdr_treiber_stack_dhp.cpp
new file mode 100644 (file)
index 0000000..9a5ca19
--- /dev/null
@@ -0,0 +1,57 @@
+//$$CDS-header$$
+
+#include "hdr_treiber_stack.h"
+#include <cds/gc/ptb.h>
+#include <cds/container/treiber_stack.h>
+
+namespace stack {
+#define TEST(X)     void TestStack::X() { test<defs::X>(); }
+    namespace cs = cds::container;
+
+    namespace defs { namespace {
+
+        typedef cs::TreiberStack< cds::gc::PTB, int > Treiber_PTB;
+        typedef cs::TreiberStack< cds::gc::PTB, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::memory_model<cds::opt::v::relaxed_ordering> 
+            >::type
+        > Treiber_PTB_relaxed;
+
+        typedef cs::TreiberStack< cds::gc::PTB, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::yield> 
+            >::type
+        > Treiber_PTB_yield;
+
+        typedef cs::TreiberStack< cds::gc::PTB, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::yield>
+                ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            >::type
+        > Treiber_PTB_yield_relaxed;
+
+        typedef cs::TreiberStack< cds::gc::PTB, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::pause>
+                ,cds::opt::allocator< std::allocator< bool * > >
+            >::type
+        > Treiber_PTB_pause_alloc;
+
+        typedef cs::TreiberStack< cds::gc::PTB, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+                ,cds::opt::back_off< cds::backoff::pause>
+                ,cds::opt::allocator< std::allocator< bool * > >
+            >::type
+        > Treiber_PTB_pause_alloc_relaxed;
+    }}
+
+    TEST(Treiber_PTB)
+    TEST(Treiber_PTB_yield)
+    TEST(Treiber_PTB_pause_alloc)
+
+    TEST(Treiber_PTB_relaxed)
+    TEST(Treiber_PTB_yield_relaxed)
+    TEST(Treiber_PTB_pause_alloc_relaxed)
+
+}
index cbd4a4222bffe9d2686f870a25b12b7e9842c23b..aafc28e00c007345febeec37221859e9da9d06b9 100644 (file)
@@ -12,22 +12,38 @@ namespace stack {
     namespace defs { namespace {
 
         typedef cs::TreiberStack< cds::gc::HP, int > Treiber_HP;
-        typedef cs::TreiberStack< cds::gc::HP, int, cds::opt::memory_model<cds::opt::v::relaxed_ordering> > Treiber_HP_relaxed;
-        typedef cs::TreiberStack< cds::gc::HP, int, cds::opt::back_off< cds::backoff::yield> > Treiber_HP_yield;
         typedef cs::TreiberStack< cds::gc::HP, int
-            , cds::opt::back_off< cds::backoff::yield>
-            , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::memory_model<cds::opt::v::relaxed_ordering> 
+            >::type
+        > Treiber_HP_relaxed;
+
+        typedef cs::TreiberStack< cds::gc::HP, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::yield> 
+            >::type
+        > Treiber_HP_yield;
+
+        typedef cs::TreiberStack< cds::gc::HP, int
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::yield>
+                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            >::type
         > Treiber_HP_yield_relaxed;
 
         typedef cs::TreiberStack< cds::gc::HP, int
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::allocator< std::allocator< bool * > >
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::pause>
+                ,cds::opt::allocator< std::allocator< bool * > >
+            >::type
         > Treiber_HP_pause_alloc;
 
         typedef cs::TreiberStack< cds::gc::HP, int
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            ,cds::opt::allocator< std::allocator< unsigned long > >
+            , typename cs::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::pause>
+                ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+                ,cds::opt::allocator< std::allocator< unsigned long > >
+            >::type
         > Treiber_HP_pause_alloc_relaxed;
     }}
 
diff --git a/tests/test-hdr/stack/hdr_treiber_stack_hrc.cpp b/tests/test-hdr/stack/hdr_treiber_stack_hrc.cpp
deleted file mode 100644 (file)
index 5914567..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//$$CDS-header$$
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/hrc.h>
-#include <cds/container/treiber_stack.h>
-
-namespace stack {
-#define TEST(X)     void TestStack::X() { test<defs::X>(); }
-    namespace cs = cds::container;
-
-    namespace defs { namespace {
-
-        typedef cs::TreiberStack< cds::gc::HRC, int > Treiber_HRC;
-        typedef cs::TreiberStack< cds::gc::HRC, int, cds::opt::memory_model<cds::opt::v::relaxed_ordering> > Treiber_HRC_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::HRC, int, cds::opt::back_off< cds::backoff::yield> > Treiber_HRC_yield;
-        typedef cs::TreiberStack< cds::gc::HRC, int
-            ,cds::opt::back_off< cds::backoff::yield>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Treiber_HRC_yield_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::HRC, int
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::allocator< std::allocator< bool * > >
-        > Treiber_HRC_pause_alloc;
-
-        typedef cs::TreiberStack< cds::gc::HRC, int
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            ,cds::opt::allocator< std::allocator< bool * > >
-        > Treiber_HRC_pause_alloc_relaxed;
-    }}
-
-    TEST(Treiber_HRC)
-    TEST(Treiber_HRC_yield)
-    TEST(Treiber_HRC_pause_alloc)
-
-    TEST(Treiber_HRC_relaxed)
-    TEST(Treiber_HRC_yield_relaxed)
-    TEST(Treiber_HRC_pause_alloc_relaxed)
-}
diff --git a/tests/test-hdr/stack/hdr_treiber_stack_ptb.cpp b/tests/test-hdr/stack/hdr_treiber_stack_ptb.cpp
deleted file mode 100644 (file)
index 7947834..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-//$$CDS-header$$
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/ptb.h>
-#include <cds/container/treiber_stack.h>
-
-namespace stack {
-#define TEST(X)     void TestStack::X() { test<defs::X>(); }
-    namespace cs = cds::container;
-
-    namespace defs { namespace {
-
-        typedef cs::TreiberStack< cds::gc::PTB, int > Treiber_PTB;
-        typedef cs::TreiberStack< cds::gc::PTB, int, cds::opt::memory_model<cds::opt::v::relaxed_ordering> > Treiber_PTB_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::PTB, int, cds::opt::back_off< cds::backoff::yield> > Treiber_PTB_yield;
-        typedef cs::TreiberStack< cds::gc::PTB, int
-            ,cds::opt::back_off< cds::backoff::yield>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Treiber_PTB_yield_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::PTB, int
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::allocator< std::allocator< bool * > >
-        > Treiber_PTB_pause_alloc;
-
-        typedef cs::TreiberStack< cds::gc::PTB, int
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            ,cds::opt::back_off< cds::backoff::pause>
-            ,cds::opt::allocator< std::allocator< bool * > >
-        > Treiber_PTB_pause_alloc_relaxed;
-    }}
-
-    TEST(Treiber_PTB)
-    TEST(Treiber_PTB_yield)
-    TEST(Treiber_PTB_pause_alloc)
-
-    TEST(Treiber_PTB_relaxed)
-    TEST(Treiber_PTB_yield_relaxed)
-    TEST(Treiber_PTB_pause_alloc_relaxed)
-
-}
index 21a5f7f2adb3be910603770443f7ec17aac55e54..fc57127d321f00a41b61ebe983e8268f33e41e15 100644 (file)
     TEST_CASE( Treiber_HP_pause, cds::intrusive::single_link::node< cds::gc::HP >  ) \
     TEST_CASE( Treiber_HP_exp, cds::intrusive::single_link::node< cds::gc::HP >    ) \
     TEST_CASE( Treiber_HP_stat, cds::intrusive::single_link::node< cds::gc::HP >   ) \
-    TEST_CASE( Treiber_HRC, cds::intrusive::single_link::node< cds::gc::HRC >       ) \
     /*TEST_CASE( Treiber_HRC_yield, cds::intrusive::single_link::node< cds::gc::HRC > )*/ \
-    TEST_CASE( Treiber_HRC_pause, cds::intrusive::single_link::node< cds::gc::HRC > ) \
-    TEST_CASE( Treiber_HRC_exp, cds::intrusive::single_link::node< cds::gc::HRC >   ) \
-    TEST_CASE( Treiber_HRC_stat, cds::intrusive::single_link::node< cds::gc::HRC >  ) \
-    TEST_CASE( Treiber_PTB, cds::intrusive::single_link::node< cds::gc::PTB >       ) \
-    /*TEST_CASE( Treiber_PTB_yield, cds::intrusive::single_link::node< cds::gc::PTB > )*/ \
-    TEST_CASE( Treiber_PTB_pause, cds::intrusive::single_link::node< cds::gc::PTB > ) \
-    TEST_CASE( Treiber_PTB_exp, cds::intrusive::single_link::node< cds::gc::PTB >   ) \
-    TEST_CASE( Treiber_PTB_stat, cds::intrusive::single_link::node< cds::gc::PTB >  )
+    TEST_CASE( Treiber_DHP, cds::intrusive::single_link::node< cds::gc::DHP >       ) \
+    /*TEST_CASE( Treiber_DHP_yield, cds::intrusive::single_link::node< cds::gc::DHP > )*/ \
+    TEST_CASE( Treiber_DHP_pause, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+    TEST_CASE( Treiber_DHP_exp, cds::intrusive::single_link::node< cds::gc::DHP >   ) \
+    TEST_CASE( Treiber_DHP_stat, cds::intrusive::single_link::node< cds::gc::DHP >  )
 
 #define CDSUNIT_TEST_TreiberStack \
     CPPUNIT_TEST( Treiber_HP        ) \
     CPPUNIT_TEST( Treiber_HP_pause  ) \
     CPPUNIT_TEST( Treiber_HP_exp    ) \
     CPPUNIT_TEST( Treiber_HP_stat   ) \
-    CPPUNIT_TEST( Treiber_HRC       ) \
-    /*CPPUNIT_TEST( Treiber_HRC_yield )*/ \
-    /*CPPUNIT_TEST( Treiber_HRC_pause )*/ \
-    /*CPPUNIT_TEST( Treiber_HRC_exp   )*/ \
-    CPPUNIT_TEST( Treiber_HRC_stat  ) \
-    CPPUNIT_TEST( Treiber_PTB       ) \
-    /*CPPUNIT_TEST( Treiber_PTB_yield )*/ \
-    CPPUNIT_TEST( Treiber_PTB_pause ) \
-    CPPUNIT_TEST( Treiber_PTB_exp   ) \
-    CPPUNIT_TEST( Treiber_PTB_stat  )
+    CPPUNIT_TEST( Treiber_DHP       ) \
+    /*CPPUNIT_TEST( Treiber_DHP_yield )*/ \
+    CPPUNIT_TEST( Treiber_DHP_pause ) \
+    CPPUNIT_TEST( Treiber_DHP_exp   ) \
+    CPPUNIT_TEST( Treiber_DHP_stat  )
 
 #define CDSUNIT_DECLARE_EliminationStack \
     TEST_ELIMINATION( Elimination_HP, cds::intrusive::single_link::node< cds::gc::HP >        ) \
     TEST_ELIMINATION( Elimination_HP_stat, cds::intrusive::single_link::node< cds::gc::HP >   ) \
     TEST_ELIMINATION( Elimination_HP_dyn, cds::intrusive::single_link::node< cds::gc::HP >    ) \
     TEST_ELIMINATION( Elimination_HP_dyn_stat, cds::intrusive::single_link::node< cds::gc::HP >) \
-    TEST_ELIMINATION( Elimination_HRC, cds::intrusive::single_link::node< cds::gc::HRC >       ) \
-    /*TEST_ELIMINATION( Elimination_HRC_yield, cds::intrusive::single_link::node< cds::gc::HRC > )*/ \
-    TEST_ELIMINATION( Elimination_HRC_pause, cds::intrusive::single_link::node< cds::gc::HRC > ) \
-    TEST_ELIMINATION( Elimination_HRC_exp, cds::intrusive::single_link::node< cds::gc::HRC >   ) \
-    TEST_ELIMINATION( Elimination_HRC_stat, cds::intrusive::single_link::node< cds::gc::HRC >  ) \
-    TEST_ELIMINATION( Elimination_HRC_dyn, cds::intrusive::single_link::node< cds::gc::HRC >   ) \
-    TEST_ELIMINATION( Elimination_HRC_dyn_stat, cds::intrusive::single_link::node< cds::gc::HRC >) \
-    TEST_ELIMINATION( Elimination_PTB, cds::intrusive::single_link::node< cds::gc::PTB >       ) \
-    TEST_ELIMINATION( Elimination_PTB_2ms, cds::intrusive::single_link::node< cds::gc::PTB >    ) \
-    TEST_ELIMINATION( Elimination_PTB_2ms_stat, cds::intrusive::single_link::node< cds::gc::PTB >) \
-    TEST_ELIMINATION( Elimination_PTB_5ms, cds::intrusive::single_link::node< cds::gc::PTB >    ) \
-    TEST_ELIMINATION( Elimination_PTB_5ms_stat, cds::intrusive::single_link::node< cds::gc::PTB >) \
-    TEST_ELIMINATION( Elimination_PTB_10ms, cds::intrusive::single_link::node< cds::gc::PTB >    ) \
-    TEST_ELIMINATION( Elimination_PTB_10ms_stat, cds::intrusive::single_link::node< cds::gc::PTB >) \
-    /*TEST_ELIMINATION( Elimination_PTB_yield, cds::intrusive::single_link::node< cds::gc::PTB > )*/ \
-    TEST_ELIMINATION( Elimination_PTB_pause, cds::intrusive::single_link::node< cds::gc::PTB > ) \
-    TEST_ELIMINATION( Elimination_PTB_exp, cds::intrusive::single_link::node< cds::gc::PTB >   ) \
-    TEST_ELIMINATION( Elimination_PTB_stat, cds::intrusive::single_link::node< cds::gc::PTB >  ) \
-    TEST_ELIMINATION( Elimination_PTB_dyn, cds::intrusive::single_link::node< cds::gc::PTB >   ) \
-    TEST_ELIMINATION( Elimination_PTB_dyn_stat, cds::intrusive::single_link::node< cds::gc::PTB >)
+    TEST_ELIMINATION( Elimination_DHP, cds::intrusive::single_link::node< cds::gc::DHP >       ) \
+    TEST_ELIMINATION( Elimination_DHP_2ms, cds::intrusive::single_link::node< cds::gc::DHP >    ) \
+    TEST_ELIMINATION( Elimination_DHP_2ms_stat, cds::intrusive::single_link::node< cds::gc::DHP >) \
+    TEST_ELIMINATION( Elimination_DHP_5ms, cds::intrusive::single_link::node< cds::gc::DHP >    ) \
+    TEST_ELIMINATION( Elimination_DHP_5ms_stat, cds::intrusive::single_link::node< cds::gc::DHP >) \
+    TEST_ELIMINATION( Elimination_DHP_10ms, cds::intrusive::single_link::node< cds::gc::DHP >    ) \
+    TEST_ELIMINATION( Elimination_DHP_10ms_stat, cds::intrusive::single_link::node< cds::gc::DHP >) \
+    /*TEST_ELIMINATION( Elimination_DHP_yield, cds::intrusive::single_link::node< cds::gc::DHP > )*/ \
+    TEST_ELIMINATION( Elimination_DHP_pause, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+    TEST_ELIMINATION( Elimination_DHP_exp, cds::intrusive::single_link::node< cds::gc::DHP >   ) \
+    TEST_ELIMINATION( Elimination_DHP_stat, cds::intrusive::single_link::node< cds::gc::DHP >  ) \
+    TEST_ELIMINATION( Elimination_DHP_dyn, cds::intrusive::single_link::node< cds::gc::DHP >   ) \
+    TEST_ELIMINATION( Elimination_DHP_dyn_stat, cds::intrusive::single_link::node< cds::gc::DHP >)
 
 #define CDSUNIT_TEST_EliminationStack \
     CPPUNIT_TEST( Elimination_HP        ) \
     CPPUNIT_TEST( Elimination_HP_stat   ) \
     CPPUNIT_TEST( Elimination_HP_dyn    ) \
     CPPUNIT_TEST( Elimination_HP_dyn_stat) \
-    CPPUNIT_TEST( Elimination_HRC       ) \
-    /*CPPUNIT_TEST( Elimination_HRC_yield )*/ \
-    /*CPPUNIT_TEST( Elimination_HRC_pause )*/ \
-    /*CPPUNIT_TEST( Elimination_HRC_exp   )*/ \
-    CPPUNIT_TEST( Elimination_HRC_stat  ) \
-    CPPUNIT_TEST( Elimination_HRC_dyn   ) \
-    CPPUNIT_TEST( Elimination_HRC_dyn_stat) \
-    CPPUNIT_TEST( Elimination_PTB       ) \
-    CPPUNIT_TEST( Elimination_PTB_2ms    ) \
-    CPPUNIT_TEST( Elimination_PTB_2ms_stat) \
-    CPPUNIT_TEST( Elimination_PTB_5ms    ) \
-    CPPUNIT_TEST( Elimination_PTB_5ms_stat) \
-    CPPUNIT_TEST( Elimination_PTB_10ms    ) \
-    CPPUNIT_TEST( Elimination_PTB_10ms_stat) \
-    /*CPPUNIT_TEST( Elimination_PTB_yield )*/ \
-    CPPUNIT_TEST( Elimination_PTB_pause ) \
-    CPPUNIT_TEST( Elimination_PTB_exp   ) \
-    CPPUNIT_TEST( Elimination_PTB_stat  ) \
-    CPPUNIT_TEST( Elimination_PTB_dyn   ) \
-    CPPUNIT_TEST( Elimination_PTB_dyn_stat)
-
-#define CDSUNIT_DECLARE_MichaelDeque \
-    TEST_BOUNDED( MichaelDequeL_HP, cds::intrusive::michael_deque::node<cds::gc::HP>          ) \
-    TEST_BOUNDED( MichaelDequeL_HP_seqcst, cds::intrusive::michael_deque::node<cds::gc::HP>   ) \
-    TEST_BOUNDED( MichaelDequeL_HP_ic, cds::intrusive::michael_deque::node<cds::gc::HP>       ) \
-    TEST_BOUNDED( MichaelDequeL_HP_exp, cds::intrusive::michael_deque::node<cds::gc::HP>      ) \
-    TEST_BOUNDED( MichaelDequeL_HP_yield, cds::intrusive::michael_deque::node<cds::gc::HP>    ) \
-    TEST_BOUNDED( MichaelDequeL_HP_stat, cds::intrusive::michael_deque::node<cds::gc::HP>     ) \
-    TEST_BOUNDED( MichaelDequeL_PTB, cds::intrusive::michael_deque::node<cds::gc::PTB>         ) \
-    TEST_BOUNDED( MichaelDequeL_PTB_seqcst, cds::intrusive::michael_deque::node<cds::gc::PTB>  ) \
-    TEST_BOUNDED( MichaelDequeL_PTB_ic, cds::intrusive::michael_deque::node<cds::gc::PTB>      ) \
-    TEST_BOUNDED( MichaelDequeL_PTB_exp, cds::intrusive::michael_deque::node<cds::gc::PTB>     ) \
-    TEST_BOUNDED( MichaelDequeL_PTB_yield, cds::intrusive::michael_deque::node<cds::gc::PTB>   ) \
-    TEST_BOUNDED( MichaelDequeL_PTB_stat, cds::intrusive::michael_deque::node<cds::gc::PTB>    ) \
-    TEST_BOUNDED( MichaelDequeR_HP, cds::intrusive::michael_deque::node<cds::gc::HP>          ) \
-    TEST_BOUNDED( MichaelDequeR_HP_seqcst, cds::intrusive::michael_deque::node<cds::gc::HP>   ) \
-    TEST_BOUNDED( MichaelDequeR_HP_ic, cds::intrusive::michael_deque::node<cds::gc::HP>       ) \
-    TEST_BOUNDED( MichaelDequeR_HP_exp, cds::intrusive::michael_deque::node<cds::gc::HP>      ) \
-    TEST_BOUNDED( MichaelDequeR_HP_yield, cds::intrusive::michael_deque::node<cds::gc::HP>    ) \
-    TEST_BOUNDED( MichaelDequeR_HP_stat, cds::intrusive::michael_deque::node<cds::gc::HP>     ) \
-    TEST_BOUNDED( MichaelDequeR_PTB, cds::intrusive::michael_deque::node<cds::gc::PTB>         ) \
-    TEST_BOUNDED( MichaelDequeR_PTB_seqcst, cds::intrusive::michael_deque::node<cds::gc::PTB>  ) \
-    TEST_BOUNDED( MichaelDequeR_PTB_ic, cds::intrusive::michael_deque::node<cds::gc::PTB>      ) \
-    TEST_BOUNDED( MichaelDequeR_PTB_exp, cds::intrusive::michael_deque::node<cds::gc::PTB>     ) \
-    TEST_BOUNDED( MichaelDequeR_PTB_yield, cds::intrusive::michael_deque::node<cds::gc::PTB>   ) \
-    TEST_BOUNDED( MichaelDequeR_PTB_stat, cds::intrusive::michael_deque::node<cds::gc::PTB>    )
-
-#define CDSUNIT_TEST_MichaelDeque \
-    CPPUNIT_TEST( MichaelDequeL_HP          ) \
-    /*CPPUNIT_TEST( MichaelDequeL_HP_seqcst   )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_HP_ic       )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_HP_exp      )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_HP_yield    )*/ \
-    CPPUNIT_TEST( MichaelDequeL_HP_stat     ) \
-    CPPUNIT_TEST( MichaelDequeL_PTB         ) \
-    /*CPPUNIT_TEST( MichaelDequeL_PTB_seqcst  )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_PTB_ic      )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_PTB_exp     )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_PTB_yield   )*/ \
-    CPPUNIT_TEST( MichaelDequeL_PTB_stat    ) \
-    CPPUNIT_TEST( MichaelDequeR_HP          ) \
-    /*CPPUNIT_TEST( MichaelDequeR_HP_seqcst   )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_HP_ic       )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_HP_exp      )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_HP_yield    )*/ \
-    CPPUNIT_TEST( MichaelDequeR_HP_stat     ) \
-    CPPUNIT_TEST( MichaelDequeR_PTB         ) \
-    /*CPPUNIT_TEST( MichaelDequeR_PTB_seqcst  )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_PTB_ic      )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_PTB_exp     )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_PTB_yield   )*/ \
-    CPPUNIT_TEST( MichaelDequeR_PTB_stat    )
+    CPPUNIT_TEST( Elimination_DHP       ) \
+    CPPUNIT_TEST( Elimination_DHP_2ms    ) \
+    CPPUNIT_TEST( Elimination_DHP_2ms_stat) \
+    CPPUNIT_TEST( Elimination_DHP_5ms    ) \
+    CPPUNIT_TEST( Elimination_DHP_5ms_stat) \
+    CPPUNIT_TEST( Elimination_DHP_10ms    ) \
+    CPPUNIT_TEST( Elimination_DHP_10ms_stat) \
+    /*CPPUNIT_TEST( Elimination_DHP_yield )*/ \
+    CPPUNIT_TEST( Elimination_DHP_pause ) \
+    CPPUNIT_TEST( Elimination_DHP_exp   ) \
+    CPPUNIT_TEST( Elimination_DHP_stat  ) \
+    CPPUNIT_TEST( Elimination_DHP_dyn   ) \
+    CPPUNIT_TEST( Elimination_DHP_dyn_stat)
 
 #define CDSUNIT_DECLARE_FCStack \
     TEST_FCSTACK( FCStack_slist, boost::intrusive::slist_base_hook<> ) \
index 4cb823af4404a115b775d8c03876a5cb7afbee0d..2a32cb43b6d0f35a17113cf8261ad566add8a729 100644 (file)
@@ -7,8 +7,7 @@
 #include <cds/intrusive/fcstack.h>
 
 #include <cds/gc/hp.h>
-#include <cds/gc/ptb.h>
-#include <cds/gc/hrc.h>
+#include <cds/gc/dhp.h>
 
 #include <mutex>
 #include <cds/lock/spinlock.h>
@@ -67,330 +66,209 @@ namespace istack {
     template <typename T>
     struct Types {
 
+        template <class GC>
+        using base_hook = cds::intrusive::treiber_stack::base_hook < cds::opt::gc< GC > >;
+
     // TreiberStack
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-        >       Treiber_HP;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
-        >       Treiber_HP_seqcst;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Treiber_HP_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-        >       Treiber_HRC;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Treiber_HRC_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-        > Treiber_PTB;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Treiber_PTB_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::back_off<cds::backoff::yield>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Treiber_HP_yield;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::back_off<cds::backoff::pause>
-        > Treiber_HP_pause;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
-                >
-            >
-        > Treiber_HP_exp;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::back_off<cds::backoff::yield>
-        >  Treiber_HRC_yield;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::back_off<cds::backoff::pause>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Treiber_HRC_pause;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
-                >
-            >
-        > Treiber_HRC_exp;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::back_off<cds::backoff::yield>
-        >  Treiber_PTB_yield;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::back_off<cds::backoff::pause>
-        > Treiber_PTB_pause;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T > Treiber_HP;
+        struct traits_Treiber_DHP: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<cds::gc::PTB> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T, traits_Treiber_DHP >Treiber_PTB;
+
+        template <class GC> struct traits_Treiber_seqcst : public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::memory_model<cds::opt::v::sequential_consistent>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_seqcst<cds::gc::HP>  > Treiber_HP_seqcst;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst<cds::gc::DHP> > Treiber_DHP_seqcst;
+
+        template <class GC> struct traits_Treiber_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_stat<cds::gc::HP>  > Treiber_HP_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat<cds::gc::DHP> > Treiber_DHP_stat;
+
+        template <class GC> struct traits_Treiber_yield: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::back_off<cds::backoff::yield>
+                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_yield<cds::gc::HP>  > Treiber_HP_yield;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield<cds::gc::DHP> > Treiber_DHP_yield;
+
+        template <class GC> struct traits_Treiber_pause: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::back_off<cds::backoff::pause>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_pause<cds::gc::HP>  > Treiber_HP_pause;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause<cds::gc::DHP> > Treiber_DHP_pause;
+
+        template <class GC> struct traits_Treiber_exp: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                ,cds::opt::back_off<
+                    cds::backoff::exponential<
+                        cds::backoff::pause,
+                        cds::backoff::yield
+                    >
                 >
-            >
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Treiber_PTB_exp;
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_exp<cds::gc::HP>  > Treiber_HP_exp;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp<cds::gc::DHP> > Treiber_DHP_exp;
 
 
     // Elimination stack
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-        >       Elimination_HP;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-        >       Elimination_HP_2ms;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_HP_2ms_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-        >       Elimination_HP_5ms;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_HP_5ms_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-        >       Elimination_HP_10ms;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_HP_10ms_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        >       Elimination_HP_dyn;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
-        >       Elimination_HP_seqcst;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_HP_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        >       Elimination_HP_dyn_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::enable_elimination<true>
-        >       Elimination_HRC;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        >       Elimination_HRC_dyn;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_HRC_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        >       Elimination_HRC_dyn_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-        > Elimination_PTB_2ms;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        > Elimination_PTB_2ms_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-        > Elimination_PTB_5ms;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        > Elimination_PTB_5ms_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-        > Elimination_PTB_10ms;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        > Elimination_PTB_10ms_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-        > Elimination_PTB;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        > Elimination_PTB_dyn;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_PTB_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        >       Elimination_PTB_dyn_stat;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::yield>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Elimination_HP_yield;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::pause>
-        > Elimination_HP_pause;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
-                >
-            >
-        > Elimination_HP_exp;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::yield>
-        >  Elimination_HRC_yield;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::pause>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Elimination_HRC_pause;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
-                >
-            >
-        > Elimination_HRC_exp;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::yield>
-        >  Elimination_PTB_yield;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::pause>
-        > Elimination_PTB_pause;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
+        template <class GC> struct traits_Elimination_on : public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_on<cds::gc::HP>  > Elimination_HP;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_on<cds::gc::DHP> > Elimination_DHP;
+
+        template <class GC> struct traits_Elimination_2ms: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms<cds::gc::HP>  > Elimination_HP_2ms;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms<cds::gc::DHP> > Elimination_DHP_2ms;
+
+        template <class GC> struct traits_Elimination_2ms_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms_stat<cds::gc::HP>  > Elimination_HP_2ms_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat<cds::gc::DHP> > Elimination_DHP_2ms_stat;
+
+        template <class GC> struct traits_Elimination_5ms: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms<cds::gc::HP>  > Elimination_HP_5ms;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms<cds::gc::DHP> > Elimination_DHP_5ms;
+
+        template <class GC> struct traits_Elimination_5ms_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms_stat<cds::gc::HP>  > Elimination_HP_5ms_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat<cds::gc::DHP> > Elimination_DHP_5ms_stat;
+
+        template <class GC> struct traits_Elimination_10ms: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms<cds::gc::HP>  > Elimination_HP_10ms;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms<cds::gc::DHP> > Elimination_DHP_10ms;
+
+        template <class GC> struct traits_Elimination_10ms_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms_stat<cds::gc::HP>  > Elimination_HP_10ms_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat<cds::gc::DHP> > Elimination_DHP_10ms_stat;
+
+        template <class GC> struct traits_Elimination_dyn: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn<cds::gc::HP>  > Elimination_HP_dyn;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn<cds::gc::DHP> > Elimination_DHP_dyn;
+
+        template <class GC> struct traits_Elimination_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_stat<cds::gc::HP>  > Elimination_HP_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat<cds::gc::DHP> > Elimination_DHP_stat;
+
+        template <class GC> struct traits_Elimination_dyn_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn_stat<cds::gc::HP>  > Elimination_HP_dyn_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat<cds::gc::DHP> > Elimination_DHP_dyn_stat;
+
+        template <class GC> struct traits_Elimination_yield: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::back_off<cds::backoff::yield>
+                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_yield<cds::gc::HP>  > Elimination_HP_yield;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield<cds::gc::DHP> > Elimination_DHP_yield;
+
+        template <class GC> struct traits_Elimination_pause: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::back_off<cds::backoff::pause>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_pause<cds::gc::HP>  > Elimination_HP_pause;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause<cds::gc::DHP> > Elimination_DHP_pause;
+
+        template <class GC> struct traits_Elimination_exp: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                ,cds::opt::back_off<
+                    cds::backoff::exponential<
+                        cds::backoff::pause,
+                        cds::backoff::yield
+                    >
                 >
-            >
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Elimination_PTB_exp;
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_exp<cds::gc::HP>  > Elimination_HP_exp;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp<cds::gc::DHP> > Elimination_DHP_exp;
 
     // FCStack
         typedef cds::intrusive::FCStack< T > FCStack_slist;
index b39e05494b569441d8644e03d507add5fcfd51c9..cce699e53bd6f507f6dafb29ca31b01bfa3162ee 100644 (file)
     TEST_CASE( Treiber_HP_pause  ) \
     TEST_CASE( Treiber_HP_exp    ) \
     TEST_CASE( Treiber_HP_stat   ) \
-    /*TEST_CASE( Treiber_HRC       )*/ \
-    /*TEST_CASE( Treiber_HRC_yield )*/ \
-    /*TEST_CASE( Treiber_HRC_pause )*/ \
-    /*TEST_CASE( Treiber_HRC_exp   )*/ \
-    /*TEST_CASE( Treiber_HRC_stat  )*/ \
-    TEST_CASE( Treiber_PTB       ) \
-    /*TEST_CASE( Treiber_PTB_yield )*/ \
-    TEST_CASE( Treiber_PTB_pause ) \
-    TEST_CASE( Treiber_PTB_exp   ) \
-    TEST_CASE( Treiber_PTB_stat  )
+    TEST_CASE( Treiber_DHP       ) \
+    /*TEST_CASE( Treiber_DHP_yield )*/ \
+    TEST_CASE( Treiber_DHP_pause ) \
+    TEST_CASE( Treiber_DHP_exp   ) \
+    TEST_CASE( Treiber_DHP_stat  )
 
 #define CDSUNIT_TEST_TreiberStack \
     CPPUNIT_TEST( Treiber_HP        ) \
     CPPUNIT_TEST( Treiber_HP_pause  ) \
     CPPUNIT_TEST( Treiber_HP_exp    ) \
     CPPUNIT_TEST( Treiber_HP_stat   ) \
-    /*CPPUNIT_TEST( Treiber_HRC       )*/ \
-    /*CPPUNIT_TEST( Treiber_HRC_yield )*/ \
-    /*CPPUNIT_TEST( Treiber_HRC_pause )*/ \
-    /*CPPUNIT_TEST( Treiber_HRC_exp   )*/ \
-    /*CPPUNIT_TEST( Treiber_HRC_stat  )*/ \
-    CPPUNIT_TEST( Treiber_PTB       ) \
-    /*CPPUNIT_TEST( Treiber_PTB_yield )*/ \
-    CPPUNIT_TEST( Treiber_PTB_pause ) \
-    CPPUNIT_TEST( Treiber_PTB_exp   ) \
-    CPPUNIT_TEST( Treiber_PTB_stat  )
+    CPPUNIT_TEST( Treiber_DHP       ) \
+    /*CPPUNIT_TEST( Treiber_DHP_yield )*/ \
+    CPPUNIT_TEST( Treiber_DHP_pause ) \
+    CPPUNIT_TEST( Treiber_DHP_exp   ) \
+    CPPUNIT_TEST( Treiber_DHP_stat  )
 
 #define CDSUNIT_DECLARE_EliminationStack \
     TEST_ELIMINATION( Elimination_HP        ) \
     TEST_ELIMINATION( Elimination_HP_stat   ) \
     TEST_ELIMINATION( Elimination_HP_dyn    ) \
     TEST_ELIMINATION( Elimination_HP_dyn_stat) \
-    /*TEST_ELIMINATION( Elimination_HRC       )*/ \
-    /*TEST_ELIMINATION( Elimination_HRC_yield )*/ \
-    /*TEST_ELIMINATION( Elimination_HRC_pause )*/ \
-    /*TEST_ELIMINATION( Elimination_HRC_exp   )*/ \
-    /*TEST_ELIMINATION( Elimination_HRC_stat  )*/ \
-    /*TEST_ELIMINATION( Elimination_HRC_dyn   )*/ \
-    /*TEST_ELIMINATION( Elimination_HRC_dyn_stat)*/ \
-    TEST_ELIMINATION( Elimination_PTB       ) \
-    TEST_ELIMINATION( Elimination_PTB_2ms    ) \
-    TEST_ELIMINATION( Elimination_PTB_2ms_stat) \
-    TEST_ELIMINATION( Elimination_PTB_5ms    ) \
-    TEST_ELIMINATION( Elimination_PTB_5ms_stat) \
-    TEST_ELIMINATION( Elimination_PTB_10ms    ) \
-    TEST_ELIMINATION( Elimination_PTB_10ms_stat) \
-    /*TEST_ELIMINATION( Elimination_PTB_yield )*/ \
-    TEST_ELIMINATION( Elimination_PTB_pause ) \
-    TEST_ELIMINATION( Elimination_PTB_exp   ) \
-    TEST_ELIMINATION( Elimination_PTB_stat  ) \
-    TEST_ELIMINATION( Elimination_PTB_dyn   ) \
-    TEST_ELIMINATION( Elimination_PTB_dyn_stat)
+    TEST_ELIMINATION( Elimination_DHP       ) \
+    TEST_ELIMINATION( Elimination_DHP_2ms    ) \
+    TEST_ELIMINATION( Elimination_DHP_2ms_stat) \
+    TEST_ELIMINATION( Elimination_DHP_5ms    ) \
+    TEST_ELIMINATION( Elimination_DHP_5ms_stat) \
+    TEST_ELIMINATION( Elimination_DHP_10ms    ) \
+    TEST_ELIMINATION( Elimination_DHP_10ms_stat) \
+    /*TEST_ELIMINATION( Elimination_DHP_yield )*/ \
+    TEST_ELIMINATION( Elimination_DHP_pause ) \
+    TEST_ELIMINATION( Elimination_DHP_exp   ) \
+    TEST_ELIMINATION( Elimination_DHP_stat  ) \
+    TEST_ELIMINATION( Elimination_DHP_dyn   ) \
+    TEST_ELIMINATION( Elimination_DHP_dyn_stat)
 
 #define CDSUNIT_TEST_EliminationStack \
     CPPUNIT_TEST( Elimination_HP        ) \
     CPPUNIT_TEST( Elimination_HP_stat   ) \
     CPPUNIT_TEST( Elimination_HP_dyn    ) \
     CPPUNIT_TEST( Elimination_HP_dyn_stat) \
-    /*CPPUNIT_TEST( Elimination_HRC       )*/ \
-    /*CPPUNIT_TEST( Elimination_HRC_yield )*/ \
-    /*CPPUNIT_TEST( Elimination_HRC_pause )*/ \
-    /*CPPUNIT_TEST( Elimination_HRC_exp   )*/ \
-    /*CPPUNIT_TEST( Elimination_HRC_stat  )*/ \
-    /*CPPUNIT_TEST( Elimination_HRC_dyn   )*/ \
-    /*CPPUNIT_TEST( Elimination_HRC_dyn_stat)*/ \
-    CPPUNIT_TEST( Elimination_PTB       ) \
-    CPPUNIT_TEST( Elimination_PTB_2ms    ) \
-    CPPUNIT_TEST( Elimination_PTB_2ms_stat) \
-    CPPUNIT_TEST( Elimination_PTB_5ms    ) \
-    CPPUNIT_TEST( Elimination_PTB_5ms_stat) \
-    CPPUNIT_TEST( Elimination_PTB_10ms    ) \
-    CPPUNIT_TEST( Elimination_PTB_10ms_stat) \
-    /*CPPUNIT_TEST( Elimination_PTB_yield )*/ \
-    CPPUNIT_TEST( Elimination_PTB_pause ) \
-    CPPUNIT_TEST( Elimination_PTB_exp   ) \
-    CPPUNIT_TEST( Elimination_PTB_stat  ) \
-    CPPUNIT_TEST( Elimination_PTB_dyn   ) \
-    CPPUNIT_TEST( Elimination_PTB_dyn_stat)
+    CPPUNIT_TEST( Elimination_DHP       ) \
+    CPPUNIT_TEST( Elimination_DHP_2ms    ) \
+    CPPUNIT_TEST( Elimination_DHP_2ms_stat) \
+    CPPUNIT_TEST( Elimination_DHP_5ms    ) \
+    CPPUNIT_TEST( Elimination_DHP_5ms_stat) \
+    CPPUNIT_TEST( Elimination_DHP_10ms    ) \
+    CPPUNIT_TEST( Elimination_DHP_10ms_stat) \
+    /*CPPUNIT_TEST( Elimination_DHP_yield )*/ \
+    CPPUNIT_TEST( Elimination_DHP_pause ) \
+    CPPUNIT_TEST( Elimination_DHP_exp   ) \
+    CPPUNIT_TEST( Elimination_DHP_stat  ) \
+    CPPUNIT_TEST( Elimination_DHP_dyn   ) \
+    CPPUNIT_TEST( Elimination_DHP_dyn_stat)
 
-#define CDSUNIT_DECLARE_MichaelDeque \
-    TEST_BOUNDED( MichaelDequeL_HP          ) \
-    TEST_BOUNDED( MichaelDequeL_HP_seqcst   ) \
-    TEST_BOUNDED( MichaelDequeL_HP_ic       ) \
-    TEST_BOUNDED( MichaelDequeL_HP_exp      ) \
-    TEST_BOUNDED( MichaelDequeL_HP_yield    ) \
-    TEST_BOUNDED( MichaelDequeL_HP_stat     ) \
-    TEST_BOUNDED( MichaelDequeL_PTB         ) \
-    TEST_BOUNDED( MichaelDequeL_PTB_seqcst  ) \
-    TEST_BOUNDED( MichaelDequeL_PTB_ic      ) \
-    TEST_BOUNDED( MichaelDequeL_PTB_exp     ) \
-    TEST_BOUNDED( MichaelDequeL_PTB_yield   ) \
-    TEST_BOUNDED( MichaelDequeL_PTB_stat    ) \
-    TEST_BOUNDED( MichaelDequeR_HP          ) \
-    TEST_BOUNDED( MichaelDequeR_HP_seqcst   ) \
-    TEST_BOUNDED( MichaelDequeR_HP_ic       ) \
-    TEST_BOUNDED( MichaelDequeR_HP_exp      ) \
-    TEST_BOUNDED( MichaelDequeR_HP_yield    ) \
-    TEST_BOUNDED( MichaelDequeR_HP_stat     ) \
-    TEST_BOUNDED( MichaelDequeR_PTB         ) \
-    TEST_BOUNDED( MichaelDequeR_PTB_seqcst  ) \
-    TEST_BOUNDED( MichaelDequeR_PTB_ic      ) \
-    TEST_BOUNDED( MichaelDequeR_PTB_exp     ) \
-    TEST_BOUNDED( MichaelDequeR_PTB_yield   ) \
-    TEST_BOUNDED( MichaelDequeR_PTB_stat    )
-
-#define CDSUNIT_TEST_MichaelDeque \
-    CPPUNIT_TEST( MichaelDequeL_HP          ) \
-    /*CPPUNIT_TEST( MichaelDequeL_HP_seqcst   )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_HP_ic       )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_HP_exp      )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_HP_yield    )*/ \
-    CPPUNIT_TEST( MichaelDequeL_HP_stat     ) \
-    CPPUNIT_TEST( MichaelDequeL_PTB         ) \
-    /*CPPUNIT_TEST( MichaelDequeL_PTB_seqcst  )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_PTB_ic      )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_PTB_exp     )*/ \
-    /*CPPUNIT_TEST( MichaelDequeL_PTB_yield   )*/ \
-    CPPUNIT_TEST( MichaelDequeL_PTB_stat    ) \
-    CPPUNIT_TEST( MichaelDequeR_HP          ) \
-    /*CPPUNIT_TEST( MichaelDequeR_HP_seqcst   )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_HP_ic       )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_HP_exp      )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_HP_yield    )*/ \
-    CPPUNIT_TEST( MichaelDequeR_HP_stat     ) \
-    CPPUNIT_TEST( MichaelDequeR_PTB         ) \
-    /*CPPUNIT_TEST( MichaelDequeR_PTB_seqcst  )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_PTB_ic      )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_PTB_exp     )*/ \
-    /*CPPUNIT_TEST( MichaelDequeR_PTB_yield   )*/ \
-    CPPUNIT_TEST( MichaelDequeR_PTB_stat    )
 
 #define CDSUNIT_DECLARE_FCStack \
     TEST_CASE( FCStack_deque ) \
index 444f4230ec73a65ba56a64e86f464a63880fb1b4..4aa4423a1bbbcc0f0b19a46d178ae31c58c930a7 100644 (file)
@@ -8,8 +8,7 @@
 #include <cds/container/fcdeque.h>
 
 #include <cds/gc/hp.h>
-#include <cds/gc/ptb.h>
-#include <cds/gc/hrc.h>
+#include <cds/gc/dhp.h>
 
 #include <mutex>
 #include <cds/lock/spinlock.h>
@@ -118,274 +117,192 @@ namespace stack {
     struct Types {
 
     // TreiberStack
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-        >       Treiber_HP;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
-        >       Treiber_HP_seqcst;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Treiber_HP_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-        >       Treiber_HRC;
-
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Treiber_HRC_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-        > Treiber_PTB;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Treiber_PTB_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::back_off<cds::backoff::yield>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Treiber_HP_yield;
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::back_off<cds::backoff::pause>
-        > Treiber_HP_pause;
-        typedef cds::container::TreiberStack< cds::gc::HP, T,
-            cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
-                >
-            >
-        > Treiber_HP_exp;
-
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-            ,cds::opt::back_off<cds::backoff::yield>
-        >  Treiber_HRC_yield;
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-            ,cds::opt::back_off<cds::backoff::pause>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Treiber_HRC_pause;
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-            ,cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
-                >
-            >
-        > Treiber_HRC_exp;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::back_off<cds::backoff::yield>
-        >  Treiber_PTB_yield;
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::back_off<cds::backoff::pause>
-        > Treiber_PTB_pause;
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
+        typedef cds::container::TreiberStack< cds::gc::HP,  T > Treiber_HP;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T > Treiber_DHP;
+
+        struct traits_Treiber_seqcst: public 
+            cds::container::treiber_stack::make_traits< 
+                cds::opt::memory_model<cds::opt::v::sequential_consistent> 
+            >::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_seqcst > Treiber_HP_seqcst;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst > Treiber_DHP_seqcst;
+
+        struct traits_Treiber_stat: public
+            cds::container::treiber_stack::make_traits<
+                cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            >::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_stat > Treiber_HP_stat;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat > Treiber_DHP_stat;
+
+        struct traits_Treiber_yield: public
+            cds::container::treiber_stack::make_traits<
+                cds::opt::back_off<cds::backoff::yield>
+                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            >::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_yield > Treiber_HP_yield;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield > Treiber_DHP_yield;
+
+        struct traits_Treiber_pause: public
+            cds::container::treiber_stack::make_traits<
+                cds::opt::back_off<cds::backoff::pause>
+            >::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_pause > Treiber_HP_pause;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause > Treiber_DHP_pause;
+
+        struct traits_Treiber_exp: public
+            cds::container::treiber_stack::make_traits<
+                cds::opt::back_off<
+                    cds::backoff::exponential<
+                        cds::backoff::pause,
+                        cds::backoff::yield
+                    >
                 >
-            >
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Treiber_PTB_exp;
+            >::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_exp > Treiber_HP_exp;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp > Treiber_DHP_exp;
 
 
     // Elimination stack
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-        >       Elimination_HP;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-        >       Elimination_HP_2ms;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_HP_2ms_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-        >       Elimination_HP_5ms;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_HP_5ms_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-        >       Elimination_HP_10ms;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_HP_10ms_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        >       Elimination_HP_dyn;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
-        >       Elimination_HP_seqcst;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_HP_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        >       Elimination_HP_dyn_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-            ,cds::opt::enable_elimination<true>
-        >       Elimination_HRC;
-
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        >       Elimination_HRC_dyn;
-
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_HRC_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        >       Elimination_HRC_dyn_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-        > Elimination_PTB_2ms;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        > Elimination_PTB_2ms_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-        > Elimination_PTB_5ms;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        > Elimination_PTB_5ms_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-        > Elimination_PTB_10ms;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        > Elimination_PTB_10ms_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-        > Elimination_PTB;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        > Elimination_PTB_dyn;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-        >       Elimination_PTB_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-        >       Elimination_PTB_dyn_stat;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::yield>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Elimination_HP_yield;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::pause>
-        > Elimination_HP_pause;
-
-        typedef cds::container::TreiberStack< cds::gc::HP, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
-                >
-            >
-        > Elimination_HP_exp;
-
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::yield>
-        >  Elimination_HRC_yield;
-
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::pause>
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Elimination_HRC_pause;
-
-        typedef cds::container::TreiberStack< cds::gc::HRC, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
-                >
-            >
-        > Elimination_HRC_exp;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::yield>
-        >  Elimination_PTB_yield;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<cds::backoff::pause>
-        > Elimination_PTB_pause;
-
-        typedef cds::container::TreiberStack< cds::gc::PTB, T
-            ,cds::opt::enable_elimination<true>
-            ,cds::opt::back_off<
-                cds::backoff::exponential<
-                    cds::backoff::pause,
-                    cds::backoff::yield
+        struct traits_Elimination_on : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_on > Elimination_HP;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_on > Elimination_DHP;
+
+        struct traits_Elimination_stat : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_stat > Elimination_HP_stat;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat > Elimination_DHP_stat;
+
+        struct traits_Elimination_2ms: public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms >  Elimination_HP_2ms;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms >  Elimination_HP_2ms;
+
+        struct traits_Elimination_2ms_stat : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms_stat > Elimination_HP_2ms_stat;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat > Elimination_DHP_2ms_stat;
+
+        struct traits_Elimination_5ms : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms > Elimination_HP_5ms;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms > Elimination_DHP_5ms;
+
+        struct traits_Elimination_5ms_stat : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms_stat > Elimination_HP_5ms_stat;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat > Elimination_DHP_5ms_stat;
+
+        struct traits_Elimination_10ms : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms > Elimination_HP_10ms;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms > Elimination_DHP_10ms;
+
+        struct traits_Elimination_10ms_stat : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms_stat > Elimination_HP_10ms;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat > Elimination_DHP_10ms;
+
+        struct traits_Elimination_dyn: public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn > Elimination_HP_dyn;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn > Elimination_DHP_dyn;
+
+        struct traits_Elimination_seqcst: public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::memory_model<cds::opt::v::sequential_consistent>
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_seqcst > Elimination_HP_seqcst;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_seqcst > Elimination_DHP_seqcst;
+
+        struct traits_Elimination_dyn_stat: public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn_stat > Elimination_HP_dyn_stat;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat > Elimination_DHP_dyn_stat;
+
+        struct traits_Elimination_yield: public 
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::back_off<cds::backoff::yield>
+                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_yield > Elimination_HP_yield;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield > Elimination_DHP_yield;
+
+        struct traits_Elimination_pause: public 
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::back_off<cds::backoff::pause>
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_pause > Elimination_HP_pause;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause > Elimination_DHP_pause;
+
+        struct traits_Elimination_exp: public 
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                ,cds::opt::back_off<
+                    cds::backoff::exponential<
+                        cds::backoff::pause,
+                        cds::backoff::yield
+                    >
                 >
-            >
-            ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-        > Elimination_PTB_exp;
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_exp > Elimination_HP_exp;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp > Elimination_DHP_exp;
+
 
     // FCStack
         typedef cds::container::FCStack< T > FCStack_deque;
@@ -476,7 +393,7 @@ namespace stack {
 } // namespace stack
 
 namespace std {
-    static inline ostream& operator <<( ostream& o, cds::intrusive::treiber_stack::stat<> const& s )
+    static inline ostream& operator <<( ostream& o, cds::container::treiber_stack::stat<> const& s )
     {
         return o << "\tStatistics:\n"
             << "\t                    Push: " << s.m_PushCount.get()              << "\n"
@@ -490,7 +407,7 @@ namespace std {
             << "\t     m_EliminationFailed: " << s.m_EliminationFailed.get()      << "\n";
     }
 
-    static inline ostream& operator <<( ostream& o, cds::intrusive::treiber_stack::empty_stat const& s )
+    static inline ostream& operator <<(ostream& o, cds::container::treiber_stack::empty_stat const& s)
     {
         return o;
     }