handling fusion fold and accumulate function argument by value rather than const ref to fix free function usage

[SVN r38064]
This commit is contained in:
Dan Marsden
2007-06-22 18:05:55 +00:00
parent 996a4da2d6
commit 8f8cf8145f
3 changed files with 13 additions and 13 deletions

View File

@ -23,14 +23,14 @@ namespace boost { namespace fusion
template <typename Sequence, typename State, typename F> template <typename Sequence, typename State, typename F>
inline typename result_of::accumulate<Sequence, State, F>::type inline typename result_of::accumulate<Sequence, State, F>::type
accumulate(Sequence& seq, State const& state, F const& f) accumulate(Sequence& seq, State const& state, F f)
{ {
return fusion::fold(seq, state, f); return fusion::fold(seq, state, f);
} }
template <typename Sequence, typename State, typename F> template <typename Sequence, typename State, typename F>
inline typename result_of::accumulate<Sequence const, State, F>::type inline typename result_of::accumulate<Sequence const, State, F>::type
accumulate(Sequence const& seq, State const& state, F const& f) accumulate(Sequence const& seq, State const& state, F f)
{ {
return fusion::fold(seq, state, f); return fusion::fold(seq, state, f);
} }

View File

@ -79,7 +79,7 @@ namespace detail
{ {
template<typename I0, typename State, typename F> template<typename I0, typename State, typename F>
static typename result_of_unrolled_fold<I0, State, F, N>::type static typename result_of_unrolled_fold<I0, State, F, N>::type
call(I0 const& i0, State const& state, F const& f) call(I0 const& i0, State const& state, F f)
{ {
typedef typename result_of::next<I0>::type I1; typedef typename result_of::next<I0>::type I1;
I1 i1 = fusion::next(i0); I1 i1 = fusion::next(i0);
@ -99,7 +99,7 @@ namespace detail
{ {
template<typename I0, typename State, typename F> template<typename I0, typename State, typename F>
static typename result_of_unrolled_fold<I0, State, F, 3>::type static typename result_of_unrolled_fold<I0, State, F, 3>::type
call(I0 const& i0, State const& state, F const& f) call(I0 const& i0, State const& state, F f)
{ {
typedef typename result_of::next<I0>::type I1; typedef typename result_of::next<I0>::type I1;
I1 i1 = fusion::next(i0); I1 i1 = fusion::next(i0);
@ -114,7 +114,7 @@ namespace detail
{ {
template<typename I0, typename State, typename F> template<typename I0, typename State, typename F>
static typename result_of_unrolled_fold<I0, State, F, 2>::type static typename result_of_unrolled_fold<I0, State, F, 2>::type
call(I0 const& i0, State const& state, F const& f) call(I0 const& i0, State const& state, F f)
{ {
typedef typename result_of::next<I0>::type I1; typedef typename result_of::next<I0>::type I1;
I1 i1 = fusion::next(i0); I1 i1 = fusion::next(i0);
@ -127,7 +127,7 @@ namespace detail
{ {
template<typename I0, typename State, typename F> template<typename I0, typename State, typename F>
static typename result_of_unrolled_fold<I0, State, F, 1>::type static typename result_of_unrolled_fold<I0, State, F, 1>::type
call(I0 const& i0, State const& state, F const& f) call(I0 const& i0, State const& state, F f)
{ {
return f(*i0, state); return f(*i0, state);
} }
@ -137,7 +137,7 @@ namespace detail
struct unrolled_fold<0> struct unrolled_fold<0>
{ {
template<typename I0, typename State, typename F> template<typename I0, typename State, typename F>
static State call(I0 const&, State const& state, F const&) static State call(I0 const&, State const& state, F)
{ {
return state; return state;
} }
@ -146,7 +146,7 @@ namespace detail
// terminal case // terminal case
template <typename First, typename Last, typename State, typename F> template <typename First, typename Last, typename State, typename F>
inline State const& inline State const&
linear_fold(First const&, Last const&, State const& state, F const&, mpl::true_) linear_fold(First const&, Last const&, State const& state, F, mpl::true_)
{ {
return state; return state;
} }
@ -158,7 +158,7 @@ namespace detail
First const& first First const& first
, Last const& last , Last const& last
, State const& state , State const& state
, F const& f , F f
, mpl::false_) , mpl::false_)
{ {
return detail::linear_fold( return detail::linear_fold(
@ -242,7 +242,7 @@ namespace detail
template<typename Sequence, typename State, typename F, typename Tag> template<typename Sequence, typename State, typename F, typename Tag>
typename result_of::fold<Sequence, State, F>::type typename result_of::fold<Sequence, State, F>::type
fold(Sequence& seq, State const& state, F const& f, Tag) fold(Sequence& seq, State const& state, F f, Tag)
{ {
return linear_fold( return linear_fold(
fusion::begin(seq) fusion::begin(seq)
@ -257,7 +257,7 @@ namespace detail
template<typename Sequence, typename State, typename F> template<typename Sequence, typename State, typename F>
typename result_of::fold<Sequence, State, F>::type typename result_of::fold<Sequence, State, F>::type
fold(Sequence& seq, State const& state, F const& f, random_access_traversal_tag) fold(Sequence& seq, State const& state, F f, random_access_traversal_tag)
{ {
typedef typename result_of::begin<Sequence>::type begin; typedef typename result_of::begin<Sequence>::type begin;
typedef typename result_of::end<Sequence>::type end; typedef typename result_of::end<Sequence>::type end;

View File

@ -31,14 +31,14 @@ namespace boost { namespace fusion {
template <typename Sequence, typename State, typename F> template <typename Sequence, typename State, typename F>
inline typename result_of::fold<Sequence, State, F>::type inline typename result_of::fold<Sequence, State, F>::type
fold(Sequence& seq, State const& state, F const& f) fold(Sequence& seq, State const& state, F f)
{ {
return detail::fold(seq, state, f, typename traits::category_of<Sequence>::type()); return detail::fold(seq, state, f, typename traits::category_of<Sequence>::type());
} }
template <typename Sequence, typename State, typename F> template <typename Sequence, typename State, typename F>
inline typename result_of::fold<Sequence const, State, F>::type inline typename result_of::fold<Sequence const, State, F>::type
fold(Sequence const& seq, State const& state, F const& f) fold(Sequence const& seq, State const& state, F f)
{ {
return detail::fold(seq, state, f, typename traits::category_of<Sequence>::type()); return detail::fold(seq, state, f, typename traits::category_of<Sequence>::type());
} }