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:
François Dumont 2016-09-25 15:23:45 +00:00
parent 50c6dd20ce
commit edc69abbe1
2 changed files with 1008 additions and 1162 deletions

View file

@ -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

View file

@ -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