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::_LoserTreeUnguarded< __stable, _Tp, _Compare > Class Template Reference

Stable implementation of unguarded _LoserTree. More...

#include <parallel/losertree.h>

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

Public Member Functions

 _LoserTreeUnguarded (unsigned int __k, const _Tp &__sentinel, _Compare __comp=std::less< _Tp >())
 
unsigned int __init_winner (unsigned int __root)
 
void __init ()
 
void __delete_min_insert (_Tp __key, bool)
 
- Public Member Functions inherited from __gnu_parallel::_LoserTreeUnguardedBase< _Tp, _Compare >
 _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)
 

Private Types

typedef
_LoserTreeUnguardedBase< _Tp,
_Compare > 
_Base
 

Additional Inherited Members

- Protected Attributes inherited from __gnu_parallel::_LoserTreeUnguardedBase< _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::_LoserTreeUnguarded< __stable, _Tp, _Compare >

Stable implementation of unguarded _LoserTree.

Unstable variant is selected below with partial specialization.

Member Typedef Documentation

template<bool __stable, typename _Tp , typename _Compare >
typedef _LoserTreeUnguardedBase<_Tp, _Compare> __gnu_parallel::_LoserTreeUnguarded< __stable, _Tp, _Compare >::_Base
private

Constructor & Destructor Documentation

template<bool __stable, typename _Tp , typename _Compare >
__gnu_parallel::_LoserTreeUnguarded< __stable, _Tp, _Compare >::_LoserTreeUnguarded ( unsigned int  __k,
const _Tp &  __sentinel,
_Compare  __comp = std::less<_Tp>() 
)
inline
657  : _Base::_LoserTreeUnguardedBase(__k, __sentinel, __comp)
658  { }
_LoserTreeUnguardedBase(unsigned int __k, const _Tp &__sentinel, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:588

Member Function Documentation

template<bool __stable, typename _Tp , typename _Compare >
void __gnu_parallel::_LoserTreeUnguarded< __stable, _Tp, _Compare >::__delete_min_insert ( _Tp  __key,
bool   
)
inline
701  {
702  using std::swap;
703 #if _GLIBCXX_ASSERTIONS
704  // no dummy sequence can ever be at the top!
705  _GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
706 #endif
707 
708  int __source = _M_losers[0]._M_source;
709  for (unsigned int __pos = (_M_k + __source) / 2; __pos > 0;
710  __pos /= 2)
711  {
712  // The smaller one gets promoted, ties are broken by _M_source.
713  if (_M_comp(_M_losers[__pos]._M_key, __key)
714  || (!_M_comp(__key, _M_losers[__pos]._M_key)
715  && _M_losers[__pos]._M_source < __source))
716  {
717  // The other one is smaller.
718  std::swap(_M_losers[__pos]._M_source, __source);
719  swap(_M_losers[__pos]._M_key, __key);
720  }
721  }
722 
723  _M_losers[0]._M_source = __source;
724  _M_losers[0]._M_key = __key;
725  }
unsigned int _M_k
Definition: losertree.h:583
_Loser * _M_losers
Definition: losertree.h:584
#define _GLIBCXX_PARALLEL_ASSERT(_Condition)
Definition: base.h:422
void swap(exception_ptr &__lhs, exception_ptr &__rhs)
Definition: exception_ptr.h:160
_Tp _M_key
Definition: losertree.h:580
int _M_source
Definition: losertree.h:579
_Compare _M_comp
Definition: losertree.h:585
template<bool __stable, typename _Tp , typename _Compare >
void __gnu_parallel::_LoserTreeUnguarded< __stable, _Tp, _Compare >::__init ( )
inline
687  {
689 
690 #if _GLIBCXX_ASSERTIONS
691  // no dummy sequence can ever be at the top at the beginning
692  // (0 sequences!)
693  _GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
694 #endif
695  }
_Loser * _M_losers
Definition: losertree.h:584
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:661
#define _GLIBCXX_PARALLEL_ASSERT(_Condition)
Definition: base.h:422
template<bool __stable, typename _Tp , typename _Compare >
unsigned int __gnu_parallel::_LoserTreeUnguarded< __stable, _Tp, _Compare >::__init_winner ( unsigned int  __root)
inline
662  {
663  if (__root >= _M_k)
664  return __root;
665  else
666  {
667  unsigned int __left = __init_winner(2 * __root);
668  unsigned int __right = __init_winner(2 * __root + 1);
669  if (!_M_comp(_M_losers[__right]._M_key,
670  _M_losers[__left]._M_key))
671  {
672  // Left one is less or equal.
673  _M_losers[__root] = _M_losers[__right];
674  return __left;
675  }
676  else
677  {
678  // Right one is less.
679  _M_losers[__root] = _M_losers[__left];
680  return __right;
681  }
682  }
683  }
unsigned int _M_k
Definition: losertree.h:583
_Loser * _M_losers
Definition: losertree.h:584
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:661
_Compare _M_comp
Definition: losertree.h:585

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