From 8627bd71367e9fe34ee594360e2cc31dba91451b Mon Sep 17 00:00:00 2001 From: khizmax Date: Thu, 9 Oct 2014 13:17:09 +0400 Subject: [PATCH] FCPriorityQueue refactoring --- cds/container/fcpriority_queue.h | 27 +++++++++---------- .../priority_queue/hdr_fcpqueue_vector.cpp | 8 +++--- tests/unit/pqueue/pqueue_type.h | 8 +++--- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/cds/container/fcpriority_queue.h b/cds/container/fcpriority_queue.h index e692587b..7d211d4b 100644 --- a/cds/container/fcpriority_queue.h +++ b/cds/container/fcpriority_queue.h @@ -43,23 +43,22 @@ namespace cds { namespace container { //@endcond }; - /// FCPriorityQueue type traits - struct type_traits: public cds::algo::flat_combining::type_traits + /// FCPriorityQueue traits + struct traits: public cds::algo::flat_combining::type_traits { typedef empty_stat stat; ///< Internal statistics }; /// Metafunction converting option list to traits /** - This is a wrapper for cds::opt::make_options< type_traits, Options...> \p Options are: - \p opt::lock_type - mutex type, default is \p cds::lock::Spin - - \p opt::back_off - back-off strategy, defalt is \p cds::backoff::Default + - \p opt::back_off - back-off strategy, defalt is \p cds::backoff::delay_of<2> - \p opt::allocator - allocator type, default is \ref CDS_DEFAULT_ALLOCATOR - - \p opt::stat - internal statistics, possible type: \ref stat, \ref empty_stat (the default) + - \p opt::stat - internal statistics, possible type: \p fcpqueue::stat, \p fcpqueue::empty_stat (the default) - \p opt::memory_model - C++ memory ordering model. - List of all available memory ordering see opt::memory_model. - Default is cds::opt::v:relaxed_ordering + List of all available memory ordering see \p opt::memory_model. + Default is \p cds::opt::v:relaxed_ordering */ template struct make_traits { @@ -67,7 +66,7 @@ namespace cds { namespace container { typedef implementation_defined type ; ///< Metafunction result # else typedef typename cds::opt::make_options< - typename cds::opt::find_type_traits< type_traits, Options... >::type + typename cds::opt::find_type_traits< traits, Options... >::type ,Options... >::type type; # endif @@ -86,12 +85,12 @@ namespace cds { namespace container { Template parameters: - \p T - a value type stored in the queue - \p PriorityQueue - sequential priority queue implementation, default is \p std::priority_queue - - \p Traits - type traits of flat combining, default is \p fcpqueue::type_traits. - \p fcpqueue::make_traits metafunction can be used to construct specialized \p %type_traits + - \p Traits - type traits of flat combining, default is \p fcpqueue::traits. + \p fcpqueue::make_traits metafunction can be used to construct specialized \p %fcpqueue::traits */ template , - typename Traits = fcpqueue::type_traits + typename Traits = fcpqueue::traits > class FCPriorityQueue #ifndef CDS_DOXYGEN_INVOKED @@ -101,9 +100,9 @@ namespace cds { namespace container { public: typedef T value_type; ///< Value type typedef PriorityQueue priority_queue_type; ///< Sequential priority queue class - typedef Traits type_traits; ///< Priority queue type traits + typedef Traits traits; ///< Priority queue type traits - typedef typename type_traits::stat stat; ///< Internal statistics type + typedef typename traits::stat stat; ///< Internal statistics type protected: //@cond @@ -127,7 +126,7 @@ namespace cds { namespace container { //@endcond /// Flat combining kernel - typedef cds::algo::flat_combining::kernel< fc_record, type_traits > fc_kernel; + typedef cds::algo::flat_combining::kernel< fc_record, traits > fc_kernel; protected: //@cond diff --git a/tests/test-hdr/priority_queue/hdr_fcpqueue_vector.cpp b/tests/test-hdr/priority_queue/hdr_fcpqueue_vector.cpp index 613f2d64..fa58de1f 100644 --- a/tests/test-hdr/priority_queue/hdr_fcpqueue_vector.cpp +++ b/tests/test-hdr/priority_queue/hdr_fcpqueue_vector.cpp @@ -13,6 +13,10 @@ namespace priority_queue { void PQueueHdrTest::FCPQueue_vector_stat() { + struct pqueue_traits : public cds::container::fcpqueue::traits + { + typedef cds::container::fcpqueue::stat<> stat; + }; typedef cds::container::FCPriorityQueue< PQueueHdrTest::value_type ,std::priority_queue< @@ -20,9 +24,7 @@ namespace priority_queue { ,std::vector ,PQueueHdrTest::less > - ,cds::container::fcpqueue::make_traits< - cds::opt::stat< cds::container::fcpqueue::stat<> > - >::type + ,pqueue_traits > pqueue_type; test_fcpqueue(); } diff --git a/tests/unit/pqueue/pqueue_type.h b/tests/unit/pqueue/pqueue_type.h index 4c5572f2..e6d0cf95 100644 --- a/tests/unit/pqueue/pqueue_type.h +++ b/tests/unit/pqueue/pqueue_type.h @@ -408,9 +408,11 @@ namespace pqueue { #endif // FCPriorityQueue - typedef cds::container::fcpqueue::make_traits< - cds::opt::stat< cds::container::fcpqueue::stat<> > - >::type traits_FCPQueue_stat; + struct traits_FCPQueue_stat : public + cds::container::fcpqueue::make_traits < + cds::opt::stat < cds::container::fcpqueue::stat<> > + > ::type + {}; typedef cds::container::FCPriorityQueue< Value > FCPQueue_vector; typedef cds::container::FCPriorityQueue< Value -- 2.34.1