72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								/*=============================================================================
							 | 
						||
| 
								 | 
							
								    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
							 |