Merge commit '7999eaee97df27c88866d1dfd130068dba955e88' into dev
[libcds.git] / tests / unit / queue / intrusive_queue_type.h
index 9a0e99b51e864fcf594a75a51e8e62453f2311b4..6733439677f8c65727b591fc3049a7850d0ec4a4 100644 (file)
@@ -13,7 +13,6 @@
 #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>
@@ -217,12 +216,16 @@ namespace queue {
 
         // 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()
@@ -240,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()
@@ -264,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 )
@@ -286,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 )
@@ -452,7 +457,7 @@ namespace queue {
 // *********************************************
 // 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)
@@ -470,6 +475,7 @@ namespace std {
     {
         return o;
     }
+    */
 
 
     template <typename Counter>
@@ -519,12 +525,17 @@ namespace std {
     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;
     }