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

Stable _LoserTree implementation. More...

#include <parallel/losertree.h>

Inheritance diagram for __gnu_parallel::_LoserTreePointer< __stable, _Tp, _Compare >:
__gnu_parallel::_LoserTreePointerBase< _Tp, _Compare >

Public Member Functions

 _LoserTreePointer (unsigned int __k, _Compare __comp=std::less< _Tp >())
 
unsigned int __init_winner (unsigned int __root)
 
void __init ()
 
void __delete_min_insert (const _Tp &__key, bool __sup)
 
- Public Member Functions inherited from __gnu_parallel::_LoserTreePointerBase< _Tp, _Compare >
 _LoserTreePointerBase (unsigned int __k, _Compare __comp=std::less< _Tp >())
 
 ~_LoserTreePointerBase ()
 
int __get_min_source ()
 
void __insert_start (const _Tp &__key, int __source, bool __sup)
 

Private Types

typedef _LoserTreePointerBase
< _Tp, _Compare > 
_Base
 

Additional Inherited Members

- Protected Attributes inherited from __gnu_parallel::_LoserTreePointerBase< _Tp, _Compare >
unsigned int _M_ik
 
unsigned int _M_k
 
unsigned int _M_offset
 
_Loser_M_losers
 
_Compare _M_comp
 

Detailed Description

template<bool __stable, typename _Tp, typename _Compare>
class __gnu_parallel::_LoserTreePointer< __stable, _Tp, _Compare >

Stable _LoserTree implementation.

The unstable variant is implemented using partial instantiation below.

Member Typedef Documentation

template<bool __stable, typename _Tp , typename _Compare >
typedef _LoserTreePointerBase<_Tp, _Compare> __gnu_parallel::_LoserTreePointer< __stable, _Tp, _Compare >::_Base
private

Constructor & Destructor Documentation

template<bool __stable, typename _Tp , typename _Compare >
__gnu_parallel::_LoserTreePointer< __stable, _Tp, _Compare >::_LoserTreePointer ( unsigned int  __k,
_Compare  __comp = std::less<_Tp>() 
)
inline
419  : _Base::_LoserTreePointerBase(__k, __comp)
420  { }
_LoserTreePointerBase(unsigned int __k, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:373

Member Function Documentation

template<bool __stable, typename _Tp , typename _Compare >
void __gnu_parallel::_LoserTreePointer< __stable, _Tp, _Compare >::__delete_min_insert ( const _Tp &  __key,
bool  __sup 
)
inline
453  {
454 #if _GLIBCXX_ASSERTIONS
455  // no dummy sequence can ever be at the top!
456  _GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
457 #endif
458 
459  const _Tp* __keyp = &__key;
460  int __source = _M_losers[0]._M_source;
461  for (unsigned int __pos = (_M_k + __source) / 2; __pos > 0;
462  __pos /= 2)
463  {
464  // The smaller one gets promoted, ties are broken by __source.
465  if ((__sup && (!_M_losers[__pos]._M_sup
466  || _M_losers[__pos]._M_source < __source))
467  || (!__sup && !_M_losers[__pos]._M_sup &&
468  ((_M_comp(*_M_losers[__pos]._M_keyp, *__keyp))
469  || (!_M_comp(*__keyp, *_M_losers[__pos]._M_keyp)
470  && _M_losers[__pos]._M_source < __source))))
471  {
472  // The other one is smaller.
473  std::swap(_M_losers[__pos]._M_sup, __sup);
474  std::swap(_M_losers[__pos]._M_source, __source);
475  std::swap(_M_losers[__pos]._M_keyp, __keyp);
476  }
477  }
478 
479  _M_losers[0]._M_sup = __sup;
480  _M_losers[0]._M_source = __source;
481  _M_losers[0]._M_keyp = __keyp;
482  }
_Compare _M_comp
Definition: losertree.h:370
const _Tp * _M_keyp
Definition: losertree.h:365
unsigned int _M_k
Definition: losertree.h:368
int _M_source
Definition: losertree.h:364
_Loser * _M_losers
Definition: losertree.h:369
#define _GLIBCXX_PARALLEL_ASSERT(_Condition)
Definition: base.h:422
bool _M_sup
Definition: losertree.h:363
void swap(exception_ptr &__lhs, exception_ptr &__rhs)
Definition: exception_ptr.h:160
template<bool __stable, typename _Tp , typename _Compare >
void __gnu_parallel::_LoserTreePointer< __stable, _Tp, _Compare >::__init ( )
inline
450  { _M_losers[0] = _M_losers[__init_winner(1)]; }
_Loser * _M_losers
Definition: losertree.h:369
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:423
template<bool __stable, typename _Tp , typename _Compare >
unsigned int __gnu_parallel::_LoserTreePointer< __stable, _Tp, _Compare >::__init_winner ( unsigned int  __root)
inline
424  {
425  if (__root >= _M_k)
426  return __root;
427  else
428  {
429  unsigned int __left = __init_winner(2 * __root);
430  unsigned int __right = __init_winner(2 * __root + 1);
431  if (_M_losers[__right]._M_sup
432  || (!_M_losers[__left]._M_sup
433  && !_M_comp(*_M_losers[__right]._M_keyp,
434  *_M_losers[__left]._M_keyp)))
435  {
436  // Left one is less or equal.
437  _M_losers[__root] = _M_losers[__right];
438  return __left;
439  }
440  else
441  {
442  // Right one is less.
443  _M_losers[__root] = _M_losers[__left];
444  return __right;
445  }
446  }
447  }
_Compare _M_comp
Definition: losertree.h:370
unsigned int _M_k
Definition: losertree.h:368
_Loser * _M_losers
Definition: losertree.h:369
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:423

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