//$$CDS-header$$
#include "hdr_intrusive_msqueue.h"
-#include "hdr_intrusive_singlelink_node.h"
#include <cds/intrusive/msqueue.h>
#include <cds/gc/hp.h>
#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
namespace {
- typedef ci::MSQueue< cds::gc::HP,
- base_hook_item<cds::gc::HP>
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ typedef IntrusiveQueueHeaderTest::base_hook_item< ci::msqueue::node<cds::gc::HP > > base_item_type;
+ typedef IntrusiveQueueHeaderTest::member_hook_item< ci::msqueue::node<cds::gc::HP > > member_item_type;
+
+ typedef ci::MSQueue< cds::gc::HP, base_item_type,
+ typename ci::msqueue::make_traits<
+ ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ >::type
> MSQueue_HP_default;
/// HP + item counter
- typedef ci::MSQueue< cds::gc::HP,
- base_hook_item<cds::gc::HP>
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::item_counter< cds::atomicity::item_counter >
- ,co::memory_model< co::v::sequential_consistent >
+ typedef ci::MSQueue< cds::gc::HP, base_item_type,
+ typename ci::msqueue::make_traits<
+ ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ ,co::item_counter< cds::atomicity::item_counter >
+ ,co::memory_model< co::v::sequential_consistent >
+ >::type
> MSQueue_HP_default_ic;
/// HP + stat
- typedef ci::MSQueue< cds::gc::HP,
- base_hook_item<cds::gc::HP>
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::queue_stat<> >
+ typedef ci::MSQueue< cds::gc::HP, base_item_type,
+ typename ci::msqueue::make_traits<
+ ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ ,co::stat< ci::msqueue::stat<> >
+ >::type
> MSQueue_HP_default_stat;
// HP base hook
- typedef ci::MSQueue< cds::gc::HP,
- base_hook_item<cds::gc::HP>
- ,ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ typedef ci::MSQueue< cds::gc::HP, base_item_type,
+ typename ci::msqueue::make_traits<
+ ci::opt::hook<
+ ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
+ >
+ ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ >::type
> MSQueue_HP_base;
// HP member hook
- typedef ci::MSQueue< cds::gc::HP,
- member_hook_item<cds::gc::HP>
- ,ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(member_hook_item<cds::gc::HP>, hMember),
- ci::opt::gc<cds::gc::HP>
+ typedef ci::MSQueue< cds::gc::HP, member_item_type,
+ typename ci::msqueue::make_traits<
+ ci::opt::hook<
+ ci::msqueue::member_hook<
+ offsetof( member_item_type, hMember ),
+ ci::opt::gc<cds::gc::HP>
+ >
>
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ >::type
> MSQueue_HP_member;
/// HP base hook + item counter
- typedef ci::MSQueue< cds::gc::HP,
- base_hook_item<cds::gc::HP>
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::item_counter< cds::atomicity::item_counter >
- ,co::memory_model< co::v::relaxed_ordering >
+ typedef ci::MSQueue< cds::gc::HP, base_item_type,
+ typename ci::msqueue::make_traits<
+ ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ ,ci::opt::hook<
+ ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
+ >
+ ,co::item_counter< cds::atomicity::item_counter >
+ ,co::memory_model< co::v::relaxed_ordering >
+ >::type
> MSQueue_HP_base_ic;
// HP member hook + item counter
- typedef ci::MSQueue< cds::gc::HP,
- member_hook_item<cds::gc::HP>
- ,ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(member_hook_item<cds::gc::HP>, hMember),
- ci::opt::gc<cds::gc::HP>
+ typedef ci::MSQueue< cds::gc::HP, member_item_type,
+ typename ci::msqueue::make_traits<
+ ci::opt::hook<
+ ci::msqueue::member_hook<
+ offsetof( member_item_type, hMember ),
+ ci::opt::gc<cds::gc::HP>
+ >
>
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::item_counter< cds::atomicity::item_counter >
+ ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ ,co::item_counter< cds::atomicity::item_counter >
+ >::type
> MSQueue_HP_member_ic;
// HP base hook + stat
- typedef ci::MSQueue< cds::gc::HP,
- base_hook_item<cds::gc::HP>
- ,ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::queue_stat<> >
+ typedef ci::MSQueue< cds::gc::HP, base_item_type,
+ typename ci::msqueue::make_traits<
+ ci::opt::hook<
+ ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
+ >
+ ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ ,co::stat< ci::msqueue::stat<> >
+ >::type
> MSQueue_HP_base_stat;
// HP member hook + stat
- typedef ci::MSQueue< cds::gc::HP,
- member_hook_item<cds::gc::HP>
- ,ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(member_hook_item<cds::gc::HP>, hMember),
- ci::opt::gc<cds::gc::HP>
+ typedef ci::MSQueue< cds::gc::HP, member_item_type,
+ typename ci::msqueue::make_traits<
+ ci::opt::hook<
+ ci::msqueue::member_hook<
+ offsetof( member_item_type, hMember ),
+ ci::opt::gc<cds::gc::HP>
+ >
>
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::queue_stat<> >
+ ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ ,co::stat< ci::msqueue::stat<> >
+ >::type
> MSQueue_HP_member_stat;
// HP base hook + alignment
- typedef ci::MSQueue< cds::gc::HP,
- base_hook_item<cds::gc::HP>
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::alignment< 32 >
+ typedef ci::MSQueue< cds::gc::HP, base_item_type,
+ typename ci::msqueue::make_traits<
+ ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ ,ci::opt::hook<
+ ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
+ >
+ ,co::alignment< 32 >
+ >::type
> MSQueue_HP_base_align;
// HP member hook + alignment
- typedef ci::MSQueue< cds::gc::HP,
- member_hook_item<cds::gc::HP>
- ,ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(member_hook_item<cds::gc::HP>, hMember),
- ci::opt::gc<cds::gc::HP>
+ typedef ci::MSQueue< cds::gc::HP, member_item_type,
+ typename ci::msqueue::make_traits<
+ ci::opt::hook<
+ ci::msqueue::member_hook<
+ offsetof( member_item_type, hMember ),
+ ci::opt::gc<cds::gc::HP>
+ >
>
- >
- ,co::alignment< 32 >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ ,co::alignment< 32 >
+ ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
+ >::type
> MSQueue_HP_member_align;
// HP base hook + no alignment
- typedef ci::MSQueue< cds::gc::HP,
- base_hook_item<cds::gc::HP>
- ,ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::alignment< co::no_special_alignment >
- > MSQueue_HP_base_noalign;
+ struct traits_MSQueue_HP_base_noalign : public ci::msqueue::traits {
+ typedef ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> > hook;
+ typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
+ enum { alignment = co::no_special_alignment };
+ };
+ typedef ci::MSQueue< cds::gc::HP, base_item_type, traits_MSQueue_HP_base_noalign > MSQueue_HP_base_noalign;
// HP member hook + no alignment
- typedef ci::MSQueue< cds::gc::HP,
- member_hook_item<cds::gc::HP>
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(member_hook_item<cds::gc::HP>, hMember),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,co::alignment< co::no_special_alignment >
- > MSQueue_HP_member_noalign;
+ struct traits_MSQueue_HP_member_noalign : public ci::msqueue::traits {
+ typedef ci::msqueue::member_hook <
+ offsetof( member_item_type, hMember ),
+ ci::opt::gc < cds::gc::HP >
+ > hook;
+ typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
+ enum { alignment = co::no_special_alignment };
+ };
+ typedef ci::MSQueue< cds::gc::HP, member_item_type, traits_MSQueue_HP_member_noalign > MSQueue_HP_member_noalign;
// HP base hook + cache alignment
- typedef ci::MSQueue< cds::gc::HP,
- base_hook_item<cds::gc::HP>
- ,ci::opt::hook<
- ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::alignment< co::cache_line_alignment >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- > MSQueue_HP_base_cachealign;
+ struct traits_MSQueue_HP_base_cachealign : public traits_MSQueue_HP_base_noalign
+ {
+ enum { alignment = co::cache_line_alignment };
+ };
+ typedef ci::MSQueue< cds::gc::HP, base_item_type, traits_MSQueue_HP_base_cachealign > MSQueue_HP_base_cachealign;
// HP member hook + cache alignment
- typedef ci::MSQueue< cds::gc::HP,
- member_hook_item<cds::gc::HP>
- ,ci::opt::hook<
- ci::single_link::member_hook<
- offsetof(member_hook_item<cds::gc::HP>, hMember),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,co::alignment< co::cache_line_alignment >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- > MSQueue_HP_member_cachealign;
+ struct traits_MSQueue_HP_member_cachealign : public traits_MSQueue_HP_member_noalign
+ {
+ enum { alignment = co::cache_line_alignment };
+ };
+ typedef ci::MSQueue< cds::gc::HP, member_item_type, traits_MSQueue_HP_member_cachealign > MSQueue_HP_member_cachealign;
}