134 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			134 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | 
 | ||
|  | // Copyright Aleksey Gurtovoy 2001-2004 | ||
|  | // Copyright David Abrahams 2001-2002 | ||
|  | // | ||
|  | // 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) | ||
|  | // | ||
|  | 
 | ||
|  | // *Preprocessed* version of the main "iter_fold_if_impl.hpp" header | ||
|  | // -- DO NOT modify by hand! | ||
|  | 
 | ||
|  | namespace boost { namespace mpl { namespace aux { | ||
|  | 
 | ||
|  | template< typename Iterator, typename State > | ||
|  | struct iter_fold_if_null_step | ||
|  | { | ||
|  |     typedef State state; | ||
|  |     typedef Iterator iterator; | ||
|  | }; | ||
|  | 
 | ||
|  | template< bool > | ||
|  | struct iter_fold_if_step_impl | ||
|  | { | ||
|  |     template< | ||
|  |           typename Iterator | ||
|  |         , typename State | ||
|  |         , typename StateOp | ||
|  |         , typename IteratorOp | ||
|  |         > | ||
|  |     struct result_ | ||
|  |     { | ||
|  |         typedef typename apply2< StateOp,State,Iterator >::type state; | ||
|  |         typedef typename IteratorOp::type iterator; | ||
|  |     }; | ||
|  | }; | ||
|  | 
 | ||
|  | template<> | ||
|  | struct iter_fold_if_step_impl<false> | ||
|  | { | ||
|  |     template< | ||
|  |           typename Iterator | ||
|  |         , typename State | ||
|  |         , typename StateOp | ||
|  |         , typename IteratorOp | ||
|  |         > | ||
|  |     struct result_ | ||
|  |     { | ||
|  |         typedef State state; | ||
|  |         typedef Iterator iterator; | ||
|  |     }; | ||
|  | }; | ||
|  | 
 | ||
|  | template< | ||
|  |       typename Iterator | ||
|  |     , typename State | ||
|  |     , typename ForwardOp | ||
|  |     , typename Predicate | ||
|  |     > | ||
|  | struct iter_fold_if_forward_step | ||
|  | { | ||
|  |     typedef typename apply2< Predicate,State,Iterator >::type not_last; | ||
|  |     typedef typename iter_fold_if_step_impl< | ||
|  |           BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value | ||
|  |         >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_; | ||
|  | 
 | ||
|  |     typedef typename impl_::state state; | ||
|  |     typedef typename impl_::iterator iterator; | ||
|  | }; | ||
|  | 
 | ||
|  | template< | ||
|  |       typename Iterator | ||
|  |     , typename State | ||
|  |     , typename BackwardOp | ||
|  |     , typename Predicate | ||
|  |     > | ||
|  | struct iter_fold_if_backward_step | ||
|  | { | ||
|  |     typedef typename apply2< Predicate,State,Iterator >::type not_last; | ||
|  |     typedef typename iter_fold_if_step_impl< | ||
|  |           BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value | ||
|  |         >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_; | ||
|  | 
 | ||
|  |     typedef typename impl_::state state; | ||
|  |     typedef typename impl_::iterator iterator; | ||
|  | }; | ||
|  | 
 | ||
|  | template< | ||
|  |       typename Iterator | ||
|  |     , typename State | ||
|  |     , typename ForwardOp | ||
|  |     , typename ForwardPredicate | ||
|  |     , typename BackwardOp | ||
|  |     , typename BackwardPredicate | ||
|  |     > | ||
|  | struct iter_fold_if_impl | ||
|  | { | ||
|  |  private: | ||
|  |     typedef iter_fold_if_null_step< Iterator,State > forward_step0; | ||
|  |     typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1; | ||
|  |     typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2; | ||
|  |     typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3; | ||
|  |     typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4; | ||
|  |      | ||
|  | 
 | ||
|  |     typedef typename if_< | ||
|  |           typename forward_step4::not_last | ||
|  |         , iter_fold_if_impl< | ||
|  |               typename forward_step4::iterator | ||
|  |             , typename forward_step4::state | ||
|  |             , ForwardOp | ||
|  |             , ForwardPredicate | ||
|  |             , BackwardOp | ||
|  |             , BackwardPredicate | ||
|  |             > | ||
|  |         , iter_fold_if_null_step< | ||
|  |               typename forward_step4::iterator | ||
|  |             , typename forward_step4::state | ||
|  |             > | ||
|  |         >::type backward_step4; | ||
|  | 
 | ||
|  |     typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3; | ||
|  |     typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2; | ||
|  |     typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1; | ||
|  |     typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0; | ||
|  |      | ||
|  | 
 | ||
|  |  public: | ||
|  |     typedef typename backward_step0::state state; | ||
|  |     typedef typename backward_step4::iterator iterator; | ||
|  | }; | ||
|  | 
 | ||
|  | }}} |