146035553Spatrick// -*- C++ -*- 2*4bdff4beSrobert//===----------------------------------------------------------------------===// 346035553Spatrick// 446035553Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 546035553Spatrick// See https://llvm.org/LICENSE.txt for license information. 646035553Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 746035553Spatrick// 846035553Spatrick//===----------------------------------------------------------------------===// 946035553Spatrick 1046035553Spatrick#ifndef _LIBCPP_NUMERIC 1146035553Spatrick#define _LIBCPP_NUMERIC 1246035553Spatrick 1346035553Spatrick/* 1446035553Spatrick numeric synopsis 1546035553Spatrick 1646035553Spatricknamespace std 1746035553Spatrick{ 1846035553Spatrick 1946035553Spatricktemplate <class InputIterator, class T> 2076d0caaeSpatrick constexpr T // constexpr since C++20 2146035553Spatrick accumulate(InputIterator first, InputIterator last, T init); 2246035553Spatrick 2346035553Spatricktemplate <class InputIterator, class T, class BinaryOperation> 2476d0caaeSpatrick constexpr T // constexpr since C++20 2546035553Spatrick accumulate(InputIterator first, InputIterator last, T init, BinaryOperation binary_op); 2646035553Spatrick 2746035553Spatricktemplate<class InputIterator> 2876d0caaeSpatrick constexpr typename iterator_traits<InputIterator>::value_type // constexpr since C++20 2946035553Spatrick reduce(InputIterator first, InputIterator last); // C++17 3046035553Spatrick 3146035553Spatricktemplate<class InputIterator, class T> 3276d0caaeSpatrick constexpr T // constexpr since C++20 3346035553Spatrick reduce(InputIterator first, InputIterator last, T init); // C++17 3446035553Spatrick 3546035553Spatricktemplate<class InputIterator, class T, class BinaryOperation> 3676d0caaeSpatrick constexpr T // constexpr since C++20 3746035553Spatrick reduce(InputIterator first, InputIterator last, T init, BinaryOperation binary_op); // C++17 3846035553Spatrick 3946035553Spatricktemplate <class InputIterator1, class InputIterator2, class T> 4076d0caaeSpatrick constexpr T // constexpr since C++20 4146035553Spatrick inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init); 4246035553Spatrick 4346035553Spatricktemplate <class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2> 4476d0caaeSpatrick constexpr T // constexpr since C++20 4546035553Spatrick inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, 4646035553Spatrick T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2); 4746035553Spatrick 4846035553Spatrick 4946035553Spatricktemplate<class InputIterator1, class InputIterator2, class T> 5076d0caaeSpatrick constexpr T // constexpr since C++20 5146035553Spatrick transform_reduce(InputIterator1 first1, InputIterator1 last1, 5246035553Spatrick InputIterator2 first2, T init); // C++17 5346035553Spatrick 5446035553Spatricktemplate<class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2> 5576d0caaeSpatrick constexpr T // constexpr since C++20 5646035553Spatrick transform_reduce(InputIterator1 first1, InputIterator1 last1, 5746035553Spatrick InputIterator2 first2, T init, 5846035553Spatrick BinaryOperation1 binary_op1, BinaryOperation2 binary_op2); // C++17 5946035553Spatrick 6046035553Spatricktemplate<class InputIterator, class T, class BinaryOperation, class UnaryOperation> 6176d0caaeSpatrick constexpr T // constexpr since C++20 6246035553Spatrick transform_reduce(InputIterator first, InputIterator last, T init, 6346035553Spatrick BinaryOperation binary_op, UnaryOperation unary_op); // C++17 6446035553Spatrick 6546035553Spatricktemplate <class InputIterator, class OutputIterator> 6676d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 6746035553Spatrick partial_sum(InputIterator first, InputIterator last, OutputIterator result); 6846035553Spatrick 6946035553Spatricktemplate <class InputIterator, class OutputIterator, class BinaryOperation> 7076d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 7146035553Spatrick partial_sum(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op); 7246035553Spatrick 7346035553Spatricktemplate<class InputIterator, class OutputIterator, class T> 7476d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 7546035553Spatrick exclusive_scan(InputIterator first, InputIterator last, 7646035553Spatrick OutputIterator result, T init); // C++17 7746035553Spatrick 7846035553Spatricktemplate<class InputIterator, class OutputIterator, class T, class BinaryOperation> 7976d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 8046035553Spatrick exclusive_scan(InputIterator first, InputIterator last, 8146035553Spatrick OutputIterator result, T init, BinaryOperation binary_op); // C++17 8246035553Spatrick 8346035553Spatricktemplate<class InputIterator, class OutputIterator> 8476d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 8546035553Spatrick inclusive_scan(InputIterator first, InputIterator last, OutputIterator result); // C++17 8646035553Spatrick 8746035553Spatricktemplate<class InputIterator, class OutputIterator, class BinaryOperation> 8876d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 8946035553Spatrick inclusive_scan(InputIterator first, InputIterator last, 9046035553Spatrick OutputIterator result, BinaryOperation binary_op); // C++17 9146035553Spatrick 9246035553Spatricktemplate<class InputIterator, class OutputIterator, class BinaryOperation, class T> 9376d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 9446035553Spatrick inclusive_scan(InputIterator first, InputIterator last, 9546035553Spatrick OutputIterator result, BinaryOperation binary_op, T init); // C++17 9646035553Spatrick 9746035553Spatricktemplate<class InputIterator, class OutputIterator, class T, 9846035553Spatrick class BinaryOperation, class UnaryOperation> 9976d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 10046035553Spatrick transform_exclusive_scan(InputIterator first, InputIterator last, 10146035553Spatrick OutputIterator result, T init, 10246035553Spatrick BinaryOperation binary_op, UnaryOperation unary_op); // C++17 10346035553Spatrick 10446035553Spatricktemplate<class InputIterator, class OutputIterator, 10546035553Spatrick class BinaryOperation, class UnaryOperation> 10676d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 10746035553Spatrick transform_inclusive_scan(InputIterator first, InputIterator last, 10846035553Spatrick OutputIterator result, 10946035553Spatrick BinaryOperation binary_op, UnaryOperation unary_op); // C++17 11046035553Spatrick 11146035553Spatricktemplate<class InputIterator, class OutputIterator, 11246035553Spatrick class BinaryOperation, class UnaryOperation, class T> 11376d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 11446035553Spatrick transform_inclusive_scan(InputIterator first, InputIterator last, 11546035553Spatrick OutputIterator result, 11646035553Spatrick BinaryOperation binary_op, UnaryOperation unary_op, 11746035553Spatrick T init); // C++17 11846035553Spatrick 11946035553Spatricktemplate <class InputIterator, class OutputIterator> 12076d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 12146035553Spatrick adjacent_difference(InputIterator first, InputIterator last, OutputIterator result); 12246035553Spatrick 12346035553Spatricktemplate <class InputIterator, class OutputIterator, class BinaryOperation> 12476d0caaeSpatrick constexpr OutputIterator // constexpr since C++20 12546035553Spatrick adjacent_difference(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op); 12646035553Spatrick 12746035553Spatricktemplate <class ForwardIterator, class T> 12876d0caaeSpatrick constexpr void // constexpr since C++20 12976d0caaeSpatrick iota(ForwardIterator first, ForwardIterator last, T value); 13046035553Spatrick 13146035553Spatricktemplate <class M, class N> 13246035553Spatrick constexpr common_type_t<M,N> gcd(M m, N n); // C++17 13346035553Spatrick 13446035553Spatricktemplate <class M, class N> 13546035553Spatrick constexpr common_type_t<M,N> lcm(M m, N n); // C++17 13646035553Spatrick 13776d0caaeSpatricktemplate<class T> 13876d0caaeSpatrick constexpr T midpoint(T a, T b) noexcept; // C++20 13976d0caaeSpatrick 14076d0caaeSpatricktemplate<class T> 14176d0caaeSpatrick constexpr T* midpoint(T* a, T* b); // C++20 14246035553Spatrick 14346035553Spatrick} // std 14446035553Spatrick 14546035553Spatrick*/ 14646035553Spatrick 147*4bdff4beSrobert#include <__assert> // all public C++ headers provide the assertion handler 14846035553Spatrick#include <__config> 14976d0caaeSpatrick#include <cmath> // for isnormal 15046035553Spatrick#include <version> 15146035553Spatrick 152*4bdff4beSrobert#include <__numeric/accumulate.h> 153*4bdff4beSrobert#include <__numeric/adjacent_difference.h> 154*4bdff4beSrobert#include <__numeric/exclusive_scan.h> 155*4bdff4beSrobert#include <__numeric/gcd_lcm.h> 156*4bdff4beSrobert#include <__numeric/inclusive_scan.h> 157*4bdff4beSrobert#include <__numeric/inner_product.h> 158*4bdff4beSrobert#include <__numeric/iota.h> 159*4bdff4beSrobert#include <__numeric/midpoint.h> 160*4bdff4beSrobert#include <__numeric/partial_sum.h> 161*4bdff4beSrobert#include <__numeric/reduce.h> 162*4bdff4beSrobert#include <__numeric/transform_exclusive_scan.h> 163*4bdff4beSrobert#include <__numeric/transform_inclusive_scan.h> 164*4bdff4beSrobert#include <__numeric/transform_reduce.h> 165*4bdff4beSrobert 16646035553Spatrick#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 16746035553Spatrick# pragma GCC system_header 16846035553Spatrick#endif 16946035553Spatrick 17046035553Spatrick#if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) && _LIBCPP_STD_VER >= 17 17146035553Spatrick# include <__pstl_numeric> 17246035553Spatrick#endif 17346035553Spatrick 174*4bdff4beSrobert#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 175*4bdff4beSrobert# include <concepts> 176*4bdff4beSrobert# include <functional> 177*4bdff4beSrobert# include <iterator> 178*4bdff4beSrobert# include <type_traits> 179*4bdff4beSrobert#endif 180*4bdff4beSrobert 18146035553Spatrick#endif // _LIBCPP_NUMERIC 182