123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- // -*- C++ -*-
- //===----------------------------------------------------------------------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef _LIBCPP_NUMERIC
- #define _LIBCPP_NUMERIC
- /*
- numeric synopsis
- namespace std
- {
- template <class InputIterator, class T>
- constexpr T // constexpr since C++20
- accumulate(InputIterator first, InputIterator last, T init);
- template <class InputIterator, class T, class BinaryOperation>
- constexpr T // constexpr since C++20
- accumulate(InputIterator first, InputIterator last, T init, BinaryOperation binary_op);
- template<class InputIterator>
- constexpr typename iterator_traits<InputIterator>::value_type // constexpr since C++20
- reduce(InputIterator first, InputIterator last); // C++17
- template<class InputIterator, class T>
- constexpr T // constexpr since C++20
- reduce(InputIterator first, InputIterator last, T init); // C++17
- template<class InputIterator, class T, class BinaryOperation>
- constexpr T // constexpr since C++20
- reduce(InputIterator first, InputIterator last, T init, BinaryOperation binary_op); // C++17
- template <class InputIterator1, class InputIterator2, class T>
- constexpr T // constexpr since C++20
- inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init);
- template <class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2>
- constexpr T // constexpr since C++20
- inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2,
- T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2);
- template<class InputIterator1, class InputIterator2, class T>
- constexpr T // constexpr since C++20
- transform_reduce(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, T init); // C++17
- template<class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2>
- constexpr T // constexpr since C++20
- transform_reduce(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, T init,
- BinaryOperation1 binary_op1, BinaryOperation2 binary_op2); // C++17
- template<class InputIterator, class T, class BinaryOperation, class UnaryOperation>
- constexpr T // constexpr since C++20
- transform_reduce(InputIterator first, InputIterator last, T init,
- BinaryOperation binary_op, UnaryOperation unary_op); // C++17
- template <class InputIterator, class OutputIterator>
- constexpr OutputIterator // constexpr since C++20
- partial_sum(InputIterator first, InputIterator last, OutputIterator result);
- template <class InputIterator, class OutputIterator, class BinaryOperation>
- constexpr OutputIterator // constexpr since C++20
- partial_sum(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op);
- template<class InputIterator, class OutputIterator, class T>
- constexpr OutputIterator // constexpr since C++20
- exclusive_scan(InputIterator first, InputIterator last,
- OutputIterator result, T init); // C++17
- template<class InputIterator, class OutputIterator, class T, class BinaryOperation>
- constexpr OutputIterator // constexpr since C++20
- exclusive_scan(InputIterator first, InputIterator last,
- OutputIterator result, T init, BinaryOperation binary_op); // C++17
- template<class InputIterator, class OutputIterator>
- constexpr OutputIterator // constexpr since C++20
- inclusive_scan(InputIterator first, InputIterator last, OutputIterator result); // C++17
- template<class InputIterator, class OutputIterator, class BinaryOperation>
- constexpr OutputIterator // constexpr since C++20
- inclusive_scan(InputIterator first, InputIterator last,
- OutputIterator result, BinaryOperation binary_op); // C++17
- template<class InputIterator, class OutputIterator, class BinaryOperation, class T>
- constexpr OutputIterator // constexpr since C++20
- inclusive_scan(InputIterator first, InputIterator last,
- OutputIterator result, BinaryOperation binary_op, T init); // C++17
- template<class InputIterator, class OutputIterator, class T,
- class BinaryOperation, class UnaryOperation>
- constexpr OutputIterator // constexpr since C++20
- transform_exclusive_scan(InputIterator first, InputIterator last,
- OutputIterator result, T init,
- BinaryOperation binary_op, UnaryOperation unary_op); // C++17
- template<class InputIterator, class OutputIterator,
- class BinaryOperation, class UnaryOperation>
- constexpr OutputIterator // constexpr since C++20
- transform_inclusive_scan(InputIterator first, InputIterator last,
- OutputIterator result,
- BinaryOperation binary_op, UnaryOperation unary_op); // C++17
- template<class InputIterator, class OutputIterator,
- class BinaryOperation, class UnaryOperation, class T>
- constexpr OutputIterator // constexpr since C++20
- transform_inclusive_scan(InputIterator first, InputIterator last,
- OutputIterator result,
- BinaryOperation binary_op, UnaryOperation unary_op,
- T init); // C++17
- template <class InputIterator, class OutputIterator>
- constexpr OutputIterator // constexpr since C++20
- adjacent_difference(InputIterator first, InputIterator last, OutputIterator result);
- template <class InputIterator, class OutputIterator, class BinaryOperation>
- constexpr OutputIterator // constexpr since C++20
- adjacent_difference(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op);
- template <class ForwardIterator, class T>
- constexpr void // constexpr since C++20
- iota(ForwardIterator first, ForwardIterator last, T value);
- template <class M, class N>
- constexpr common_type_t<M,N> gcd(M m, N n); // C++17
- template <class M, class N>
- constexpr common_type_t<M,N> lcm(M m, N n); // C++17
- template<class T>
- constexpr T midpoint(T a, T b) noexcept; // C++20
- template<class T>
- constexpr T* midpoint(T* a, T* b); // C++20
- } // std
- */
- #include <__assert> // all public C++ headers provide the assertion handler
- #include <__config>
- #include <cmath> // for isnormal
- #include <version>
- #include <__numeric/accumulate.h>
- #include <__numeric/adjacent_difference.h>
- #include <__numeric/exclusive_scan.h>
- #include <__numeric/gcd_lcm.h>
- #include <__numeric/inclusive_scan.h>
- #include <__numeric/inner_product.h>
- #include <__numeric/iota.h>
- #include <__numeric/midpoint.h>
- #include <__numeric/partial_sum.h>
- #include <__numeric/reduce.h>
- #include <__numeric/transform_exclusive_scan.h>
- #include <__numeric/transform_inclusive_scan.h>
- #include <__numeric/transform_reduce.h>
- #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
- # pragma GCC system_header
- #endif
- #if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) && _LIBCPP_STD_VER >= 17
- #error # include <__pstl_numeric>
- #endif
- #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
- # include <concepts>
- # include <functional>
- # include <iterator>
- # include <type_traits>
- #endif
- #endif // _LIBCPP_NUMERIC
|