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

Stable unguarded _LoserTree variant storing pointers. More...

#include <parallel/losertree.h>

Inheritance diagram for __gnu_parallel::_LoserTreePointerUnguarded< __stable, _Tp, _Compare >:
__gnu_parallel::_LoserTreePointerUnguardedBase< _Tp, _Compare >

Public Member Functions

 _LoserTreePointerUnguarded (unsigned int __k, const _Tp &__sentinel, _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::_LoserTreePointerUnguardedBase< _Tp, _Compare >
 _LoserTreePointerUnguardedBase (unsigned int __k, const _Tp &__sentinel, _Compare __comp=std::less< _Tp >())
 
 ~_LoserTreePointerUnguardedBase ()
 
int __get_min_source ()
 
void __insert_start (const _Tp &__key, int __source, bool)
 

Private Types

typedef
_LoserTreePointerUnguardedBase
< _Tp, _Compare > 
_Base
 

Additional Inherited Members

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

Stable unguarded _LoserTree variant storing pointers.

Unstable variant is implemented below using partial specialization.

Member Typedef Documentation

template<bool __stable, typename _Tp , typename _Compare >
typedef _LoserTreePointerUnguardedBase<_Tp, _Compare> __gnu_parallel::_LoserTreePointerUnguarded< __stable, _Tp, _Compare >::_Base
private

Constructor & Destructor Documentation

template<bool __stable, typename _Tp , typename _Compare >
__gnu_parallel::_LoserTreePointerUnguarded< __stable, _Tp, _Compare >::_LoserTreePointerUnguarded ( unsigned int  __k,
const _Tp &  __sentinel,
_Compare  __comp = std::less<_Tp>() 
)
inline
902  : _Base::_LoserTreePointerUnguardedBase(__k, __sentinel, __comp)
903  { }
_LoserTreePointerUnguardedBase(unsigned int __k, const _Tp &__sentinel, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:843

Member Function Documentation

template<bool __stable, typename _Tp , typename _Compare >
void __gnu_parallel::_LoserTreePointerUnguarded< __stable, _Tp, _Compare >::__delete_min_insert ( const _Tp &  __key,
bool  __sup 
)
inline
944  {
945 #if _GLIBCXX_ASSERTIONS
946  // no dummy sequence can ever be at the top!
947  _GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
948 #endif
949 
950  const _Tp* __keyp = &__key;
951  int __source = _M_losers[0]._M_source;
952  for (unsigned int __pos = (_M_k + __source) / 2; __pos > 0;
953  __pos /= 2)
954  {
955  // The smaller one gets promoted, ties are broken by _M_source.
956  if (_M_comp(*_M_losers[__pos]._M_keyp, *__keyp)
957  || (!_M_comp(*__keyp, *_M_losers[__pos]._M_keyp)
958  && _M_losers[__pos]._M_source < __source))
959  {
960  // The other one is smaller.
961  std::swap(_M_losers[__pos]._M_source, __source);
962  std::swap(_M_losers[__pos]._M_keyp, __keyp);
963  }
964  }
965 
966  _M_losers[0]._M_source = __source;
967  _M_losers[0]._M_keyp = __keyp;
968  }
_Loser * _M_losers
Definition: losertree.h:838
const _Tp * _M_keyp
Definition: losertree.h:834
_Compare _M_comp
Definition: losertree.h:839
#define _GLIBCXX_PARALLEL_ASSERT(_Condition)
Definition: base.h:422
unsigned int _M_k
Definition: losertree.h:837
void swap(exception_ptr &__lhs, exception_ptr &__rhs)
Definition: exception_ptr.h:160
template<bool __stable, typename _Tp , typename _Compare >
void __gnu_parallel::_LoserTreePointerUnguarded< __stable, _Tp, _Compare >::__init ( )
inline
932  {
934 
935 #if _GLIBCXX_ASSERTIONS
936  // no dummy sequence can ever be at the top at the beginning
937  // (0 sequences!)
938  _GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
939 #endif
940  }
_Loser * _M_losers
Definition: losertree.h:838
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:906
#define _GLIBCXX_PARALLEL_ASSERT(_Condition)
Definition: base.h:422
template<bool __stable, typename _Tp , typename _Compare >
unsigned int __gnu_parallel::_LoserTreePointerUnguarded< __stable, _Tp, _Compare >::__init_winner ( unsigned int  __root)
inline
907  {
908  if (__root >= _M_k)
909  return __root;
910  else
911  {
912  unsigned int __left = __init_winner(2 * __root);
913  unsigned int __right = __init_winner(2 * __root + 1);
914  if (!_M_comp(*_M_losers[__right]._M_keyp,
915  *_M_losers[__left]._M_keyp))
916  {
917  // Left one is less or equal.
918  _M_losers[__root] = _M_losers[__right];
919  return __left;
920  }
921  else
922  {
923  // Right one is less.
924  _M_losers[__root] = _M_losers[__left];
925  return __right;
926  }
927  }
928  }
_Loser * _M_losers
Definition: losertree.h:838
_Compare _M_comp
Definition: losertree.h:839
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:906
unsigned int _M_k
Definition: losertree.h:837

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