From f283f28b6ffbed9439ccbf10146f08fa53df8238 Mon Sep 17 00:00:00 2001 From: khizmax Date: Fri, 3 Oct 2014 18:14:10 +0400 Subject: [PATCH] cds::container::TreiberStack refactoring change PTB -> DHP in TreiberStack tests Remove HRC tests --- cds/container/treiber_stack.h | 31 +- cds/gc/dhp.h | 14 + projects/Win/vc12/cds.vcxproj | 1 + projects/Win/vc12/cds.vcxproj.filters | 3 + projects/Win/vc12/hdr-test-stack.vcxproj | 10 +- projects/source.test-hdr.mk | 6 +- projects/source.test-hdr.offsetof.mk | 4 +- .../stack/hdr_elimination_stack_dhp.cpp | 86 +++ .../stack/hdr_elimination_stack_hp.cpp | 58 +- .../stack/hdr_elimination_stack_hrc.cpp | 69 --- .../stack/hdr_elimination_stack_ptb.cpp | 69 --- ...> hdr_intrusive_elimination_stack_dhp.cpp} | 122 ++--- .../stack/hdr_intrusive_treiber_stack.h | 72 +-- ...pp => hdr_intrusive_treiber_stack_dhp.cpp} | 96 ++-- tests/test-hdr/stack/hdr_treiber_stack.h | 84 +-- .../test-hdr/stack/hdr_treiber_stack_dhp.cpp | 57 ++ tests/test-hdr/stack/hdr_treiber_stack_hp.cpp | 34 +- .../test-hdr/stack/hdr_treiber_stack_hrc.cpp | 41 -- .../test-hdr/stack/hdr_treiber_stack_ptb.cpp | 42 -- tests/unit/stack/intrusive_stack_defs.h | 147 ++--- tests/unit/stack/intrusive_stack_type.h | 518 +++++++----------- tests/unit/stack/stack_defs.h | 147 ++--- tests/unit/stack/stack_type.h | 451 +++++++-------- 23 files changed, 885 insertions(+), 1277 deletions(-) create mode 100644 cds/gc/dhp.h create mode 100644 tests/test-hdr/stack/hdr_elimination_stack_dhp.cpp delete mode 100644 tests/test-hdr/stack/hdr_elimination_stack_hrc.cpp delete mode 100644 tests/test-hdr/stack/hdr_elimination_stack_ptb.cpp rename tests/test-hdr/stack/{hdr_intrusive_elimination_stack_ptb.cpp => hdr_intrusive_elimination_stack_dhp.cpp} (58%) rename tests/test-hdr/stack/{hdr_intrusive_treiber_stack_ptb.cpp => hdr_intrusive_treiber_stack_dhp.cpp} (55%) create mode 100644 tests/test-hdr/stack/hdr_treiber_stack_dhp.cpp delete mode 100644 tests/test-hdr/stack/hdr_treiber_stack_hrc.cpp delete mode 100644 tests/test-hdr/stack/hdr_treiber_stack_ptb.cpp diff --git a/cds/container/treiber_stack.h b/cds/container/treiber_stack.h index 37348aad..32954b7e 100644 --- a/cds/container/treiber_stack.h +++ b/cds/container/treiber_stack.h @@ -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 myStack; + //... + + std::string dest; + myStack.pop_with( [&dest]( std::string& src ) { dest = std::move( src ); } ); + \endcode + */ + template + 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 index 00000000..89abde52 --- /dev/null +++ b/cds/gc/dhp.h @@ -0,0 +1,14 @@ +//$$CDS-header$$ + +#ifndef __CDS_GC_DHP_H +#define __CDS_GC_DHP_H + +#include + +//@cond +namespace cds { namespace gc { + typedef PTB DHP; +}} // namespace cds::gc +//@endcond + +#endif // #ifndef __CDS_GC_DHP_H diff --git a/projects/Win/vc12/cds.vcxproj b/projects/Win/vc12/cds.vcxproj index e1264db1..12a608d2 100644 --- a/projects/Win/vc12/cds.vcxproj +++ b/projects/Win/vc12/cds.vcxproj @@ -734,6 +734,7 @@ + diff --git a/projects/Win/vc12/cds.vcxproj.filters b/projects/Win/vc12/cds.vcxproj.filters index 09abae89..f6a65148 100644 --- a/projects/Win/vc12/cds.vcxproj.filters +++ b/projects/Win/vc12/cds.vcxproj.filters @@ -1262,5 +1262,8 @@ Header Files\cds\container\details + + Header Files\cds\gc + \ No newline at end of file diff --git a/projects/Win/vc12/hdr-test-stack.vcxproj b/projects/Win/vc12/hdr-test-stack.vcxproj index f9098a5b..2f1dea80 100644 --- a/projects/Win/vc12/hdr-test-stack.vcxproj +++ b/projects/Win/vc12/hdr-test-stack.vcxproj @@ -539,18 +539,16 @@ + - - + - + - + - - diff --git a/projects/source.test-hdr.mk b/projects/source.test-hdr.mk index 4013baf9..15995c76 100644 --- a/projects/source.test-hdr.mk +++ b/projects/source.test-hdr.mk @@ -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 := \ diff --git a/projects/source.test-hdr.offsetof.mk b/projects/source.test-hdr.offsetof.mk index f7e65174..2c48c35b 100644 --- a/projects/source.test-hdr.offsetof.mk +++ b/projects/source.test-hdr.offsetof.mk @@ -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 index 00000000..9532461b --- /dev/null +++ b/tests/test-hdr/stack/hdr_elimination_stack_dhp.cpp @@ -0,0 +1,86 @@ +//$$CDS-header$$ + +#include "hdr_treiber_stack.h" +#include +#include + +namespace stack { +#define TEST(X) void TestStack::X() { test(); } +#define TEST_DYN(X) void TestStack::X() { test_elimination(); } + namespace cs = cds::container; + + namespace defs { namespace { + + typedef cs::TreiberStack< cds::gc::DHP, int + ,typename cs::treiber_stack::make_traits< + cds::opt::enable_elimination + >::type + > Elimination_DHP; + + + typedef cs::TreiberStack< cds::gc::DHP, int + ,typename cs::treiber_stack::make_traits< + cds::opt::enable_elimination + ,cds::opt::buffer< cds::opt::v::dynamic_buffer > + >::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 > + ,cds::opt::stat< cs::treiber_stack::stat<> > + ,cds::opt::enable_elimination + >::type + > Elimination_DHP_stat; + + typedef cs::TreiberStack< cds::gc::DHP, int + , typename cs::treiber_stack::make_traits< + cds::opt::memory_model + ,cds::opt::enable_elimination + >::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 + >::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::enable_elimination + >::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 + >::type + > Elimination_DHP_pause_alloc; + + typedef cs::TreiberStack< cds::gc::DHP, int + , typename cs::treiber_stack::make_traits< + cds::opt::memory_model + ,cds::opt::back_off< cds::backoff::pause> + ,cds::opt::allocator< std::allocator< bool * > > + ,cds::opt::enable_elimination + >::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) + +} diff --git a/tests/test-hdr/stack/hdr_elimination_stack_hp.cpp b/tests/test-hdr/stack/hdr_elimination_stack_hp.cpp index 793e8ac9..4f3b5a38 100644 --- a/tests/test-hdr/stack/hdr_elimination_stack_hp.cpp +++ b/tests/test-hdr/stack/hdr_elimination_stack_hp.cpp @@ -5,7 +5,7 @@ #include namespace stack { -#define TEST(X) void TestStack::X() { test(); } +#define TEST(X) void TestStack::X() { test(); } #define TEST_DYN(X) void TestStack::X() { test_elimination(); } namespace cs = cds::container; @@ -13,47 +13,63 @@ namespace stack { namespace defs { namespace { typedef cs::TreiberStack< cds::gc::HP, int - ,cds::opt::enable_elimination + , typename cs::treiber_stack::make_traits< + cds::opt::enable_elimination + >::type > Elimination_HP; typedef cs::TreiberStack< cds::gc::HP, int - ,cds::opt::enable_elimination - , cds::opt::buffer< cds::opt::v::dynamic_buffer > + , typename cs::treiber_stack::make_traits< + cds::opt::enable_elimination + , cds::opt::buffer< cds::opt::v::dynamic_buffer > + >::type > Elimination_HP_dyn; typedef cs::TreiberStack< cds::gc::HP, int - ,cds::opt::enable_elimination - , cds::opt::buffer< cds::opt::v::dynamic_buffer > - , cds::opt::stat< cs::treiber_stack::stat<> > + , typename cs::treiber_stack::make_traits< + cds::opt::enable_elimination + , cds::opt::buffer< cds::opt::v::dynamic_buffer > + , cds::opt::stat< cs::treiber_stack::stat<> > + >::type > Elimination_HP_stat; typedef cs::TreiberStack< cds::gc::HP, int - ,cds::opt::enable_elimination - , cds::opt::memory_model + , typename cs::treiber_stack::make_traits< + cds::opt::enable_elimination + , cds::opt::memory_model + >::type > Elimination_HP_relaxed; typedef cs::TreiberStack< cds::gc::HP, int - ,cds::opt::enable_elimination - ,cds::opt::back_off< cds::backoff::yield> + , typename cs::treiber_stack::make_traits< + cds::opt::enable_elimination + ,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 - , cds::opt::memory_model + , typename cs::treiber_stack::make_traits< + cds::opt::back_off< cds::backoff::yield> + ,cds::opt::enable_elimination + , cds::opt::memory_model + >::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 + , typename cs::treiber_stack::make_traits< + cds::opt::back_off< cds::backoff::pause> + ,cds::opt::allocator< std::allocator< bool * > > + ,cds::opt::enable_elimination + >::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::allocator< std::allocator< bool * > > - ,cds::opt::enable_elimination + , typename cs::treiber_stack::make_traits< + cds::opt::back_off< cds::backoff::pause> + ,cds::opt::memory_model + ,cds::opt::allocator< std::allocator< bool * > > + ,cds::opt::enable_elimination + >::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 index c5395ab4..00000000 --- a/tests/test-hdr/stack/hdr_elimination_stack_hrc.cpp +++ /dev/null @@ -1,69 +0,0 @@ -//$$CDS-header$$ - -#include "hdr_treiber_stack.h" -#include -#include - -namespace stack { -#define TEST(X) void TestStack::X() { test(); } -#define TEST_DYN(X) void TestStack::X() { test_elimination(); } - - namespace cs = cds::container; - - namespace defs { namespace { - - typedef cs::TreiberStack< cds::gc::HRC, int - ,cds::opt::enable_elimination - > Elimination_HRC; - - typedef cs::TreiberStack< cds::gc::HRC, int - , cds::opt::buffer< cds::opt::v::dynamic_buffer > - ,cds::opt::enable_elimination - > Elimination_HRC_dyn; - - typedef cs::TreiberStack< cds::gc::HRC, int - , cds::opt::buffer< cds::opt::v::dynamic_buffer > - , cds::opt::stat< cs::treiber_stack::stat<> > - ,cds::opt::enable_elimination - > Elimination_HRC_stat; - - typedef cs::TreiberStack< cds::gc::HRC, int - , cds::opt::memory_model - ,cds::opt::enable_elimination - > Elimination_HRC_relaxed; - - typedef cs::TreiberStack< cds::gc::HRC, int - , cds::opt::back_off< cds::backoff::yield> - ,cds::opt::enable_elimination - > Elimination_HRC_yield; - - typedef cs::TreiberStack< cds::gc::HRC, int - ,cds::opt::back_off< cds::backoff::yield> - ,cds::opt::memory_model - ,cds::opt::enable_elimination - > 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 - > Elimination_HRC_pause_alloc; - - typedef cs::TreiberStack< cds::gc::HRC, int - ,cds::opt::back_off< cds::backoff::pause> - ,cds::opt::memory_model - ,cds::opt::enable_elimination - ,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 index 27aa334d..00000000 --- a/tests/test-hdr/stack/hdr_elimination_stack_ptb.cpp +++ /dev/null @@ -1,69 +0,0 @@ -//$$CDS-header$$ - -#include "hdr_treiber_stack.h" -#include -#include - -namespace stack { -#define TEST(X) void TestStack::X() { test(); } -#define TEST_DYN(X) void TestStack::X() { test_elimination(); } - namespace cs = cds::container; - - namespace defs { namespace { - - typedef cs::TreiberStack< cds::gc::PTB, int - ,cds::opt::enable_elimination - > Elimination_PTB; - - typedef cs::TreiberStack< cds::gc::PTB, int - ,cds::opt::enable_elimination - , cds::opt::buffer< cds::opt::v::dynamic_buffer > - > Elimination_PTB_dyn; - - typedef cs::TreiberStack< cds::gc::PTB, int - , cds::opt::buffer< cds::opt::v::dynamic_buffer > - , cds::opt::stat< cs::treiber_stack::stat<> > - ,cds::opt::enable_elimination - > Elimination_PTB_stat; - - typedef cs::TreiberStack< cds::gc::PTB, int - , cds::opt::memory_model - ,cds::opt::enable_elimination - > Elimination_PTB_relaxed; - - typedef cs::TreiberStack< cds::gc::PTB, int - , cds::opt::back_off< cds::backoff::yield> - ,cds::opt::enable_elimination - > Elimination_PTB_yield; - - typedef cs::TreiberStack< cds::gc::PTB, int - ,cds::opt::back_off< cds::backoff::yield> - ,cds::opt::memory_model - ,cds::opt::enable_elimination - > 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 - > Elimination_PTB_pause_alloc; - - typedef cs::TreiberStack< cds::gc::PTB, int - ,cds::opt::memory_model - ,cds::opt::back_off< cds::backoff::pause> - ,cds::opt::allocator< std::allocator< bool * > > - ,cds::opt::enable_elimination - > 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_ptb.cpp b/tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp similarity index 58% rename from tests/test-hdr/stack/hdr_intrusive_elimination_stack_ptb.cpp rename to tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp index 351f55bb..7ad4c173 100644 --- a/tests/test-hdr/stack/hdr_intrusive_elimination_stack_ptb.cpp +++ b/tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp @@ -1,7 +1,7 @@ //$$CDS-header$$ #include "hdr_intrusive_treiber_stack.h" -#include +#include #include namespace stack { @@ -10,147 +10,147 @@ namespace stack { #define TEST_DYN(X) void TestIntrusiveStack::X() { test_elimination(); } namespace defs { - // PTB GC + base hook - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::base_hook_item + // DHP GC + base hook + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::base_hook_item , typename ci::treiber_stack::make_traits< cds::opt::enable_elimination ,ci::opt::hook< - ci::single_link::base_hook< ci::opt::gc > + ci::single_link::base_hook< ci::opt::gc > > >::type - > Elimination_PTB_base; + > Elimination_DHP_base; - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::base_hook_item + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::base_hook_item , typename ci::treiber_stack::make_traits< ci::opt::hook< - ci::single_link::base_hook< ci::opt::gc > + ci::single_link::base_hook< ci::opt::gc > > ,cds::opt::enable_elimination ,ci::opt::buffer< ci::opt::v::dynamic_buffer > >::type - > Elimination_PTB_base_dyn; + > Elimination_DHP_base_dyn; - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::base_hook_item + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::base_hook_item , typename ci::treiber_stack::make_traits< ci::opt::hook< - ci::single_link::base_hook< ci::opt::gc > + ci::single_link::base_hook< ci::opt::gc > > ,cds::opt::enable_elimination ,ci::opt::memory_model< ci::opt::v::relaxed_ordering > >::type - > Elimination_PTB_base_relaxed; + > Elimination_DHP_base_relaxed; - // PTB GC + base hook + disposer - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::base_hook_item + // DHP GC + base hook + disposer + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::base_hook_item , typename ci::treiber_stack::make_traits< ci::opt::hook< - ci::single_link::base_hook< ci::opt::gc > + ci::single_link::base_hook< ci::opt::gc > > ,cds::opt::enable_elimination ,ci::opt::disposer< TestIntrusiveStack::faked_disposer > >::type - > Elimination_PTB_base_disposer; + > Elimination_DHP_base_disposer; - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::base_hook_item + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::base_hook_item , typename ci::treiber_stack::make_traits< ci::opt::hook< - ci::single_link::base_hook< ci::opt::gc > + ci::single_link::base_hook< ci::opt::gc > > ,cds::opt::enable_elimination ,ci::opt::disposer< TestIntrusiveStack::faked_disposer > ,ci::opt::memory_model< ci::opt::v::relaxed_ordering > >::type - > Elimination_PTB_base_disposer_relaxed; + > Elimination_DHP_base_disposer_relaxed; - // PTB GC + member hook - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::member_hook_item + // DHP GC + member hook + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::member_hook_item , typename ci::treiber_stack::make_traits< ci::opt::hook< ci::single_link::member_hook< - offsetof(TestIntrusiveStack::member_hook_item, hMember), - ci::opt::gc + offsetof(TestIntrusiveStack::member_hook_item, hMember), + ci::opt::gc > > ,cds::opt::enable_elimination >::type - > Elimination_PTB_member; + > Elimination_DHP_member; - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::member_hook_item + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::member_hook_item , typename ci::treiber_stack::make_traits< ci::opt::hook< ci::single_link::member_hook< - offsetof(TestIntrusiveStack::member_hook_item, hMember), - ci::opt::gc + offsetof(TestIntrusiveStack::member_hook_item, hMember), + ci::opt::gc > > ,cds::opt::enable_elimination ,ci::opt::buffer< ci::opt::v::dynamic_buffer > >::type - > Elimination_PTB_member_dyn; + > Elimination_DHP_member_dyn; - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::member_hook_item + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::member_hook_item , typename ci::treiber_stack::make_traits< ci::opt::hook< ci::single_link::member_hook< - offsetof(TestIntrusiveStack::member_hook_item, hMember), - ci::opt::gc + offsetof(TestIntrusiveStack::member_hook_item, hMember), + ci::opt::gc > > ,cds::opt::enable_elimination ,ci::opt::memory_model< ci::opt::v::relaxed_ordering > >::type - > Elimination_PTB_member_relaxed; + > Elimination_DHP_member_relaxed; - // PTB GC + member hook + disposer - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::member_hook_item + // DHP GC + member hook + disposer + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::member_hook_item , typename ci::treiber_stack::make_traits< ci::opt::hook< ci::single_link::member_hook< - offsetof(TestIntrusiveStack::member_hook_item, hMember), - ci::opt::gc + offsetof(TestIntrusiveStack::member_hook_item, hMember), + ci::opt::gc > > ,cds::opt::enable_elimination ,ci::opt::disposer< TestIntrusiveStack::faked_disposer > >::type - > Elimination_PTB_member_disposer; + > Elimination_DHP_member_disposer; - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::member_hook_item + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::member_hook_item , typename ci::treiber_stack::make_traits< ci::opt::hook< ci::single_link::member_hook< - offsetof(TestIntrusiveStack::member_hook_item, hMember), - ci::opt::gc + offsetof(TestIntrusiveStack::member_hook_item, hMember), + ci::opt::gc > > ,cds::opt::enable_elimination ,ci::opt::disposer< TestIntrusiveStack::faked_disposer > ,ci::opt::memory_model< ci::opt::v::relaxed_ordering > >::type - > Elimination_PTB_member_disposer_relaxed; + > Elimination_DHP_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) + 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_treiber_stack.h b/tests/test-hdr/stack/hdr_intrusive_treiber_stack.h index 6e86196f..1370d152 100644 --- a/tests/test-hdr/stack/hdr_intrusive_treiber_stack.h +++ b/tests/test-hdr/stack/hdr_intrusive_treiber_stack.h @@ -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_ptb.cpp b/tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp similarity index 55% rename from tests/test-hdr/stack/hdr_intrusive_treiber_stack_ptb.cpp rename to tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp index b1cdb519..37a90bdf 100644 --- a/tests/test-hdr/stack/hdr_intrusive_treiber_stack_ptb.cpp +++ b/tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp @@ -9,112 +9,112 @@ namespace stack { #define TEST(X) void TestIntrusiveStack::X() { test(); } namespace defs { - // PTB GC + base hook - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::base_hook_item + // DHP GC + base hook + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::base_hook_item ,typename ci::treiber_stack::make_traits< ci::opt::hook< - ci::single_link::base_hook< ci::opt::gc > + ci::single_link::base_hook< ci::opt::gc > > >::type - > Treiber_PTB_base; + > Treiber_DHP_base; - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::base_hook_item + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::base_hook_item ,typename ci::treiber_stack::make_traits< ci::opt::hook< - ci::single_link::base_hook< ci::opt::gc > + ci::single_link::base_hook< ci::opt::gc > > ,ci::opt::memory_model< ci::opt::v::relaxed_ordering > >::type - > Treiber_PTB_base_relaxed; + > Treiber_DHP_base_relaxed; - // PTB GC + base hook + disposer - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::base_hook_item + // DHP GC + base hook + disposer + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::base_hook_item ,typename ci::treiber_stack::make_traits< ci::opt::hook< - ci::single_link::base_hook< ci::opt::gc > + ci::single_link::base_hook< ci::opt::gc > > ,ci::opt::disposer< TestIntrusiveStack::faked_disposer > >::type - > Treiber_PTB_base_disposer; + > Treiber_DHP_base_disposer; - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::base_hook_item + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::base_hook_item ,typename ci::treiber_stack::make_traits< ci::opt::hook< - ci::single_link::base_hook< ci::opt::gc > + ci::single_link::base_hook< ci::opt::gc > > ,ci::opt::disposer< TestIntrusiveStack::faked_disposer > ,ci::opt::memory_model< ci::opt::v::relaxed_ordering > >::type - > Treiber_PTB_base_disposer_relaxed; + > Treiber_DHP_base_disposer_relaxed; - // PTB GC + member hook - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::member_hook_item + // DHP GC + member hook + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::member_hook_item ,typename ci::treiber_stack::make_traits< ci::opt::hook< ci::single_link::member_hook< - offsetof(TestIntrusiveStack::member_hook_item, hMember), - ci::opt::gc + offsetof(TestIntrusiveStack::member_hook_item, hMember), + ci::opt::gc > > >::type - > Treiber_PTB_member; + > Treiber_DHP_member; - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::member_hook_item + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::member_hook_item ,typename ci::treiber_stack::make_traits< ci::opt::hook< ci::single_link::member_hook< - offsetof(TestIntrusiveStack::member_hook_item, hMember), - ci::opt::gc + offsetof(TestIntrusiveStack::member_hook_item, hMember), + ci::opt::gc > > ,ci::opt::memory_model< ci::opt::v::relaxed_ordering > >::type - > Treiber_PTB_member_relaxed; + > Treiber_DHP_member_relaxed; - // PTB GC + member hook + disposer - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::member_hook_item + // DHP GC + member hook + disposer + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::member_hook_item , typename ci::treiber_stack::make_traits< ci::opt::hook< ci::single_link::member_hook< - offsetof(TestIntrusiveStack::member_hook_item, hMember), - ci::opt::gc + offsetof(TestIntrusiveStack::member_hook_item, hMember), + ci::opt::gc > > ,ci::opt::disposer< TestIntrusiveStack::faked_disposer > >::type - > Treiber_PTB_member_disposer; + > Treiber_DHP_member_disposer; - typedef cds::intrusive::TreiberStack< cds::gc::PTB, - TestIntrusiveStack::member_hook_item + typedef cds::intrusive::TreiberStack< cds::gc::DHP, + TestIntrusiveStack::member_hook_item , typename ci::treiber_stack::make_traits< ci::opt::hook< ci::single_link::member_hook< - offsetof(TestIntrusiveStack::member_hook_item, hMember), - ci::opt::gc + offsetof(TestIntrusiveStack::member_hook_item, hMember), + ci::opt::gc > > ,ci::opt::disposer< TestIntrusiveStack::faked_disposer > ,ci::opt::memory_model< ci::opt::v::relaxed_ordering > >::type - > Treiber_PTB_member_disposer_relaxed; + > Treiber_DHP_member_disposer_relaxed; } - TEST(Treiber_PTB_base) - TEST(Treiber_PTB_base_disposer) - TEST(Treiber_PTB_member) - TEST(Treiber_PTB_member_disposer) + TEST(Treiber_DHP_base) + TEST(Treiber_DHP_base_disposer) + TEST(Treiber_DHP_member) + TEST(Treiber_DHP_member_disposer) - TEST(Treiber_PTB_base_relaxed) - TEST(Treiber_PTB_base_disposer_relaxed) - TEST(Treiber_PTB_member_relaxed) - TEST(Treiber_PTB_member_disposer_relaxed) + 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_treiber_stack.h b/tests/test-hdr/stack/hdr_treiber_stack.h index 51ad47e9..33e43b76 100644 --- a/tests/test-hdr/stack/hdr_treiber_stack.h +++ b/tests/test-hdr/stack/hdr_treiber_stack.h @@ -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 index 00000000..9a5ca198 --- /dev/null +++ b/tests/test-hdr/stack/hdr_treiber_stack_dhp.cpp @@ -0,0 +1,57 @@ +//$$CDS-header$$ + +#include "hdr_treiber_stack.h" +#include +#include + +namespace stack { +#define TEST(X) void TestStack::X() { test(); } + 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 + >::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 + >::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::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) + +} diff --git a/tests/test-hdr/stack/hdr_treiber_stack_hp.cpp b/tests/test-hdr/stack/hdr_treiber_stack_hp.cpp index cbd4a422..aafc28e0 100644 --- a/tests/test-hdr/stack/hdr_treiber_stack_hp.cpp +++ b/tests/test-hdr/stack/hdr_treiber_stack_hp.cpp @@ -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 > 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 + , typename cs::treiber_stack::make_traits< + cds::opt::memory_model + >::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 + >::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::allocator< std::allocator< unsigned long > > + , typename cs::treiber_stack::make_traits< + cds::opt::back_off< cds::backoff::pause> + ,cds::opt::memory_model + ,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 index 59145679..00000000 --- a/tests/test-hdr/stack/hdr_treiber_stack_hrc.cpp +++ /dev/null @@ -1,41 +0,0 @@ -//$$CDS-header$$ - -#include "hdr_treiber_stack.h" -#include -#include - -namespace stack { -#define TEST(X) void TestStack::X() { test(); } - 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 > 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 - > 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::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 index 79478345..00000000 --- a/tests/test-hdr/stack/hdr_treiber_stack_ptb.cpp +++ /dev/null @@ -1,42 +0,0 @@ -//$$CDS-header$$ - -#include "hdr_treiber_stack.h" -#include -#include - -namespace stack { -#define TEST(X) void TestStack::X() { test(); } - 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 > 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 - > 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::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) - -} diff --git a/tests/unit/stack/intrusive_stack_defs.h b/tests/unit/stack/intrusive_stack_defs.h index 21a5f7f2..fc57127d 100644 --- a/tests/unit/stack/intrusive_stack_defs.h +++ b/tests/unit/stack/intrusive_stack_defs.h @@ -10,16 +10,12 @@ 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 ) \ @@ -28,16 +24,11 @@ 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 > ) \ @@ -54,26 +45,19 @@ 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 ) \ @@ -90,78 +74,19 @@ 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 ) \ - TEST_BOUNDED( MichaelDequeL_HP_seqcst, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeL_HP_ic, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeL_HP_exp, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeL_HP_yield, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeL_HP_stat, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeL_PTB, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeL_PTB_seqcst, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeL_PTB_ic, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeL_PTB_exp, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeL_PTB_yield, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeL_PTB_stat, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_HP, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_HP_seqcst, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_HP_ic, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_HP_exp, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_HP_yield, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_HP_stat, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_PTB, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_PTB_seqcst, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_PTB_ic, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_PTB_exp, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_PTB_yield, cds::intrusive::michael_deque::node ) \ - TEST_BOUNDED( MichaelDequeR_PTB_stat, cds::intrusive::michael_deque::node ) - -#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<> ) \ diff --git a/tests/unit/stack/intrusive_stack_type.h b/tests/unit/stack/intrusive_stack_type.h index 4cb823af..2a32cb43 100644 --- a/tests/unit/stack/intrusive_stack_type.h +++ b/tests/unit/stack/intrusive_stack_type.h @@ -7,8 +7,7 @@ #include #include -#include -#include +#include #include #include @@ -67,330 +66,209 @@ namespace istack { template struct Types { + template + 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 - > 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 > - > 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 > - > 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 > - > 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::opt::memory_model - > 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 - > 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 - > 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::opt::memory_model - > 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 - > 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 - > 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 > + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::PTB, T, traits_Treiber_DHP >Treiber_PTB; + + template struct traits_Treiber_seqcst : public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::memory_model + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_seqcst > Treiber_HP_seqcst; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst > Treiber_DHP_seqcst; + + template struct traits_Treiber_stat: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::stat > + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_stat > Treiber_HP_stat; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat > Treiber_DHP_stat; + + template struct traits_Treiber_yield: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::back_off + , cds::opt::memory_model + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_yield > Treiber_HP_yield; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield > Treiber_DHP_yield; + + template struct traits_Treiber_pause: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::back_off + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_pause > Treiber_HP_pause; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause > Treiber_DHP_pause; + + template struct traits_Treiber_exp: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + ,cds::opt::back_off< + cds::backoff::exponential< + cds::backoff::pause, + cds::backoff::yield + > > - > - ,cds::opt::memory_model - > Treiber_PTB_exp; + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_exp > Treiber_HP_exp; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp > 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 - > 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 - ,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 - ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> > - ,cds::opt::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 - ,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 - ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> > - ,cds::opt::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 - ,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 - ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> > - ,cds::opt::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 - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > 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 - ,cds::opt::memory_model - > 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 - ,cds::opt::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 - ,cds::opt::stat > - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > 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 - > 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 - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > 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 - ,cds::opt::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 - ,cds::opt::stat > - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > 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 - ,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 - ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> > - ,cds::opt::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 - ,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 - ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> > - ,cds::opt::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 - ,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 - ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> > - ,cds::opt::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 - > 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 - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > 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 - ,cds::opt::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 - ,cds::opt::stat > - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > 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 - ,cds::opt::back_off - ,cds::opt::memory_model - > 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 - ,cds::opt::back_off - > 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 - ,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 - ,cds::opt::back_off - > 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 - ,cds::opt::back_off - ,cds::opt::memory_model - > 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 - ,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 - ,cds::opt::back_off - > 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 - ,cds::opt::back_off - > 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 - ,cds::opt::back_off< - cds::backoff::exponential< - cds::backoff::pause, - cds::backoff::yield + template struct traits_Elimination_on : public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_on > Elimination_HP; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_on > Elimination_DHP; + + template struct traits_Elimination_2ms: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + , cds::opt::elimination_backoff< cds::backoff::delay_of<2> > + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_2ms > Elimination_HP_2ms; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms > Elimination_DHP_2ms; + + template struct traits_Elimination_2ms_stat: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + , cds::opt::elimination_backoff< cds::backoff::delay_of<2> > + , cds::opt::stat > + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_2ms_stat > Elimination_HP_2ms_stat; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat > Elimination_DHP_2ms_stat; + + template struct traits_Elimination_5ms: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + , cds::opt::elimination_backoff< cds::backoff::delay_of<5> > + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_5ms > Elimination_HP_5ms; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms > Elimination_DHP_5ms; + + template struct traits_Elimination_5ms_stat: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + , cds::opt::elimination_backoff< cds::backoff::delay_of<5> > + , cds::opt::stat > + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_5ms_stat > Elimination_HP_5ms_stat; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat > Elimination_DHP_5ms_stat; + + template struct traits_Elimination_10ms: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + , cds::opt::elimination_backoff< cds::backoff::delay_of<10> > + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_10ms > Elimination_HP_10ms; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms > Elimination_DHP_10ms; + + template struct traits_Elimination_10ms_stat: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + , cds::opt::elimination_backoff< cds::backoff::delay_of<10> > + , cds::opt::stat > + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_10ms_stat > Elimination_HP_10ms_stat; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat > Elimination_DHP_10ms_stat; + + template struct traits_Elimination_dyn: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + , cds::opt::buffer< cds::opt::v::dynamic_buffer > + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_dyn > Elimination_HP_dyn; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn > Elimination_DHP_dyn; + + template struct traits_Elimination_stat: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + , cds::opt::stat > + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_stat > Elimination_HP_stat; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat > Elimination_DHP_stat; + + template struct traits_Elimination_dyn_stat: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + , cds::opt::buffer< cds::opt::v::dynamic_buffer > + , cds::opt::stat > + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_dyn_stat > Elimination_HP_dyn_stat; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat > Elimination_DHP_dyn_stat; + + template struct traits_Elimination_yield: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + , cds::opt::back_off + , cds::opt::memory_model + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_yield > Elimination_HP_yield; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield > Elimination_DHP_yield; + + template struct traits_Elimination_pause: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + , cds::opt::back_off + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_pause > Elimination_HP_pause; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause > Elimination_DHP_pause; + + template struct traits_Elimination_exp: public + cds::intrusive::treiber_stack::make_traits < + cds::intrusive::opt::hook< base_hook > + , cds::opt::enable_elimination + ,cds::opt::back_off< + cds::backoff::exponential< + cds::backoff::pause, + cds::backoff::yield + > > - > - ,cds::opt::memory_model - > Elimination_PTB_exp; + > ::type + {}; + typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_exp > Elimination_HP_exp; + typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp > Elimination_DHP_exp; // FCStack typedef cds::intrusive::FCStack< T > FCStack_slist; diff --git a/tests/unit/stack/stack_defs.h b/tests/unit/stack/stack_defs.h index b39e0549..cce699e5 100644 --- a/tests/unit/stack/stack_defs.h +++ b/tests/unit/stack/stack_defs.h @@ -10,16 +10,11 @@ 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 ) \ @@ -28,16 +23,11 @@ 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 ) \ @@ -54,26 +44,19 @@ 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 ) \ @@ -90,78 +73,20 @@ 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 ) \ diff --git a/tests/unit/stack/stack_type.h b/tests/unit/stack/stack_type.h index 444f4230..4aa4423a 100644 --- a/tests/unit/stack/stack_type.h +++ b/tests/unit/stack/stack_type.h @@ -8,8 +8,7 @@ #include #include -#include -#include +#include #include #include @@ -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 - > Treiber_HP_seqcst; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::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 > - > Treiber_HRC_stat; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - > Treiber_PTB; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::stat > - > Treiber_PTB_stat; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::back_off - ,cds::opt::memory_model - > Treiber_HP_yield; - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::back_off - > 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 - > Treiber_HRC_yield; - typedef cds::container::TreiberStack< cds::gc::HRC, T - ,cds::opt::back_off - ,cds::opt::memory_model - > 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 - > Treiber_PTB_yield; - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::back_off - > 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 + >::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 > + >::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::opt::memory_model + >::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 + >::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 - > 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 - > Elimination_HP; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> > - > Elimination_HP_2ms; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> > - ,cds::opt::stat > - > Elimination_HP_2ms_stat; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> > - > Elimination_HP_5ms; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> > - ,cds::opt::stat > - > Elimination_HP_5ms_stat; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> > - > Elimination_HP_10ms; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> > - ,cds::opt::stat > - > Elimination_HP_10ms_stat; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > Elimination_HP_dyn; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::memory_model - > Elimination_HP_seqcst; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::stat > - > Elimination_HP_stat; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::stat > - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > Elimination_HP_dyn_stat; - - typedef cds::container::TreiberStack< cds::gc::HRC, T - ,cds::opt::enable_elimination - > Elimination_HRC; - - typedef cds::container::TreiberStack< cds::gc::HRC, T - ,cds::opt::enable_elimination - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > Elimination_HRC_dyn; - - typedef cds::container::TreiberStack< cds::gc::HRC, T - ,cds::opt::enable_elimination - ,cds::opt::stat > - > Elimination_HRC_stat; - - typedef cds::container::TreiberStack< cds::gc::HRC, T - ,cds::opt::enable_elimination - ,cds::opt::stat > - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > Elimination_HRC_dyn_stat; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> > - > Elimination_PTB_2ms; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> > - ,cds::opt::stat > - > Elimination_PTB_2ms_stat; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> > - > Elimination_PTB_5ms; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> > - ,cds::opt::stat > - > Elimination_PTB_5ms_stat; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> > - > Elimination_PTB_10ms; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> > - ,cds::opt::stat > - > Elimination_PTB_10ms_stat; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - > Elimination_PTB; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > Elimination_PTB_dyn; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - ,cds::opt::stat > - > Elimination_PTB_stat; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - ,cds::opt::stat > - ,cds::opt::buffer< cds::opt::v::dynamic_buffer > - > Elimination_PTB_dyn_stat; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::back_off - ,cds::opt::memory_model - > Elimination_HP_yield; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,cds::opt::back_off - > Elimination_HP_pause; - - typedef cds::container::TreiberStack< cds::gc::HP, T - ,cds::opt::enable_elimination - ,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 - ,cds::opt::back_off - > Elimination_HRC_yield; - - typedef cds::container::TreiberStack< cds::gc::HRC, T - ,cds::opt::enable_elimination - ,cds::opt::back_off - ,cds::opt::memory_model - > Elimination_HRC_pause; - - typedef cds::container::TreiberStack< cds::gc::HRC, T - ,cds::opt::enable_elimination - ,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 - ,cds::opt::back_off - > Elimination_PTB_yield; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - ,cds::opt::back_off - > Elimination_PTB_pause; - - typedef cds::container::TreiberStack< cds::gc::PTB, T - ,cds::opt::enable_elimination - ,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 + > ::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 + ,cds::opt::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 + ,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 + , cds::opt::elimination_backoff< cds::backoff::delay_of<2> > + , cds::opt::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 + , 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 + , cds::opt::elimination_backoff< cds::backoff::delay_of<5> > + , cds::opt::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 + , 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 + , cds::opt::elimination_backoff< cds::backoff::delay_of<10> > + , cds::opt::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 + , cds::opt::buffer< cds::opt::v::dynamic_buffer > + > ::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 + , cds::opt::memory_model + > ::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 + , cds::opt::stat > + , cds::opt::buffer< cds::opt::v::dynamic_buffer > + > ::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 + , cds::opt::back_off + , cds::opt::memory_model + > ::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 + , cds::opt::back_off + > ::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 + ,cds::opt::back_off< + cds::backoff::exponential< + cds::backoff::pause, + cds::backoff::yield + > > - > - ,cds::opt::memory_model - > 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; } -- 2.34.1