1*134723edSLouis Dionne //===----------------------------------------------------------------------===//
2*134723edSLouis Dionne //
3*134723edSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*134723edSLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5*134723edSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*134723edSLouis Dionne //
7*134723edSLouis Dionne //===----------------------------------------------------------------------===//
8*134723edSLouis Dionne
9*134723edSLouis Dionne #ifndef _LIBCPP___ALGORITHM_TRANSFORM_H
10*134723edSLouis Dionne #define _LIBCPP___ALGORITHM_TRANSFORM_H
11*134723edSLouis Dionne
12*134723edSLouis Dionne #include <__config>
13*134723edSLouis Dionne
14*134723edSLouis Dionne #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
15*134723edSLouis Dionne # pragma GCC system_header
16*134723edSLouis Dionne #endif
17*134723edSLouis Dionne
18*134723edSLouis Dionne _LIBCPP_BEGIN_NAMESPACE_STD
19*134723edSLouis Dionne
20*134723edSLouis Dionne template <class _InputIterator, class _OutputIterator, class _UnaryOperation>
21*134723edSLouis Dionne inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
22*134723edSLouis Dionne _OutputIterator
transform(_InputIterator __first,_InputIterator __last,_OutputIterator __result,_UnaryOperation __op)23*134723edSLouis Dionne transform(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _UnaryOperation __op)
24*134723edSLouis Dionne {
25*134723edSLouis Dionne for (; __first != __last; ++__first, (void) ++__result)
26*134723edSLouis Dionne *__result = __op(*__first);
27*134723edSLouis Dionne return __result;
28*134723edSLouis Dionne }
29*134723edSLouis Dionne
30*134723edSLouis Dionne template <class _InputIterator1, class _InputIterator2, class _OutputIterator, class _BinaryOperation>
31*134723edSLouis Dionne inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
32*134723edSLouis Dionne _OutputIterator
transform(_InputIterator1 __first1,_InputIterator1 __last1,_InputIterator2 __first2,_OutputIterator __result,_BinaryOperation __binary_op)33*134723edSLouis Dionne transform(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2,
34*134723edSLouis Dionne _OutputIterator __result, _BinaryOperation __binary_op)
35*134723edSLouis Dionne {
36*134723edSLouis Dionne for (; __first1 != __last1; ++__first1, (void) ++__first2, ++__result)
37*134723edSLouis Dionne *__result = __binary_op(*__first1, *__first2);
38*134723edSLouis Dionne return __result;
39*134723edSLouis Dionne }
40*134723edSLouis Dionne
41*134723edSLouis Dionne _LIBCPP_END_NAMESPACE_STD
42*134723edSLouis Dionne
43*134723edSLouis Dionne #endif // _LIBCPP___ALGORITHM_TRANSFORM_H
44