make for_each aware of segments

[SVN r73899]
This commit is contained in:
Eric Niebler
2011-08-18 22:09:59 +00:00
parent b8bb98a36b
commit 5ff6210759
5 changed files with 56 additions and 41 deletions

View File

@ -1,66 +0,0 @@
/*=============================================================================
Copyright (c) 2011 Eric Niebler
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_FOR_EACH_S_HPP_INCLUDED)
#define BOOST_FUSION_FOR_EACH_S_HPP_INCLUDED
#include <boost/fusion/support/void.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/fusion/support/segmented_fold_until.hpp>
namespace boost { namespace fusion { namespace detail
{
template <typename Fun>
struct segmented_for_each_fun
{
explicit segmented_for_each_fun(Fun const& f)
: fun(f)
{}
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
{
namespace result_of
{
template <typename Sequence, typename F>
struct for_each_s
{
typedef void type;
};
}
template <typename Sequence, typename F>
inline void
for_each_s(Sequence& seq, F const& f)
{
fusion::segmented_fold_until(seq, void_(), detail::segmented_for_each_fun<F>(f));
}
template <typename Sequence, typename F>
inline void
for_each_s(Sequence const& seq, F const& f)
{
fusion::segmented_fold_until(seq, void_(), detail::segmented_for_each_fun<F>(f));
}
}}
#endif