xref: /llvm-project/libcxx/include/__cxx03/numeric (revision ce7771902dc50d900de639d499a60486b83f70e0)
1e78f53d1SNikolas Klauser// -*- C++ -*-
2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===//
3e78f53d1SNikolas Klauser//
4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information.
6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7e78f53d1SNikolas Klauser//
8e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===//
9e78f53d1SNikolas Klauser
10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_NUMERIC
11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_NUMERIC
12e78f53d1SNikolas Klauser
13e78f53d1SNikolas Klauser/*
14e78f53d1SNikolas Klauser    numeric synopsis
15e78f53d1SNikolas Klauser
16e78f53d1SNikolas Klausernamespace std
17e78f53d1SNikolas Klauser{
18e78f53d1SNikolas Klauser
19e78f53d1SNikolas Klausertemplate <class InputIterator, class T>
20e78f53d1SNikolas Klauser    constexpr T  // constexpr since C++20
21e78f53d1SNikolas Klauser    accumulate(InputIterator first, InputIterator last, T init);
22e78f53d1SNikolas Klauser
23e78f53d1SNikolas Klausertemplate <class InputIterator, class T, class BinaryOperation>
24e78f53d1SNikolas Klauser    constexpr T  // constexpr since C++20
25e78f53d1SNikolas Klauser    accumulate(InputIterator first, InputIterator last, T init, BinaryOperation binary_op);
26e78f53d1SNikolas Klauser
27e78f53d1SNikolas Klausertemplate<class InputIterator>
28e78f53d1SNikolas Klauser    constexpr typename iterator_traits<InputIterator>::value_type  // constexpr since C++20
29e78f53d1SNikolas Klauser    reduce(InputIterator first, InputIterator last);  // C++17
30e78f53d1SNikolas Klauser
31e78f53d1SNikolas Klausertemplate<class InputIterator, class T>
32e78f53d1SNikolas Klauser    constexpr T  // constexpr since C++20
33e78f53d1SNikolas Klauser    reduce(InputIterator first, InputIterator last, T init);  // C++17
34e78f53d1SNikolas Klauser
35e78f53d1SNikolas Klausertemplate<class InputIterator, class T, class BinaryOperation>
36e78f53d1SNikolas Klauser    constexpr T  // constexpr since C++20
37e78f53d1SNikolas Klauser    reduce(InputIterator first, InputIterator last, T init, BinaryOperation binary_op);  // C++17
38e78f53d1SNikolas Klauser
39e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class T>
40e78f53d1SNikolas Klauser    constexpr T  // constexpr since C++20
41e78f53d1SNikolas Klauser    inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init);
42e78f53d1SNikolas Klauser
43e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2>
44e78f53d1SNikolas Klauser    constexpr T  // constexpr since C++20
45e78f53d1SNikolas Klauser    inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2,
46e78f53d1SNikolas Klauser                  T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2);
47e78f53d1SNikolas Klauser
48e78f53d1SNikolas Klauser
49e78f53d1SNikolas Klausertemplate<class InputIterator1, class InputIterator2, class T>
50e78f53d1SNikolas Klauser    constexpr T  // constexpr since C++20
51e78f53d1SNikolas Klauser    transform_reduce(InputIterator1 first1, InputIterator1 last1,
52e78f53d1SNikolas Klauser                     InputIterator2 first2, T init);  // C++17
53e78f53d1SNikolas Klauser
54e78f53d1SNikolas Klausertemplate<class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2>
55e78f53d1SNikolas Klauser    constexpr T  // constexpr since C++20
56e78f53d1SNikolas Klauser    transform_reduce(InputIterator1 first1, InputIterator1 last1,
57e78f53d1SNikolas Klauser                     InputIterator2 first2, T init,
58e78f53d1SNikolas Klauser                     BinaryOperation1 binary_op1, BinaryOperation2 binary_op2);  // C++17
59e78f53d1SNikolas Klauser
60e78f53d1SNikolas Klausertemplate<class InputIterator, class T, class BinaryOperation, class UnaryOperation>
61e78f53d1SNikolas Klauser    constexpr T  // constexpr since C++20
62e78f53d1SNikolas Klauser    transform_reduce(InputIterator first, InputIterator last, T init,
63e78f53d1SNikolas Klauser                     BinaryOperation binary_op, UnaryOperation unary_op);  // C++17
64e78f53d1SNikolas Klauser
65e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator>
66e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
67e78f53d1SNikolas Klauser    partial_sum(InputIterator first, InputIterator last, OutputIterator result);
68e78f53d1SNikolas Klauser
69e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator, class BinaryOperation>
70e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
71e78f53d1SNikolas Klauser    partial_sum(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op);
72e78f53d1SNikolas Klauser
73e78f53d1SNikolas Klausertemplate<class InputIterator, class OutputIterator, class T>
74e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
75e78f53d1SNikolas Klauser    exclusive_scan(InputIterator first, InputIterator last,
76e78f53d1SNikolas Klauser                   OutputIterator result, T init); // C++17
77e78f53d1SNikolas Klauser
78e78f53d1SNikolas Klausertemplate<class InputIterator, class OutputIterator, class T, class BinaryOperation>
79e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
80e78f53d1SNikolas Klauser    exclusive_scan(InputIterator first, InputIterator last,
81e78f53d1SNikolas Klauser                   OutputIterator result, T init, BinaryOperation binary_op); // C++17
82e78f53d1SNikolas Klauser
83e78f53d1SNikolas Klausertemplate<class InputIterator, class OutputIterator>
84e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
85e78f53d1SNikolas Klauser    inclusive_scan(InputIterator first, InputIterator last, OutputIterator result);  // C++17
86e78f53d1SNikolas Klauser
87e78f53d1SNikolas Klausertemplate<class InputIterator, class OutputIterator, class BinaryOperation>
88e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
89e78f53d1SNikolas Klauser    inclusive_scan(InputIterator first, InputIterator last,
90e78f53d1SNikolas Klauser                   OutputIterator result, BinaryOperation binary_op);  // C++17
91e78f53d1SNikolas Klauser
92e78f53d1SNikolas Klausertemplate<class InputIterator, class OutputIterator, class BinaryOperation, class T>
93e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
94e78f53d1SNikolas Klauser    inclusive_scan(InputIterator first, InputIterator last,
95e78f53d1SNikolas Klauser                   OutputIterator result, BinaryOperation binary_op, T init);  // C++17
96e78f53d1SNikolas Klauser
97e78f53d1SNikolas Klausertemplate<class InputIterator, class OutputIterator, class T,
98e78f53d1SNikolas Klauser         class BinaryOperation, class UnaryOperation>
99e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
100e78f53d1SNikolas Klauser    transform_exclusive_scan(InputIterator first, InputIterator last,
101e78f53d1SNikolas Klauser                             OutputIterator result, T init,
102e78f53d1SNikolas Klauser                             BinaryOperation binary_op, UnaryOperation unary_op);  // C++17
103e78f53d1SNikolas Klauser
104e78f53d1SNikolas Klausertemplate<class InputIterator, class OutputIterator,
105e78f53d1SNikolas Klauser         class BinaryOperation, class UnaryOperation>
106e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
107e78f53d1SNikolas Klauser    transform_inclusive_scan(InputIterator first, InputIterator last,
108e78f53d1SNikolas Klauser                             OutputIterator result,
109e78f53d1SNikolas Klauser                             BinaryOperation binary_op, UnaryOperation unary_op);  // C++17
110e78f53d1SNikolas Klauser
111e78f53d1SNikolas Klausertemplate<class InputIterator, class OutputIterator,
112e78f53d1SNikolas Klauser         class BinaryOperation, class UnaryOperation, class T>
113e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
114e78f53d1SNikolas Klauser    transform_inclusive_scan(InputIterator first, InputIterator last,
115e78f53d1SNikolas Klauser                             OutputIterator result,
116e78f53d1SNikolas Klauser                             BinaryOperation binary_op, UnaryOperation unary_op,
117e78f53d1SNikolas Klauser                             T init);  // C++17
118e78f53d1SNikolas Klauser
119e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator>
120e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
121e78f53d1SNikolas Klauser    adjacent_difference(InputIterator first, InputIterator last, OutputIterator result);
122e78f53d1SNikolas Klauser
123e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator, class BinaryOperation>
124e78f53d1SNikolas Klauser    constexpr OutputIterator  // constexpr since C++20
125e78f53d1SNikolas Klauser    adjacent_difference(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op);
126e78f53d1SNikolas Klauser
127e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T>
128e78f53d1SNikolas Klauser    constexpr void  // constexpr since C++20
129e78f53d1SNikolas Klauser    iota(ForwardIterator first, ForwardIterator last, T value);
130e78f53d1SNikolas Klauser
131e78f53d1SNikolas Klausertemplate <class M, class N>
132e78f53d1SNikolas Klauser    constexpr common_type_t<M,N> gcd(M m, N n);    // C++17
133e78f53d1SNikolas Klauser
134e78f53d1SNikolas Klausertemplate <class M, class N>
135e78f53d1SNikolas Klauser    constexpr common_type_t<M,N> lcm(M m, N n);    // C++17
136e78f53d1SNikolas Klauser
137e78f53d1SNikolas Klausertemplate<class T>
138e78f53d1SNikolas Klauser    constexpr T midpoint(T a, T b) noexcept;  // C++20
139e78f53d1SNikolas Klauser
140e78f53d1SNikolas Klausertemplate<class T>
141e78f53d1SNikolas Klauser    constexpr T* midpoint(T* a, T* b);        // C++20
142e78f53d1SNikolas Klauser
143e78f53d1SNikolas Klauser// [numeric.sat], saturation arithmetic
144e78f53d1SNikolas Klausertemplate<class T>
145e78f53d1SNikolas Klauserconstexpr T add_sat(T x, T y) noexcept;                     // freestanding, Since C++26
146e78f53d1SNikolas Klausertemplate<class T>
147e78f53d1SNikolas Klauserconstexpr T sub_sat(T x, T y) noexcept;                     // freestanding, Since C++26
148e78f53d1SNikolas Klausertemplate<class T>
149e78f53d1SNikolas Klauserconstexpr T mul_sat(T x, T y) noexcept;                     // freestanding, Since C++26
150e78f53d1SNikolas Klausertemplate<class T>
151e78f53d1SNikolas Klauserconstexpr T div_sat(T x, T y) noexcept;                     // freestanding, Since C++26
152e78f53d1SNikolas Klausertemplate<class T, class U>
153e78f53d1SNikolas Klauserconstexpr T saturate_cast(U x) noexcept;                    // freestanding, Since C++26
154e78f53d1SNikolas Klauser
155e78f53d1SNikolas Klauser}  // std
156e78f53d1SNikolas Klauser
157e78f53d1SNikolas Klauser*/
158e78f53d1SNikolas Klauser
15973fbae83SNikolas Klauser#include <__cxx03/__config>
160e78f53d1SNikolas Klauser
16173fbae83SNikolas Klauser#include <__cxx03/__numeric/accumulate.h>
16273fbae83SNikolas Klauser#include <__cxx03/__numeric/adjacent_difference.h>
16373fbae83SNikolas Klauser#include <__cxx03/__numeric/inner_product.h>
16473fbae83SNikolas Klauser#include <__cxx03/__numeric/iota.h>
16573fbae83SNikolas Klauser#include <__cxx03/__numeric/partial_sum.h>
166e78f53d1SNikolas Klauser
167e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 17
16873fbae83SNikolas Klauser#  include <__cxx03/__numeric/exclusive_scan.h>
16973fbae83SNikolas Klauser#  include <__cxx03/__numeric/gcd_lcm.h>
17073fbae83SNikolas Klauser#  include <__cxx03/__numeric/inclusive_scan.h>
17173fbae83SNikolas Klauser#  include <__cxx03/__numeric/pstl.h>
17273fbae83SNikolas Klauser#  include <__cxx03/__numeric/reduce.h>
17373fbae83SNikolas Klauser#  include <__cxx03/__numeric/transform_exclusive_scan.h>
17473fbae83SNikolas Klauser#  include <__cxx03/__numeric/transform_inclusive_scan.h>
17573fbae83SNikolas Klauser#  include <__cxx03/__numeric/transform_reduce.h>
176e78f53d1SNikolas Klauser#endif
177e78f53d1SNikolas Klauser
178e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 20
17973fbae83SNikolas Klauser#  include <__cxx03/__numeric/midpoint.h>
18073fbae83SNikolas Klauser#  include <__cxx03/__numeric/saturation_arithmetic.h>
181e78f53d1SNikolas Klauser#endif
182e78f53d1SNikolas Klauser
18373fbae83SNikolas Klauser#include <__cxx03/version>
184e78f53d1SNikolas Klauser
185e78f53d1SNikolas Klauser#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
186e78f53d1SNikolas Klauser#  pragma GCC system_header
187e78f53d1SNikolas Klauser#endif
188e78f53d1SNikolas Klauser
189e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 14
19073fbae83SNikolas Klauser#  include <__cxx03/initializer_list>
19173fbae83SNikolas Klauser#  include <__cxx03/limits>
192e78f53d1SNikolas Klauser#endif
193e78f53d1SNikolas Klauser
194e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
19573fbae83SNikolas Klauser#  include <__cxx03/climits>
19673fbae83SNikolas Klauser#  include <__cxx03/cmath>
19773fbae83SNikolas Klauser#  include <__cxx03/concepts>
19873fbae83SNikolas Klauser#  include <__cxx03/cstdint>
19973fbae83SNikolas Klauser#  include <__cxx03/execution>
20073fbae83SNikolas Klauser#  include <__cxx03/functional>
20173fbae83SNikolas Klauser#  include <__cxx03/iterator>
20273fbae83SNikolas Klauser#  include <__cxx03/new>
20373fbae83SNikolas Klauser#  include <__cxx03/optional>
20473fbae83SNikolas Klauser#  include <__cxx03/type_traits>
205e78f53d1SNikolas Klauser#endif
206e78f53d1SNikolas Klauser
207*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_NUMERIC
208