#include <cds/intrusive/segmented_queue.h>
#include <cds/gc/hp.h>
-#include <cds/gc/hrc.h> //TODO: remove this line!
#include <cds/gc/dhp.h>
#include <boost/intrusive/slist.hpp>
// TsigasCycleQueue
class TsigasCycleQueue_dyn
- : public cds::intrusive::TsigasCycleQueue< T
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+ : public cds::intrusive::TsigasCycleQueue< T,
+ typename cds::intrusive::tsigas_queue::make_traits<
+ cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+ >::type
>
{
- typedef cds::intrusive::TsigasCycleQueue< T
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+ typedef cds::intrusive::TsigasCycleQueue< T,
+ typename cds::intrusive::tsigas_queue::make_traits<
+ cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+ >::type
> base_class;
public:
TsigasCycleQueue_dyn()
};
class TsigasCycleQueue_dyn_ic
- : public cds::intrusive::TsigasCycleQueue< T
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
+ : public cds::intrusive::TsigasCycleQueue< T,
+ typename cds::intrusive::tsigas_queue::make_traits<
+ cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+ ,cds::opt::item_counter< cds::atomicity::item_counter >
+ >::type
>
{
- typedef cds::intrusive::TsigasCycleQueue< T
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
+ typedef cds::intrusive::TsigasCycleQueue< T,
+ typename cds::intrusive::tsigas_queue::make_traits<
+ cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+ ,cds::opt::item_counter< cds::atomicity::item_counter >
+ >::type
> base_class;
public:
TsigasCycleQueue_dyn_ic()
};
// VyukovMPMCCycleQueue
+ struct traits_VyukovMPMCCycleQueue_dyn : public cds::intrusive::vyukov_queue::traits
+ {
+ typedef cds::opt::v::dynamic_buffer< int > buffer;
+ };
class VyukovMPMCCycleQueue_dyn
- : public cds::intrusive::VyukovMPMCCycleQueue< T
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
- >
+ : public cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn >
{
- typedef cds::intrusive::VyukovMPMCCycleQueue< T
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
- > base_class;
+ typedef cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn > base_class;
public:
VyukovMPMCCycleQueue_dyn()
: base_class( 1024 * 64 )
}
};
+ struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
+ {
+ typedef cds::atomicity::item_counter item_counter;
+ };
class VyukovMPMCCycleQueue_dyn_ic
- : public cds::intrusive::VyukovMPMCCycleQueue< T
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- >
+ : public cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn_ic >
{
- typedef cds::intrusive::VyukovMPMCCycleQueue< T
- ,cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- > base_class;
+ typedef cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
public:
VyukovMPMCCycleQueue_dyn_ic()
: base_class( 1024 * 64 )
// *********************************************
// Queue statistics
namespace std {
-
+ /*
// cds::intrusive::queue_stat
template <typename Counter>
static inline std::ostream& operator <<(std::ostream& o, cds::intrusive::queue_stat<Counter> const& s)
{
return o;
}
+ */
template <typename Counter>
static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::optimistic_queue::stat<Counter> const& s )
{
return o
- << static_cast<cds::intrusive::queue_stat<Counter> const&>( s )
- << "\t\t"
- << "\t\t fix list call: " << s.m_FixListCount.get() << "\n";
+ << "\tStatistics:\n"
+ << "\t\t Enqueue count: " << s.m_EnqueueCount.get() << "\n"
+ << "\t\t Enqueue race: " << s.m_EnqueueRace.get() << "\n"
+ << "\t\t Dequeue count: " << s.m_DequeueCount.get() << "\n"
+ << "\t\t Dequeue race: " << s.m_DequeueRace.get() << "\n"
+ << "\t\tAdvance tail error: " << s.m_AdvanceTailError.get() << "\n"
+ << "\t\t Bad tail: " << s.m_BadTail.get() << "\n"
+ << "\t\t fix list call: " << s.m_FixListCount.get() << "\n";
}
- static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::optimistic_queue::dummy_stat const& s )
+ static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::optimistic_queue::empty_stat const& s )
{
return o;
}