algo.h: Generalize usage of std::__iterator_category.
2016-09-25 François Dumont <fdumont@gcc.gnu.org> * include/parallel/algo.h: Generalize usage of std::__iterator_category. Adjust whitespaces. From-SVN: r240473
This commit is contained in:
parent
50c6dd20ce
commit
edc69abbe1
2 changed files with 1008 additions and 1162 deletions
|
@ -1,3 +1,8 @@
|
|||
2016-09-25 François Dumont <fdumont@gcc.gnu.org>
|
||||
|
||||
* include/parallel/algo.h: Generalize usage of std::__iterator_category.
|
||||
Adjust whitespaces.
|
||||
|
||||
2016-09-23 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/56166
|
||||
|
|
|
@ -69,7 +69,6 @@ namespace __parallel
|
|||
__gnu_parallel::sequential_tag)
|
||||
{ return _GLIBCXX_STD_A::for_each(__begin, __end, __f); }
|
||||
|
||||
|
||||
// Sequential fallback for input iterator case
|
||||
template<typename _IIter, typename _Function, typename _IteratorTag>
|
||||
inline _Function
|
||||
|
@ -108,9 +107,8 @@ namespace __parallel
|
|||
for_each(_Iterator __begin, _Iterator __end, _Function __f,
|
||||
__gnu_parallel::_Parallelism __parallelism_tag)
|
||||
{
|
||||
typedef std::iterator_traits<_Iterator> _IteratorTraits;
|
||||
typedef typename _IteratorTraits::iterator_category _IteratorCategory;
|
||||
return __for_each_switch(__begin, __end, __f, _IteratorCategory(),
|
||||
return __for_each_switch(__begin, __end, __f,
|
||||
std::__iterator_category(__begin),
|
||||
__parallelism_tag);
|
||||
}
|
||||
|
||||
|
@ -118,12 +116,10 @@ namespace __parallel
|
|||
inline _Function
|
||||
for_each(_Iterator __begin, _Iterator __end, _Function __f)
|
||||
{
|
||||
typedef std::iterator_traits<_Iterator> _IteratorTraits;
|
||||
typedef typename _IteratorTraits::iterator_category _IteratorCategory;
|
||||
return __for_each_switch(__begin, __end, __f, _IteratorCategory());
|
||||
return __for_each_switch(__begin, __end, __f,
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
|
||||
// Sequential fallback
|
||||
template<typename _IIter, typename _Tp>
|
||||
inline _IIter
|
||||
|
@ -166,9 +162,8 @@ namespace __parallel
|
|||
inline _IIter
|
||||
find(_IIter __begin, _IIter __end, const _Tp& __val)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter> _IteratorTraits;
|
||||
typedef typename _IteratorTraits::iterator_category _IteratorCategory;
|
||||
return __find_switch(__begin, __end, __val, _IteratorCategory());
|
||||
return __find_switch(__begin, __end, __val,
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
// Sequential fallback
|
||||
|
@ -204,9 +199,8 @@ namespace __parallel
|
|||
inline _IIter
|
||||
find_if(_IIter __begin, _IIter __end, _Predicate __pred)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter> _IteratorTraits;
|
||||
typedef typename _IteratorTraits::iterator_category _IteratorCategory;
|
||||
return __find_if_switch(__begin, __end, __pred, _IteratorCategory());
|
||||
return __find_if_switch(__begin, __end, __pred,
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
// Sequential fallback
|
||||
|
@ -215,7 +209,8 @@ namespace __parallel
|
|||
find_first_of(_IIter __begin1, _IIter __end1,
|
||||
_FIterator __begin2, _FIterator __end2,
|
||||
__gnu_parallel::sequential_tag)
|
||||
{ return _GLIBCXX_STD_A::find_first_of(__begin1, __end1, __begin2, __end2);
|
||||
{
|
||||
return _GLIBCXX_STD_A::find_first_of(__begin1, __end1, __begin2, __end2);
|
||||
}
|
||||
|
||||
// Sequential fallback
|
||||
|
@ -273,13 +268,9 @@ namespace __parallel
|
|||
_FIterator __begin2, _FIterator __end2,
|
||||
_BinaryPredicate __comp)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter> _IIterTraits;
|
||||
typedef std::iterator_traits<_FIterator> _FIterTraits;
|
||||
typedef typename _IIterTraits::iterator_category _IIteratorCategory;
|
||||
typedef typename _FIterTraits::iterator_category _FIteratorCategory;
|
||||
|
||||
return __find_first_of_switch(__begin1, __end1, __begin2, __end2, __comp,
|
||||
_IIteratorCategory(), _FIteratorCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2));
|
||||
}
|
||||
|
||||
// Public interface, insert default comparator
|
||||
|
@ -288,10 +279,8 @@ namespace __parallel
|
|||
find_first_of(_IIter __begin1, _IIter __end1,
|
||||
_FIterator __begin2, _FIterator __end2)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter> _IIterTraits;
|
||||
typedef std::iterator_traits<_FIterator> _FIterTraits;
|
||||
typedef typename _IIterTraits::value_type _IValueType;
|
||||
typedef typename _FIterTraits::value_type _FValueType;
|
||||
typedef typename std::iterator_traits<_IIter>::value_type _IValueType;
|
||||
typedef typename std::iterator_traits<_FIterator>::value_type _FValueType;
|
||||
|
||||
return __gnu_parallel::find_first_of(__begin1, __end1, __begin2, __end2,
|
||||
__gnu_parallel::_EqualTo<_IValueType, _FValueType>());
|
||||
|
@ -343,15 +332,12 @@ namespace __parallel
|
|||
inline _OutputIterator
|
||||
unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter> _IIterTraits;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits::iterator_category _IIteratorCategory;
|
||||
typedef typename _IIterTraits::value_type _ValueType;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
typedef typename std::iterator_traits<_IIter>::value_type _ValueType;
|
||||
|
||||
return __unique_copy_switch(
|
||||
__begin1, __end1, __out, equal_to<_ValueType>(),
|
||||
_IIteratorCategory(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__out));
|
||||
}
|
||||
|
||||
// Public interface
|
||||
|
@ -360,14 +346,10 @@ namespace __parallel
|
|||
unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
|
||||
_Predicate __pred)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter> _IIterTraits;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits::iterator_category _IIteratorCategory;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
|
||||
return __unique_copy_switch(
|
||||
__begin1, __end1, __out, __pred,
|
||||
_IIteratorCategory(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__out));
|
||||
}
|
||||
|
||||
// Sequential fallback
|
||||
|
@ -432,21 +414,15 @@ namespace __parallel
|
|||
set_union(_IIter1 __begin1, _IIter1 __end1,
|
||||
_IIter2 __begin2, _IIter2 __end2, _OutputIterator __out)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter1> _IIterTraits1;
|
||||
typedef std::iterator_traits<_IIter2> _IIterTraits2;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits1::iterator_category
|
||||
_IIterCategory1;
|
||||
typedef typename _IIterTraits2::iterator_category
|
||||
_IIterCategory2;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
typedef typename _IIterTraits1::value_type _ValueType1;
|
||||
typedef typename _IIterTraits2::value_type _ValueType2;
|
||||
typedef typename std::iterator_traits<_IIter1>::value_type _ValueType1;
|
||||
typedef typename std::iterator_traits<_IIter2>::value_type _ValueType2;
|
||||
|
||||
return __set_union_switch(
|
||||
__begin1, __end1, __begin2, __end2, __out,
|
||||
__gnu_parallel::_Less<_ValueType1, _ValueType2>(),
|
||||
_IIterCategory1(), _IIterCategory2(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2),
|
||||
std::__iterator_category(__out));
|
||||
}
|
||||
|
||||
// Public interface
|
||||
|
@ -457,18 +433,11 @@ namespace __parallel
|
|||
_IIter2 __begin2, _IIter2 __end2,
|
||||
_OutputIterator __out, _Predicate __pred)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter1> _IIterTraits1;
|
||||
typedef std::iterator_traits<_IIter2> _IIterTraits2;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits1::iterator_category
|
||||
_IIterCategory1;
|
||||
typedef typename _IIterTraits2::iterator_category
|
||||
_IIterCategory2;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
|
||||
return __set_union_switch(
|
||||
__begin1, __end1, __begin2, __end2, __out, __pred,
|
||||
_IIterCategory1(), _IIterCategory2(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2),
|
||||
std::__iterator_category(__out));
|
||||
}
|
||||
|
||||
// Sequential fallback.
|
||||
|
@ -539,21 +508,15 @@ namespace __parallel
|
|||
_IIter2 __begin2, _IIter2 __end2,
|
||||
_OutputIterator __out)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter1> _IIterTraits1;
|
||||
typedef std::iterator_traits<_IIter2> _IIterTraits2;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits1::iterator_category
|
||||
_IIterCategory1;
|
||||
typedef typename _IIterTraits2::iterator_category
|
||||
_IIterCategory2;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
typedef typename _IIterTraits1::value_type _ValueType1;
|
||||
typedef typename _IIterTraits2::value_type _ValueType2;
|
||||
typedef typename std::iterator_traits<_IIter1>::value_type _ValueType1;
|
||||
typedef typename std::iterator_traits<_IIter2>::value_type _ValueType2;
|
||||
|
||||
return __set_intersection_switch(
|
||||
__begin1, __end1, __begin2, __end2, __out,
|
||||
__gnu_parallel::_Less<_ValueType1, _ValueType2>(),
|
||||
_IIterCategory1(), _IIterCategory2(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2),
|
||||
std::__iterator_category(__out));
|
||||
}
|
||||
|
||||
template<typename _IIter1, typename _IIter2,
|
||||
|
@ -563,18 +526,11 @@ namespace __parallel
|
|||
_IIter2 __begin2, _IIter2 __end2,
|
||||
_OutputIterator __out, _Predicate __pred)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter1> _IIterTraits1;
|
||||
typedef std::iterator_traits<_IIter2> _IIterTraits2;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits1::iterator_category
|
||||
_IIterCategory1;
|
||||
typedef typename _IIterTraits2::iterator_category
|
||||
_IIterCategory2;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
|
||||
return __set_intersection_switch(
|
||||
__begin1, __end1, __begin2, __end2, __out, __pred,
|
||||
_IIterCategory1(), _IIterCategory2(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2),
|
||||
std::__iterator_category(__out));
|
||||
}
|
||||
|
||||
// Sequential fallback
|
||||
|
@ -646,21 +602,15 @@ namespace __parallel
|
|||
_IIter2 __begin2, _IIter2 __end2,
|
||||
_OutputIterator __out)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter1> _IIterTraits1;
|
||||
typedef std::iterator_traits<_IIter2> _IIterTraits2;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits1::iterator_category
|
||||
_IIterCategory1;
|
||||
typedef typename _IIterTraits2::iterator_category
|
||||
_IIterCategory2;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
typedef typename _IIterTraits1::value_type _ValueType1;
|
||||
typedef typename _IIterTraits2::value_type _ValueType2;
|
||||
typedef typename std::iterator_traits<_IIter1>::value_type _ValueType1;
|
||||
typedef typename std::iterator_traits<_IIter2>::value_type _ValueType2;
|
||||
|
||||
return __set_symmetric_difference_switch(
|
||||
__begin1, __end1, __begin2, __end2, __out,
|
||||
__gnu_parallel::_Less<_ValueType1, _ValueType2>(),
|
||||
_IIterCategory1(), _IIterCategory2(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2),
|
||||
std::__iterator_category(__out));
|
||||
}
|
||||
|
||||
// Public interface.
|
||||
|
@ -671,18 +621,11 @@ namespace __parallel
|
|||
_IIter2 __begin2, _IIter2 __end2,
|
||||
_OutputIterator __out, _Predicate __pred)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter1> _IIterTraits1;
|
||||
typedef std::iterator_traits<_IIter2> _IIterTraits2;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits1::iterator_category
|
||||
_IIterCategory1;
|
||||
typedef typename _IIterTraits2::iterator_category
|
||||
_IIterCategory2;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
|
||||
return __set_symmetric_difference_switch(
|
||||
__begin1, __end1, __begin2, __end2, __out, __pred,
|
||||
_IIterCategory1(), _IIterCategory2(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2),
|
||||
std::__iterator_category(__out));
|
||||
}
|
||||
|
||||
// Sequential fallback.
|
||||
|
@ -751,21 +694,15 @@ namespace __parallel
|
|||
_IIter2 __begin2, _IIter2 __end2,
|
||||
_OutputIterator __out)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter1> _IIterTraits1;
|
||||
typedef std::iterator_traits<_IIter2> _IIterTraits2;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits1::iterator_category
|
||||
_IIterCategory1;
|
||||
typedef typename _IIterTraits2::iterator_category
|
||||
_IIterCategory2;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
typedef typename _IIterTraits1::value_type _ValueType1;
|
||||
typedef typename _IIterTraits2::value_type _ValueType2;
|
||||
typedef typename std::iterator_traits<_IIter1>::value_type _ValueType1;
|
||||
typedef typename std::iterator_traits<_IIter2>::value_type _ValueType2;
|
||||
|
||||
return __set_difference_switch(
|
||||
__begin1, __end1, __begin2, __end2, __out,
|
||||
__gnu_parallel::_Less<_ValueType1, _ValueType2>(),
|
||||
_IIterCategory1(), _IIterCategory2(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2),
|
||||
std::__iterator_category(__out));
|
||||
}
|
||||
|
||||
// Public interface
|
||||
|
@ -776,18 +713,11 @@ namespace __parallel
|
|||
_IIter2 __begin2, _IIter2 __end2,
|
||||
_OutputIterator __out, _Predicate __pred)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter1> _IIterTraits1;
|
||||
typedef std::iterator_traits<_IIter2> _IIterTraits2;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits1::iterator_category
|
||||
_IIterCategory1;
|
||||
typedef typename _IIterTraits2::iterator_category
|
||||
_IIterCategory2;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
|
||||
return __set_difference_switch(
|
||||
__begin1, __end1, __begin2, __end2, __out, __pred,
|
||||
_IIterCategory1(), _IIterCategory2(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2),
|
||||
std::__iterator_category(__out));
|
||||
}
|
||||
|
||||
// Sequential fallback
|
||||
|
@ -842,9 +772,8 @@ namespace __parallel
|
|||
inline _FIterator
|
||||
adjacent_find(_FIterator __begin, _FIterator __end)
|
||||
{
|
||||
typedef iterator_traits<_FIterator> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
return __adjacent_find_switch(__begin, __end, _IteratorCategory());
|
||||
return __adjacent_find_switch(__begin, __end,
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
// Sequential fallback for input iterator case
|
||||
|
@ -877,10 +806,8 @@ namespace __parallel
|
|||
adjacent_find(_FIterator __begin, _FIterator __end,
|
||||
_BinaryPredicate __pred)
|
||||
{
|
||||
typedef iterator_traits<_FIterator> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
return __adjacent_find_switch(__begin, __end, __pred,
|
||||
_IteratorCategory());
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
// Sequential fallback
|
||||
|
@ -936,9 +863,8 @@ namespace __parallel
|
|||
count(_IIter __begin, _IIter __end, const _Tp& __value,
|
||||
__gnu_parallel::_Parallelism __parallelism_tag)
|
||||
{
|
||||
typedef iterator_traits<_IIter> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
return __count_switch(__begin, __end, __value, _IteratorCategory(),
|
||||
return __count_switch(__begin, __end, __value,
|
||||
std::__iterator_category(__begin),
|
||||
__parallelism_tag);
|
||||
}
|
||||
|
||||
|
@ -946,9 +872,8 @@ namespace __parallel
|
|||
inline typename iterator_traits<_IIter>::difference_type
|
||||
count(_IIter __begin, _IIter __end, const _Tp& __value)
|
||||
{
|
||||
typedef iterator_traits<_IIter> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
return __count_switch(__begin, __end, __value, _IteratorCategory());
|
||||
return __count_switch(__begin, __end, __value,
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1006,9 +931,8 @@ namespace __parallel
|
|||
count_if(_IIter __begin, _IIter __end, _Predicate __pred,
|
||||
__gnu_parallel::_Parallelism __parallelism_tag)
|
||||
{
|
||||
typedef iterator_traits<_IIter> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
return __count_if_switch(__begin, __end, __pred, _IteratorCategory(),
|
||||
return __count_if_switch(__begin, __end, __pred,
|
||||
std::__iterator_category(__begin),
|
||||
__parallelism_tag);
|
||||
}
|
||||
|
||||
|
@ -1016,9 +940,8 @@ namespace __parallel
|
|||
inline typename iterator_traits<_IIter>::difference_type
|
||||
count_if(_IIter __begin, _IIter __end, _Predicate __pred)
|
||||
{
|
||||
typedef iterator_traits<_IIter> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
return __count_if_switch(__begin, __end, __pred, _IteratorCategory());
|
||||
return __count_if_switch(__begin, __end, __pred,
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1037,10 +960,8 @@ namespace __parallel
|
|||
_RAIter2 __begin2, _RAIter2 __end2,
|
||||
random_access_iterator_tag, random_access_iterator_tag)
|
||||
{
|
||||
typedef std::iterator_traits<_RAIter1> _Iterator1Traits;
|
||||
typedef typename _Iterator1Traits::value_type _ValueType1;
|
||||
typedef std::iterator_traits<_RAIter2> _Iterator2Traits;
|
||||
typedef typename _Iterator2Traits::value_type _ValueType2;
|
||||
typedef typename std::iterator_traits<_RAIter1>::value_type _ValueType1;
|
||||
typedef typename std::iterator_traits<_RAIter2>::value_type _ValueType2;
|
||||
|
||||
if (_GLIBCXX_PARALLEL_CONDITION(
|
||||
static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
|
||||
|
@ -1070,13 +991,9 @@ namespace __parallel
|
|||
search(_FIterator1 __begin1, _FIterator1 __end1,
|
||||
_FIterator2 __begin2, _FIterator2 __end2)
|
||||
{
|
||||
typedef std::iterator_traits<_FIterator1> _Iterator1Traits;
|
||||
typedef typename _Iterator1Traits::iterator_category _IteratorCategory1;
|
||||
typedef std::iterator_traits<_FIterator2> _Iterator2Traits;
|
||||
typedef typename _Iterator2Traits::iterator_category _IteratorCategory2;
|
||||
|
||||
return __search_switch(__begin1, __end1, __begin2, __end2,
|
||||
_IteratorCategory1(), _IteratorCategory2());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2));
|
||||
}
|
||||
|
||||
// Public interface.
|
||||
|
@ -1127,12 +1044,9 @@ namespace __parallel
|
|||
_FIterator2 __begin2, _FIterator2 __end2,
|
||||
_BinaryPredicate __pred)
|
||||
{
|
||||
typedef std::iterator_traits<_FIterator1> _Iterator1Traits;
|
||||
typedef typename _Iterator1Traits::iterator_category _IteratorCategory1;
|
||||
typedef std::iterator_traits<_FIterator2> _Iterator2Traits;
|
||||
typedef typename _Iterator2Traits::iterator_category _IteratorCategory2;
|
||||
return __search_switch(__begin1, __end1, __begin2, __end2, __pred,
|
||||
_IteratorCategory1(), _IteratorCategory2());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2));
|
||||
}
|
||||
|
||||
// Sequential fallback
|
||||
|
@ -1202,8 +1116,7 @@ namespace __parallel
|
|||
const _Tp& __val, _BinaryPredicate __binary_pred)
|
||||
{
|
||||
return __search_n_switch(__begin, __end, __count, __val, __binary_pred,
|
||||
typename std::iterator_traits<_FIterator>::
|
||||
iterator_category());
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1266,13 +1179,9 @@ namespace __parallel
|
|||
_UnaryOperation __unary_op,
|
||||
__gnu_parallel::_Parallelism __parallelism_tag)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter> _IIterTraits;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits::iterator_category _IIteratorCategory;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
|
||||
return __transform1_switch(__begin, __end, __result, __unary_op,
|
||||
_IIteratorCategory(), _OIterCategory(),
|
||||
std::__iterator_category(__begin),
|
||||
std::__iterator_category(__result),
|
||||
__parallelism_tag);
|
||||
}
|
||||
|
||||
|
@ -1282,13 +1191,9 @@ namespace __parallel
|
|||
transform(_IIter __begin, _IIter __end, _OutputIterator __result,
|
||||
_UnaryOperation __unary_op)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter> _IIterTraits;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits::iterator_category _IIteratorCategory;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
|
||||
return __transform1_switch(__begin, __end, __result, __unary_op,
|
||||
_IIteratorCategory(), _OIterCategory());
|
||||
std::__iterator_category(__begin),
|
||||
std::__iterator_category(__result));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1359,18 +1264,11 @@ namespace __parallel
|
|||
_BinaryOperation __binary_op,
|
||||
__gnu_parallel::_Parallelism __parallelism_tag)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter1> _IIterTraits1;
|
||||
typedef typename _IIterTraits1::iterator_category
|
||||
_IIterCategory1;
|
||||
typedef std::iterator_traits<_IIter2> _IIterTraits2;
|
||||
typedef typename _IIterTraits2::iterator_category
|
||||
_IIterCategory2;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
|
||||
return __transform2_switch(
|
||||
__begin1, __end1, __begin2, __result, __binary_op,
|
||||
_IIterCategory1(), _IIterCategory2(), _OIterCategory(),
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2),
|
||||
std::__iterator_category(__result),
|
||||
__parallelism_tag);
|
||||
}
|
||||
|
||||
|
@ -1381,18 +1279,11 @@ namespace __parallel
|
|||
_IIter2 __begin2, _OutputIterator __result,
|
||||
_BinaryOperation __binary_op)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter1> _IIterTraits1;
|
||||
typedef typename _IIterTraits1::iterator_category
|
||||
_IIterCategory1;
|
||||
typedef std::iterator_traits<_IIter2> _IIterTraits2;
|
||||
typedef typename _IIterTraits2::iterator_category
|
||||
_IIterCategory2;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
|
||||
return __transform2_switch(
|
||||
__begin1, __end1, __begin2, __result, __binary_op,
|
||||
_IIterCategory1(), _IIterCategory2(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2),
|
||||
std::__iterator_category(__result));
|
||||
}
|
||||
|
||||
// Sequential fallback
|
||||
|
@ -1431,10 +1322,8 @@ namespace __parallel
|
|||
const _Tp& __new_value,
|
||||
__gnu_parallel::_Parallelism __parallelism_tag)
|
||||
{
|
||||
typedef iterator_traits<_FIterator> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
__replace_switch(__begin, __end, __old_value, __new_value,
|
||||
_IteratorCategory(),
|
||||
std::__iterator_category(__begin),
|
||||
__parallelism_tag);
|
||||
}
|
||||
|
||||
|
@ -1443,10 +1332,8 @@ namespace __parallel
|
|||
replace(_FIterator __begin, _FIterator __end, const _Tp& __old_value,
|
||||
const _Tp& __new_value)
|
||||
{
|
||||
typedef iterator_traits<_FIterator> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
__replace_switch(__begin, __end, __old_value, __new_value,
|
||||
_IteratorCategory());
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1501,10 +1388,9 @@ namespace __parallel
|
|||
_Predicate __pred, const _Tp& __new_value,
|
||||
__gnu_parallel::_Parallelism __parallelism_tag)
|
||||
{
|
||||
typedef std::iterator_traits<_FIterator> _IteratorTraits;
|
||||
typedef typename _IteratorTraits::iterator_category _IteratorCategory;
|
||||
__replace_if_switch(__begin, __end, __pred, __new_value,
|
||||
_IteratorCategory(), __parallelism_tag);
|
||||
std::__iterator_category(__begin),
|
||||
__parallelism_tag);
|
||||
}
|
||||
|
||||
template<typename _FIterator, typename _Predicate, typename _Tp>
|
||||
|
@ -1512,10 +1398,8 @@ namespace __parallel
|
|||
replace_if(_FIterator __begin, _FIterator __end,
|
||||
_Predicate __pred, const _Tp& __new_value)
|
||||
{
|
||||
typedef std::iterator_traits<_FIterator> _IteratorTraits;
|
||||
typedef typename _IteratorTraits::iterator_category _IteratorCategory;
|
||||
__replace_if_switch(__begin, __end, __pred, __new_value,
|
||||
_IteratorCategory());
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
// Sequential fallback
|
||||
|
@ -1563,9 +1447,8 @@ namespace __parallel
|
|||
generate(_FIterator __begin, _FIterator __end,
|
||||
_Generator __gen, __gnu_parallel::_Parallelism __parallelism_tag)
|
||||
{
|
||||
typedef std::iterator_traits<_FIterator> _IteratorTraits;
|
||||
typedef typename _IteratorTraits::iterator_category _IteratorCategory;
|
||||
__generate_switch(__begin, __end, __gen, _IteratorCategory(),
|
||||
__generate_switch(__begin, __end, __gen,
|
||||
std::__iterator_category(__begin),
|
||||
__parallelism_tag);
|
||||
}
|
||||
|
||||
|
@ -1573,9 +1456,8 @@ namespace __parallel
|
|||
inline void
|
||||
generate(_FIterator __begin, _FIterator __end, _Generator __gen)
|
||||
{
|
||||
typedef std::iterator_traits<_FIterator> _IteratorTraits;
|
||||
typedef typename _IteratorTraits::iterator_category _IteratorCategory;
|
||||
__generate_switch(__begin, __end, __gen, _IteratorCategory());
|
||||
__generate_switch(__begin, __end, __gen,
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1612,9 +1494,8 @@ namespace __parallel
|
|||
generate_n(_OutputIterator __begin, _Size __n, _Generator __gen,
|
||||
__gnu_parallel::_Parallelism __parallelism_tag)
|
||||
{
|
||||
typedef std::iterator_traits<_OutputIterator> _IteratorTraits;
|
||||
typedef typename _IteratorTraits::iterator_category _IteratorCategory;
|
||||
return __generate_n_switch(__begin, __n, __gen, _IteratorCategory(),
|
||||
return __generate_n_switch(__begin, __n, __gen,
|
||||
std::__iterator_category(__begin),
|
||||
__parallelism_tag);
|
||||
}
|
||||
|
||||
|
@ -1622,9 +1503,8 @@ namespace __parallel
|
|||
inline _OutputIterator
|
||||
generate_n(_OutputIterator __begin, _Size __n, _Generator __gen)
|
||||
{
|
||||
typedef std::iterator_traits<_OutputIterator> _IteratorTraits;
|
||||
typedef typename _IteratorTraits::iterator_category _IteratorCategory;
|
||||
return __generate_n_switch(__begin, __n, __gen, _IteratorCategory());
|
||||
return __generate_n_switch(__begin, __n, __gen,
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1725,9 +1605,8 @@ namespace __parallel
|
|||
inline _FIterator
|
||||
partition(_FIterator __begin, _FIterator __end, _Predicate __pred)
|
||||
{
|
||||
typedef iterator_traits<_FIterator> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
return __partition_switch(__begin, __end, __pred, _IteratorCategory());
|
||||
return __partition_switch(__begin, __end, __pred,
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
// sort interface
|
||||
|
@ -1754,8 +1633,7 @@ namespace __parallel
|
|||
sort(_RAIter __begin, _RAIter __end, _Compare __comp,
|
||||
_Parallelism __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
|
||||
if (__begin != __end)
|
||||
{
|
||||
|
@ -1774,8 +1652,7 @@ namespace __parallel
|
|||
inline void
|
||||
sort(_RAIter __begin, _RAIter __end)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
sort(__begin, __end, std::less<_ValueType>(),
|
||||
__gnu_parallel::default_parallel_tag());
|
||||
}
|
||||
|
@ -1786,8 +1663,7 @@ namespace __parallel
|
|||
sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::default_parallel_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
|
@ -1797,8 +1673,7 @@ namespace __parallel
|
|||
sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::parallel_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
|
@ -1808,8 +1683,7 @@ namespace __parallel
|
|||
sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::multiway_mergesort_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
|
@ -1819,8 +1693,7 @@ namespace __parallel
|
|||
sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::multiway_mergesort_sampling_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
|
@ -1830,8 +1703,7 @@ namespace __parallel
|
|||
sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::multiway_mergesort_exact_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
|
@ -1841,8 +1713,7 @@ namespace __parallel
|
|||
sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::quicksort_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
|
@ -1852,8 +1723,7 @@ namespace __parallel
|
|||
sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::balanced_quicksort_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
|
@ -1862,12 +1732,10 @@ namespace __parallel
|
|||
void
|
||||
sort(_RAIter __begin, _RAIter __end, _Compare __comp)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
sort(__begin, __end, __comp, __gnu_parallel::default_parallel_tag());
|
||||
}
|
||||
|
||||
|
||||
// stable_sort interface
|
||||
|
||||
|
||||
|
@ -1883,8 +1751,7 @@ namespace __parallel
|
|||
inline void
|
||||
stable_sort(_RAIter __begin, _RAIter __end,
|
||||
_Compare __comp, __gnu_parallel::sequential_tag)
|
||||
{ _GLIBCXX_STD_A::stable_sort<_RAIter, _Compare>(
|
||||
__begin, __end, __comp); }
|
||||
{ _GLIBCXX_STD_A::stable_sort<_RAIter, _Compare>(__begin, __end, __comp); }
|
||||
|
||||
// Public interface
|
||||
template<typename _RAIter, typename _Compare,
|
||||
|
@ -1901,8 +1768,8 @@ namespace __parallel
|
|||
if (_GLIBCXX_PARALLEL_CONDITION(
|
||||
static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin) >=
|
||||
__gnu_parallel::_Settings::get().sort_minimal_n))
|
||||
__gnu_parallel::__parallel_sort<true>(
|
||||
__begin, __end, __comp, __parallelism);
|
||||
__gnu_parallel::__parallel_sort<true>(__begin, __end,
|
||||
__comp, __parallelism);
|
||||
else
|
||||
stable_sort(__begin, __end, __comp,
|
||||
__gnu_parallel::sequential_tag());
|
||||
|
@ -1914,8 +1781,7 @@ namespace __parallel
|
|||
inline void
|
||||
stable_sort(_RAIter __begin, _RAIter __end)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
stable_sort(__begin, __end, std::less<_ValueType>(),
|
||||
__gnu_parallel::default_parallel_tag());
|
||||
}
|
||||
|
@ -1926,8 +1792,7 @@ namespace __parallel
|
|||
stable_sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::default_parallel_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
stable_sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
|
@ -1937,8 +1802,7 @@ namespace __parallel
|
|||
stable_sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::parallel_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
stable_sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
|
@ -1948,8 +1812,7 @@ namespace __parallel
|
|||
stable_sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::multiway_mergesort_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
stable_sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
|
@ -1959,8 +1822,7 @@ namespace __parallel
|
|||
stable_sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::quicksort_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
stable_sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
|
@ -1970,19 +1832,15 @@ namespace __parallel
|
|||
stable_sort(_RAIter __begin, _RAIter __end,
|
||||
__gnu_parallel::balanced_quicksort_tag __parallelism)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
stable_sort(__begin, __end, std::less<_ValueType>(), __parallelism);
|
||||
}
|
||||
|
||||
// Public interface
|
||||
template<typename _RAIter, typename _Compare>
|
||||
void
|
||||
stable_sort(_RAIter __begin, _RAIter __end,
|
||||
_Compare __comp)
|
||||
stable_sort(_RAIter __begin, _RAIter __end, _Compare __comp)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
stable_sort(
|
||||
__begin, __end, __comp, __gnu_parallel::default_parallel_tag());
|
||||
}
|
||||
|
@ -2050,23 +1908,13 @@ namespace __parallel
|
|||
merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
|
||||
_IIter2 __end2, _OutputIterator __result, _Compare __comp)
|
||||
{
|
||||
typedef typename iterator_traits<_IIter1>::value_type _ValueType;
|
||||
|
||||
typedef std::iterator_traits<_IIter1> _IIterTraits1;
|
||||
typedef std::iterator_traits<_IIter2> _IIterTraits2;
|
||||
typedef std::iterator_traits<_OutputIterator> _OIterTraits;
|
||||
typedef typename _IIterTraits1::iterator_category
|
||||
_IIterCategory1;
|
||||
typedef typename _IIterTraits2::iterator_category
|
||||
_IIterCategory2;
|
||||
typedef typename _OIterTraits::iterator_category _OIterCategory;
|
||||
|
||||
return __merge_switch(
|
||||
__begin1, __end1, __begin2, __end2, __result, __comp,
|
||||
_IIterCategory1(), _IIterCategory2(), _OIterCategory());
|
||||
std::__iterator_category(__begin1),
|
||||
std::__iterator_category(__begin2),
|
||||
std::__iterator_category(__result));
|
||||
}
|
||||
|
||||
|
||||
// Public interface, insert default comparator
|
||||
template<typename _IIter1, typename _IIter2,
|
||||
typename _OutputIterator>
|
||||
|
@ -2074,10 +1922,8 @@ namespace __parallel
|
|||
merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
|
||||
_IIter2 __end2, _OutputIterator __result)
|
||||
{
|
||||
typedef std::iterator_traits<_IIter1> _Iterator1Traits;
|
||||
typedef std::iterator_traits<_IIter2> _Iterator2Traits;
|
||||
typedef typename _Iterator1Traits::value_type _ValueType1;
|
||||
typedef typename _Iterator2Traits::value_type _ValueType2;
|
||||
typedef typename std::iterator_traits<_IIter1>::value_type _ValueType1;
|
||||
typedef typename std::iterator_traits<_IIter2>::value_type _ValueType2;
|
||||
|
||||
return __gnu_parallel::merge(__begin1, __end1, __begin2, __end2,
|
||||
__result, __gnu_parallel::_Less<_ValueType1, _ValueType2>());
|
||||
|
@ -2119,8 +1965,7 @@ namespace __parallel
|
|||
nth_element(_RAIter __begin, _RAIter __nth,
|
||||
_RAIter __end)
|
||||
{
|
||||
typedef iterator_traits<_RAIter> _TraitsType;
|
||||
typedef typename _TraitsType::value_type _ValueType;
|
||||
typedef typename iterator_traits<_RAIter>::value_type _ValueType;
|
||||
__gnu_parallel::nth_element(__begin, __nth, __end,
|
||||
std::less<_ValueType>());
|
||||
}
|
||||
|
@ -2243,9 +2088,8 @@ namespace __parallel
|
|||
max_element(_FIterator __begin, _FIterator __end, _Compare __comp,
|
||||
__gnu_parallel::_Parallelism __parallelism_tag)
|
||||
{
|
||||
typedef iterator_traits<_FIterator> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
return __max_element_switch(__begin, __end, __comp, _IteratorCategory(),
|
||||
return __max_element_switch(__begin, __end, __comp,
|
||||
std::__iterator_category(__begin),
|
||||
__parallelism_tag);
|
||||
}
|
||||
|
||||
|
@ -2253,9 +2097,8 @@ namespace __parallel
|
|||
inline _FIterator
|
||||
max_element(_FIterator __begin, _FIterator __end, _Compare __comp)
|
||||
{
|
||||
typedef iterator_traits<_FIterator> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
return __max_element_switch(__begin, __end, __comp, _IteratorCategory());
|
||||
return __max_element_switch(__begin, __end, __comp,
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
|
||||
|
||||
|
@ -2334,9 +2177,8 @@ namespace __parallel
|
|||
min_element(_FIterator __begin, _FIterator __end, _Compare __comp,
|
||||
__gnu_parallel::_Parallelism __parallelism_tag)
|
||||
{
|
||||
typedef iterator_traits<_FIterator> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
return __min_element_switch(__begin, __end, __comp, _IteratorCategory(),
|
||||
return __min_element_switch(__begin, __end, __comp,
|
||||
std::__iterator_category(__begin),
|
||||
__parallelism_tag);
|
||||
}
|
||||
|
||||
|
@ -2344,9 +2186,8 @@ namespace __parallel
|
|||
inline _FIterator
|
||||
min_element(_FIterator __begin, _FIterator __end, _Compare __comp)
|
||||
{
|
||||
typedef iterator_traits<_FIterator> _TraitsType;
|
||||
typedef typename _TraitsType::iterator_category _IteratorCategory;
|
||||
return __min_element_switch(__begin, __end, __comp, _IteratorCategory());
|
||||
return __min_element_switch(__begin, __end, __comp,
|
||||
std::__iterator_category(__begin));
|
||||
}
|
||||
} // end namespace
|
||||
} // end namespace
|
||||
|
|
Loading…
Add table
Reference in a new issue