brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.5 KiB · 48c330f Raw
213 lines · plain
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCPP_NUMERIC11#define _LIBCPP_NUMERIC12 13/*14    numeric synopsis15 16namespace std17{18 19template <class InputIterator, class T>20    constexpr T  // constexpr since C++2021    accumulate(InputIterator first, InputIterator last, T init);22 23template <class InputIterator, class T, class BinaryOperation>24    constexpr T  // constexpr since C++2025    accumulate(InputIterator first, InputIterator last, T init, BinaryOperation binary_op);26 27template<class InputIterator>28    constexpr typename iterator_traits<InputIterator>::value_type  // constexpr since C++2029    reduce(InputIterator first, InputIterator last);  // C++1730 31template<class InputIterator, class T>32    constexpr T  // constexpr since C++2033    reduce(InputIterator first, InputIterator last, T init);  // C++1734 35template<class InputIterator, class T, class BinaryOperation>36    constexpr T  // constexpr since C++2037    reduce(InputIterator first, InputIterator last, T init, BinaryOperation binary_op);  // C++1738 39template <class InputIterator1, class InputIterator2, class T>40    constexpr T  // constexpr since C++2041    inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init);42 43template <class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2>44    constexpr T  // constexpr since C++2045    inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2,46                  T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2);47 48 49template<class InputIterator1, class InputIterator2, class T>50    constexpr T  // constexpr since C++2051    transform_reduce(InputIterator1 first1, InputIterator1 last1,52                     InputIterator2 first2, T init);  // C++1753 54template<class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2>55    constexpr T  // constexpr since C++2056    transform_reduce(InputIterator1 first1, InputIterator1 last1,57                     InputIterator2 first2, T init,58                     BinaryOperation1 binary_op1, BinaryOperation2 binary_op2);  // C++1759 60template<class InputIterator, class T, class BinaryOperation, class UnaryOperation>61    constexpr T  // constexpr since C++2062    transform_reduce(InputIterator first, InputIterator last, T init,63                     BinaryOperation binary_op, UnaryOperation unary_op);  // C++1764 65template <class InputIterator, class OutputIterator>66    constexpr OutputIterator  // constexpr since C++2067    partial_sum(InputIterator first, InputIterator last, OutputIterator result);68 69template <class InputIterator, class OutputIterator, class BinaryOperation>70    constexpr OutputIterator  // constexpr since C++2071    partial_sum(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op);72 73template<class InputIterator, class OutputIterator, class T>74    constexpr OutputIterator  // constexpr since C++2075    exclusive_scan(InputIterator first, InputIterator last,76                   OutputIterator result, T init); // C++1777 78template<class InputIterator, class OutputIterator, class T, class BinaryOperation>79    constexpr OutputIterator  // constexpr since C++2080    exclusive_scan(InputIterator first, InputIterator last,81                   OutputIterator result, T init, BinaryOperation binary_op); // C++1782 83template<class InputIterator, class OutputIterator>84    constexpr OutputIterator  // constexpr since C++2085    inclusive_scan(InputIterator first, InputIterator last, OutputIterator result);  // C++1786 87template<class InputIterator, class OutputIterator, class BinaryOperation>88    constexpr OutputIterator  // constexpr since C++2089    inclusive_scan(InputIterator first, InputIterator last,90                   OutputIterator result, BinaryOperation binary_op);  // C++1791 92template<class InputIterator, class OutputIterator, class BinaryOperation, class T>93    constexpr OutputIterator  // constexpr since C++2094    inclusive_scan(InputIterator first, InputIterator last,95                   OutputIterator result, BinaryOperation binary_op, T init);  // C++1796 97template<class InputIterator, class OutputIterator, class T,98         class BinaryOperation, class UnaryOperation>99    constexpr OutputIterator  // constexpr since C++20100    transform_exclusive_scan(InputIterator first, InputIterator last,101                             OutputIterator result, T init,102                             BinaryOperation binary_op, UnaryOperation unary_op);  // C++17103 104template<class InputIterator, class OutputIterator,105         class BinaryOperation, class UnaryOperation>106    constexpr OutputIterator  // constexpr since C++20107    transform_inclusive_scan(InputIterator first, InputIterator last,108                             OutputIterator result,109                             BinaryOperation binary_op, UnaryOperation unary_op);  // C++17110 111template<class InputIterator, class OutputIterator,112         class BinaryOperation, class UnaryOperation, class T>113    constexpr OutputIterator  // constexpr since C++20114    transform_inclusive_scan(InputIterator first, InputIterator last,115                             OutputIterator result,116                             BinaryOperation binary_op, UnaryOperation unary_op,117                             T init);  // C++17118 119template <class InputIterator, class OutputIterator>120    constexpr OutputIterator  // constexpr since C++20121    adjacent_difference(InputIterator first, InputIterator last, OutputIterator result);122 123template <class InputIterator, class OutputIterator, class BinaryOperation>124    constexpr OutputIterator  // constexpr since C++20125    adjacent_difference(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op);126 127template <class ForwardIterator, class T>128    constexpr void  // constexpr since C++20129    iota(ForwardIterator first, ForwardIterator last, T value);130 131template <class M, class N>132    constexpr common_type_t<M,N> gcd(M m, N n);    // C++17133 134template <class M, class N>135    constexpr common_type_t<M,N> lcm(M m, N n);    // C++17136 137template<class T>138    constexpr T midpoint(T a, T b) noexcept;  // C++20139 140template<class T>141    constexpr T* midpoint(T* a, T* b);        // C++20142 143// [numeric.sat], saturation arithmetic144template<class T>145constexpr T add_sat(T x, T y) noexcept;                     // freestanding, Since C++26146template<class T>147constexpr T sub_sat(T x, T y) noexcept;                     // freestanding, Since C++26148template<class T>149constexpr T mul_sat(T x, T y) noexcept;                     // freestanding, Since C++26150template<class T>151constexpr T div_sat(T x, T y) noexcept;                     // freestanding, Since C++26152template<class T, class U>153constexpr T saturate_cast(U x) noexcept;                    // freestanding, Since C++26154 155}  // std156 157*/158 159#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)160#  include <__cxx03/numeric>161#else162#  include <__config>163 164#  include <__numeric/accumulate.h>165#  include <__numeric/adjacent_difference.h>166#  include <__numeric/inner_product.h>167#  include <__numeric/iota.h>168#  include <__numeric/partial_sum.h>169 170#  if _LIBCPP_STD_VER >= 17171#    include <__numeric/exclusive_scan.h>172#    include <__numeric/gcd_lcm.h>173#    include <__numeric/inclusive_scan.h>174#    include <__numeric/pstl.h>175#    include <__numeric/ranges_iota.h>176#    include <__numeric/reduce.h>177#    include <__numeric/transform_exclusive_scan.h>178#    include <__numeric/transform_inclusive_scan.h>179#    include <__numeric/transform_reduce.h>180#  endif181 182#  if _LIBCPP_STD_VER >= 20183#    include <__numeric/midpoint.h>184#    include <__numeric/saturation_arithmetic.h>185#  endif186 187#  include <version>188 189#  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)190#    pragma GCC system_header191#  endif192 193#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 14194#    include <initializer_list>195#    include <limits>196#  endif197 198#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20199#    include <climits>200#    include <cmath>201#    include <concepts>202#    include <cstdint>203#    include <execution>204#    include <functional>205#    include <iterator>206#    include <new>207#    include <optional>208#    include <type_traits>209#  endif210#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)211 212#endif // _LIBCPP_NUMERIC213