345,11 → 345,13 |
return __check_sorted_set_aux(__first, __last, __pred, _SameType()); |
} |
|
// _GLIBCXX_RESOLVE_LIB_DEFECTS |
// 270. Binary search requirements overly strict |
// Determine if a sequence is partitioned w.r.t. this element. |
template<typename _ForwardIterator, typename _Tp> |
inline bool |
__check_partitioned_lower_aux(_ForwardIterator __first, |
_ForwardIterator __last, const _Tp& __value, |
std::forward_iterator_tag) |
__check_partitioned_lower(_ForwardIterator __first, |
_ForwardIterator __last, const _Tp& __value) |
{ |
while (__first != __last && *__first < __value) |
++__first; |
362,38 → 364,11 |
return __first == __last; |
} |
|
// For performance reason, as the iterator range has been validated, check on |
// random access safe iterators is done using the base iterator. |
template<typename _Iterator, typename _Sequence, typename _Tp> |
inline bool |
__check_partitioned_lower_aux( |
const _Safe_iterator<_Iterator, _Sequence>& __first, |
const _Safe_iterator<_Iterator, _Sequence>& __last, |
const _Tp& __value, |
std::random_access_iterator_tag __tag) |
{ |
return __check_partitioned_lower_aux(__first.base(), __last.base(), |
__value, __tag); |
} |
|
// _GLIBCXX_RESOLVE_LIB_DEFECTS |
// 270. Binary search requirements overly strict |
// Determine if a sequence is partitioned w.r.t. this element. |
template<typename _ForwardIterator, typename _Tp> |
inline bool |
__check_partitioned_lower(_ForwardIterator __first, |
__check_partitioned_upper(_ForwardIterator __first, |
_ForwardIterator __last, const _Tp& __value) |
{ |
return __check_partitioned_lower_aux(__first, __last, __value, |
std::__iterator_category(__first)); |
} |
|
template<typename _ForwardIterator, typename _Tp> |
inline bool |
__check_partitioned_upper_aux(_ForwardIterator __first, |
_ForwardIterator __last, const _Tp& __value, |
std::forward_iterator_tag) |
{ |
while (__first != __last && !(__value < *__first)) |
++__first; |
if (__first != __last) |
405,35 → 380,12 |
return __first == __last; |
} |
|
// For performance reason, as the iterator range has been validated, check on |
// random access safe iterators is done using the base iterator. |
template<typename _Iterator, typename _Sequence, typename _Tp> |
inline bool |
__check_partitioned_upper_aux( |
const _Safe_iterator<_Iterator, _Sequence>& __first, |
const _Safe_iterator<_Iterator, _Sequence>& __last, |
const _Tp& __value, |
std::random_access_iterator_tag __tag) |
{ |
return __check_partitioned_upper_aux(__first.base(), __last.base(), |
__value, __tag); |
} |
|
template<typename _ForwardIterator, typename _Tp> |
inline bool |
__check_partitioned_upper(_ForwardIterator __first, |
_ForwardIterator __last, const _Tp& __value) |
{ |
return __check_partitioned_upper_aux(__first, __last, __value, |
std::__iterator_category(__first)); |
} |
|
// Determine if a sequence is partitioned w.r.t. this element. |
template<typename _ForwardIterator, typename _Tp, typename _Pred> |
inline bool |
__check_partitioned_lower_aux(_ForwardIterator __first, |
__check_partitioned_lower(_ForwardIterator __first, |
_ForwardIterator __last, const _Tp& __value, |
_Pred __pred, |
std::forward_iterator_tag) |
_Pred __pred) |
{ |
while (__first != __last && bool(__pred(*__first, __value))) |
++__first; |
446,39 → 398,12 |
return __first == __last; |
} |
|
// For performance reason, as the iterator range has been validated, check on |
// random access safe iterators is done using the base iterator. |
template<typename _Iterator, typename _Sequence, |
typename _Tp, typename _Pred> |
inline bool |
__check_partitioned_lower_aux( |
const _Safe_iterator<_Iterator, _Sequence>& __first, |
const _Safe_iterator<_Iterator, _Sequence>& __last, |
const _Tp& __value, _Pred __pred, |
std::random_access_iterator_tag __tag) |
{ |
return __check_partitioned_lower_aux(__first.base(), __last.base(), |
__value, __pred, __tag); |
} |
|
// Determine if a sequence is partitioned w.r.t. this element. |
template<typename _ForwardIterator, typename _Tp, typename _Pred> |
inline bool |
__check_partitioned_lower(_ForwardIterator __first, |
__check_partitioned_upper(_ForwardIterator __first, |
_ForwardIterator __last, const _Tp& __value, |
_Pred __pred) |
{ |
return __check_partitioned_lower_aux(__first, __last, __value, __pred, |
std::__iterator_category(__first)); |
} |
|
template<typename _ForwardIterator, typename _Tp, typename _Pred> |
inline bool |
__check_partitioned_upper_aux(_ForwardIterator __first, |
_ForwardIterator __last, const _Tp& __value, |
_Pred __pred, |
std::forward_iterator_tag) |
{ |
while (__first != __last && !bool(__pred(__value, *__first))) |
++__first; |
if (__first != __last) |
490,31 → 415,6 |
return __first == __last; |
} |
|
// For performance reason, as the iterator range has been validated, check on |
// random access safe iterators is done using the base iterator. |
template<typename _Iterator, typename _Sequence, |
typename _Tp, typename _Pred> |
inline bool |
__check_partitioned_upper_aux( |
const _Safe_iterator<_Iterator, _Sequence>& __first, |
const _Safe_iterator<_Iterator, _Sequence>& __last, |
const _Tp& __value, _Pred __pred, |
std::random_access_iterator_tag __tag) |
{ |
return __check_partitioned_upper_aux(__first.base(), __last.base(), |
__value, __pred, __tag); |
} |
|
template<typename _ForwardIterator, typename _Tp, typename _Pred> |
inline bool |
__check_partitioned_upper(_ForwardIterator __first, |
_ForwardIterator __last, const _Tp& __value, |
_Pred __pred) |
{ |
return __check_partitioned_upper_aux(__first, __last, __value, __pred, |
std::__iterator_category(__first)); |
} |
|
// Helper struct to detect random access safe iterators. |
template<typename _Iterator> |
struct __is_safe_random_iterator |