32 #ifndef _GLIBCXX_PARALLEL_LOSERTREE_H
33 #define _GLIBCXX_PARALLEL_LOSERTREE_H 1
40 namespace __gnu_parallel
54 template<
typename _Tp,
typename _Compare>
109 for (
unsigned int __i =
_M_ik - 1; __i <
_M_k; ++__i)
120 for (
unsigned int __i = 0; __i < (2 *
_M_k); ++__i)
136 unsigned int __pos =
_M_k + __source;
141 for (
unsigned int __i = 0; __i < (2 *
_M_k); ++__i)
142 ::
new(&(
_M_losers[__i]._M_key)) _Tp(__key);
167 template<
bool __stable,
typename _Tp,
225 #if _GLIBCXX_ASSERTIONS
231 for (
unsigned int __pos = (
_M_k + __source) / 2; __pos > 0;
236 ||
_M_losers[__pos]._M_source < __source))
240 &&
_M_losers[__pos]._M_source < __source))))
260 template<
typename _Tp,
typename _Compare>
327 #if _GLIBCXX_ASSERTIONS
333 for (
unsigned int __pos = (
_M_k + __source) / 2; __pos > 0;
356 template<
typename _Tp,
typename _Compare>
374 _Compare __comp = std::less<_Tp>())
383 for (
unsigned int __i =
_M_ik - 1; __i <
_M_k; __i++)
395 unsigned int __pos =
_M_k + __source;
408 template<
bool __stable,
typename _Tp,
typename _Compare>
454 #if _GLIBCXX_ASSERTIONS
459 const _Tp* __keyp = &__key;
461 for (
unsigned int __pos = (
_M_k + __source) / 2; __pos > 0;
466 ||
_M_losers[__pos]._M_source < __source))
467 || (!__sup && !
_M_losers[__pos]._M_sup &&
470 &&
_M_losers[__pos]._M_source < __source))))
490 template<
typename _Tp,
typename _Compare>
536 #if _GLIBCXX_ASSERTIONS
541 const _Tp* __keyp = &__key;
543 for (
unsigned int __pos = (
_M_k + __source) / 2; __pos > 0;
573 template<
typename _Tp,
typename _Compare>
589 _Compare __comp = std::less<_Tp>())
601 for (
unsigned int __i = 0; __i <
_M_k; ++__i)
603 ::new(&(
_M_losers[__i]._M_key)) _Tp(__sentinel);
606 for (
unsigned int __i = _M_k +
_M_ik - 1; __i < (2 *
_M_k); ++__i)
608 ::new(&(
_M_losers[__i]._M_key)) _Tp(__sentinel);
615 for (
unsigned int __i = 0; __i < (2 *
_M_k); ++__i)
623 #if _GLIBCXX_ASSERTIONS
633 unsigned int __pos =
_M_k + __source;
635 ::new(&(
_M_losers[__pos]._M_key)) _Tp(__key);
645 template<
bool __stable,
typename _Tp,
typename _Compare>
656 _Compare __comp = std::less<_Tp>())
690 #if _GLIBCXX_ASSERTIONS
703 #if _GLIBCXX_ASSERTIONS
709 for (
unsigned int __pos = (
_M_k + __source) / 2; __pos > 0;
715 &&
_M_losers[__pos]._M_source < __source))
733 template<
typename _Tp,
typename _Compare>
744 _Compare __comp = std::less<_Tp>())
758 #if _GLIBCXX_ASSERTIONS
785 #if _GLIBCXX_ASSERTIONS
798 #if _GLIBCXX_ASSERTIONS
804 for (
unsigned int __pos = (
_M_k + __source) / 2; __pos > 0;
827 template<
typename _Tp,
typename _Compare>
844 _Compare __comp = std::less<_Tp>())
855 for (
unsigned int __i =
_M_k +
_M_ik - 1; __i < (2 *
_M_k); ++__i)
868 #if _GLIBCXX_ASSERTIONS
878 unsigned int __pos =
_M_k + __source;
890 template<
bool __stable,
typename _Tp,
typename _Compare>
901 _Compare __comp = std::less<_Tp>())
935 #if _GLIBCXX_ASSERTIONS
945 #if _GLIBCXX_ASSERTIONS
950 const _Tp* __keyp = &__key;
952 for (
unsigned int __pos = (
_M_k + __source) / 2; __pos > 0;
958 &&
_M_losers[__pos]._M_source < __source))
976 template<
typename _Tp,
typename _Compare>
987 _Compare __comp = std::less<_Tp>())
1001 #if _GLIBCXX_ASSERTIONS
1028 #if _GLIBCXX_ASSERTIONS
1038 #if _GLIBCXX_ASSERTIONS
1043 const _Tp* __keyp = &__key;
1045 for (
unsigned int __pos = (
_M_k + __source) / 2; __pos > 0;
bool _M_sup
flag, true iff this is a "maximum" __sentinel.
Definition: losertree.h:62
_Compare _M_comp
Definition: losertree.h:370
Internal representation of a _LoserTree element.
Definition: losertree.h:59
Unguarded loser tree, keeping only pointers to the elements in the tree structure.
Definition: losertree.h:828
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:505
_Loser * _M_losers
_LoserTree __elements.
Definition: losertree.h:75
Stable _LoserTree variant.
Definition: losertree.h:169
void __init()
Definition: losertree.h:210
_LoserTreeBase(unsigned int __k, _Compare __comp)
The constructor.
Definition: losertree.h:94
_LoserTreePointerUnguardedBase< _Tp, _Compare > _Base
Definition: losertree.h:980
void __delete_min_insert(_Tp __key, bool)
Definition: losertree.h:700
void __init()
Definition: losertree.h:931
int __get_min_source()
Definition: losertree.h:621
unsigned int _M_offset
Definition: losertree.h:368
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:992
_LoserTreeUnguardedBase(unsigned int __k, const _Tp &__sentinel, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:588
Base class of _Loser Tree implementation using pointers.
Definition: losertree.h:357
Sequential helper functions. This file is a GNU parallel extension to the Standard C++ Library...
Definition: losertree.h:577
void __delete_min_insert(_Tp __key, bool)
Definition: losertree.h:795
void __delete_min_insert(const _Tp &__key, bool __sup)
Definition: losertree.h:1036
#define false
Definition: stdbool.h:35
void __insert_start(const _Tp &__key, int __source, bool __sup)
Definition: losertree.h:393
int __get_min_source()
Definition: losertree.h:390
unsigned int _M_ik
Definition: losertree.h:69
Stable unguarded _LoserTree variant storing pointers.
Definition: losertree.h:891
_Loser * _M_losers
Definition: losertree.h:838
_LoserTreePointer(unsigned int __k, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:500
const _Tp * _M_keyp
Definition: losertree.h:834
~_LoserTreePointerUnguardedBase()
Definition: losertree.h:862
void __insert_start(const _Tp &__key, int __source, bool)
Definition: losertree.h:631
void __init()
Definition: losertree.h:311
const _Tp * _M_keyp
Definition: losertree.h:365
~_LoserTreePointerBase()
Definition: losertree.h:387
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:184
unsigned int _M_k
Definition: losertree.h:583
_LoserTreeUnguardedBase< _Tp, _Compare > _Base
Definition: losertree.h:737
void __delete_min_insert(const _Tp &__key, bool __sup)
Definition: losertree.h:534
_Loser * _M_losers
Definition: losertree.h:584
int _M_source
Definition: losertree.h:833
_LoserTreePointerUnguarded(unsigned int __k, const _Tp &__sentinel, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:986
_LoserTreeUnguarded(unsigned int __k, const _Tp &__sentinel, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:655
void __init()
Definition: losertree.h:1024
unsigned int _M_offset
Definition: losertree.h:69
_LoserTreePointerBase(unsigned int __k, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:373
_LoserTree(unsigned int __k, _Compare __comp)
Definition: losertree.h:272
int __get_min_source()
Definition: losertree.h:866
~_LoserTreeUnguardedBase()
Definition: losertree.h:613
_LoserTreeUnguardedBase< _Tp, _Compare > _Base
Definition: losertree.h:649
_Compare _M_comp
Definition: losertree.h:839
void __insert_start(const _Tp &__key, int __source, bool __sup)
Initializes the sequence "_M_source" with the element "__key".
Definition: losertree.h:134
unsigned int _M_k
Definition: losertree.h:368
void __delete_min_insert(const _Tp &__key, bool __sup)
Definition: losertree.h:943
_LoserTreePointerUnguardedBase< _Tp, _Compare > _Base
Definition: losertree.h:894
int _M_source
__index of the __source __sequence.
Definition: losertree.h:64
~_LoserTreeBase()
The destructor.
Definition: losertree.h:118
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:661
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:906
int _M_source
Definition: losertree.h:364
_Size __rd_log2(_Size __n)
Calculates the rounded-down logarithm of __n for base 2.
Definition: base.h:102
_LoserTreeUnguarded(unsigned int __k, const _Tp &__sentinel, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:743
_LoserTreePointerUnguardedBase(unsigned int __k, const _Tp &__sentinel, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:843
void __insert_start(const _Tp &__key, int __source, bool)
Definition: losertree.h:876
unsigned int _M_offset
Definition: losertree.h:837
bool _M_first_insert
State flag that determines whether the _LoserTree is empty.
Definition: losertree.h:85
void __init()
Definition: losertree.h:531
void __init()
Definition: losertree.h:781
unsigned int _M_log_k
Definition: losertree.h:72
_LoserTreeBase< _Tp, _Compare > _Base
Definition: losertree.h:172
_Loser * _M_losers
Definition: losertree.h:369
_LoserTree(unsigned int __k, _Compare __comp)
Definition: losertree.h:179
Stable _LoserTree implementation.
Definition: losertree.h:409
unsigned int _M_ik
Definition: losertree.h:368
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:284
Stable implementation of unguarded _LoserTree.
Definition: losertree.h:646
Internal representation of _LoserTree __elements.
Definition: losertree.h:361
_LoserTreePointer(unsigned int __k, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:418
unsigned int _M_offset
Definition: losertree.h:583
_LoserTreeBase< _Tp, _Compare > _Base
Definition: losertree.h:264
unsigned int _M_ik
Definition: losertree.h:583
_LoserTreePointerBase< _Tp, _Compare > _Base
Definition: losertree.h:494
#define _GLIBCXX_PARALLEL_ASSERT(_Condition)
Definition: base.h:422
Definition: losertree.h:831
Base class for unguarded _LoserTree implementation.
Definition: losertree.h:574
void __delete_min_insert(_Tp __key, bool __sup)
Delete the smallest element and insert a new element from the previously smallest element's sequence...
Definition: losertree.h:222
void __init()
Definition: losertree.h:449
void __delete_min_insert(const _Tp &__key, bool __sup)
Definition: losertree.h:452
unsigned int _M_k
Definition: losertree.h:837
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:423
_Compare _M_comp
_Compare to use.
Definition: losertree.h:78
void __init()
Definition: losertree.h:686
bool _M_sup
Definition: losertree.h:363
unsigned int _M_k
Definition: losertree.h:69
unsigned int _M_ik
Definition: losertree.h:837
Defines on whether to include algorithm variants.
Guarded loser/tournament tree.
Definition: losertree.h:55
void __delete_min_insert(_Tp __key, bool __sup)
Definition: losertree.h:324
void swap(exception_ptr &__lhs, exception_ptr &__rhs)
Definition: exception_ptr.h:160
unsigned int __init_winner(unsigned int __root)
Definition: losertree.h:749
_Tp _M_key
_M_key of the element in the _LoserTree.
Definition: losertree.h:66
_LoserTreePointerBase< _Tp, _Compare > _Base
Definition: losertree.h:412
_Tp _M_key
Definition: losertree.h:580
int __get_min_source()
Definition: losertree.h:155
_LoserTreePointerUnguarded(unsigned int __k, const _Tp &__sentinel, _Compare __comp=std::less< _Tp >())
Definition: losertree.h:900
int _M_source
Definition: losertree.h:579
_Compare _M_comp
Definition: losertree.h:585