Chris@16: // Copyright 2005 Daniel Wallin. Chris@16: // Copyright 2005 Joel de Guzman. Chris@16: // Copyright 2005 Dan Marsden. Chris@16: // Chris@16: // Use, modification and distribution is subject to the Boost Software Chris@16: // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: // Modeled after range_ex, Copyright 2004 Eric Niebler Chris@16: Chris@16: #ifndef BOOST_PHOENIX_ALGORITHM_ITERATION_HPP Chris@16: #define BOOST_PHOENIX_ALGORITHM_ITERATION_HPP Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { namespace phoenix { Chris@16: namespace impl Chris@16: { Chris@16: struct for_each Chris@16: { Chris@16: template Chris@16: struct result; Chris@16: Chris@16: template Chris@16: struct result Chris@16: : result Chris@16: {}; Chris@16: Chris@16: template Chris@16: struct result Chris@16: { Chris@16: typedef F type; Chris@16: }; Chris@16: Chris@16: template Chris@16: F const operator()(R& r, F const& fn) const Chris@16: { Chris@16: return std::for_each(detail::begin_(r), detail::end_(r), fn); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct accumulate Chris@16: { Chris@16: template Chris@16: struct result; Chris@16: Chris@16: template Chris@16: struct result Chris@16: : result Chris@16: {}; Chris@16: Chris@16: template Chris@16: struct result Chris@16: { Chris@16: typedef I type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct result Chris@16: : result Chris@16: {}; Chris@16: Chris@16: template Chris@16: struct result Chris@16: { Chris@16: typedef I type; Chris@16: }; Chris@16: Chris@16: template Chris@16: I Chris@16: operator()(R& r, I i) const Chris@16: { Chris@16: return std::accumulate(detail::begin_(r), detail::end_(r), i); Chris@16: } Chris@16: Chris@16: template Chris@16: I Chris@16: operator()(R& r, I i, C c) const Chris@16: { Chris@16: return std::accumulate(detail::begin_(r), detail::end_(r), i, c); Chris@16: } Chris@16: }; Chris@16: } Chris@16: Chris@16: BOOST_PHOENIX_ADAPT_CALLABLE(for_each, impl::for_each, 2) Chris@16: BOOST_PHOENIX_ADAPT_CALLABLE(accumulate, impl::accumulate, 2) Chris@16: BOOST_PHOENIX_ADAPT_CALLABLE(accumulate, impl::accumulate, 3) Chris@16: Chris@16: }} Chris@16: Chris@16: #endif