Merge commit '7999eaee97df27c88866d1dfd130068dba955e88' into dev
[libcds.git] / tests / unit / queue / intrusive_queue_type.h
index 825aae882e6ae240c9a090ab7e80c12118ae8c24..6733439677f8c65727b591fc3049a7850d0ec4a4 100644 (file)
@@ -13,7 +13,6 @@
 #include <cds/intrusive/segmented_queue.h>
 
 #include <cds/gc/hp.h>
-#include <cds/gc/hrc.h>
 #include <cds/gc/dhp.h>
 
 #include <boost/intrusive/slist.hpp>
@@ -153,55 +152,80 @@ namespace queue {
 
 
         // OptimisticQueue
-        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-        >   OptimisticQueue_HP;
-
-        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::memory_model< cds::opt::v::sequential_consistent >
-        >   OptimisticQueue_HP_seqcst;
+        struct traits_OptimisticQueue_HP : public cds::intrusive::optimistic_queue::traits
+        {
+            typedef cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
+        };
+        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP > OptimisticQueue_HP;
 
-        typedef cds::intrusive::OptimisticQueue< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::PTB > > >
-        >   OptimisticQueue_PTB;
+        struct traits_OptimisticQueue_HP_seqcst : public
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_seqcst > OptimisticQueue_HP_seqcst;
 
-        typedef cds::intrusive::OptimisticQueue< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::memory_model< cds::opt::v::sequential_consistent >
-        >   OptimisticQueue_PTB_seqcst;
+        struct traits_OptimisticQueue_DHP : public cds::intrusive::optimistic_queue::traits
+        {
+            typedef cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
+        };
+        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP > OptimisticQueue_DHP;
 
+        struct traits_OptimisticQueue_DHP_seqcst: public
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_seqcst > OptimisticQueue_DHP_seqcst;
 
         // OptimisticQueue + item counter
-        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::item_counter< cds::atomicity::item_counter >
-        >   OptimisticQueue_HP_ic;
+        struct traits_OptimisticQueue_HP_ic: public 
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_ic > OptimisticQueue_HP_ic;
 
-        typedef cds::intrusive::OptimisticQueue< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::item_counter< cds::atomicity::item_counter >
-        >   OptimisticQueue_PTB_ic;
+        struct traits_OptimisticQueue_DHP_ic: public
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_ic > OptimisticQueue_DHP_ic;
 
         // OptimisticQueue + stat
-        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::stat< cds::intrusive::queue_stat<> >
-        >   OptimisticQueue_HP_stat;
+        struct traits_OptimisticQueue_HP_stat: public 
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                , cds::opt::stat< cds::intrusive::optimistic_queue::stat<> >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_stat > OptimisticQueue_HP_stat;
 
-        typedef cds::intrusive::OptimisticQueue< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::stat< cds::intrusive::queue_stat<> >
-        >   OptimisticQueue_PTB_stat;
+        struct traits_OptimisticQueue_DHP_stat: public 
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                , cds::opt::stat< cds::intrusive::optimistic_queue::stat<> >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_stat > OptimisticQueue_DHP_stat;
 
         // 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()
@@ -219,14 +243,18 @@ namespace queue {
         };
 
         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()
@@ -243,14 +271,14 @@ namespace queue {
         };
 
         // 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 )
@@ -265,16 +293,14 @@ namespace queue {
             }
         };
 
+        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 )
@@ -290,64 +316,69 @@ namespace queue {
         };
 
         // BasketQueue
-        typedef cds::intrusive::BasketQueue< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-        >   BasketQueue_HP;
-
-        typedef cds::intrusive::BasketQueue<cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::memory_model< cds::opt::v::sequential_consistent >
-        >   BasketQueue_HP_seqcst;
-
-        typedef cds::intrusive::BasketQueue< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HRC > > >
-        >   BasketQueue_HRC;
+        struct traits_BasketQueue_HP : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP > BasketQueue_HP;
 
-        typedef cds::intrusive::BasketQueue< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::memory_model< cds::opt::v::sequential_consistent >
-        >   BasketQueue_HRC_seqcst;
+        struct traits_BasketQueue_HP_seqcst: public 
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue<cds::gc::HP, T, traits_BasketQueue_HP_seqcst > BasketQueue_HP_seqcst;
 
-        typedef cds::intrusive::BasketQueue< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::PTB > > >
-        >   BasketQueue_PTB;
+        struct traits_BasketQueue_DHP : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP > BasketQueue_DHP;
 
-        typedef cds::intrusive::BasketQueue< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::memory_model< cds::opt::v::sequential_consistent >
-        >   BasketQueue_PTB_seqcst;
+        struct traits_BasketQueue_DHP_seqcst: public 
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_seqcst > BasketQueue_DHP_seqcst;
 
         // BasketQueue + item counter
-        typedef cds::intrusive::BasketQueue< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::item_counter< cds::atomicity::item_counter >
-        >   BasketQueue_HP_ic;
-
-        typedef cds::intrusive::BasketQueue< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::item_counter< cds::atomicity::item_counter >
-        >   BasketQueue_HRC_ic;
+        struct traits_BasketQueue_HP_ic : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                ,cds::opt::item_counter< cds::atomicity::item_counter >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP_ic > BasketQueue_HP_ic;
 
-        typedef cds::intrusive::BasketQueue< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::item_counter< cds::atomicity::item_counter >
-        >   BasketQueue_PTB_ic;
+        struct traits_BasketQueue_DHP_ic : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                ,cds::opt::item_counter< cds::atomicity::item_counter >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_ic > BasketQueue_DHP_ic;
 
         // BasketQueue + stat
-        typedef cds::intrusive::BasketQueue< cds::gc::HP, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-            ,cds::opt::stat< cds::intrusive::queue_stat<> >
-        >   BasketQueue_HP_stat;
-
-        typedef cds::intrusive::BasketQueue< cds::gc::HRC, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HRC > > >
-            ,cds::opt::stat< cds::intrusive::queue_stat<> >
-        >   BasketQueue_HRC_stat;
+        struct traits_BasketQueue_HP_stat : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                , cds::opt::stat< cds::intrusive::basket_queue::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP_stat > BasketQueue_HP_stat;
 
-        typedef cds::intrusive::BasketQueue< cds::gc::PTB, T
-            ,cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::PTB > > >
-            ,cds::opt::stat< cds::intrusive::queue_stat<> >
-        >   BasketQueue_PTB_stat;
+        struct traits_BasketQueue_DHP_stat : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                , cds::opt::stat< cds::intrusive::basket_queue::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_stat > BasketQueue_DHP_stat;
 
         // FCQueue
         class traits_FCQueue_delay2:
@@ -426,57 +457,85 @@ namespace queue {
 // *********************************************
 // Queue statistics
 namespace std {
-
+    /*
     // cds::intrusive::queue_stat
     template <typename Counter>
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::msqueue::stat<Counter> const& s )
+    static inline std::ostream& operator <<(std::ostream& o, cds::intrusive::queue_stat<Counter> const& s)
     {
         return o
             << "\tStatistics:\n"
             << "\t\t     Enqueue count: " << s.m_EnqueueCount.get() << "\n"
-            << "\t\t      Enqueue race: " << s.m_EnqueueRace.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\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";
     }
-
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::msqueue::empty_stat const& s )
+    static inline std::ostream& operator <<(std::ostream& o, cds::intrusive::queue_dummy_stat const& s)
     {
         return o;
     }
+    */
 
-    static inline std::ostream& operator <<( std::ostream& o, cds::opt::none )
+
+    template <typename Counter>
+    static inline std::ostream& operator <<(std::ostream& o, cds::intrusive::basket_queue::stat<Counter> const& s)
+    {
+        return o
+            << "\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\t Advance tail error: " << s.m_AdvanceTailError.get() << "\n"
+            << "\t\t           Bad tail: " << s.m_BadTail.get() << "\n"
+            << "\t\tAdd basket attempts: " << s.m_TryAddBasket.get() << "\n"
+            << "\t\t Add basket success: " << s.m_AddBasketCount.get() << "\n";
+    }
+    static inline std::ostream& operator <<(std::ostream& o, cds::intrusive::basket_queue::empty_stat const& s)
     {
         return o;
     }
 
-    // cds::intrusive::optimistic_queue::stat
     template <typename Counter>
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::optimistic_queue::stat<Counter> const& s )
+    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::msqueue::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";
     }
 
-    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::msqueue::empty_stat const& s )
     {
         return o;
     }
 
-    // cds::intrusive::basket_queue::stat
+    static inline std::ostream& operator <<( std::ostream& o, cds::opt::none )
+    {
+        return o;
+    }
+
+    // cds::intrusive::optimistic_queue::stat
     template <typename Counter>
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::basket_queue::stat<Counter> const& s )
+    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\tTry Add basket count: " << s.m_TryAddBasket.get() << "\n"
-            << "\t\t    Add basket count: " << s.m_AddBasketCount.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::basket_queue::dummy_stat const& s )
+    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::optimistic_queue::empty_stat const& s )
     {
         return o;
     }