14684ddb6SLionel Sambuc// -*- C++ -*- 24684ddb6SLionel Sambuc//===---------------------------- numeric ---------------------------------===// 34684ddb6SLionel Sambuc// 44684ddb6SLionel Sambuc// The LLVM Compiler Infrastructure 54684ddb6SLionel Sambuc// 64684ddb6SLionel Sambuc// This file is dual licensed under the MIT and the University of Illinois Open 74684ddb6SLionel Sambuc// Source Licenses. See LICENSE.TXT for details. 84684ddb6SLionel Sambuc// 94684ddb6SLionel Sambuc//===----------------------------------------------------------------------===// 104684ddb6SLionel Sambuc 114684ddb6SLionel Sambuc#ifndef _LIBCPP_NUMERIC 124684ddb6SLionel Sambuc#define _LIBCPP_NUMERIC 134684ddb6SLionel Sambuc 144684ddb6SLionel Sambuc/* 154684ddb6SLionel Sambuc numeric synopsis 164684ddb6SLionel Sambuc 174684ddb6SLionel Sambucnamespace std 184684ddb6SLionel Sambuc{ 194684ddb6SLionel Sambuc 204684ddb6SLionel Sambuctemplate <class InputIterator, class T> 214684ddb6SLionel Sambuc T 224684ddb6SLionel Sambuc accumulate(InputIterator first, InputIterator last, T init); 234684ddb6SLionel Sambuc 244684ddb6SLionel Sambuctemplate <class InputIterator, class T, class BinaryOperation> 254684ddb6SLionel Sambuc T 264684ddb6SLionel Sambuc accumulate(InputIterator first, InputIterator last, T init, BinaryOperation binary_op); 274684ddb6SLionel Sambuc 284684ddb6SLionel Sambuctemplate <class InputIterator1, class InputIterator2, class T> 294684ddb6SLionel Sambuc T 304684ddb6SLionel Sambuc inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init); 314684ddb6SLionel Sambuc 324684ddb6SLionel Sambuctemplate <class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2> 334684ddb6SLionel Sambuc T 344684ddb6SLionel Sambuc inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, 354684ddb6SLionel Sambuc T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2); 364684ddb6SLionel Sambuc 374684ddb6SLionel Sambuctemplate <class InputIterator, class OutputIterator> 384684ddb6SLionel Sambuc OutputIterator 394684ddb6SLionel Sambuc partial_sum(InputIterator first, InputIterator last, OutputIterator result); 404684ddb6SLionel Sambuc 414684ddb6SLionel Sambuctemplate <class InputIterator, class OutputIterator, class BinaryOperation> 424684ddb6SLionel Sambuc OutputIterator 434684ddb6SLionel Sambuc partial_sum(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op); 444684ddb6SLionel Sambuc 454684ddb6SLionel Sambuctemplate <class InputIterator, class OutputIterator> 464684ddb6SLionel Sambuc OutputIterator 474684ddb6SLionel Sambuc adjacent_difference(InputIterator first, InputIterator last, OutputIterator result); 484684ddb6SLionel Sambuc 494684ddb6SLionel Sambuctemplate <class InputIterator, class OutputIterator, class BinaryOperation> 504684ddb6SLionel Sambuc OutputIterator 514684ddb6SLionel Sambuc adjacent_difference(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op); 524684ddb6SLionel Sambuc 534684ddb6SLionel Sambuctemplate <class ForwardIterator, class T> 544684ddb6SLionel Sambuc void iota(ForwardIterator first, ForwardIterator last, T value); 554684ddb6SLionel Sambuc 564684ddb6SLionel Sambuc} // std 574684ddb6SLionel Sambuc 584684ddb6SLionel Sambuc*/ 594684ddb6SLionel Sambuc 604684ddb6SLionel Sambuc#include <__config> 614684ddb6SLionel Sambuc#include <iterator> 624684ddb6SLionel Sambuc 634684ddb6SLionel Sambuc#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 644684ddb6SLionel Sambuc#pragma GCC system_header 654684ddb6SLionel Sambuc#endif 664684ddb6SLionel Sambuc 674684ddb6SLionel Sambuc_LIBCPP_BEGIN_NAMESPACE_STD 684684ddb6SLionel Sambuc 694684ddb6SLionel Sambuctemplate <class _InputIterator, class _Tp> 704684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 714684ddb6SLionel Sambuc_Tp 724684ddb6SLionel Sambucaccumulate(_InputIterator __first, _InputIterator __last, _Tp __init) 734684ddb6SLionel Sambuc{ 744684ddb6SLionel Sambuc for (; __first != __last; ++__first) 754684ddb6SLionel Sambuc __init = __init + *__first; 764684ddb6SLionel Sambuc return __init; 774684ddb6SLionel Sambuc} 784684ddb6SLionel Sambuc 794684ddb6SLionel Sambuctemplate <class _InputIterator, class _Tp, class _BinaryOperation> 804684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 814684ddb6SLionel Sambuc_Tp 824684ddb6SLionel Sambucaccumulate(_InputIterator __first, _InputIterator __last, _Tp __init, _BinaryOperation __binary_op) 834684ddb6SLionel Sambuc{ 844684ddb6SLionel Sambuc for (; __first != __last; ++__first) 854684ddb6SLionel Sambuc __init = __binary_op(__init, *__first); 864684ddb6SLionel Sambuc return __init; 874684ddb6SLionel Sambuc} 884684ddb6SLionel Sambuc 894684ddb6SLionel Sambuctemplate <class _InputIterator1, class _InputIterator2, class _Tp> 904684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 914684ddb6SLionel Sambuc_Tp 924684ddb6SLionel Sambucinner_product(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _Tp __init) 934684ddb6SLionel Sambuc{ 94*0a6a1f1dSLionel Sambuc for (; __first1 != __last1; ++__first1, (void) ++__first2) 954684ddb6SLionel Sambuc __init = __init + *__first1 * *__first2; 964684ddb6SLionel Sambuc return __init; 974684ddb6SLionel Sambuc} 984684ddb6SLionel Sambuc 994684ddb6SLionel Sambuctemplate <class _InputIterator1, class _InputIterator2, class _Tp, class _BinaryOperation1, class _BinaryOperation2> 1004684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 1014684ddb6SLionel Sambuc_Tp 1024684ddb6SLionel Sambucinner_product(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, 1034684ddb6SLionel Sambuc _Tp __init, _BinaryOperation1 __binary_op1, _BinaryOperation2 __binary_op2) 1044684ddb6SLionel Sambuc{ 105*0a6a1f1dSLionel Sambuc for (; __first1 != __last1; ++__first1, (void) ++__first2) 1064684ddb6SLionel Sambuc __init = __binary_op1(__init, __binary_op2(*__first1, *__first2)); 1074684ddb6SLionel Sambuc return __init; 1084684ddb6SLionel Sambuc} 1094684ddb6SLionel Sambuc 1104684ddb6SLionel Sambuctemplate <class _InputIterator, class _OutputIterator> 1114684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 1124684ddb6SLionel Sambuc_OutputIterator 1134684ddb6SLionel Sambucpartial_sum(_InputIterator __first, _InputIterator __last, _OutputIterator __result) 1144684ddb6SLionel Sambuc{ 1154684ddb6SLionel Sambuc if (__first != __last) 1164684ddb6SLionel Sambuc { 1174684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t(*__first); 1184684ddb6SLionel Sambuc *__result = __t; 119*0a6a1f1dSLionel Sambuc for (++__first, (void) ++__result; __first != __last; ++__first, (void) ++__result) 1204684ddb6SLionel Sambuc { 1214684ddb6SLionel Sambuc __t = __t + *__first; 1224684ddb6SLionel Sambuc *__result = __t; 1234684ddb6SLionel Sambuc } 1244684ddb6SLionel Sambuc } 1254684ddb6SLionel Sambuc return __result; 1264684ddb6SLionel Sambuc} 1274684ddb6SLionel Sambuc 1284684ddb6SLionel Sambuctemplate <class _InputIterator, class _OutputIterator, class _BinaryOperation> 1294684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 1304684ddb6SLionel Sambuc_OutputIterator 1314684ddb6SLionel Sambucpartial_sum(_InputIterator __first, _InputIterator __last, _OutputIterator __result, 1324684ddb6SLionel Sambuc _BinaryOperation __binary_op) 1334684ddb6SLionel Sambuc{ 1344684ddb6SLionel Sambuc if (__first != __last) 1354684ddb6SLionel Sambuc { 1364684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t(*__first); 1374684ddb6SLionel Sambuc *__result = __t; 138*0a6a1f1dSLionel Sambuc for (++__first, (void) ++__result; __first != __last; ++__first, (void) ++__result) 1394684ddb6SLionel Sambuc { 1404684ddb6SLionel Sambuc __t = __binary_op(__t, *__first); 1414684ddb6SLionel Sambuc *__result = __t; 1424684ddb6SLionel Sambuc } 1434684ddb6SLionel Sambuc } 1444684ddb6SLionel Sambuc return __result; 1454684ddb6SLionel Sambuc} 1464684ddb6SLionel Sambuc 1474684ddb6SLionel Sambuctemplate <class _InputIterator, class _OutputIterator> 1484684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 1494684ddb6SLionel Sambuc_OutputIterator 1504684ddb6SLionel Sambucadjacent_difference(_InputIterator __first, _InputIterator __last, _OutputIterator __result) 1514684ddb6SLionel Sambuc{ 1524684ddb6SLionel Sambuc if (__first != __last) 1534684ddb6SLionel Sambuc { 1544684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t1(*__first); 1554684ddb6SLionel Sambuc *__result = __t1; 156*0a6a1f1dSLionel Sambuc for (++__first, (void) ++__result; __first != __last; ++__first, (void) ++__result) 1574684ddb6SLionel Sambuc { 1584684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t2(*__first); 1594684ddb6SLionel Sambuc *__result = __t2 - __t1; 1604684ddb6SLionel Sambuc __t1 = _VSTD::move(__t2); 1614684ddb6SLionel Sambuc } 1624684ddb6SLionel Sambuc } 1634684ddb6SLionel Sambuc return __result; 1644684ddb6SLionel Sambuc} 1654684ddb6SLionel Sambuc 1664684ddb6SLionel Sambuctemplate <class _InputIterator, class _OutputIterator, class _BinaryOperation> 1674684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 1684684ddb6SLionel Sambuc_OutputIterator 1694684ddb6SLionel Sambucadjacent_difference(_InputIterator __first, _InputIterator __last, _OutputIterator __result, 1704684ddb6SLionel Sambuc _BinaryOperation __binary_op) 1714684ddb6SLionel Sambuc{ 1724684ddb6SLionel Sambuc if (__first != __last) 1734684ddb6SLionel Sambuc { 1744684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t1(*__first); 1754684ddb6SLionel Sambuc *__result = __t1; 176*0a6a1f1dSLionel Sambuc for (++__first, (void) ++__result; __first != __last; ++__first, (void) ++__result) 1774684ddb6SLionel Sambuc { 1784684ddb6SLionel Sambuc typename iterator_traits<_InputIterator>::value_type __t2(*__first); 1794684ddb6SLionel Sambuc *__result = __binary_op(__t2, __t1); 1804684ddb6SLionel Sambuc __t1 = _VSTD::move(__t2); 1814684ddb6SLionel Sambuc } 1824684ddb6SLionel Sambuc } 1834684ddb6SLionel Sambuc return __result; 1844684ddb6SLionel Sambuc} 1854684ddb6SLionel Sambuc 1864684ddb6SLionel Sambuctemplate <class _ForwardIterator, class _Tp> 1874684ddb6SLionel Sambucinline _LIBCPP_INLINE_VISIBILITY 1884684ddb6SLionel Sambucvoid 1894684ddb6SLionel Sambuciota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value_) 1904684ddb6SLionel Sambuc{ 191*0a6a1f1dSLionel Sambuc for (; __first != __last; ++__first, (void) ++__value_) 1924684ddb6SLionel Sambuc *__first = __value_; 1934684ddb6SLionel Sambuc} 1944684ddb6SLionel Sambuc 1954684ddb6SLionel Sambuc_LIBCPP_END_NAMESPACE_STD 1964684ddb6SLionel Sambuc 1974684ddb6SLionel Sambuc#endif // _LIBCPP_NUMERIC 198