Source code repo: http://github.com/khizmax/libcds/
Download: http://sourceforge.net/projects/libcds/files/
-
+
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CDSSTRESS_PQUEUE_TYPES_H
#include <cds_test/stress_test.h>
#include <cds_test/stat_ellenbintree_out.h>
#include <cds_test/stat_skiplist_out.h>
+#include <cds_test/stat_flat_combining_out.h>
namespace pqueue {
namespace cc = cds::container;
bool pop( value_type& dest )
{
scoped_lock l( m_Lock );
- if ( !m_PQueue.empty() ) {
+ if ( !m_PQueue.empty()) {
dest = m_PQueue.top();
m_PQueue.pop();
return true;
bool pop_with( Q& dest, MoveFunc f )
{
scoped_lock l( m_Lock );
- if ( !m_PQueue.empty() ) {
- f( dest, m_PQueue.top() );
+ if ( !m_PQueue.empty()) {
+ f( dest, m_PQueue.top());
m_PQueue.pop();
return true;
}
void clear()
{
scoped_lock l( m_Lock );
- while ( !m_PQueue.empty() )
+ while ( !m_PQueue.empty())
m_PQueue.pop();
}
void clear_with( Func f )
{
scoped_lock l( m_Lock );
- while ( !m_PQueue.empty() ) {
- f( m_PQueue.top() );
+ while ( !m_PQueue.empty()) {
+ f( m_PQueue.top());
m_PQueue.pop();
}
}
template <typename T, typename Tree>
bool operator()( T& dest, Tree& container ) const
{
- typename Tree::guarded_ptr gp( container.extract_max() );
+ typename Tree::guarded_ptr gp( container.extract_max());
if ( gp )
dest = *gp;
return !gp.empty();
template <typename T, typename Tree>
bool operator()( T& dest, Tree& container ) const
{
- typename Tree::exempt_ptr ep( container.extract_max() );
+ typename Tree::exempt_ptr ep( container.extract_max());
if ( ep )
dest = *ep;
return !ep.empty();
template <typename T, typename Tree>
bool operator()( T& dest, Tree& container ) const
{
- typename Tree::guarded_ptr gp( container.extract_min() );
+ typename Tree::guarded_ptr gp( container.extract_min());
if ( gp )
dest = *gp;
return !gp.empty();
template <typename T, typename Tree>
bool operator()( T& dest, Tree& container ) const
{
- typename Tree::exempt_ptr ep( container.extract_min() );
+ typename Tree::exempt_ptr ep( container.extract_min());
if ( ep )
dest = *ep;
return !ep.empty();
template <typename T, typename Set>
bool operator()( T& dest, Set& container ) const
{
- typename Set::guarded_ptr gp( container.extract_max() );
+ typename Set::guarded_ptr gp( container.extract_max());
if ( gp )
dest = *gp;
return !gp.empty();
template <typename T, typename Set>
bool operator()( T& dest, Set& container ) const
{
- typename Set::exempt_ptr ep( container.extract_max() );
+ typename Set::exempt_ptr ep( container.extract_max());
if ( ep )
dest = *ep;
return !ep.empty();
template <typename T, typename Set>
bool operator()( T& dest, Set& container ) const
{
- typename Set::guarded_ptr gp( container.extract_min() );
+ typename Set::guarded_ptr gp( container.extract_min());
if ( gp )
dest = *gp;
return !gp.empty();
template <typename T, typename Set>
bool operator()( T& dest, Set& container ) const
{
- typename Set::exempt_ptr ep( container.extract_min() );
+ typename Set::exempt_ptr ep( container.extract_min());
if ( ep )
dest = *ep;
return !ep.empty();
// MSPriorityQueue
struct traits_MSPriorityQueue_static_less : public
cc::mspriority_queue::make_traits <
- co::buffer < co::v::static_buffer< char, c_nBoundedCapacity > >
+ co::buffer < co::v::initialized_static_buffer< char, c_nBoundedCapacity > >
> ::type
{};
typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_static_less > MSPriorityQueue_static_less;
struct traits_MSPriorityQueue_static_less_stat : public cc::mspriority_queue::traits
{
- typedef co::v::static_buffer< char, c_nBoundedCapacity > buffer;
+ typedef co::v::initialized_static_buffer< char, c_nBoundedCapacity > buffer;
typedef cc::mspriority_queue::stat<> stat;
};
typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_static_less_stat > MSPriorityQueue_static_less_stat;
struct traits_MSPriorityQueue_static_cmp : public
cc::mspriority_queue::make_traits <
- co::buffer< co::v::static_buffer< char, c_nBoundedCapacity > >
+ co::buffer< co::v::initialized_static_buffer< char, c_nBoundedCapacity > >
, co::compare < cmp >
> ::type
{};
struct traits_MSPriorityQueue_static_mutex : public
cc::mspriority_queue::make_traits<
- co::buffer< co::v::static_buffer< char, c_nBoundedCapacity > >
+ co::buffer< co::v::initialized_static_buffer< char, c_nBoundedCapacity > >
, co::lock_type<std::mutex>
>::type
{};
typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_static_mutex > MSPriorityQueue_static_mutex;
- struct traits_MSPriorityQueue_dyn_less : public
- cc::mspriority_queue::make_traits<
- co::buffer< co::v::dynamic_buffer< char > >
- >::type
- {};
- typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_dyn_less > MSPriorityQueue_dyn_less;
+ struct traits_MSPriorityQueue_dyn: public cc::mspriority_queue::traits
+ {
+ typedef co::v::initialized_dynamic_buffer< char > buffer;
+ };
+ typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_dyn > MSPriorityQueue_dyn_less;
- struct traits_MSPriorityQueue_dyn_less_stat : public
- cc::mspriority_queue::make_traits <
- co::buffer< co::v::dynamic_buffer< char > >
- , co::stat < cc::mspriority_queue::stat<> >
- > ::type
- {};
+ struct traits_MSPriorityQueue_dyn_less_stat: public traits_MSPriorityQueue_dyn
+ {
+ typedef cc::mspriority_queue::stat<> stat;
+ };
typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_dyn_less_stat > MSPriorityQueue_dyn_less_stat;
+
struct traits_MSPriorityQueue_dyn_cmp : public
cc::mspriority_queue::make_traits <
- co::buffer< co::v::dynamic_buffer< char > >
+ co::buffer< co::v::initialized_dynamic_buffer< char > >
, co::compare < cmp >
> ::type
{};
struct traits_MSPriorityQueue_dyn_mutex : public
cc::mspriority_queue::make_traits <
- co::buffer< co::v::dynamic_buffer< char > >
+ co::buffer< co::v::initialized_dynamic_buffer< char > >
, co::lock_type < std::mutex >
> ::type
{};
typedef details::StdPQueue< Value, std::deque<Value>, std::mutex > StdPQueue_deque_mutex;
};
-
- //template <typename Stat>
- //static inline void check_statistics( Stat const& /*s*/ )
- //{}
-
- //static inline void check_statistics( cds::container::ellen_bintree::stat<> const& s )
- //{
- // CPPUNIT_CHECK_CURRENT( s.m_nInternalNodeCreated.get() == s.m_nInternalNodeDeleted.get() );
- // CPPUNIT_CHECK_CURRENT( s.m_nUpdateDescCreated.get() == s.m_nUpdateDescDeleted.get() );
- //}
} // namespace pqueue
static inline property_stream& operator <<( property_stream& o, cds::container::fcpqueue::stat<> const& s )
{
- return o
+ return o
<< CDSSTRESS_STAT_OUT( s, m_nPush )
<< CDSSTRESS_STAT_OUT( s, m_nPushMove )
<< CDSSTRESS_STAT_OUT( s, m_nPop )
<< CDSSTRESS_STAT_OUT( s, m_nFailedPop )
- << 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::mspriority_queue::empty_stat const& /*s*/ )
<< CDSSTRESS_STAT_OUT( s, m_nPushFailCount )
<< CDSSTRESS_STAT_OUT( s, m_nPopFailCount )
<< CDSSTRESS_STAT_OUT( s, m_nPushHeapifySwapCount )
- << CDSSTRESS_STAT_OUT( s, m_nPopHeapifySwapCount );
+ << CDSSTRESS_STAT_OUT( s, m_nPopHeapifySwapCount )
+ << CDSSTRESS_STAT_OUT( s, m_nItemMovedTop )
+ << CDSSTRESS_STAT_OUT( s, m_nItemMovedUp )
+ << CDSSTRESS_STAT_OUT( s, m_nPushEmptyPass );
}
} // namespace cds_test