summaryrefslogtreecommitdiff log msg author committer range
 ```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ``` ``````/* Copyright (c) Marshall Clow 2017. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE10.txt or copy at http://www.boost.org/LICENSE10.txt) */ /// \file transform_reduce.hpp /// \brief Combine the (transformed) elements of a sequence (or two) into a single value. /// \author Marshall Clow #ifndef BOOST_ALGORITHM_TRANSFORM_REDUCE_HPP #define BOOST_ALGORITHM_TRANSFORM_REDUCE_HPP #include // for std::plus #include // for std::iterator_traits #include #include #include namespace boost { namespace algorithm { template OutputIterator inclusive_scan(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation bOp, T init) { for (; first != last; ++first, (void) ++result) { init = bOp(init, *first); *result = init; } return result; } template OutputIterator inclusive_scan(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation bOp) { if (first != last) { typename std::iterator_traits::value_type init = *first; *result++ = init; if (++first != last) return inclusive_scan(first, last, result, bOp, init); } return result; } template OutputIterator inclusive_scan(InputIterator first, InputIterator last, OutputIterator result) { typedef typename std::iterator_traits::value_type VT; return inclusive_scan(first, last, result, std::plus()); } }} // namespace boost and algorithm #endif // BOOST_ALGORITHM_TRANSFORM_REDUCE_HPP ``````