2 // Copyright Aleksey Gurtovoy 2001-2004
3 // Copyright David Abrahams 2001-2002
5 // Distributed under the Boost Software License, Version 1.0.
6 // (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
10 // Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
11 // -- DO NOT modify by hand!
13 namespace boost { namespace mpl { namespace aux {
15 template< typename Iterator, typename State >
16 struct iter_fold_if_null_step
19 typedef Iterator iterator;
23 struct iter_fold_if_step_impl
33 typedef typename apply2< StateOp,State,Iterator >::type state;
34 typedef typename IteratorOp::type iterator;
39 struct iter_fold_if_step_impl<false>
50 typedef Iterator iterator;
60 struct iter_fold_if_forward_step
62 typedef typename apply2< Predicate,State,Iterator >::type not_last;
63 typedef typename iter_fold_if_step_impl<
64 BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
65 >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
67 typedef typename impl_::state state;
68 typedef typename impl_::iterator iterator;
77 struct iter_fold_if_backward_step
79 typedef typename apply2< Predicate,State,Iterator >::type not_last;
80 typedef typename iter_fold_if_step_impl<
81 BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
82 >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
84 typedef typename impl_::state state;
85 typedef typename impl_::iterator iterator;
92 , typename ForwardPredicate
94 , typename BackwardPredicate
96 struct iter_fold_if_impl
99 typedef iter_fold_if_null_step< Iterator,State > forward_step0;
100 typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
101 typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
102 typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
103 typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
106 typedef typename if_<
107 typename forward_step4::not_last
109 typename forward_step4::iterator
110 , typename forward_step4::state
116 , iter_fold_if_null_step<
117 typename forward_step4::iterator
118 , typename forward_step4::state
120 >::type backward_step4;
122 typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
123 typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
124 typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
125 typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
129 typedef typename backward_step0::state state;
130 typedef typename backward_step4::iterator iterator;