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_/reverse_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 long N 18 , typename First 19 , typename Last 20 , typename State 21 , typename BackwardOp 22 , typename ForwardOp 23 > 24 struct reverse_iter_fold_impl; 25 26 template< long N > 27 struct reverse_iter_fold_chunk; 28 29 template<> struct reverse_iter_fold_chunk<0> 30 { 31 template< 32 typename First 33 , typename Last 34 , typename State 35 , typename BackwardOp 36 , typename ForwardOp 37 > 38 struct result_ 39 { 40 typedef First iter0; 41 typedef State fwd_state0; 42 typedef fwd_state0 bkwd_state0; 43 typedef bkwd_state0 state; 44 typedef iter0 iterator; 45 }; 46 }; 47 48 template<> struct reverse_iter_fold_chunk<1> 49 { 50 template< 51 typename First 52 , typename Last 53 , typename State 54 , typename BackwardOp 55 , typename ForwardOp 56 > 57 struct result_ 58 { 59 typedef First iter0; 60 typedef State fwd_state0; 61 typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; 62 typedef typename mpl::next<iter0>::type iter1; 63 64 65 typedef fwd_state1 bkwd_state1; 66 typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; 67 typedef bkwd_state0 state; 68 typedef iter1 iterator; 69 }; 70 }; 71 72 template<> struct reverse_iter_fold_chunk<2> 73 { 74 template< 75 typename First 76 , typename Last 77 , typename State 78 , typename BackwardOp 79 , typename ForwardOp 80 > 81 struct result_ 82 { 83 typedef First iter0; 84 typedef State fwd_state0; 85 typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; 86 typedef typename mpl::next<iter0>::type iter1; 87 typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; 88 typedef typename mpl::next<iter1>::type iter2; 89 90 91 typedef fwd_state2 bkwd_state2; 92 typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; 93 typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; 94 95 96 typedef bkwd_state0 state; 97 typedef iter2 iterator; 98 }; 99 }; 100 101 template<> struct reverse_iter_fold_chunk<3> 102 { 103 template< 104 typename First 105 , typename Last 106 , typename State 107 , typename BackwardOp 108 , typename ForwardOp 109 > 110 struct result_ 111 { 112 typedef First iter0; 113 typedef State fwd_state0; 114 typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; 115 typedef typename mpl::next<iter0>::type iter1; 116 typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; 117 typedef typename mpl::next<iter1>::type iter2; 118 typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; 119 typedef typename mpl::next<iter2>::type iter3; 120 121 122 typedef fwd_state3 bkwd_state3; 123 typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; 124 typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; 125 typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; 126 127 128 typedef bkwd_state0 state; 129 typedef iter3 iterator; 130 }; 131 }; 132 133 template<> struct reverse_iter_fold_chunk<4> 134 { 135 template< 136 typename First 137 , typename Last 138 , typename State 139 , typename BackwardOp 140 , typename ForwardOp 141 > 142 struct result_ 143 { 144 typedef First iter0; 145 typedef State fwd_state0; 146 typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; 147 typedef typename mpl::next<iter0>::type iter1; 148 typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; 149 typedef typename mpl::next<iter1>::type iter2; 150 typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; 151 typedef typename mpl::next<iter2>::type iter3; 152 typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; 153 typedef typename mpl::next<iter3>::type iter4; 154 155 156 typedef fwd_state4 bkwd_state4; 157 typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; 158 typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; 159 typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; 160 typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; 161 162 163 typedef bkwd_state0 state; 164 typedef iter4 iterator; 165 }; 166 }; 167 168 template< long N > 169 struct reverse_iter_fold_chunk 170 { 171 template< 172 typename First 173 , typename Last 174 , typename State 175 , typename BackwardOp 176 , typename ForwardOp 177 > 178 struct result_ 179 { 180 typedef First iter0; 181 typedef State fwd_state0; 182 typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; 183 typedef typename mpl::next<iter0>::type iter1; 184 typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; 185 typedef typename mpl::next<iter1>::type iter2; 186 typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; 187 typedef typename mpl::next<iter2>::type iter3; 188 typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; 189 typedef typename mpl::next<iter3>::type iter4; 190 191 192 typedef reverse_iter_fold_impl< 193 ( (N - 4) < 0 ? 0 : N - 4 ) 194 , iter4 195 , Last 196 , fwd_state4 197 , BackwardOp 198 , ForwardOp 199 > nested_chunk; 200 201 typedef typename nested_chunk::state bkwd_state4; 202 typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; 203 typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; 204 typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; 205 typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; 206 207 208 typedef bkwd_state0 state; 209 typedef typename nested_chunk::iterator iterator; 210 }; 211 }; 212 213 template< 214 typename First 215 , typename Last 216 , typename State 217 , typename BackwardOp 218 , typename ForwardOp 219 > 220 struct reverse_iter_fold_step; 221 222 template< 223 typename Last 224 , typename State 225 > 226 struct reverse_iter_fold_null_step 227 { 228 typedef Last iterator; 229 typedef State state; 230 }; 231 232 template<> 233 struct reverse_iter_fold_chunk< -1 > 234 { 235 template< 236 typename First 237 , typename Last 238 , typename State 239 , typename BackwardOp 240 , typename ForwardOp 241 > 242 struct result_ 243 { 244 typedef typename if_< 245 typename is_same< First,Last >::type 246 , reverse_iter_fold_null_step< Last,State > 247 , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp > 248 >::type res_; 249 250 typedef typename res_::state state; 251 typedef typename res_::iterator iterator; 252 }; 253 }; 254 255 template< 256 typename First 257 , typename Last 258 , typename State 259 , typename BackwardOp 260 , typename ForwardOp 261 > 262 struct reverse_iter_fold_step 263 { 264 typedef reverse_iter_fold_chunk< -1 >::template result_< 265 typename mpl::next<First>::type 266 , Last 267 , typename apply2< ForwardOp,State,First >::type 268 , BackwardOp 269 , ForwardOp 270 > nested_step; 271 272 typedef typename apply2< 273 BackwardOp 274 , typename nested_step::state 275 , First 276 >::type state; 277 278 typedef typename nested_step::iterator iterator; 279 }; 280 281 template< 282 long N 283 , typename First 284 , typename Last 285 , typename State 286 , typename BackwardOp 287 , typename ForwardOp 288 > 289 struct reverse_iter_fold_impl 290 : reverse_iter_fold_chunk<N> 291 ::template result_< First,Last,State,BackwardOp,ForwardOp > 292 { 293 }; 294 295 }}} 296