simplify segmented_fold_until interface

[SVN r73898]
This commit is contained in:
Eric Niebler
2011-08-18 21:33:39 +00:00
parent 9dd14c435e
commit b8bb98a36b
7 changed files with 139 additions and 213 deletions

View File

@ -15,34 +15,24 @@ namespace boost { namespace fusion { namespace detail
template <typename Fun>
struct segmented_fold_fun
{
template <typename Sig>
struct result;
template <typename This, typename Sequence, typename State, typename Context>
struct result<This(Sequence&, State&, Context&)>
{
typedef
fusion::result<
typename result_of::fold<Sequence, State, Fun>::type,
continue_
>
type;
};
explicit segmented_fold_fun(Fun const& f)
: fun(f)
{}
template <typename Sequence, typename State, typename Context>
typename result<segmented_fold_fun(Sequence&, State const&, Context const&)>::type
operator()(Sequence& seq, State const& state, Context const&) const
{
return fusion::fold(seq, state, fun);
}
Fun const& fun;
};
template <typename Sequence, typename State, typename Context>
struct apply
{
typedef typename result_of::fold<Sequence, State, Fun>::type type;
typedef mpl::true_ continue_type;
static type call(Sequence& seq, State const& state, Context const&, segmented_fold_fun const& fun)
{
return fusion::fold(seq, state, fun.fun);
}
};
};
}}}
namespace boost { namespace fusion

View File

@ -16,22 +16,25 @@ namespace boost { namespace fusion { namespace detail
template <typename Fun>
struct segmented_for_each_fun
{
typedef result<void, continue_> result_type;
explicit segmented_for_each_fun(Fun const& f)
: fun(f)
{}
template <typename Sequence, typename State, typename Context>
result_type operator()(Sequence& seq, State const&, Context const&) const
{
fusion::for_each(seq, fun);
return void_();
}
Fun const& fun;
};
template <typename Sequence, typename State, typename Context>
struct apply
{
typedef void_ type;
typedef mpl::true_ continue_type;
static type call(Sequence& seq, State const&, Context const&, segmented_for_each_fun const& fun)
{
fusion::for_each(seq, fun.fun);
return void_();
}
};
};
}}}
namespace boost { namespace fusion