mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-16 05:42:20 +02:00
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:
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user