STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Public Member Functions | Protected Attributes | List of all members
__gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare > Class Template Reference

Base class for unguarded _LoserTree implementation. More...

#include <parallel/losertree.h>

Inheritance diagram for __gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >:
__gnu_parallel::_LoserTreeUnguarded< __stable, _Tp, _Compare > __gnu_parallel::_LoserTreeUnguarded< false, _Tp, _Compare >

Classes

struct  _Loser
 

Public Member Functions

 _LoserTreeUnguardedBase (unsigned int __k, const _Tp &__sentinel, _Compare __comp=std::less< _Tp >())
 
 ~_LoserTreeUnguardedBase ()
 
int __get_min_source ()
 
void __insert_start (const _Tp &__key, int __source, bool)
 

Protected Attributes

unsigned int _M_ik
 
unsigned int _M_k
 
unsigned int _M_offset
 
_Loser_M_losers
 
_Compare _M_comp
 

Detailed Description

template<typename _Tp, typename _Compare>
class __gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >

Base class for unguarded _LoserTree implementation.

The whole element is copied into the tree structure.

No guarding is done, therefore not a single input sequence must run empty. Unused __sequence heads are marked with a sentinel which is > all elements that are to be merged.

This is a very fast variant.

Constructor & Destructor Documentation

template<typename _Tp , typename _Compare >
__gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >::_LoserTreeUnguardedBase ( unsigned int  __k,
const _Tp &  __sentinel,
_Compare  __comp = std::less<_Tp>() 
)
inline
590  : _M_comp(__comp)
591  {
592  _M_ik = __k;
593 
594  // Next greater power of 2.
595  _M_k = 1 << (__rd_log2(_M_ik - 1) + 1);
596  _M_offset = _M_k;
597  // Avoid default-constructing _M_losers[]._M_key
598  _M_losers = static_cast<_Loser*>(::operator new(2 * _M_k
599  * sizeof(_Loser)));
600 
601  for (unsigned int __i = 0; __i < _M_k; ++__i)
602  {
603  ::new(&(_M_losers[__i]._M_key)) _Tp(__sentinel);
604  _M_losers[__i]._M_source = -1;
605  }
606  for (unsigned int __i = _M_k + _M_ik - 1; __i < (2 * _M_k); ++__i)
607  {
608  ::new(&(_M_losers[__i]._M_key)) _Tp(__sentinel);
609  _M_losers[__i]._M_source = -1;
610  }
611  }
unsigned int _M_k
Definition: losertree.h:583
_Loser * _M_losers
Definition: losertree.h:584
_Size __rd_log2(_Size __n)
Calculates the rounded-down logarithm of __n for base 2.
Definition: base.h:102
unsigned int _M_offset
Definition: losertree.h:583
unsigned int _M_ik
Definition: losertree.h:583
int _M_source
Definition: losertree.h:579
_Compare _M_comp
Definition: losertree.h:585
template<typename _Tp , typename _Compare >
__gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >::~_LoserTreeUnguardedBase ( )
inline
614  {
615  for (unsigned int __i = 0; __i < (2 * _M_k); ++__i)
616  _M_losers[__i].~_Loser();
617  ::operator delete(_M_losers);
618  }
unsigned int _M_k
Definition: losertree.h:583
_Loser * _M_losers
Definition: losertree.h:584

Member Function Documentation

template<typename _Tp , typename _Compare >
int __gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >::__get_min_source ( )
inline
622  {
623 #if _GLIBCXX_ASSERTIONS
624  // no dummy sequence can ever be at the top!
625  _GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
626 #endif
627  return _M_losers[0]._M_source;
628  }
_Loser * _M_losers
Definition: losertree.h:584
#define _GLIBCXX_PARALLEL_ASSERT(_Condition)
Definition: base.h:422
int _M_source
Definition: losertree.h:579
template<typename _Tp , typename _Compare >
void __gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >::__insert_start ( const _Tp &  __key,
int  __source,
bool   
)
inline
632  {
633  unsigned int __pos = _M_k + __source;
634 
635  ::new(&(_M_losers[__pos]._M_key)) _Tp(__key);
636  _M_losers[__pos]._M_source = __source;
637  }
unsigned int _M_k
Definition: losertree.h:583
_Loser * _M_losers
Definition: losertree.h:584
int _M_source
Definition: losertree.h:579

Member Data Documentation

template<typename _Tp , typename _Compare >
_Compare __gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >::_M_comp
protected
template<typename _Tp , typename _Compare >
unsigned int __gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >::_M_ik
protected
template<typename _Tp , typename _Compare >
unsigned int __gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >::_M_k
protected
template<typename _Tp , typename _Compare >
_Loser* __gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >::_M_losers
protected
template<typename _Tp , typename _Compare >
unsigned int __gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >::_M_offset
protected

The documentation for this class was generated from the following file: