EVOLUTION-MANAGER
Edit File: segmented_fold_until.hpp
/*============================================================================= 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_SEGMENTED_FOLD_UNTIL_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_FOLD_UNTIL_HPP_INCLUDED #include <boost/fusion/support/config.hpp> #include <boost/type_traits/is_const.hpp> #include <boost/utility/enable_if.hpp> #include <boost/fusion/support/detail/segmented_fold_until_impl.hpp> namespace boost { namespace fusion { //auto segmented_fold_until(seq, state, fun) //{ // return first(segmented_fold_until_impl(seq, state, nil_, fun)); //} namespace result_of { template <typename Sequence, typename State, typename Fun> struct segmented_fold_until { typedef detail::segmented_fold_until_impl< Sequence , State , fusion::nil_ , Fun > filter; typedef typename filter::type type; }; } template <typename Sequence, typename State, typename Fun> BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED inline typename lazy_disable_if< is_const<Sequence> , result_of::segmented_fold_until<Sequence, State, Fun> >::type segmented_fold_until(Sequence& seq, State const& state, Fun const& fun) { typedef typename result_of::segmented_fold_until<Sequence, State, Fun>::filter filter; return filter::call(seq, state, fusion::nil_(), fun); } template <typename Sequence, typename State, typename Fun> BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED inline typename result_of::segmented_fold_until<Sequence const, State, Fun>::type segmented_fold_until(Sequence const& seq, State const& state, Fun const& fun) { typedef typename result_of::segmented_fold_until<Sequence const, State, Fun>::filter filter; return filter::call(seq, state, fusion::nil_(), fun); } }} #endif