#include <boost/container/deque.hpp>
#include <cds_test/stress_test.h>
+#include <cds_test/stat_flat_combining_out.h>
#include "print_stat.h"
namespace queue {
typedef cds::container::RWQueue< Value, traits_RWQueue_mutex > RWQueue_mutex;
// FCQueue
- class traits_FCQueue_elimination:
+ struct traits_FCQueue_single_mutex_single_condvar:
+ public cds::container::fcqueue::make_traits<
+ cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<>>
+ >::type
+ {};
+ struct traits_FCQueue_single_mutex_single_condvar_stat: traits_FCQueue_single_mutex_single_condvar
+ {
+ typedef cds::container::fcqueue::stat<> stat;
+ };
+ struct traits_FCQueue_single_mutex_multi_condvar:
+ public cds::container::fcqueue::make_traits<
+ cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<>>
+ >::type
+ {};
+ struct traits_FCQueue_single_mutex_multi_condvar_stat: traits_FCQueue_single_mutex_multi_condvar
+ {
+ typedef cds::container::fcqueue::stat<> stat;
+ };
+ struct traits_FCQueue_multi_mutex_multi_condvar:
+ public cds::container::fcqueue::make_traits<
+ cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<>>
+ >::type
+ {};
+ struct traits_FCQueue_multi_mutex_multi_condvar_stat: traits_FCQueue_multi_mutex_multi_condvar
+ {
+ typedef cds::container::fcqueue::stat<> stat;
+ };
+ struct traits_FCQueue_elimination:
public cds::container::fcqueue::make_traits<
cds::opt::enable_elimination< true >
>::type
{};
- class traits_FCQueue_elimination_stat:
+ struct traits_FCQueue_elimination_stat:
public cds::container::fcqueue::make_traits<
cds::opt::enable_elimination< true >
,cds::opt::stat< cds::container::fcqueue::stat<> >
{};
typedef cds::container::FCQueue< Value > FCQueue_deque;
+ typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_single_condvar> FCQueue_deque_wait_ss;
+ typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_single_condvar_stat> FCQueue_deque_wait_ss_stat;
+ typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_multi_condvar> FCQueue_deque_wait_sm;
+ typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_multi_condvar_stat> FCQueue_deque_wait_sm_stat;
+ typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_multi_mutex_multi_condvar> FCQueue_deque_wait_mm;
+ typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_multi_mutex_multi_condvar_stat> FCQueue_deque_wait_mm_stat;
+
typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination > FCQueue_deque_elimination;
typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination_stat > FCQueue_deque_elimination_stat;
- typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> > > FCQueue_list;
+ typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >> FCQueue_list;
+ typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_single_condvar> FCQueue_list_wait_ss;
+ typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_single_condvar_stat> FCQueue_list_wait_ss_stat;
+ typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_multi_condvar> FCQueue_list_wait_sm;
+ typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_multi_condvar_stat> FCQueue_list_wait_sm_stat;
+ typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_multi_mutex_multi_condvar> FCQueue_list_wait_mm;
+ typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_multi_mutex_multi_condvar_stat> FCQueue_list_wait_mm_stat;
+
typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination > FCQueue_list_elimination;
typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination_stat > FCQueue_list_elimination_stat;
>::type
{};
+ struct traits_FCDeque_wait_ss: cds::container::fcdeque::traits
+ {
+ typedef cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<> wait_strategy;
+ };
+ struct traits_FCDeque_wait_ss_stat: traits_FCDeque_wait_ss
+ {
+ typedef cds::container::fcdeque::stat<> stat;
+ };
+ struct traits_FCDeque_wait_sm: cds::container::fcdeque::traits
+ {
+ typedef cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<> wait_strategy;
+ };
+ struct traits_FCDeque_wait_sm_stat: traits_FCDeque_wait_sm
+ {
+ typedef cds::container::fcdeque::stat<> stat;
+ };
+ struct traits_FCDeque_wait_mm: cds::container::fcdeque::traits
+ {
+ typedef cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<> wait_strategy;
+ };
+ struct traits_FCDeque_wait_mm_stat: traits_FCDeque_wait_mm
+ {
+ typedef cds::container::fcdeque::stat<> stat;
+ };
+
typedef details::FCDequeL< Value > FCDequeL_default;
typedef details::FCDequeL< Value, traits_FCDeque_mutex > FCDequeL_mutex;
typedef details::FCDequeL< Value, traits_FCDeque_stat > FCDequeL_stat;
+ typedef details::FCDequeL< Value, traits_FCDeque_wait_ss > FCDequeL_wait_ss;
+ typedef details::FCDequeL< Value, traits_FCDeque_wait_ss_stat > FCDequeL_wait_ss_stat;
+ typedef details::FCDequeL< Value, traits_FCDeque_wait_sm > FCDequeL_wait_sm;
+ typedef details::FCDequeL< Value, traits_FCDeque_wait_sm_stat > FCDequeL_wait_sm_stat;
+ typedef details::FCDequeL< Value, traits_FCDeque_wait_mm > FCDequeL_wait_mm;
+ typedef details::FCDequeL< Value, traits_FCDeque_wait_mm_stat > FCDequeL_wait_mm_stat;
typedef details::FCDequeL< Value, traits_FCDeque_elimination > FCDequeL_elimination;
typedef details::FCDequeL< Value, traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
typedef details::FCDequeR< Value > FCDequeR_default;
typedef details::FCDequeR< Value, traits_FCDeque_mutex > FCDequeR_mutex;
typedef details::FCDequeR< Value, traits_FCDeque_stat > FCDequeR_stat;
+ typedef details::FCDequeR< Value, traits_FCDeque_wait_ss > FCDequeR_wait_ss;
+ typedef details::FCDequeR< Value, traits_FCDeque_wait_ss_stat > FCDequeR_wait_ss_stat;
+ typedef details::FCDequeR< Value, traits_FCDeque_wait_sm > FCDequeR_wait_sm;
+ typedef details::FCDequeR< Value, traits_FCDeque_wait_sm_stat > FCDequeR_wait_sm_stat;
+ typedef details::FCDequeR< Value, traits_FCDeque_wait_mm > FCDequeR_wait_mm;
+ typedef details::FCDequeR< Value, traits_FCDeque_wait_mm_stat > FCDequeR_wait_mm_stat;
typedef details::FCDequeR< Value, traits_FCDeque_elimination > FCDequeR_elimination;
typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
typedef details::FCDequeR< Value, traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_boost_elimination;
typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_boost_elimination_stat;
+ // STL
typedef StdQueue_deque<Value> StdQueue_deque_Spinlock;
typedef StdQueue_list<Value> StdQueue_list_Spinlock;
typedef StdQueue_deque<Value, std::mutex> StdQueue_deque_Mutex;
<< CDSSTRESS_STAT_OUT( s, m_nDequeue )
<< CDSSTRESS_STAT_OUT( s, m_nFailedDeq )
<< CDSSTRESS_STAT_OUT( s, m_nCollided )
- << CDSSTRESS_STAT_OUT_( "combining_factor", s.combining_factor() )
- << CDSSTRESS_STAT_OUT( s, m_nOperationCount )
- << CDSSTRESS_STAT_OUT( s, m_nCombiningCount )
- << CDSSTRESS_STAT_OUT( s, m_nCompactPublicationList )
- << CDSSTRESS_STAT_OUT( s, m_nDeactivatePubRecord )
- << CDSSTRESS_STAT_OUT( s, m_nActivatePubRecord )
- << CDSSTRESS_STAT_OUT( s, m_nPubRecordCreated )
- << CDSSTRESS_STAT_OUT( s, m_nPubRecordDeteted )
- << CDSSTRESS_STAT_OUT( s, m_nAcquirePubRecCount )
- << CDSSTRESS_STAT_OUT( s, m_nReleasePubRecCount );
+ << static_cast<cds::algo::flat_combining::stat<> const&>(s);
}
static inline property_stream& operator <<( property_stream& o, cds::container::fcqueue::empty_stat const& /*s*/ )
<< CDSSTRESS_STAT_OUT( s, m_nPopBack )
<< CDSSTRESS_STAT_OUT( s, m_nFailedPopBack )
<< CDSSTRESS_STAT_OUT( s, m_nCollided )
- << CDSSTRESS_STAT_OUT_( "combining_factor", s.combining_factor() )
- << CDSSTRESS_STAT_OUT( s, m_nOperationCount )
- << CDSSTRESS_STAT_OUT( s, m_nCombiningCount )
- << CDSSTRESS_STAT_OUT( s, m_nCompactPublicationList )
- << CDSSTRESS_STAT_OUT( s, m_nDeactivatePubRecord )
- << CDSSTRESS_STAT_OUT( s, m_nActivatePubRecord )
- << CDSSTRESS_STAT_OUT( s, m_nPubRecordCreated )
- << CDSSTRESS_STAT_OUT( s, m_nPubRecordDeteted )
- << CDSSTRESS_STAT_OUT( s, m_nAcquirePubRecCount )
- << CDSSTRESS_STAT_OUT( s, m_nReleasePubRecCount );
+ << static_cast<cds::algo::flat_combining::stat<> const&>(s);
}
} // namespace cds_test
#define CDSSTRESS_FCQueue( test_fixture ) \
CDSSTRESS_Queue_F( test_fixture, FCQueue_deque ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss_stat ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm_stat ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm_stat ) \
CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination ) \
CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination_stat ) \
CDSSTRESS_Queue_F( test_fixture, FCQueue_list ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss_stat ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm_stat ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm ) \
+ CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm_stat ) \
CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination ) \
CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination_stat )
CDSSTRESS_Queue_F( test_fixture, FCDequeL_default ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeL_mutex ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeL_stat ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss_stat ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm_stat ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm_stat ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination_stat ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeR_default ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeR_mutex ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeR_stat ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss_stat ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm_stat ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm_stat ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination_stat ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost ) \