1 2 // Copyright Aleksey Gurtovoy 2001-2004 3 // Copyright David Abrahams 2001-2002 4 // 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) 8 // 9 10 // Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header 11 // -- DO NOT modify by hand! 12 13 namespace boost { namespace mpl { namespace aux { 14 15 template< typename Iterator, typename State > 16 struct iter_fold_if_null_step 17 { 18 typedef State state; 19 typedef Iterator iterator; 20 }; 21 22 template< bool > 23 struct iter_fold_if_step_impl 24 { 25 template< 26 typename Iterator 27 , typename State 28 , typename StateOp 29 , typename IteratorOp 30 > 31 struct result_ 32 { 33 typedef typename apply2< StateOp,State,Iterator >::type state; 34 typedef typename IteratorOp::type iterator; 35 }; 36 }; 37 38 template<> 39 struct iter_fold_if_step_impl<false> 40 { 41 template< 42 typename Iterator 43 , typename State 44 , typename StateOp 45 , typename IteratorOp 46 > 47 struct result_ 48 { 49 typedef State state; 50 typedef Iterator iterator; 51 }; 52 }; 53 54 template< 55 typename Iterator 56 , typename State 57 , typename ForwardOp 58 , typename Predicate 59 > 60 struct iter_fold_if_forward_step 61 { 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_; 66 67 typedef typename impl_::state state; 68 typedef typename impl_::iterator iterator; 69 }; 70 71 template< 72 typename Iterator 73 , typename State 74 , typename BackwardOp 75 , typename Predicate 76 > 77 struct iter_fold_if_backward_step 78 { 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_; 83 84 typedef typename impl_::state state; 85 typedef typename impl_::iterator iterator; 86 }; 87 88 template< 89 typename Iterator 90 , typename State 91 , typename ForwardOp 92 , typename ForwardPredicate 93 , typename BackwardOp 94 , typename BackwardPredicate 95 > 96 struct iter_fold_if_impl 97 { 98 private: 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; 104 105 106 typedef typename if_< 107 typename forward_step4::not_last 108 , iter_fold_if_impl< 109 typename forward_step4::iterator 110 , typename forward_step4::state 111 , ForwardOp 112 , ForwardPredicate 113 , BackwardOp 114 , BackwardPredicate 115 > 116 , iter_fold_if_null_step< 117 typename forward_step4::iterator 118 , typename forward_step4::state 119 > 120 >::type backward_step4; 121 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; 126 127 128 public: 129 typedef typename backward_step0::state state; 130 typedef typename backward_step4::iterator iterator; 131 }; 132 133 }}} 134