Commit edc69abb by François Dumont

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