aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/bits/stl_numeric.h
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/include/bits/stl_numeric.h')
-rw-r--r--libstdc++-v3/include/bits/stl_numeric.h63
1 files changed, 43 insertions, 20 deletions
diff --git a/libstdc++-v3/include/bits/stl_numeric.h b/libstdc++-v3/include/bits/stl_numeric.h
index 0a084e5..8656e99 100644
--- a/libstdc++-v3/include/bits/stl_numeric.h
+++ b/libstdc++-v3/include/bits/stl_numeric.h
@@ -38,7 +38,9 @@ namespace std
template <class _InputIterator, class _Tp>
_Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp __init)
{
- __STL_REQUIRES(_InputIterator, _InputIterator);
+ // concept requirements
+ glibcpp_function_requires(InputIteratorConcept<_InputIterator>);
+
for ( ; __first != __last; ++__first)
__init = __init + *__first;
return __init;
@@ -48,7 +50,9 @@ template <class _InputIterator, class _Tp, class _BinaryOperation>
_Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp __init,
_BinaryOperation __binary_op)
{
- __STL_REQUIRES(_InputIterator, _InputIterator);
+ // concept requirements
+ glibcpp_function_requires(InputIteratorConcept<_InputIterator>);
+
for ( ; __first != __last; ++__first)
__init = __binary_op(__init, *__first);
return __init;
@@ -58,8 +62,10 @@ template <class _InputIterator1, class _InputIterator2, class _Tp>
_Tp inner_product(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _Tp __init)
{
- __STL_REQUIRES(_InputIterator2, _InputIterator);
- __STL_REQUIRES(_InputIterator2, _InputIterator);
+ // concept requirements
+ glibcpp_function_requires(InputIteratorConcept<_InputIterator1>);
+ glibcpp_function_requires(InputIteratorConcept<_InputIterator2>);
+
for ( ; __first1 != __last1; ++__first1, ++__first2)
__init = __init + (*__first1 * *__first2);
return __init;
@@ -72,8 +78,10 @@ _Tp inner_product(_InputIterator1 __first1, _InputIterator1 __last1,
_BinaryOperation1 __binary_op1,
_BinaryOperation2 __binary_op2)
{
- __STL_REQUIRES(_InputIterator2, _InputIterator);
- __STL_REQUIRES(_InputIterator2, _InputIterator);
+ // concept requirements
+ glibcpp_function_requires(InputIteratorConcept<_InputIterator1>);
+ glibcpp_function_requires(InputIteratorConcept<_InputIterator2>);
+
for ( ; __first1 != __last1; ++__first1, ++__first2)
__init = __binary_op1(__init, __binary_op2(*__first1, *__first2));
return __init;
@@ -97,11 +105,14 @@ _OutputIterator
partial_sum(_InputIterator __first, _InputIterator __last,
_OutputIterator __result)
{
- __STL_REQUIRES(_InputIterator, _InputIterator);
- __STL_REQUIRES(_OutputIterator, _OutputIterator);
+ // concept requirements
+ glibcpp_function_requires(InputIteratorConcept<_InputIterator>);
+ glibcpp_function_requires(OutputIteratorConcept<_OutputIterator,
+ typename iterator_traits<_InputIterator>::value_type>);
+
if (__first == __last) return __result;
*__result = *__first;
- return __partial_sum(__first, __last, __result, __VALUE_TYPE(__first));
+ return __partial_sum(__first, __last, __result, __value_type(__first));
}
template <class _InputIterator, class _OutputIterator, class _Tp,
@@ -123,11 +134,14 @@ _OutputIterator
partial_sum(_InputIterator __first, _InputIterator __last,
_OutputIterator __result, _BinaryOperation __binary_op)
{
- __STL_REQUIRES(_InputIterator, _InputIterator);
- __STL_REQUIRES(_OutputIterator, _OutputIterator);
+ // concept requirements
+ glibcpp_function_requires(InputIteratorConcept<_InputIterator>);
+ glibcpp_function_requires(OutputIteratorConcept<_OutputIterator,
+ typename iterator_traits<_InputIterator>::value_type>);
+
if (__first == __last) return __result;
*__result = *__first;
- return __partial_sum(__first, __last, __result, __VALUE_TYPE(__first),
+ return __partial_sum(__first, __last, __result, __value_type(__first),
__binary_op);
}
@@ -150,12 +164,15 @@ _OutputIterator
adjacent_difference(_InputIterator __first,
_InputIterator __last, _OutputIterator __result)
{
- __STL_REQUIRES(_InputIterator, _InputIterator);
- __STL_REQUIRES(_OutputIterator, _OutputIterator);
+ // concept requirements
+ glibcpp_function_requires(InputIteratorConcept<_InputIterator>);
+ glibcpp_function_requires(OutputIteratorConcept<_OutputIterator,
+ typename iterator_traits<_InputIterator>::value_type>);
+
if (__first == __last) return __result;
*__result = *__first;
return __adjacent_difference(__first, __last, __result,
- __VALUE_TYPE(__first));
+ __value_type(__first));
}
template <class _InputIterator, class _OutputIterator, class _Tp,
@@ -178,12 +195,15 @@ _OutputIterator
adjacent_difference(_InputIterator __first, _InputIterator __last,
_OutputIterator __result, _BinaryOperation __binary_op)
{
- __STL_REQUIRES(_InputIterator, _InputIterator);
- __STL_REQUIRES(_OutputIterator, _OutputIterator);
+ // concept requirements
+ glibcpp_function_requires(InputIteratorConcept<_InputIterator>);
+ glibcpp_function_requires(OutputIteratorConcept<_OutputIterator,
+ typename iterator_traits<_InputIterator>::value_type>);
+
if (__first == __last) return __result;
*__result = *__first;
return __adjacent_difference(__first, __last, __result,
- __VALUE_TYPE(__first),
+ __value_type(__first),
__binary_op);
}
@@ -241,8 +261,11 @@ template <class _ForwardIter, class _Tp>
void
iota(_ForwardIter __first, _ForwardIter __last, _Tp __value)
{
- __STL_REQUIRES(_ForwardIter, _Mutable_ForwardIterator);
- __STL_CONVERTIBLE(_Tp, typename iterator_traits<_ForwardIter>::value_type);
+ // concept requirements
+ glibcpp_function_requires(Mutable_ForwardIteratorConcept<_ForwardIter>);
+ glibcpp_function_requires(ConvertibleConcept<_Tp,
+ typename iterator_traits<_ForwardIter>::value_type>);
+
while (__first != __last)
*__first++ = __value++;
}