Chris@16
|
1 /*=============================================================================
|
Chris@16
|
2 Copyright (c) 2001-2011 Joel de Guzman
|
Chris@16
|
3
|
Chris@16
|
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
6 ==============================================================================*/
|
Chris@16
|
7 #if !defined(FUSION_ACCUMULATE_09172005_1032)
|
Chris@16
|
8 #define FUSION_ACCUMULATE_09172005_1032
|
Chris@16
|
9
|
Chris@101
|
10 #include <boost/fusion/support/config.hpp>
|
Chris@16
|
11 #include <boost/fusion/algorithm/iteration/accumulate_fwd.hpp>
|
Chris@16
|
12 #include <boost/fusion/algorithm/iteration/fold.hpp>
|
Chris@16
|
13 #include <boost/fusion/support/is_sequence.hpp>
|
Chris@16
|
14 #include <boost/utility/enable_if.hpp>
|
Chris@16
|
15
|
Chris@16
|
16 namespace boost { namespace fusion
|
Chris@16
|
17 {
|
Chris@16
|
18 struct void_;
|
Chris@16
|
19
|
Chris@16
|
20 namespace result_of
|
Chris@16
|
21 {
|
Chris@16
|
22 template <typename Sequence, typename State, typename F>
|
Chris@16
|
23 struct accumulate
|
Chris@16
|
24 : result_of::fold<Sequence, State, F>
|
Chris@16
|
25 {};
|
Chris@16
|
26 }
|
Chris@16
|
27
|
Chris@16
|
28 template <typename Sequence, typename State, typename F>
|
Chris@101
|
29 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@101
|
30 inline typename
|
Chris@16
|
31 lazy_enable_if<
|
Chris@16
|
32 traits::is_sequence<Sequence>
|
Chris@16
|
33 , result_of::accumulate<Sequence, State const, F>
|
Chris@16
|
34 >::type
|
Chris@16
|
35 accumulate(Sequence& seq, State const& state, F f)
|
Chris@16
|
36 {
|
Chris@16
|
37 return fusion::fold(seq, state, f);
|
Chris@16
|
38 }
|
Chris@16
|
39
|
Chris@16
|
40 template <typename Sequence, typename State, typename F>
|
Chris@101
|
41 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@101
|
42 inline typename
|
Chris@16
|
43 lazy_enable_if<
|
Chris@16
|
44 traits::is_sequence<Sequence>
|
Chris@16
|
45 , result_of::accumulate<Sequence const, State const, F>
|
Chris@16
|
46 >::type
|
Chris@16
|
47 accumulate(Sequence const& seq, State const& state, F f)
|
Chris@16
|
48 {
|
Chris@16
|
49 return fusion::fold(seq, state, f);
|
Chris@16
|
50 }
|
Chris@16
|
51 }}
|
Chris@16
|
52
|
Chris@16
|
53 #endif
|
Chris@16
|
54
|