1 2 // Copyright Aleksey Gurtovoy 2000-2004 3 // 4 // Distributed under the Boost Software License, Version 1.0. 5 // (See accompanying file LICENSE_1_0.txt or copy at 6 // http://www.boost.org/LICENSE_1_0.txt) 7 // 8 9 // Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header 10 // -- DO NOT modify by hand! 11 12 namespace boost { namespace mpl { namespace aux { 13 14 /// forward declaration 15 16 template< 17 int N 18 , typename First 19 , typename Last 20 , typename State 21 , typename ForwardOp 22 > 23 struct iter_fold_impl; 24 25 template< 26 typename First 27 , typename Last 28 , typename State 29 , typename ForwardOp 30 > 31 struct iter_fold_impl< 0,First,Last,State,ForwardOp > 32 { 33 typedef First iter0; 34 typedef State state0; 35 typedef state0 state; 36 typedef iter0 iterator; 37 }; 38 39 template< 40 typename First 41 , typename Last 42 , typename State 43 , typename ForwardOp 44 > 45 struct iter_fold_impl< 1,First,Last,State,ForwardOp > 46 { 47 typedef First iter0; 48 typedef State state0; 49 typedef typename apply2< ForwardOp,state0,iter0 >::type state1; 50 typedef typename mpl::next<iter0>::type iter1; 51 52 53 typedef state1 state; 54 typedef iter1 iterator; 55 }; 56 57 template< 58 typename First 59 , typename Last 60 , typename State 61 , typename ForwardOp 62 > 63 struct iter_fold_impl< 2,First,Last,State,ForwardOp > 64 { 65 typedef First iter0; 66 typedef State state0; 67 typedef typename apply2< ForwardOp,state0,iter0 >::type state1; 68 typedef typename mpl::next<iter0>::type iter1; 69 typedef typename apply2< ForwardOp,state1,iter1 >::type state2; 70 typedef typename mpl::next<iter1>::type iter2; 71 72 73 typedef state2 state; 74 typedef iter2 iterator; 75 }; 76 77 template< 78 typename First 79 , typename Last 80 , typename State 81 , typename ForwardOp 82 > 83 struct iter_fold_impl< 3,First,Last,State,ForwardOp > 84 { 85 typedef First iter0; 86 typedef State state0; 87 typedef typename apply2< ForwardOp,state0,iter0 >::type state1; 88 typedef typename mpl::next<iter0>::type iter1; 89 typedef typename apply2< ForwardOp,state1,iter1 >::type state2; 90 typedef typename mpl::next<iter1>::type iter2; 91 typedef typename apply2< ForwardOp,state2,iter2 >::type state3; 92 typedef typename mpl::next<iter2>::type iter3; 93 94 95 typedef state3 state; 96 typedef iter3 iterator; 97 }; 98 99 template< 100 typename First 101 , typename Last 102 , typename State 103 , typename ForwardOp 104 > 105 struct iter_fold_impl< 4,First,Last,State,ForwardOp > 106 { 107 typedef First iter0; 108 typedef State state0; 109 typedef typename apply2< ForwardOp,state0,iter0 >::type state1; 110 typedef typename mpl::next<iter0>::type iter1; 111 typedef typename apply2< ForwardOp,state1,iter1 >::type state2; 112 typedef typename mpl::next<iter1>::type iter2; 113 typedef typename apply2< ForwardOp,state2,iter2 >::type state3; 114 typedef typename mpl::next<iter2>::type iter3; 115 typedef typename apply2< ForwardOp,state3,iter3 >::type state4; 116 typedef typename mpl::next<iter3>::type iter4; 117 118 119 typedef state4 state; 120 typedef iter4 iterator; 121 }; 122 123 template< 124 int N 125 , typename First 126 , typename Last 127 , typename State 128 , typename ForwardOp 129 > 130 struct iter_fold_impl 131 { 132 typedef iter_fold_impl< 133 4 134 , First 135 , Last 136 , State 137 , ForwardOp 138 > chunk_; 139 140 typedef iter_fold_impl< 141 ( (N - 4) < 0 ? 0 : N - 4 ) 142 , typename chunk_::iterator 143 , Last 144 , typename chunk_::state 145 , ForwardOp 146 > res_; 147 148 typedef typename res_::state state; 149 typedef typename res_::iterator iterator; 150 }; 151 152 template< 153 typename First 154 , typename Last 155 , typename State 156 , typename ForwardOp 157 > 158 struct iter_fold_impl< -1,First,Last,State,ForwardOp > 159 : iter_fold_impl< 160 -1 161 , typename mpl::next<First>::type 162 , Last 163 , typename apply2< ForwardOp,State,First >::type 164 , ForwardOp 165 > 166 { 167 }; 168 169 template< 170 typename Last 171 , typename State 172 , typename ForwardOp 173 > 174 struct iter_fold_impl< -1,Last,Last,State,ForwardOp > 175 { 176 typedef State state; 177 typedef Last iterator; 178 }; 179 180 }}} 181