~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));
return false;
}
- /// Pop an item from the stack
+ /// Pops an item from the stack
/**
- The value of popped item is stored in \p val.
+ The value of popped item is stored in \p val using assignment operator.
On success functions returns \p true, \p val contains value popped from the stack.
If stack is empty the function returns \p false, \p val is unchanged.
*/
bool pop( value_type& val )
+ {
+ return pop_with( [&val]( value_type& src ) { val = src; } );
+ }
+
+ /// Pops an item from the stack with functor
+ /**
+ \p Func interface is:
+ \code
+ void func( value_type& src );
+ \endcond
+ where \p src - item popped.
+
+ The \p %pop_with can be used to move item from the stack to user-provided storage:
+ \code
+ cds::container::TreiberStack<cds::gc::HP, std::string > myStack;
+ //...
+
+ std::string dest;
+ myStack.pop_with( [&dest]( std::string& src ) { dest = std::move( src ); } );
+ \endcode
+ */
+ template <typename Func>
+ bool pop_with( Func f )
{
node_type * p = base_class::pop();
if ( !p )
return false;
- val = p->m_value;
+ f( p->m_value );
retire_node( p );
return true;
--- /dev/null
+//$$CDS-header$$
+
+#ifndef __CDS_GC_DHP_H
+#define __CDS_GC_DHP_H
+
+#include <cds/gc/ptb.h>
+
+//@cond
+namespace cds { namespace gc {
+ typedef PTB DHP;
+}} // namespace cds::gc
+//@endcond
+
+#endif // #ifndef __CDS_GC_DHP_H
<ClInclude Include="..\..\..\cds\details\lib.h" />\r
<ClInclude Include="..\..\..\cds\details\static_functor.h" />\r
<ClInclude Include="..\..\..\cds\gc\all.h" />\r
+ <ClInclude Include="..\..\..\cds\gc\dhp.h" />\r
<ClInclude Include="..\..\..\cds\gc\exception.h" />\r
<ClInclude Include="..\..\..\cds\gc\gc_fwd.h" />\r
<ClInclude Include="..\..\..\cds\gc\guarded_ptr.h" />\r
<ClInclude Include="..\..\..\cds\container\details\split_list_base.h">\r
<Filter>Header Files\cds\container\details</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\cds\gc\dhp.h">\r
+ <Filter>Header Files\cds\gc</Filter>\r
+ </ClInclude>\r
</ItemGroup>\r
</Project>
\ No newline at end of file
<ClInclude Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack.h" />\r
</ItemGroup>\r
<ItemGroup>\r
+ <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_dhp.cpp" />\r
<ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_hrc.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_ptb.cpp" />\r
<ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_fcstack.cpp" />\r
+ <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_elimination_stack_dhp.cpp" />\r
<ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_elimination_stack_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_elimination_stack_ptb.cpp" />\r
<ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_fcstack.cpp" />\r
+ <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack_dhp.cpp" />\r
<ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack_ptb.cpp" />\r
+ <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_dhp.cpp" />\r
<ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_hrc.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_ptb.cpp" />\r
</ItemGroup>\r
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
<ImportGroup Label="ExtensionTargets">\r
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 := \
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 \
--- /dev/null
+//$$CDS-header$$
+
+#include "hdr_treiber_stack.h"
+#include <cds/gc/dhp.h>
+#include <cds/container/treiber_stack.h>
+
+namespace stack {
+#define TEST(X) void TestStack::X() { test<defs::X>(); }
+#define TEST_DYN(X) void TestStack::X() { test_elimination<defs::X>(); }
+ namespace cs = cds::container;
+
+ namespace defs { namespace {
+
+ typedef cs::TreiberStack< cds::gc::DHP, int
+ ,typename cs::treiber_stack::make_traits<
+ cds::opt::enable_elimination<true>
+ >::type
+ > Elimination_DHP;
+
+
+ typedef cs::TreiberStack< cds::gc::DHP, int
+ ,typename cs::treiber_stack::make_traits<
+ cds::opt::enable_elimination<true>
+ ,cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
+ >::type
+ > Elimination_DHP_dyn;
+
+ typedef cs::TreiberStack< cds::gc::DHP, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+ ,cds::opt::stat< cs::treiber_stack::stat<> >
+ ,cds::opt::enable_elimination<true>
+ >::type
+ > Elimination_DHP_stat;
+
+ typedef cs::TreiberStack< cds::gc::DHP, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ ,cds::opt::enable_elimination<true>
+ >::type
+ > Elimination_DHP_relaxed;
+
+ typedef cs::TreiberStack< cds::gc::DHP, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::yield>
+ ,cds::opt::enable_elimination<true>
+ >::type
+ > Elimination_DHP_yield;
+
+ typedef cs::TreiberStack< cds::gc::DHP, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::yield>
+ ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ ,cds::opt::enable_elimination<true>
+ >::type
+ > Elimination_DHP_yield_relaxed;
+
+ typedef cs::TreiberStack< cds::gc::DHP, int
+ , typename cs::treiber_stack::make_traits<
+ ,cds::opt::back_off< cds::backoff::pause>
+ ,cds::opt::allocator< std::allocator< bool * > >
+ ,cds::opt::enable_elimination<true>
+ >::type
+ > Elimination_DHP_pause_alloc;
+
+ typedef cs::TreiberStack< cds::gc::DHP, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ ,cds::opt::back_off< cds::backoff::pause>
+ ,cds::opt::allocator< std::allocator< bool * > >
+ ,cds::opt::enable_elimination<true>
+ >::type
+ > Elimination_DHP_pause_alloc_relaxed;
+ }}
+
+ TEST(Elimination_DHP)
+ TEST_DYN(Elimination_DHP_dyn)
+ TEST_DYN(Elimination_DHP_stat)
+ TEST(Elimination_DHP_yield)
+ TEST(Elimination_DHP_pause_alloc)
+
+ TEST(Elimination_DHP_relaxed)
+ TEST(Elimination_DHP_yield_relaxed)
+ TEST(Elimination_DHP_pause_alloc_relaxed)
+
+}
#include <cds/container/treiber_stack.h>
namespace stack {
-#define TEST(X) void TestStack::X() { test<defs::X>(); }
+#define TEST(X) void TestStack::X() { test<defs::X>(); }
#define TEST_DYN(X) void TestStack::X() { test_elimination<defs::X>(); }
namespace cs = cds::container;
namespace defs { namespace {
typedef cs::TreiberStack< cds::gc::HP, int
- ,cds::opt::enable_elimination<true>
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::enable_elimination<true>
+ >::type
> Elimination_HP;
typedef cs::TreiberStack< cds::gc::HP, int
- ,cds::opt::enable_elimination<true>
- , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::enable_elimination<true>
+ , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
+ >::type
> Elimination_HP_dyn;
typedef cs::TreiberStack< cds::gc::HP, int
- ,cds::opt::enable_elimination<true>
- , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
- , cds::opt::stat< cs::treiber_stack::stat<> >
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::enable_elimination<true>
+ , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
+ , cds::opt::stat< cs::treiber_stack::stat<> >
+ >::type
> Elimination_HP_stat;
typedef cs::TreiberStack< cds::gc::HP, int
- ,cds::opt::enable_elimination<true>
- , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::enable_elimination<true>
+ , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ >::type
> Elimination_HP_relaxed;
typedef cs::TreiberStack< cds::gc::HP, int
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off< cds::backoff::yield>
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::enable_elimination<true>
+ ,cds::opt::back_off< cds::backoff::yield>
+ >::type
> Elimination_HP_yield;
typedef cs::TreiberStack< cds::gc::HP, int
- , cds::opt::back_off< cds::backoff::yield>
- ,cds::opt::enable_elimination<true>
- , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::yield>
+ ,cds::opt::enable_elimination<true>
+ , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ >::type
> Elimination_HP_yield_relaxed;
typedef cs::TreiberStack< cds::gc::HP, int
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::allocator< std::allocator< bool * > >
- ,cds::opt::enable_elimination<true>
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::pause>
+ ,cds::opt::allocator< std::allocator< bool * > >
+ ,cds::opt::enable_elimination<true>
+ >::type
> Elimination_HP_pause_alloc;
typedef cs::TreiberStack< cds::gc::HP, int
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- ,cds::opt::allocator< std::allocator< bool * > >
- ,cds::opt::enable_elimination<true>
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::pause>
+ ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ ,cds::opt::allocator< std::allocator< bool * > >
+ ,cds::opt::enable_elimination<true>
+ >::type
> Elimination_HP_pause_alloc_relaxed;
}}
+++ /dev/null
-//$$CDS-header$$
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/hrc.h>
-#include <cds/container/treiber_stack.h>
-
-namespace stack {
-#define TEST(X) void TestStack::X() { test<defs::X>(); }
-#define TEST_DYN(X) void TestStack::X() { test_elimination<defs::X>(); }
-
- namespace cs = cds::container;
-
- namespace defs { namespace {
-
- typedef cs::TreiberStack< cds::gc::HRC, int
- ,cds::opt::enable_elimination<true>
- > Elimination_HRC;
-
- typedef cs::TreiberStack< cds::gc::HRC, int
- , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
- ,cds::opt::enable_elimination<true>
- > Elimination_HRC_dyn;
-
- typedef cs::TreiberStack< cds::gc::HRC, int
- , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
- , cds::opt::stat< cs::treiber_stack::stat<> >
- ,cds::opt::enable_elimination<true>
- > Elimination_HRC_stat;
-
- typedef cs::TreiberStack< cds::gc::HRC, int
- , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- ,cds::opt::enable_elimination<true>
- > Elimination_HRC_relaxed;
-
- typedef cs::TreiberStack< cds::gc::HRC, int
- , cds::opt::back_off< cds::backoff::yield>
- ,cds::opt::enable_elimination<true>
- > Elimination_HRC_yield;
-
- typedef cs::TreiberStack< cds::gc::HRC, int
- ,cds::opt::back_off< cds::backoff::yield>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- ,cds::opt::enable_elimination<true>
- > Elimination_HRC_yield_relaxed;
-
- typedef cs::TreiberStack< cds::gc::HRC, int
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::allocator< std::allocator< bool * > >
- ,cds::opt::enable_elimination<true>
- > Elimination_HRC_pause_alloc;
-
- typedef cs::TreiberStack< cds::gc::HRC, int
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- ,cds::opt::enable_elimination<true>
- ,cds::opt::allocator< std::allocator< bool * > >
- > Elimination_HRC_pause_alloc_relaxed;
- }}
-
- TEST(Elimination_HRC)
- TEST_DYN(Elimination_HRC_dyn)
- TEST_DYN(Elimination_HRC_stat)
- TEST(Elimination_HRC_yield)
- TEST(Elimination_HRC_pause_alloc)
-
- TEST(Elimination_HRC_relaxed)
- TEST(Elimination_HRC_yield_relaxed)
- TEST(Elimination_HRC_pause_alloc_relaxed)
-}
+++ /dev/null
-//$$CDS-header$$
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/ptb.h>
-#include <cds/container/treiber_stack.h>
-
-namespace stack {
-#define TEST(X) void TestStack::X() { test<defs::X>(); }
-#define TEST_DYN(X) void TestStack::X() { test_elimination<defs::X>(); }
- namespace cs = cds::container;
-
- namespace defs { namespace {
-
- typedef cs::TreiberStack< cds::gc::PTB, int
- ,cds::opt::enable_elimination<true>
- > Elimination_PTB;
-
- typedef cs::TreiberStack< cds::gc::PTB, int
- ,cds::opt::enable_elimination<true>
- , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
- > Elimination_PTB_dyn;
-
- typedef cs::TreiberStack< cds::gc::PTB, int
- , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- , cds::opt::stat< cs::treiber_stack::stat<> >
- ,cds::opt::enable_elimination<true>
- > Elimination_PTB_stat;
-
- typedef cs::TreiberStack< cds::gc::PTB, int
- , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- ,cds::opt::enable_elimination<true>
- > Elimination_PTB_relaxed;
-
- typedef cs::TreiberStack< cds::gc::PTB, int
- , cds::opt::back_off< cds::backoff::yield>
- ,cds::opt::enable_elimination<true>
- > Elimination_PTB_yield;
-
- typedef cs::TreiberStack< cds::gc::PTB, int
- ,cds::opt::back_off< cds::backoff::yield>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- ,cds::opt::enable_elimination<true>
- > Elimination_PTB_yield_relaxed;
-
- typedef cs::TreiberStack< cds::gc::PTB, int
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::allocator< std::allocator< bool * > >
- ,cds::opt::enable_elimination<true>
- > Elimination_PTB_pause_alloc;
-
- typedef cs::TreiberStack< cds::gc::PTB, int
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::allocator< std::allocator< bool * > >
- ,cds::opt::enable_elimination<true>
- > Elimination_PTB_pause_alloc_relaxed;
- }}
-
- TEST(Elimination_PTB)
- TEST_DYN(Elimination_PTB_dyn)
- TEST_DYN(Elimination_PTB_stat)
- TEST(Elimination_PTB_yield)
- TEST(Elimination_PTB_pause_alloc)
-
- TEST(Elimination_PTB_relaxed)
- TEST(Elimination_PTB_yield_relaxed)
- TEST(Elimination_PTB_pause_alloc_relaxed)
-
-}
--- /dev/null
+//$$CDS-header$$
+
+#include "hdr_intrusive_treiber_stack.h"
+#include <cds/gc/dhp.h>
+#include <cds/intrusive/treiber_stack.h>
+
+namespace stack {
+
+#define TEST(X) void TestIntrusiveStack::X() { test<defs::X>(); }
+#define TEST_DYN(X) void TestIntrusiveStack::X() { test_elimination<defs::X>(); }
+
+ namespace defs {
+ // DHP GC + base hook
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ cds::opt::enable_elimination<true>
+ ,ci::opt::hook<
+ ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+ >
+ >::type
+ > Elimination_DHP_base;
+
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+ >
+ ,cds::opt::enable_elimination<true>
+ ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
+ >::type
+ > Elimination_DHP_base_dyn;
+
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+ >
+ ,cds::opt::enable_elimination<true>
+ ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+ >::type
+ > Elimination_DHP_base_relaxed;
+
+ // DHP GC + base hook + disposer
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+ >
+ ,cds::opt::enable_elimination<true>
+ ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+ >::type
+ > Elimination_DHP_base_disposer;
+
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+ >
+ ,cds::opt::enable_elimination<true>
+ ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+ ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+ >::type
+ > Elimination_DHP_base_disposer_relaxed;
+
+ // DHP GC + member hook
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::member_hook<
+ offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+ ci::opt::gc<cds::gc::DHP>
+ >
+ >
+ ,cds::opt::enable_elimination<true>
+ >::type
+ > Elimination_DHP_member;
+
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::member_hook<
+ offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+ ci::opt::gc<cds::gc::DHP>
+ >
+ >
+ ,cds::opt::enable_elimination<true>
+ ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
+ >::type
+ > Elimination_DHP_member_dyn;
+
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::member_hook<
+ offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+ ci::opt::gc<cds::gc::DHP>
+ >
+ >
+ ,cds::opt::enable_elimination<true>
+ ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+ >::type
+ > Elimination_DHP_member_relaxed;
+
+ // DHP GC + member hook + disposer
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::member_hook<
+ offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+ ci::opt::gc<cds::gc::DHP>
+ >
+ >
+ ,cds::opt::enable_elimination<true>
+ ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+ >::type
+ > Elimination_DHP_member_disposer;
+
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::member_hook<
+ offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+ ci::opt::gc<cds::gc::DHP>
+ >
+ >
+ ,cds::opt::enable_elimination<true>
+ ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+ ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+ >::type
+ > Elimination_DHP_member_disposer_relaxed;
+ }
+
+ TEST(Elimination_DHP_base)
+ TEST_DYN(Elimination_DHP_base_dyn)
+ TEST(Elimination_DHP_base_disposer)
+ TEST(Elimination_DHP_member)
+ TEST_DYN(Elimination_DHP_member_dyn)
+ TEST(Elimination_DHP_member_disposer)
+
+ TEST(Elimination_DHP_base_relaxed)
+ TEST(Elimination_DHP_base_disposer_relaxed)
+ TEST(Elimination_DHP_member_relaxed)
+ TEST(Elimination_DHP_member_disposer_relaxed)
+
+} // namespace stack
+
+++ /dev/null
-//$$CDS-header$$
-
-#include "hdr_intrusive_treiber_stack.h"
-#include <cds/gc/ptb.h>
-#include <cds/intrusive/treiber_stack.h>
-
-namespace stack {
-
-#define TEST(X) void TestIntrusiveStack::X() { test<defs::X>(); }
-#define TEST_DYN(X) void TestIntrusiveStack::X() { test_elimination<defs::X>(); }
-
- namespace defs {
- // PTB GC + base hook
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::base_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- cds::opt::enable_elimination<true>
- ,ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
- >
- >::type
- > Elimination_PTB_base;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::base_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
- >
- ,cds::opt::enable_elimination<true>
- ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
- >::type
- > Elimination_PTB_base_dyn;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::base_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
- >
- ,cds::opt::enable_elimination<true>
- ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
- >::type
- > Elimination_PTB_base_relaxed;
-
- // PTB GC + base hook + disposer
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::base_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
- >
- ,cds::opt::enable_elimination<true>
- ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
- >::type
- > Elimination_PTB_base_disposer;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::base_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
- >
- ,cds::opt::enable_elimination<true>
- ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
- ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
- >::type
- > Elimination_PTB_base_disposer_relaxed;
-
- // PTB GC + member hook
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::member_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
- ci::opt::gc<cds::gc::PTB>
- >
- >
- ,cds::opt::enable_elimination<true>
- >::type
- > Elimination_PTB_member;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::member_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
- ci::opt::gc<cds::gc::PTB>
- >
- >
- ,cds::opt::enable_elimination<true>
- ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
- >::type
- > Elimination_PTB_member_dyn;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::member_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
- ci::opt::gc<cds::gc::PTB>
- >
- >
- ,cds::opt::enable_elimination<true>
- ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
- >::type
- > Elimination_PTB_member_relaxed;
-
- // PTB GC + member hook + disposer
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::member_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
- ci::opt::gc<cds::gc::PTB>
- >
- >
- ,cds::opt::enable_elimination<true>
- ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
- >::type
- > Elimination_PTB_member_disposer;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::member_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
- ci::opt::gc<cds::gc::PTB>
- >
- >
- ,cds::opt::enable_elimination<true>
- ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
- ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
- >::type
- > Elimination_PTB_member_disposer_relaxed;
- }
-
- TEST(Elimination_PTB_base)
- TEST_DYN(Elimination_PTB_base_dyn)
- TEST(Elimination_PTB_base_disposer)
- TEST(Elimination_PTB_member)
- TEST_DYN(Elimination_PTB_member_dyn)
- TEST(Elimination_PTB_member_disposer)
-
- TEST(Elimination_PTB_base_relaxed)
- TEST(Elimination_PTB_base_disposer_relaxed)
- TEST(Elimination_PTB_member_relaxed)
- TEST(Elimination_PTB_member_disposer_relaxed)
-
-} // namespace stack
-
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();
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)
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)
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()
};
--- /dev/null
+//$$CDS-header$$
+
+#include "hdr_intrusive_treiber_stack.h"
+#include <cds/gc/ptb.h>
+#include <cds/intrusive/treiber_stack.h>
+
+namespace stack {
+
+#define TEST(X) void TestIntrusiveStack::X() { test<defs::X>(); }
+
+ namespace defs {
+ // DHP GC + base hook
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+ ,typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+ >
+ >::type
+ > Treiber_DHP_base;
+
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+ ,typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+ >
+ ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+ >::type
+ > Treiber_DHP_base_relaxed;
+
+ // DHP GC + base hook + disposer
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+ ,typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+ >
+ ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+ >::type
+ > Treiber_DHP_base_disposer;
+
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::base_hook_item<cds::gc::DHP>
+ ,typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::base_hook< ci::opt::gc<cds::gc::DHP> >
+ >
+ ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+ ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+ >::type
+ > Treiber_DHP_base_disposer_relaxed;
+
+ // DHP GC + member hook
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+ ,typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::member_hook<
+ offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+ ci::opt::gc<cds::gc::DHP>
+ >
+ >
+ >::type
+ > Treiber_DHP_member;
+
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+ ,typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::member_hook<
+ offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+ ci::opt::gc<cds::gc::DHP>
+ >
+ >
+ ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+ >::type
+ > Treiber_DHP_member_relaxed;
+
+ // DHP GC + member hook + disposer
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::member_hook<
+ offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+ ci::opt::gc<cds::gc::DHP>
+ >
+ >
+ ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+ >::type
+ > Treiber_DHP_member_disposer;
+
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP,
+ TestIntrusiveStack::member_hook_item<cds::gc::DHP>
+ , typename ci::treiber_stack::make_traits<
+ ci::opt::hook<
+ ci::single_link::member_hook<
+ offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
+ ci::opt::gc<cds::gc::DHP>
+ >
+ >
+ ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
+ ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+ >::type
+ > Treiber_DHP_member_disposer_relaxed;
+ }
+
+ TEST(Treiber_DHP_base)
+ TEST(Treiber_DHP_base_disposer)
+ TEST(Treiber_DHP_member)
+ TEST(Treiber_DHP_member_disposer)
+
+ TEST(Treiber_DHP_base_relaxed)
+ TEST(Treiber_DHP_base_disposer_relaxed)
+ TEST(Treiber_DHP_member_relaxed)
+ TEST(Treiber_DHP_member_disposer_relaxed)
+
+} // namespace stack
+
+++ /dev/null
-//$$CDS-header$$
-
-#include "hdr_intrusive_treiber_stack.h"
-#include <cds/gc/ptb.h>
-#include <cds/intrusive/treiber_stack.h>
-
-namespace stack {
-
-#define TEST(X) void TestIntrusiveStack::X() { test<defs::X>(); }
-
- namespace defs {
- // PTB GC + base hook
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::base_hook_item<cds::gc::PTB>
- ,typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
- >
- >::type
- > Treiber_PTB_base;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::base_hook_item<cds::gc::PTB>
- ,typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
- >
- ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
- >::type
- > Treiber_PTB_base_relaxed;
-
- // PTB GC + base hook + disposer
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::base_hook_item<cds::gc::PTB>
- ,typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
- >
- ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
- >::type
- > Treiber_PTB_base_disposer;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::base_hook_item<cds::gc::PTB>
- ,typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
- >
- ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
- ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
- >::type
- > Treiber_PTB_base_disposer_relaxed;
-
- // PTB GC + member hook
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::member_hook_item<cds::gc::PTB>
- ,typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
- ci::opt::gc<cds::gc::PTB>
- >
- >
- >::type
- > Treiber_PTB_member;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::member_hook_item<cds::gc::PTB>
- ,typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
- ci::opt::gc<cds::gc::PTB>
- >
- >
- ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
- >::type
- > Treiber_PTB_member_relaxed;
-
- // PTB GC + member hook + disposer
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::member_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
- ci::opt::gc<cds::gc::PTB>
- >
- >
- ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
- >::type
- > Treiber_PTB_member_disposer;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB,
- TestIntrusiveStack::member_hook_item<cds::gc::PTB>
- , typename ci::treiber_stack::make_traits<
- ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
- ci::opt::gc<cds::gc::PTB>
- >
- >
- ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
- ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
- >::type
- > Treiber_PTB_member_disposer_relaxed;
- }
-
- TEST(Treiber_PTB_base)
- TEST(Treiber_PTB_base_disposer)
- TEST(Treiber_PTB_member)
- TEST(Treiber_PTB_member_disposer)
-
- TEST(Treiber_PTB_base_relaxed)
- TEST(Treiber_PTB_base_disposer_relaxed)
- TEST(Treiber_PTB_member_relaxed)
- TEST(Treiber_PTB_member_disposer_relaxed)
-
-} // namespace stack
-
}
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
--- /dev/null
+//$$CDS-header$$
+
+#include "hdr_treiber_stack.h"
+#include <cds/gc/ptb.h>
+#include <cds/container/treiber_stack.h>
+
+namespace stack {
+#define TEST(X) void TestStack::X() { test<defs::X>(); }
+ namespace cs = cds::container;
+
+ namespace defs { namespace {
+
+ typedef cs::TreiberStack< cds::gc::PTB, int > Treiber_PTB;
+ typedef cs::TreiberStack< cds::gc::PTB, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ >::type
+ > Treiber_PTB_relaxed;
+
+ typedef cs::TreiberStack< cds::gc::PTB, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::yield>
+ >::type
+ > Treiber_PTB_yield;
+
+ typedef cs::TreiberStack< cds::gc::PTB, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::yield>
+ ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ >::type
+ > Treiber_PTB_yield_relaxed;
+
+ typedef cs::TreiberStack< cds::gc::PTB, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::pause>
+ ,cds::opt::allocator< std::allocator< bool * > >
+ >::type
+ > Treiber_PTB_pause_alloc;
+
+ typedef cs::TreiberStack< cds::gc::PTB, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ ,cds::opt::back_off< cds::backoff::pause>
+ ,cds::opt::allocator< std::allocator< bool * > >
+ >::type
+ > Treiber_PTB_pause_alloc_relaxed;
+ }}
+
+ TEST(Treiber_PTB)
+ TEST(Treiber_PTB_yield)
+ TEST(Treiber_PTB_pause_alloc)
+
+ TEST(Treiber_PTB_relaxed)
+ TEST(Treiber_PTB_yield_relaxed)
+ TEST(Treiber_PTB_pause_alloc_relaxed)
+
+}
namespace defs { namespace {
typedef cs::TreiberStack< cds::gc::HP, int > Treiber_HP;
- typedef cs::TreiberStack< cds::gc::HP, int, cds::opt::memory_model<cds::opt::v::relaxed_ordering> > Treiber_HP_relaxed;
- typedef cs::TreiberStack< cds::gc::HP, int, cds::opt::back_off< cds::backoff::yield> > Treiber_HP_yield;
typedef cs::TreiberStack< cds::gc::HP, int
- , cds::opt::back_off< cds::backoff::yield>
- , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ >::type
+ > Treiber_HP_relaxed;
+
+ typedef cs::TreiberStack< cds::gc::HP, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::yield>
+ >::type
+ > Treiber_HP_yield;
+
+ typedef cs::TreiberStack< cds::gc::HP, int
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::yield>
+ , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ >::type
> Treiber_HP_yield_relaxed;
typedef cs::TreiberStack< cds::gc::HP, int
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::allocator< std::allocator< bool * > >
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::pause>
+ ,cds::opt::allocator< std::allocator< bool * > >
+ >::type
> Treiber_HP_pause_alloc;
typedef cs::TreiberStack< cds::gc::HP, int
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- ,cds::opt::allocator< std::allocator< unsigned long > >
+ , typename cs::treiber_stack::make_traits<
+ cds::opt::back_off< cds::backoff::pause>
+ ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ ,cds::opt::allocator< std::allocator< unsigned long > >
+ >::type
> Treiber_HP_pause_alloc_relaxed;
}}
+++ /dev/null
-//$$CDS-header$$
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/hrc.h>
-#include <cds/container/treiber_stack.h>
-
-namespace stack {
-#define TEST(X) void TestStack::X() { test<defs::X>(); }
- namespace cs = cds::container;
-
- namespace defs { namespace {
-
- typedef cs::TreiberStack< cds::gc::HRC, int > Treiber_HRC;
- typedef cs::TreiberStack< cds::gc::HRC, int, cds::opt::memory_model<cds::opt::v::relaxed_ordering> > Treiber_HRC_relaxed;
-
- typedef cs::TreiberStack< cds::gc::HRC, int, cds::opt::back_off< cds::backoff::yield> > Treiber_HRC_yield;
- typedef cs::TreiberStack< cds::gc::HRC, int
- ,cds::opt::back_off< cds::backoff::yield>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Treiber_HRC_yield_relaxed;
-
- typedef cs::TreiberStack< cds::gc::HRC, int
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::allocator< std::allocator< bool * > >
- > Treiber_HRC_pause_alloc;
-
- typedef cs::TreiberStack< cds::gc::HRC, int
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- ,cds::opt::allocator< std::allocator< bool * > >
- > Treiber_HRC_pause_alloc_relaxed;
- }}
-
- TEST(Treiber_HRC)
- TEST(Treiber_HRC_yield)
- TEST(Treiber_HRC_pause_alloc)
-
- TEST(Treiber_HRC_relaxed)
- TEST(Treiber_HRC_yield_relaxed)
- TEST(Treiber_HRC_pause_alloc_relaxed)
-}
+++ /dev/null
-//$$CDS-header$$
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/ptb.h>
-#include <cds/container/treiber_stack.h>
-
-namespace stack {
-#define TEST(X) void TestStack::X() { test<defs::X>(); }
- namespace cs = cds::container;
-
- namespace defs { namespace {
-
- typedef cs::TreiberStack< cds::gc::PTB, int > Treiber_PTB;
- typedef cs::TreiberStack< cds::gc::PTB, int, cds::opt::memory_model<cds::opt::v::relaxed_ordering> > Treiber_PTB_relaxed;
-
- typedef cs::TreiberStack< cds::gc::PTB, int, cds::opt::back_off< cds::backoff::yield> > Treiber_PTB_yield;
- typedef cs::TreiberStack< cds::gc::PTB, int
- ,cds::opt::back_off< cds::backoff::yield>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Treiber_PTB_yield_relaxed;
-
- typedef cs::TreiberStack< cds::gc::PTB, int
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::allocator< std::allocator< bool * > >
- > Treiber_PTB_pause_alloc;
-
- typedef cs::TreiberStack< cds::gc::PTB, int
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- ,cds::opt::back_off< cds::backoff::pause>
- ,cds::opt::allocator< std::allocator< bool * > >
- > Treiber_PTB_pause_alloc_relaxed;
- }}
-
- TEST(Treiber_PTB)
- TEST(Treiber_PTB_yield)
- TEST(Treiber_PTB_pause_alloc)
-
- TEST(Treiber_PTB_relaxed)
- TEST(Treiber_PTB_yield_relaxed)
- TEST(Treiber_PTB_pause_alloc_relaxed)
-
-}
TEST_CASE( Treiber_HP_pause, cds::intrusive::single_link::node< cds::gc::HP > ) \
TEST_CASE( Treiber_HP_exp, cds::intrusive::single_link::node< cds::gc::HP > ) \
TEST_CASE( Treiber_HP_stat, cds::intrusive::single_link::node< cds::gc::HP > ) \
- TEST_CASE( Treiber_HRC, cds::intrusive::single_link::node< cds::gc::HRC > ) \
/*TEST_CASE( Treiber_HRC_yield, cds::intrusive::single_link::node< cds::gc::HRC > )*/ \
- TEST_CASE( Treiber_HRC_pause, cds::intrusive::single_link::node< cds::gc::HRC > ) \
- TEST_CASE( Treiber_HRC_exp, cds::intrusive::single_link::node< cds::gc::HRC > ) \
- TEST_CASE( Treiber_HRC_stat, cds::intrusive::single_link::node< cds::gc::HRC > ) \
- TEST_CASE( Treiber_PTB, cds::intrusive::single_link::node< cds::gc::PTB > ) \
- /*TEST_CASE( Treiber_PTB_yield, cds::intrusive::single_link::node< cds::gc::PTB > )*/ \
- TEST_CASE( Treiber_PTB_pause, cds::intrusive::single_link::node< cds::gc::PTB > ) \
- TEST_CASE( Treiber_PTB_exp, cds::intrusive::single_link::node< cds::gc::PTB > ) \
- TEST_CASE( Treiber_PTB_stat, cds::intrusive::single_link::node< cds::gc::PTB > )
+ TEST_CASE( Treiber_DHP, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+ /*TEST_CASE( Treiber_DHP_yield, cds::intrusive::single_link::node< cds::gc::DHP > )*/ \
+ TEST_CASE( Treiber_DHP_pause, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+ TEST_CASE( Treiber_DHP_exp, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+ TEST_CASE( Treiber_DHP_stat, cds::intrusive::single_link::node< cds::gc::DHP > )
#define CDSUNIT_TEST_TreiberStack \
CPPUNIT_TEST( Treiber_HP ) \
CPPUNIT_TEST( Treiber_HP_pause ) \
CPPUNIT_TEST( Treiber_HP_exp ) \
CPPUNIT_TEST( Treiber_HP_stat ) \
- CPPUNIT_TEST( Treiber_HRC ) \
- /*CPPUNIT_TEST( Treiber_HRC_yield )*/ \
- /*CPPUNIT_TEST( Treiber_HRC_pause )*/ \
- /*CPPUNIT_TEST( Treiber_HRC_exp )*/ \
- CPPUNIT_TEST( Treiber_HRC_stat ) \
- CPPUNIT_TEST( Treiber_PTB ) \
- /*CPPUNIT_TEST( Treiber_PTB_yield )*/ \
- CPPUNIT_TEST( Treiber_PTB_pause ) \
- CPPUNIT_TEST( Treiber_PTB_exp ) \
- CPPUNIT_TEST( Treiber_PTB_stat )
+ CPPUNIT_TEST( Treiber_DHP ) \
+ /*CPPUNIT_TEST( Treiber_DHP_yield )*/ \
+ CPPUNIT_TEST( Treiber_DHP_pause ) \
+ CPPUNIT_TEST( Treiber_DHP_exp ) \
+ CPPUNIT_TEST( Treiber_DHP_stat )
#define CDSUNIT_DECLARE_EliminationStack \
TEST_ELIMINATION( Elimination_HP, cds::intrusive::single_link::node< cds::gc::HP > ) \
TEST_ELIMINATION( Elimination_HP_stat, cds::intrusive::single_link::node< cds::gc::HP > ) \
TEST_ELIMINATION( Elimination_HP_dyn, cds::intrusive::single_link::node< cds::gc::HP > ) \
TEST_ELIMINATION( Elimination_HP_dyn_stat, cds::intrusive::single_link::node< cds::gc::HP >) \
- TEST_ELIMINATION( Elimination_HRC, cds::intrusive::single_link::node< cds::gc::HRC > ) \
- /*TEST_ELIMINATION( Elimination_HRC_yield, cds::intrusive::single_link::node< cds::gc::HRC > )*/ \
- TEST_ELIMINATION( Elimination_HRC_pause, cds::intrusive::single_link::node< cds::gc::HRC > ) \
- TEST_ELIMINATION( Elimination_HRC_exp, cds::intrusive::single_link::node< cds::gc::HRC > ) \
- TEST_ELIMINATION( Elimination_HRC_stat, cds::intrusive::single_link::node< cds::gc::HRC > ) \
- TEST_ELIMINATION( Elimination_HRC_dyn, cds::intrusive::single_link::node< cds::gc::HRC > ) \
- TEST_ELIMINATION( Elimination_HRC_dyn_stat, cds::intrusive::single_link::node< cds::gc::HRC >) \
- TEST_ELIMINATION( Elimination_PTB, cds::intrusive::single_link::node< cds::gc::PTB > ) \
- TEST_ELIMINATION( Elimination_PTB_2ms, cds::intrusive::single_link::node< cds::gc::PTB > ) \
- TEST_ELIMINATION( Elimination_PTB_2ms_stat, cds::intrusive::single_link::node< cds::gc::PTB >) \
- TEST_ELIMINATION( Elimination_PTB_5ms, cds::intrusive::single_link::node< cds::gc::PTB > ) \
- TEST_ELIMINATION( Elimination_PTB_5ms_stat, cds::intrusive::single_link::node< cds::gc::PTB >) \
- TEST_ELIMINATION( Elimination_PTB_10ms, cds::intrusive::single_link::node< cds::gc::PTB > ) \
- TEST_ELIMINATION( Elimination_PTB_10ms_stat, cds::intrusive::single_link::node< cds::gc::PTB >) \
- /*TEST_ELIMINATION( Elimination_PTB_yield, cds::intrusive::single_link::node< cds::gc::PTB > )*/ \
- TEST_ELIMINATION( Elimination_PTB_pause, cds::intrusive::single_link::node< cds::gc::PTB > ) \
- TEST_ELIMINATION( Elimination_PTB_exp, cds::intrusive::single_link::node< cds::gc::PTB > ) \
- TEST_ELIMINATION( Elimination_PTB_stat, cds::intrusive::single_link::node< cds::gc::PTB > ) \
- TEST_ELIMINATION( Elimination_PTB_dyn, cds::intrusive::single_link::node< cds::gc::PTB > ) \
- TEST_ELIMINATION( Elimination_PTB_dyn_stat, cds::intrusive::single_link::node< cds::gc::PTB >)
+ TEST_ELIMINATION( Elimination_DHP, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+ TEST_ELIMINATION( Elimination_DHP_2ms, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+ TEST_ELIMINATION( Elimination_DHP_2ms_stat, cds::intrusive::single_link::node< cds::gc::DHP >) \
+ TEST_ELIMINATION( Elimination_DHP_5ms, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+ TEST_ELIMINATION( Elimination_DHP_5ms_stat, cds::intrusive::single_link::node< cds::gc::DHP >) \
+ TEST_ELIMINATION( Elimination_DHP_10ms, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+ TEST_ELIMINATION( Elimination_DHP_10ms_stat, cds::intrusive::single_link::node< cds::gc::DHP >) \
+ /*TEST_ELIMINATION( Elimination_DHP_yield, cds::intrusive::single_link::node< cds::gc::DHP > )*/ \
+ TEST_ELIMINATION( Elimination_DHP_pause, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+ TEST_ELIMINATION( Elimination_DHP_exp, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+ TEST_ELIMINATION( Elimination_DHP_stat, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+ TEST_ELIMINATION( Elimination_DHP_dyn, cds::intrusive::single_link::node< cds::gc::DHP > ) \
+ TEST_ELIMINATION( Elimination_DHP_dyn_stat, cds::intrusive::single_link::node< cds::gc::DHP >)
#define CDSUNIT_TEST_EliminationStack \
CPPUNIT_TEST( Elimination_HP ) \
CPPUNIT_TEST( Elimination_HP_stat ) \
CPPUNIT_TEST( Elimination_HP_dyn ) \
CPPUNIT_TEST( Elimination_HP_dyn_stat) \
- CPPUNIT_TEST( Elimination_HRC ) \
- /*CPPUNIT_TEST( Elimination_HRC_yield )*/ \
- /*CPPUNIT_TEST( Elimination_HRC_pause )*/ \
- /*CPPUNIT_TEST( Elimination_HRC_exp )*/ \
- CPPUNIT_TEST( Elimination_HRC_stat ) \
- CPPUNIT_TEST( Elimination_HRC_dyn ) \
- CPPUNIT_TEST( Elimination_HRC_dyn_stat) \
- CPPUNIT_TEST( Elimination_PTB ) \
- CPPUNIT_TEST( Elimination_PTB_2ms ) \
- CPPUNIT_TEST( Elimination_PTB_2ms_stat) \
- CPPUNIT_TEST( Elimination_PTB_5ms ) \
- CPPUNIT_TEST( Elimination_PTB_5ms_stat) \
- CPPUNIT_TEST( Elimination_PTB_10ms ) \
- CPPUNIT_TEST( Elimination_PTB_10ms_stat) \
- /*CPPUNIT_TEST( Elimination_PTB_yield )*/ \
- CPPUNIT_TEST( Elimination_PTB_pause ) \
- CPPUNIT_TEST( Elimination_PTB_exp ) \
- CPPUNIT_TEST( Elimination_PTB_stat ) \
- CPPUNIT_TEST( Elimination_PTB_dyn ) \
- CPPUNIT_TEST( Elimination_PTB_dyn_stat)
-
-#define CDSUNIT_DECLARE_MichaelDeque \
- TEST_BOUNDED( MichaelDequeL_HP, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeL_HP_seqcst, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeL_HP_ic, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeL_HP_exp, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeL_HP_yield, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeL_HP_stat, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeL_PTB, cds::intrusive::michael_deque::node<cds::gc::PTB> ) \
- TEST_BOUNDED( MichaelDequeL_PTB_seqcst, cds::intrusive::michael_deque::node<cds::gc::PTB> ) \
- TEST_BOUNDED( MichaelDequeL_PTB_ic, cds::intrusive::michael_deque::node<cds::gc::PTB> ) \
- TEST_BOUNDED( MichaelDequeL_PTB_exp, cds::intrusive::michael_deque::node<cds::gc::PTB> ) \
- TEST_BOUNDED( MichaelDequeL_PTB_yield, cds::intrusive::michael_deque::node<cds::gc::PTB> ) \
- TEST_BOUNDED( MichaelDequeL_PTB_stat, cds::intrusive::michael_deque::node<cds::gc::PTB> ) \
- TEST_BOUNDED( MichaelDequeR_HP, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeR_HP_seqcst, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeR_HP_ic, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeR_HP_exp, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeR_HP_yield, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeR_HP_stat, cds::intrusive::michael_deque::node<cds::gc::HP> ) \
- TEST_BOUNDED( MichaelDequeR_PTB, cds::intrusive::michael_deque::node<cds::gc::PTB> ) \
- TEST_BOUNDED( MichaelDequeR_PTB_seqcst, cds::intrusive::michael_deque::node<cds::gc::PTB> ) \
- TEST_BOUNDED( MichaelDequeR_PTB_ic, cds::intrusive::michael_deque::node<cds::gc::PTB> ) \
- TEST_BOUNDED( MichaelDequeR_PTB_exp, cds::intrusive::michael_deque::node<cds::gc::PTB> ) \
- TEST_BOUNDED( MichaelDequeR_PTB_yield, cds::intrusive::michael_deque::node<cds::gc::PTB> ) \
- TEST_BOUNDED( MichaelDequeR_PTB_stat, cds::intrusive::michael_deque::node<cds::gc::PTB> )
-
-#define CDSUNIT_TEST_MichaelDeque \
- CPPUNIT_TEST( MichaelDequeL_HP ) \
- /*CPPUNIT_TEST( MichaelDequeL_HP_seqcst )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_HP_ic )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_HP_exp )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_HP_yield )*/ \
- CPPUNIT_TEST( MichaelDequeL_HP_stat ) \
- CPPUNIT_TEST( MichaelDequeL_PTB ) \
- /*CPPUNIT_TEST( MichaelDequeL_PTB_seqcst )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_PTB_ic )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_PTB_exp )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_PTB_yield )*/ \
- CPPUNIT_TEST( MichaelDequeL_PTB_stat ) \
- CPPUNIT_TEST( MichaelDequeR_HP ) \
- /*CPPUNIT_TEST( MichaelDequeR_HP_seqcst )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_HP_ic )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_HP_exp )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_HP_yield )*/ \
- CPPUNIT_TEST( MichaelDequeR_HP_stat ) \
- CPPUNIT_TEST( MichaelDequeR_PTB ) \
- /*CPPUNIT_TEST( MichaelDequeR_PTB_seqcst )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_PTB_ic )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_PTB_exp )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_PTB_yield )*/ \
- CPPUNIT_TEST( MichaelDequeR_PTB_stat )
+ CPPUNIT_TEST( Elimination_DHP ) \
+ CPPUNIT_TEST( Elimination_DHP_2ms ) \
+ CPPUNIT_TEST( Elimination_DHP_2ms_stat) \
+ CPPUNIT_TEST( Elimination_DHP_5ms ) \
+ CPPUNIT_TEST( Elimination_DHP_5ms_stat) \
+ CPPUNIT_TEST( Elimination_DHP_10ms ) \
+ CPPUNIT_TEST( Elimination_DHP_10ms_stat) \
+ /*CPPUNIT_TEST( Elimination_DHP_yield )*/ \
+ CPPUNIT_TEST( Elimination_DHP_pause ) \
+ CPPUNIT_TEST( Elimination_DHP_exp ) \
+ CPPUNIT_TEST( Elimination_DHP_stat ) \
+ CPPUNIT_TEST( Elimination_DHP_dyn ) \
+ CPPUNIT_TEST( Elimination_DHP_dyn_stat)
#define CDSUNIT_DECLARE_FCStack \
TEST_FCSTACK( FCStack_slist, boost::intrusive::slist_base_hook<> ) \
#include <cds/intrusive/fcstack.h>
#include <cds/gc/hp.h>
-#include <cds/gc/ptb.h>
-#include <cds/gc/hrc.h>
+#include <cds/gc/dhp.h>
#include <mutex>
#include <cds/lock/spinlock.h>
template <typename T>
struct Types {
+ template <class GC>
+ using base_hook = cds::intrusive::treiber_stack::base_hook < cds::opt::gc< GC > >;
+
// TreiberStack
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- > Treiber_HP;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > Treiber_HP_seqcst;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Treiber_HP_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- > Treiber_HRC;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Treiber_HRC_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- > Treiber_PTB;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Treiber_PTB_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::back_off<cds::backoff::yield>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Treiber_HP_yield;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::back_off<cds::backoff::pause>
- > Treiber_HP_pause;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > Treiber_HP_exp;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- ,cds::opt::back_off<cds::backoff::yield>
- > Treiber_HRC_yield;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- ,cds::opt::back_off<cds::backoff::pause>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Treiber_HRC_pause;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > Treiber_HRC_exp;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::back_off<cds::backoff::yield>
- > Treiber_PTB_yield;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::back_off<cds::backoff::pause>
- > Treiber_PTB_pause;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T > Treiber_HP;
+ struct traits_Treiber_DHP: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<cds::gc::PTB> >
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::PTB, T, traits_Treiber_DHP >Treiber_PTB;
+
+ template <class GC> struct traits_Treiber_seqcst : public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::memory_model<cds::opt::v::sequential_consistent>
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_seqcst<cds::gc::HP> > Treiber_HP_seqcst;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst<cds::gc::DHP> > Treiber_DHP_seqcst;
+
+ template <class GC> struct traits_Treiber_stat: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_stat<cds::gc::HP> > Treiber_HP_stat;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat<cds::gc::DHP> > Treiber_DHP_stat;
+
+ template <class GC> struct traits_Treiber_yield: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::back_off<cds::backoff::yield>
+ , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_yield<cds::gc::HP> > Treiber_HP_yield;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield<cds::gc::DHP> > Treiber_DHP_yield;
+
+ template <class GC> struct traits_Treiber_pause: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::back_off<cds::backoff::pause>
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_pause<cds::gc::HP> > Treiber_HP_pause;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause<cds::gc::DHP> > Treiber_DHP_pause;
+
+ template <class GC> struct traits_Treiber_exp: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ ,cds::opt::back_off<
+ cds::backoff::exponential<
+ cds::backoff::pause,
+ cds::backoff::yield
+ >
>
- >
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Treiber_PTB_exp;
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_exp<cds::gc::HP> > Treiber_HP_exp;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp<cds::gc::DHP> > Treiber_DHP_exp;
// Elimination stack
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- > Elimination_HP;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
- > Elimination_HP_2ms;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_HP_2ms_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
- > Elimination_HP_5ms;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_HP_5ms_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
- > Elimination_HP_10ms;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_HP_10ms_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_HP_dyn;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > Elimination_HP_seqcst;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_HP_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_HP_dyn_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- ,cds::opt::enable_elimination<true>
- > Elimination_HRC;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_HRC_dyn;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_HRC_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_HRC_dyn_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
- > Elimination_PTB_2ms;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_PTB_2ms_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
- > Elimination_PTB_5ms;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_PTB_5ms_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
- > Elimination_PTB_10ms;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_PTB_10ms_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- > Elimination_PTB;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_PTB_dyn;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_PTB_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_PTB_dyn_stat;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::yield>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Elimination_HP_yield;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::pause>
- > Elimination_HP_pause;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > Elimination_HP_exp;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::yield>
- > Elimination_HRC_yield;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::pause>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Elimination_HRC_pause;
-
- typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > Elimination_HRC_exp;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::yield>
- > Elimination_PTB_yield;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::pause>
- > Elimination_PTB_pause;
-
- typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
+ template <class GC> struct traits_Elimination_on : public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_on<cds::gc::HP> > Elimination_HP;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_on<cds::gc::DHP> > Elimination_DHP;
+
+ template <class GC> struct traits_Elimination_2ms: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_2ms<cds::gc::HP> > Elimination_HP_2ms;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms<cds::gc::DHP> > Elimination_DHP_2ms;
+
+ template <class GC> struct traits_Elimination_2ms_stat: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+ , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_2ms_stat<cds::gc::HP> > Elimination_HP_2ms_stat;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat<cds::gc::DHP> > Elimination_DHP_2ms_stat;
+
+ template <class GC> struct traits_Elimination_5ms: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_5ms<cds::gc::HP> > Elimination_HP_5ms;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms<cds::gc::DHP> > Elimination_DHP_5ms;
+
+ template <class GC> struct traits_Elimination_5ms_stat: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+ , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_5ms_stat<cds::gc::HP> > Elimination_HP_5ms_stat;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat<cds::gc::DHP> > Elimination_DHP_5ms_stat;
+
+ template <class GC> struct traits_Elimination_10ms: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_10ms<cds::gc::HP> > Elimination_HP_10ms;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms<cds::gc::DHP> > Elimination_DHP_10ms;
+
+ template <class GC> struct traits_Elimination_10ms_stat: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+ , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_10ms_stat<cds::gc::HP> > Elimination_HP_10ms_stat;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat<cds::gc::DHP> > Elimination_DHP_10ms_stat;
+
+ template <class GC> struct traits_Elimination_dyn: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_dyn<cds::gc::HP> > Elimination_HP_dyn;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn<cds::gc::DHP> > Elimination_DHP_dyn;
+
+ template <class GC> struct traits_Elimination_stat: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_stat<cds::gc::HP> > Elimination_HP_stat;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat<cds::gc::DHP> > Elimination_DHP_stat;
+
+ template <class GC> struct traits_Elimination_dyn_stat: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+ , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_dyn_stat<cds::gc::HP> > Elimination_HP_dyn_stat;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat<cds::gc::DHP> > Elimination_DHP_dyn_stat;
+
+ template <class GC> struct traits_Elimination_yield: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ , cds::opt::back_off<cds::backoff::yield>
+ , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_yield<cds::gc::HP> > Elimination_HP_yield;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield<cds::gc::DHP> > Elimination_DHP_yield;
+
+ template <class GC> struct traits_Elimination_pause: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ , cds::opt::back_off<cds::backoff::pause>
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_pause<cds::gc::HP> > Elimination_HP_pause;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause<cds::gc::DHP> > Elimination_DHP_pause;
+
+ template <class GC> struct traits_Elimination_exp: public
+ cds::intrusive::treiber_stack::make_traits <
+ cds::intrusive::opt::hook< base_hook<GC> >
+ , cds::opt::enable_elimination<true>
+ ,cds::opt::back_off<
+ cds::backoff::exponential<
+ cds::backoff::pause,
+ cds::backoff::yield
+ >
>
- >
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Elimination_PTB_exp;
+ > ::type
+ {};
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_exp<cds::gc::HP> > Elimination_HP_exp;
+ typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp<cds::gc::DHP> > Elimination_DHP_exp;
// FCStack
typedef cds::intrusive::FCStack< T > FCStack_slist;
TEST_CASE( Treiber_HP_pause ) \
TEST_CASE( Treiber_HP_exp ) \
TEST_CASE( Treiber_HP_stat ) \
- /*TEST_CASE( Treiber_HRC )*/ \
- /*TEST_CASE( Treiber_HRC_yield )*/ \
- /*TEST_CASE( Treiber_HRC_pause )*/ \
- /*TEST_CASE( Treiber_HRC_exp )*/ \
- /*TEST_CASE( Treiber_HRC_stat )*/ \
- TEST_CASE( Treiber_PTB ) \
- /*TEST_CASE( Treiber_PTB_yield )*/ \
- TEST_CASE( Treiber_PTB_pause ) \
- TEST_CASE( Treiber_PTB_exp ) \
- TEST_CASE( Treiber_PTB_stat )
+ TEST_CASE( Treiber_DHP ) \
+ /*TEST_CASE( Treiber_DHP_yield )*/ \
+ TEST_CASE( Treiber_DHP_pause ) \
+ TEST_CASE( Treiber_DHP_exp ) \
+ TEST_CASE( Treiber_DHP_stat )
#define CDSUNIT_TEST_TreiberStack \
CPPUNIT_TEST( Treiber_HP ) \
CPPUNIT_TEST( Treiber_HP_pause ) \
CPPUNIT_TEST( Treiber_HP_exp ) \
CPPUNIT_TEST( Treiber_HP_stat ) \
- /*CPPUNIT_TEST( Treiber_HRC )*/ \
- /*CPPUNIT_TEST( Treiber_HRC_yield )*/ \
- /*CPPUNIT_TEST( Treiber_HRC_pause )*/ \
- /*CPPUNIT_TEST( Treiber_HRC_exp )*/ \
- /*CPPUNIT_TEST( Treiber_HRC_stat )*/ \
- CPPUNIT_TEST( Treiber_PTB ) \
- /*CPPUNIT_TEST( Treiber_PTB_yield )*/ \
- CPPUNIT_TEST( Treiber_PTB_pause ) \
- CPPUNIT_TEST( Treiber_PTB_exp ) \
- CPPUNIT_TEST( Treiber_PTB_stat )
+ CPPUNIT_TEST( Treiber_DHP ) \
+ /*CPPUNIT_TEST( Treiber_DHP_yield )*/ \
+ CPPUNIT_TEST( Treiber_DHP_pause ) \
+ CPPUNIT_TEST( Treiber_DHP_exp ) \
+ CPPUNIT_TEST( Treiber_DHP_stat )
#define CDSUNIT_DECLARE_EliminationStack \
TEST_ELIMINATION( Elimination_HP ) \
TEST_ELIMINATION( Elimination_HP_stat ) \
TEST_ELIMINATION( Elimination_HP_dyn ) \
TEST_ELIMINATION( Elimination_HP_dyn_stat) \
- /*TEST_ELIMINATION( Elimination_HRC )*/ \
- /*TEST_ELIMINATION( Elimination_HRC_yield )*/ \
- /*TEST_ELIMINATION( Elimination_HRC_pause )*/ \
- /*TEST_ELIMINATION( Elimination_HRC_exp )*/ \
- /*TEST_ELIMINATION( Elimination_HRC_stat )*/ \
- /*TEST_ELIMINATION( Elimination_HRC_dyn )*/ \
- /*TEST_ELIMINATION( Elimination_HRC_dyn_stat)*/ \
- TEST_ELIMINATION( Elimination_PTB ) \
- TEST_ELIMINATION( Elimination_PTB_2ms ) \
- TEST_ELIMINATION( Elimination_PTB_2ms_stat) \
- TEST_ELIMINATION( Elimination_PTB_5ms ) \
- TEST_ELIMINATION( Elimination_PTB_5ms_stat) \
- TEST_ELIMINATION( Elimination_PTB_10ms ) \
- TEST_ELIMINATION( Elimination_PTB_10ms_stat) \
- /*TEST_ELIMINATION( Elimination_PTB_yield )*/ \
- TEST_ELIMINATION( Elimination_PTB_pause ) \
- TEST_ELIMINATION( Elimination_PTB_exp ) \
- TEST_ELIMINATION( Elimination_PTB_stat ) \
- TEST_ELIMINATION( Elimination_PTB_dyn ) \
- TEST_ELIMINATION( Elimination_PTB_dyn_stat)
+ TEST_ELIMINATION( Elimination_DHP ) \
+ TEST_ELIMINATION( Elimination_DHP_2ms ) \
+ TEST_ELIMINATION( Elimination_DHP_2ms_stat) \
+ TEST_ELIMINATION( Elimination_DHP_5ms ) \
+ TEST_ELIMINATION( Elimination_DHP_5ms_stat) \
+ TEST_ELIMINATION( Elimination_DHP_10ms ) \
+ TEST_ELIMINATION( Elimination_DHP_10ms_stat) \
+ /*TEST_ELIMINATION( Elimination_DHP_yield )*/ \
+ TEST_ELIMINATION( Elimination_DHP_pause ) \
+ TEST_ELIMINATION( Elimination_DHP_exp ) \
+ TEST_ELIMINATION( Elimination_DHP_stat ) \
+ TEST_ELIMINATION( Elimination_DHP_dyn ) \
+ TEST_ELIMINATION( Elimination_DHP_dyn_stat)
#define CDSUNIT_TEST_EliminationStack \
CPPUNIT_TEST( Elimination_HP ) \
CPPUNIT_TEST( Elimination_HP_stat ) \
CPPUNIT_TEST( Elimination_HP_dyn ) \
CPPUNIT_TEST( Elimination_HP_dyn_stat) \
- /*CPPUNIT_TEST( Elimination_HRC )*/ \
- /*CPPUNIT_TEST( Elimination_HRC_yield )*/ \
- /*CPPUNIT_TEST( Elimination_HRC_pause )*/ \
- /*CPPUNIT_TEST( Elimination_HRC_exp )*/ \
- /*CPPUNIT_TEST( Elimination_HRC_stat )*/ \
- /*CPPUNIT_TEST( Elimination_HRC_dyn )*/ \
- /*CPPUNIT_TEST( Elimination_HRC_dyn_stat)*/ \
- CPPUNIT_TEST( Elimination_PTB ) \
- CPPUNIT_TEST( Elimination_PTB_2ms ) \
- CPPUNIT_TEST( Elimination_PTB_2ms_stat) \
- CPPUNIT_TEST( Elimination_PTB_5ms ) \
- CPPUNIT_TEST( Elimination_PTB_5ms_stat) \
- CPPUNIT_TEST( Elimination_PTB_10ms ) \
- CPPUNIT_TEST( Elimination_PTB_10ms_stat) \
- /*CPPUNIT_TEST( Elimination_PTB_yield )*/ \
- CPPUNIT_TEST( Elimination_PTB_pause ) \
- CPPUNIT_TEST( Elimination_PTB_exp ) \
- CPPUNIT_TEST( Elimination_PTB_stat ) \
- CPPUNIT_TEST( Elimination_PTB_dyn ) \
- CPPUNIT_TEST( Elimination_PTB_dyn_stat)
+ CPPUNIT_TEST( Elimination_DHP ) \
+ CPPUNIT_TEST( Elimination_DHP_2ms ) \
+ CPPUNIT_TEST( Elimination_DHP_2ms_stat) \
+ CPPUNIT_TEST( Elimination_DHP_5ms ) \
+ CPPUNIT_TEST( Elimination_DHP_5ms_stat) \
+ CPPUNIT_TEST( Elimination_DHP_10ms ) \
+ CPPUNIT_TEST( Elimination_DHP_10ms_stat) \
+ /*CPPUNIT_TEST( Elimination_DHP_yield )*/ \
+ CPPUNIT_TEST( Elimination_DHP_pause ) \
+ CPPUNIT_TEST( Elimination_DHP_exp ) \
+ CPPUNIT_TEST( Elimination_DHP_stat ) \
+ CPPUNIT_TEST( Elimination_DHP_dyn ) \
+ CPPUNIT_TEST( Elimination_DHP_dyn_stat)
-#define CDSUNIT_DECLARE_MichaelDeque \
- TEST_BOUNDED( MichaelDequeL_HP ) \
- TEST_BOUNDED( MichaelDequeL_HP_seqcst ) \
- TEST_BOUNDED( MichaelDequeL_HP_ic ) \
- TEST_BOUNDED( MichaelDequeL_HP_exp ) \
- TEST_BOUNDED( MichaelDequeL_HP_yield ) \
- TEST_BOUNDED( MichaelDequeL_HP_stat ) \
- TEST_BOUNDED( MichaelDequeL_PTB ) \
- TEST_BOUNDED( MichaelDequeL_PTB_seqcst ) \
- TEST_BOUNDED( MichaelDequeL_PTB_ic ) \
- TEST_BOUNDED( MichaelDequeL_PTB_exp ) \
- TEST_BOUNDED( MichaelDequeL_PTB_yield ) \
- TEST_BOUNDED( MichaelDequeL_PTB_stat ) \
- TEST_BOUNDED( MichaelDequeR_HP ) \
- TEST_BOUNDED( MichaelDequeR_HP_seqcst ) \
- TEST_BOUNDED( MichaelDequeR_HP_ic ) \
- TEST_BOUNDED( MichaelDequeR_HP_exp ) \
- TEST_BOUNDED( MichaelDequeR_HP_yield ) \
- TEST_BOUNDED( MichaelDequeR_HP_stat ) \
- TEST_BOUNDED( MichaelDequeR_PTB ) \
- TEST_BOUNDED( MichaelDequeR_PTB_seqcst ) \
- TEST_BOUNDED( MichaelDequeR_PTB_ic ) \
- TEST_BOUNDED( MichaelDequeR_PTB_exp ) \
- TEST_BOUNDED( MichaelDequeR_PTB_yield ) \
- TEST_BOUNDED( MichaelDequeR_PTB_stat )
-
-#define CDSUNIT_TEST_MichaelDeque \
- CPPUNIT_TEST( MichaelDequeL_HP ) \
- /*CPPUNIT_TEST( MichaelDequeL_HP_seqcst )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_HP_ic )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_HP_exp )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_HP_yield )*/ \
- CPPUNIT_TEST( MichaelDequeL_HP_stat ) \
- CPPUNIT_TEST( MichaelDequeL_PTB ) \
- /*CPPUNIT_TEST( MichaelDequeL_PTB_seqcst )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_PTB_ic )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_PTB_exp )*/ \
- /*CPPUNIT_TEST( MichaelDequeL_PTB_yield )*/ \
- CPPUNIT_TEST( MichaelDequeL_PTB_stat ) \
- CPPUNIT_TEST( MichaelDequeR_HP ) \
- /*CPPUNIT_TEST( MichaelDequeR_HP_seqcst )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_HP_ic )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_HP_exp )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_HP_yield )*/ \
- CPPUNIT_TEST( MichaelDequeR_HP_stat ) \
- CPPUNIT_TEST( MichaelDequeR_PTB ) \
- /*CPPUNIT_TEST( MichaelDequeR_PTB_seqcst )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_PTB_ic )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_PTB_exp )*/ \
- /*CPPUNIT_TEST( MichaelDequeR_PTB_yield )*/ \
- CPPUNIT_TEST( MichaelDequeR_PTB_stat )
#define CDSUNIT_DECLARE_FCStack \
TEST_CASE( FCStack_deque ) \
#include <cds/container/fcdeque.h>
#include <cds/gc/hp.h>
-#include <cds/gc/ptb.h>
-#include <cds/gc/hrc.h>
+#include <cds/gc/dhp.h>
#include <mutex>
#include <cds/lock/spinlock.h>
struct Types {
// TreiberStack
- typedef cds::container::TreiberStack< cds::gc::HP, T
- > Treiber_HP;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > Treiber_HP_seqcst;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Treiber_HP_stat;
-
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- > Treiber_HRC;
-
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Treiber_HRC_stat;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- > Treiber_PTB;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Treiber_PTB_stat;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::back_off<cds::backoff::yield>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Treiber_HP_yield;
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::back_off<cds::backoff::pause>
- > Treiber_HP_pause;
- typedef cds::container::TreiberStack< cds::gc::HP, T,
- cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > Treiber_HP_exp;
-
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- ,cds::opt::back_off<cds::backoff::yield>
- > Treiber_HRC_yield;
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- ,cds::opt::back_off<cds::backoff::pause>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Treiber_HRC_pause;
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > Treiber_HRC_exp;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::back_off<cds::backoff::yield>
- > Treiber_PTB_yield;
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::back_off<cds::backoff::pause>
- > Treiber_PTB_pause;
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
+ typedef cds::container::TreiberStack< cds::gc::HP, T > Treiber_HP;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T > Treiber_DHP;
+
+ struct traits_Treiber_seqcst: public
+ cds::container::treiber_stack::make_traits<
+ cds::opt::memory_model<cds::opt::v::sequential_consistent>
+ >::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_seqcst > Treiber_HP_seqcst;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst > Treiber_DHP_seqcst;
+
+ struct traits_Treiber_stat: public
+ cds::container::treiber_stack::make_traits<
+ cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ >::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_stat > Treiber_HP_stat;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat > Treiber_DHP_stat;
+
+ struct traits_Treiber_yield: public
+ cds::container::treiber_stack::make_traits<
+ cds::opt::back_off<cds::backoff::yield>
+ , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ >::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_yield > Treiber_HP_yield;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield > Treiber_DHP_yield;
+
+ struct traits_Treiber_pause: public
+ cds::container::treiber_stack::make_traits<
+ cds::opt::back_off<cds::backoff::pause>
+ >::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_pause > Treiber_HP_pause;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause > Treiber_DHP_pause;
+
+ struct traits_Treiber_exp: public
+ cds::container::treiber_stack::make_traits<
+ cds::opt::back_off<
+ cds::backoff::exponential<
+ cds::backoff::pause,
+ cds::backoff::yield
+ >
>
- >
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Treiber_PTB_exp;
+ >::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_exp > Treiber_HP_exp;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp > Treiber_DHP_exp;
// Elimination stack
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- > Elimination_HP;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
- > Elimination_HP_2ms;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_HP_2ms_stat;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
- > Elimination_HP_5ms;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_HP_5ms_stat;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
- > Elimination_HP_10ms;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_HP_10ms_stat;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_HP_dyn;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > Elimination_HP_seqcst;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_HP_stat;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_HP_dyn_stat;
-
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- ,cds::opt::enable_elimination<true>
- > Elimination_HRC;
-
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_HRC_dyn;
-
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_HRC_stat;
-
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_HRC_dyn_stat;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
- > Elimination_PTB_2ms;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_PTB_2ms_stat;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
- > Elimination_PTB_5ms;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_PTB_5ms_stat;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
- > Elimination_PTB_10ms;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_PTB_10ms_stat;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- > Elimination_PTB;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_PTB_dyn;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- > Elimination_PTB_stat;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
- > Elimination_PTB_dyn_stat;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::yield>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Elimination_HP_yield;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::pause>
- > Elimination_HP_pause;
-
- typedef cds::container::TreiberStack< cds::gc::HP, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > Elimination_HP_exp;
-
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::yield>
- > Elimination_HRC_yield;
-
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::pause>
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Elimination_HRC_pause;
-
- typedef cds::container::TreiberStack< cds::gc::HRC, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > Elimination_HRC_exp;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::yield>
- > Elimination_PTB_yield;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<cds::backoff::pause>
- > Elimination_PTB_pause;
-
- typedef cds::container::TreiberStack< cds::gc::PTB, T
- ,cds::opt::enable_elimination<true>
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
+ struct traits_Elimination_on : public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_on > Elimination_HP;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_on > Elimination_DHP;
+
+ struct traits_Elimination_stat : public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_stat > Elimination_HP_stat;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat > Elimination_DHP_stat;
+
+ struct traits_Elimination_2ms: public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_2ms > Elimination_HP_2ms;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms > Elimination_HP_2ms;
+
+ struct traits_Elimination_2ms_stat : public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+ , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_2ms_stat > Elimination_HP_2ms_stat;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat > Elimination_DHP_2ms_stat;
+
+ struct traits_Elimination_5ms : public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_5ms > Elimination_HP_5ms;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms > Elimination_DHP_5ms;
+
+ struct traits_Elimination_5ms_stat : public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+ , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_5ms_stat > Elimination_HP_5ms_stat;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat > Elimination_DHP_5ms_stat;
+
+ struct traits_Elimination_10ms : public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_10ms > Elimination_HP_10ms;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms > Elimination_DHP_10ms;
+
+ struct traits_Elimination_10ms_stat : public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+ , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_10ms_stat > Elimination_HP_10ms;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat > Elimination_DHP_10ms;
+
+ struct traits_Elimination_dyn: public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_dyn > Elimination_HP_dyn;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn > Elimination_DHP_dyn;
+
+ struct traits_Elimination_seqcst: public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ , cds::opt::memory_model<cds::opt::v::sequential_consistent>
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_seqcst > Elimination_HP_seqcst;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_seqcst > Elimination_DHP_seqcst;
+
+ struct traits_Elimination_dyn_stat: public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+ , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_dyn_stat > Elimination_HP_dyn_stat;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat > Elimination_DHP_dyn_stat;
+
+ struct traits_Elimination_yield: public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ , cds::opt::back_off<cds::backoff::yield>
+ , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_yield > Elimination_HP_yield;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield > Elimination_DHP_yield;
+
+ struct traits_Elimination_pause: public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ , cds::opt::back_off<cds::backoff::pause>
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_pause > Elimination_HP_pause;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause > Elimination_DHP_pause;
+
+ struct traits_Elimination_exp: public
+ cds::container::treiber_stack::make_traits <
+ cds::opt::enable_elimination<true>
+ ,cds::opt::back_off<
+ cds::backoff::exponential<
+ cds::backoff::pause,
+ cds::backoff::yield
+ >
>
- >
- ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
- > Elimination_PTB_exp;
+ > ::type
+ {};
+ typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_exp > Elimination_HP_exp;
+ typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp > Elimination_DHP_exp;
+
// FCStack
typedef cds::container::FCStack< T > FCStack_deque;
} // 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"
<< "\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;
}