1*4684ddb6SLionel Sambuc// -*- C++ -*- 2*4684ddb6SLionel Sambuc//===---------------------------- numeric ---------------------------------===// 3*4684ddb6SLionel Sambuc// 4*4684ddb6SLionel Sambuc// The LLVM Compiler Infrastructure 5*4684ddb6SLionel Sambuc// 6*4684ddb6SLionel Sambuc// This file is dual licensed under the MIT and the University of Illinois Open 7*4684ddb6SLionel Sambuc// Source Licenses. See LICENSE.TXT for details. 8*4684ddb6SLionel Sambuc// 9*4684ddb6SLionel Sambuc//===----------------------------------------------------------------------===// 10*4684ddb6SLionel Sambuc 11*4684ddb6SLionel Sambuc#ifndef _LIBCPP_NUMERIC 12*4684ddb6SLionel Sambuc#define _LIBCPP_NUMERIC 13*4684ddb6SLionel Sambuc 14*4684ddb6SLionel Sambuc/* 15*4684ddb6SLionel Sambuc numeric synopsis 16*4684ddb6SLionel Sambuc 17*4684ddb6SLionel Sambucnamespace std 18*4684ddb6SLionel Sambuc{ 19*4684ddb6SLionel Sambuc 20*4684ddb6SLionel Sambuctemplate <class InputIterator, class T> 21*4684ddb6SLionel Sambuc T 22*4684ddb6SLionel Sambuc accumulate(InputIterator first, InputIterator last, T init); 23*4684ddb6SLionel Sambuc 24*4684ddb6SLionel Sambuctemplate <class InputIterator, class T, class BinaryOperation> 25*4684ddb6SLionel Sambuc T 26*4684ddb6SLionel Sambuc accumulate(InputIterator first, InputIterator last, T init, BinaryOperation binary_op); 27*4684ddb6SLionel Sambuc 28*4684ddb6SLionel Sambuctemplate <class InputIterator1, class InputIterator2, class T> 29*4684ddb6SLionel Sambuc T 30*4684ddb6SLionel Sambuc inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init); 31*4684ddb6SLionel Sambuc 32*4684ddb6SLionel Sambuctemplate <class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2> 33*4684ddb6SLionel Sambuc T 34*4684ddb6SLionel Sambuc inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, 35*4684ddb6SLionel Sambuc T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2); 36*4684ddb6SLionel Sambuc 37*4684ddb6SLionel Sambuctemplate <class InputIterator, class OutputIterator> 38*4684ddb6SLionel Sambuc OutputIterator 39*4684ddb6SLionel Sambuc partial_sum(InputIterator first, InputIterator last, OutputIterator result); 40*4684ddb6SLionel Sambuc 41*4684ddb6SLionel Sambuctemplate <class InputIterator, class OutputIterator, class BinaryOperation> 42*4684ddb6SLionel Sambuc OutputIterator 43*4684ddb6SLionel Sambuc partial_sum(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op); 44*4684ddb6SLionel Sambuc 45*4684ddb6SLionel Sambuctemplate <class InputIterator, class OutputIterator> 46*4684ddb6SLionel Sambuc OutputIterator 47*4684ddb6SLionel Sambuc adjacent_difference(InputIterator first, InputIterator last, OutputIterator result); 48*4684ddb6SLionel Sambuc 49*4684ddb6SLionel Sambuctemplate <class InputIterator, class OutputIterator, class BinaryOperation> 50*4684ddb6SLionel Sambuc OutputIterator 51*4684ddb6SLionel Sambuc adjacent_difference(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op); 52*4684ddb6SLionel Sambuc 53*4684ddb6SLionel Sambuctemplate <class ForwardIterator, class T> 54*4684ddb6SLionel Sambuc void iota(ForwardIterator first, ForwardIterator last, T value); 55*4684ddb6SLionel Sambuc 56*4684ddb6SLionel Sambuc} // std 57*4684ddb6SLionel Sambuc 58*4684ddb6SLionel Sambuc*/ 59*4684ddb6SLionel Sambuc 60*4684ddb6SLionel Sambuc#include <__config> 61*4684ddb6SLionel Sambuc#include <iterator> 62*4684ddb6SLionel Sambuc 63*4684ddb6SLionel Sambuc#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 64*4684ddb6SLionel Sambuc#pragma GCC system_header 65*4684ddb6SLionel Sambuc#endif 66*4684ddb6SLionel Sambuc 67*4684ddb6SLionel Sambuc_LIBCPP_BEGIN_NAMESPACE_STD 68*4684ddb6SLionel Sambuc 69*4684ddb6SLionel Sambuctemplate <class _InputIterator, class _Tp> 70*4684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 71*4684ddb6SLionel Sambuc_Tp 72*4684ddb6SLionel Sambucaccumulate(_InputIterator __first, _InputIterator __last, _Tp __init) 73*4684ddb6SLionel Sambuc{ 74*4684ddb6SLionel Sambuc for (; __first != __last; ++__first) 75*4684ddb6SLionel Sambuc __init = __init + *__first; 76*4684ddb6SLionel Sambuc return __init; 77*4684ddb6SLionel Sambuc} 78*4684ddb6SLionel Sambuc 79*4684ddb6SLionel Sambuctemplate <class _InputIterator, class _Tp, class _BinaryOperation> 80*4684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 81*4684ddb6SLionel Sambuc_Tp 82*4684ddb6SLionel Sambucaccumulate(_InputIterator __first, _InputIterator __last, _Tp __init, _BinaryOperation __binary_op) 83*4684ddb6SLionel Sambuc{ 84*4684ddb6SLionel Sambuc for (; __first != __last; ++__first) 85*4684ddb6SLionel Sambuc __init = __binary_op(__init, *__first); 86*4684ddb6SLionel Sambuc return __init; 87*4684ddb6SLionel Sambuc} 88*4684ddb6SLionel Sambuc 89*4684ddb6SLionel Sambuctemplate <class _InputIterator1, class _InputIterator2, class _Tp> 90*4684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 91*4684ddb6SLionel Sambuc_Tp 92*4684ddb6SLionel Sambucinner_product(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _Tp __init) 93*4684ddb6SLionel Sambuc{ 94*4684ddb6SLionel Sambuc for (; __first1 != __last1; ++__first1, ++__first2) 95*4684ddb6SLionel Sambuc __init = __init + *__first1 * *__first2; 96*4684ddb6SLionel Sambuc return __init; 97*4684ddb6SLionel Sambuc} 98*4684ddb6SLionel Sambuc 99*4684ddb6SLionel Sambuctemplate <class _InputIterator1, class _InputIterator2, class _Tp, class _BinaryOperation1, class _BinaryOperation2> 100*4684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 101*4684ddb6SLionel Sambuc_Tp 102*4684ddb6SLionel Sambucinner_product(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, 103*4684ddb6SLionel Sambuc _Tp __init, _BinaryOperation1 __binary_op1, _BinaryOperation2 __binary_op2) 104*4684ddb6SLionel Sambuc{ 105*4684ddb6SLionel Sambuc for (; __first1 != __last1; ++__first1, ++__first2) 106*4684ddb6SLionel Sambuc __init = __binary_op1(__init, __binary_op2(*__first1, *__first2)); 107*4684ddb6SLionel Sambuc return __init; 108*4684ddb6SLionel Sambuc} 109*4684ddb6SLionel Sambuc 110*4684ddb6SLionel Sambuctemplate <class _InputIterator, class _OutputIterator> 111*4684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 112*4684ddb6SLionel Sambuc_OutputIterator 113*4684ddb6SLionel Sambucpartial_sum(_InputIterator __first, _InputIterator __last, _OutputIterator __result) 114*4684ddb6SLionel Sambuc{ 115*4684ddb6SLionel Sambuc if (__first != __last) 116*4684ddb6SLionel Sambuc { 117*4684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t(*__first); 118*4684ddb6SLionel Sambuc *__result = __t; 119*4684ddb6SLionel Sambuc for (++__first, ++__result; __first != __last; ++__first, ++__result) 120*4684ddb6SLionel Sambuc { 121*4684ddb6SLionel Sambuc __t = __t + *__first; 122*4684ddb6SLionel Sambuc *__result = __t; 123*4684ddb6SLionel Sambuc } 124*4684ddb6SLionel Sambuc } 125*4684ddb6SLionel Sambuc return __result; 126*4684ddb6SLionel Sambuc} 127*4684ddb6SLionel Sambuc 128*4684ddb6SLionel Sambuctemplate <class _InputIterator, class _OutputIterator, class _BinaryOperation> 129*4684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 130*4684ddb6SLionel Sambuc_OutputIterator 131*4684ddb6SLionel Sambucpartial_sum(_InputIterator __first, _InputIterator __last, _OutputIterator __result, 132*4684ddb6SLionel Sambuc _BinaryOperation __binary_op) 133*4684ddb6SLionel Sambuc{ 134*4684ddb6SLionel Sambuc if (__first != __last) 135*4684ddb6SLionel Sambuc { 136*4684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t(*__first); 137*4684ddb6SLionel Sambuc *__result = __t; 138*4684ddb6SLionel Sambuc for (++__first, ++__result; __first != __last; ++__first, ++__result) 139*4684ddb6SLionel Sambuc { 140*4684ddb6SLionel Sambuc __t = __binary_op(__t, *__first); 141*4684ddb6SLionel Sambuc *__result = __t; 142*4684ddb6SLionel Sambuc } 143*4684ddb6SLionel Sambuc } 144*4684ddb6SLionel Sambuc return __result; 145*4684ddb6SLionel Sambuc} 146*4684ddb6SLionel Sambuc 147*4684ddb6SLionel Sambuctemplate <class _InputIterator, class _OutputIterator> 148*4684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 149*4684ddb6SLionel Sambuc_OutputIterator 150*4684ddb6SLionel Sambucadjacent_difference(_InputIterator __first, _InputIterator __last, _OutputIterator __result) 151*4684ddb6SLionel Sambuc{ 152*4684ddb6SLionel Sambuc if (__first != __last) 153*4684ddb6SLionel Sambuc { 154*4684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t1(*__first); 155*4684ddb6SLionel Sambuc *__result = __t1; 156*4684ddb6SLionel Sambuc for (++__first, ++__result; __first != __last; ++__first, ++__result) 157*4684ddb6SLionel Sambuc { 158*4684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t2(*__first); 159*4684ddb6SLionel Sambuc *__result = __t2 - __t1; 160*4684ddb6SLionel Sambuc __t1 = _VSTD::move(__t2); 161*4684ddb6SLionel Sambuc } 162*4684ddb6SLionel Sambuc } 163*4684ddb6SLionel Sambuc return __result; 164*4684ddb6SLionel Sambuc} 165*4684ddb6SLionel Sambuc 166*4684ddb6SLionel Sambuctemplate <class _InputIterator, class _OutputIterator, class _BinaryOperation> 167*4684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 168*4684ddb6SLionel Sambuc_OutputIterator 169*4684ddb6SLionel Sambucadjacent_difference(_InputIterator __first, _InputIterator __last, _OutputIterator __result, 170*4684ddb6SLionel Sambuc _BinaryOperation __binary_op) 171*4684ddb6SLionel Sambuc{ 172*4684ddb6SLionel Sambuc if (__first != __last) 173*4684ddb6SLionel Sambuc { 174*4684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t1(*__first); 175*4684ddb6SLionel Sambuc *__result = __t1; 176*4684ddb6SLionel Sambuc for (++__first, ++__result; __first != __last; ++__first, ++__result) 177*4684ddb6SLionel Sambuc { 178*4684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t2(*__first); 179*4684ddb6SLionel Sambuc *__result = __binary_op(__t2, __t1); 180*4684ddb6SLionel Sambuc __t1 = _VSTD::move(__t2); 181*4684ddb6SLionel Sambuc } 182*4684ddb6SLionel Sambuc } 183*4684ddb6SLionel Sambuc return __result; 184*4684ddb6SLionel Sambuc} 185*4684ddb6SLionel Sambuc 186*4684ddb6SLionel Sambuctemplate <class _ForwardIterator, class _Tp> 187*4684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 188*4684ddb6SLionel Sambucvoid 189*4684ddb6SLionel Sambuciota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value_) 190*4684ddb6SLionel Sambuc{ 191*4684ddb6SLionel Sambuc for (; __first != __last; ++__first, ++__value_) 192*4684ddb6SLionel Sambuc *__first = __value_; 193*4684ddb6SLionel Sambuc} 194*4684ddb6SLionel Sambuc 195*4684ddb6SLionel Sambuc_LIBCPP_END_NAMESPACE_STD 196*4684ddb6SLionel Sambuc 197*4684ddb6SLionel Sambuc#endif // _LIBCPP_NUMERIC 198