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-exception 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef _LIBCPP___NUMERIC_TRANSFORM_EXCLUSIVE_SCAN_H 11 #define _LIBCPP___NUMERIC_TRANSFORM_EXCLUSIVE_SCAN_H 12 13 #include <__config> 14 15 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 16 # pragma GCC system_header 17 #endif 18 19 _LIBCPP_BEGIN_NAMESPACE_STD 20 21 #if _LIBCPP_STD_VER > 14 22 23 template <class _InputIterator, class _OutputIterator, class _Tp, 24 class _BinaryOp, class _UnaryOp> 25 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 26 _OutputIterator 27 transform_exclusive_scan(_InputIterator __first, _InputIterator __last, 28 _OutputIterator __result, _Tp __init, 29 _BinaryOp __b, _UnaryOp __u) 30 { 31 if (__first != __last) 32 { 33 _Tp __saved = __init; 34 do 35 { 36 __init = __b(__init, __u(*__first)); 37 *__result = __saved; 38 __saved = __init; 39 ++__result; 40 } while (++__first != __last); 41 } 42 return __result; 43 } 44 45 #endif // _LIBCPP_STD_VER > 14 46 47 _LIBCPP_END_NAMESPACE_STD 48 49 #endif // _LIBCPP___NUMERIC_TRANSFORM_EXCLUSIVE_SCAN_H 50