1 2 // Copyright Peter Dimov 2001 3 // Copyright Aleksey Gurtovoy 2001-2004 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/bind.hpp" header 11 // -- DO NOT modify by hand! 12 13 namespace boost { namespace mpl { 14 15 namespace aux { 16 17 template< 18 typename T, typename U1, typename U2, typename U3, typename U4 19 , typename U5 20 > 21 struct resolve_bind_arg 22 { 23 typedef T type; 24 }; 25 26 template< 27 typename T 28 , typename Arg 29 > 30 struct replace_unnamed_arg 31 { 32 typedef Arg next; 33 typedef T type; 34 }; 35 36 template< 37 typename Arg 38 > 39 struct replace_unnamed_arg< arg< -1 >, Arg > 40 { 41 typedef typename Arg::next next; 42 typedef Arg type; 43 }; 44 45 template< 46 int N, typename U1, typename U2, typename U3, typename U4, typename U5 47 > 48 struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 > 49 { 50 typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type; 51 }; 52 53 } // namespace aux 54 55 template< 56 typename F 57 > 58 struct bind0 59 { 60 template< 61 typename U1 = na, typename U2 = na, typename U3 = na 62 , typename U4 = na, typename U5 = na 63 > 64 struct apply 65 { 66 private: 67 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 68 typedef typename r0::type a0; 69 typedef typename r0::next n1; 70 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 71 /// 72 public: 73 typedef typename apply_wrap0< 74 f_ 75 >::type type; 76 77 }; 78 }; 79 80 namespace aux { 81 82 template< 83 typename F, typename U1, typename U2, typename U3, typename U4 84 , typename U5 85 > 86 struct resolve_bind_arg< 87 bind0<F>, U1, U2, U3, U4, U5 88 > 89 { 90 typedef bind0<F> f_; 91 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 92 }; 93 94 } // namespace aux 95 96 BOOST_MPL_AUX_ARITY_SPEC(1, bind0) 97 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) 98 99 template< 100 typename F, typename T1 101 > 102 struct bind1 103 { 104 template< 105 typename U1 = na, typename U2 = na, typename U3 = na 106 , typename U4 = na, typename U5 = na 107 > 108 struct apply 109 { 110 private: 111 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 112 typedef typename r0::type a0; 113 typedef typename r0::next n1; 114 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 115 /// 116 typedef aux::replace_unnamed_arg< T1,n1 > r1; 117 typedef typename r1::type a1; 118 typedef typename r1::next n2; 119 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 120 /// 121 public: 122 typedef typename apply_wrap1< 123 f_ 124 , typename t1::type 125 >::type type; 126 127 }; 128 }; 129 130 namespace aux { 131 132 template< 133 typename F, typename T1, typename U1, typename U2, typename U3 134 , typename U4, typename U5 135 > 136 struct resolve_bind_arg< 137 bind1< F,T1 >, U1, U2, U3, U4, U5 138 > 139 { 140 typedef bind1< F,T1 > f_; 141 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 142 }; 143 144 } // namespace aux 145 146 BOOST_MPL_AUX_ARITY_SPEC(2, bind1) 147 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) 148 149 template< 150 typename F, typename T1, typename T2 151 > 152 struct bind2 153 { 154 template< 155 typename U1 = na, typename U2 = na, typename U3 = na 156 , typename U4 = na, typename U5 = na 157 > 158 struct apply 159 { 160 private: 161 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 162 typedef typename r0::type a0; 163 typedef typename r0::next n1; 164 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 165 /// 166 typedef aux::replace_unnamed_arg< T1,n1 > r1; 167 typedef typename r1::type a1; 168 typedef typename r1::next n2; 169 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 170 /// 171 typedef aux::replace_unnamed_arg< T2,n2 > r2; 172 typedef typename r2::type a2; 173 typedef typename r2::next n3; 174 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 175 /// 176 public: 177 typedef typename apply_wrap2< 178 f_ 179 , typename t1::type, typename t2::type 180 >::type type; 181 182 }; 183 }; 184 185 namespace aux { 186 187 template< 188 typename F, typename T1, typename T2, typename U1, typename U2 189 , typename U3, typename U4, typename U5 190 > 191 struct resolve_bind_arg< 192 bind2< F,T1,T2 >, U1, U2, U3, U4, U5 193 > 194 { 195 typedef bind2< F,T1,T2 > f_; 196 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 197 }; 198 199 } // namespace aux 200 201 BOOST_MPL_AUX_ARITY_SPEC(3, bind2) 202 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) 203 204 template< 205 typename F, typename T1, typename T2, typename T3 206 > 207 struct bind3 208 { 209 template< 210 typename U1 = na, typename U2 = na, typename U3 = na 211 , typename U4 = na, typename U5 = na 212 > 213 struct apply 214 { 215 private: 216 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 217 typedef typename r0::type a0; 218 typedef typename r0::next n1; 219 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 220 /// 221 typedef aux::replace_unnamed_arg< T1,n1 > r1; 222 typedef typename r1::type a1; 223 typedef typename r1::next n2; 224 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 225 /// 226 typedef aux::replace_unnamed_arg< T2,n2 > r2; 227 typedef typename r2::type a2; 228 typedef typename r2::next n3; 229 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 230 /// 231 typedef aux::replace_unnamed_arg< T3,n3 > r3; 232 typedef typename r3::type a3; 233 typedef typename r3::next n4; 234 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; 235 /// 236 public: 237 typedef typename apply_wrap3< 238 f_ 239 , typename t1::type, typename t2::type, typename t3::type 240 >::type type; 241 242 }; 243 }; 244 245 namespace aux { 246 247 template< 248 typename F, typename T1, typename T2, typename T3, typename U1 249 , typename U2, typename U3, typename U4, typename U5 250 > 251 struct resolve_bind_arg< 252 bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 253 > 254 { 255 typedef bind3< F,T1,T2,T3 > f_; 256 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 257 }; 258 259 } // namespace aux 260 261 BOOST_MPL_AUX_ARITY_SPEC(4, bind3) 262 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) 263 264 template< 265 typename F, typename T1, typename T2, typename T3, typename T4 266 > 267 struct bind4 268 { 269 template< 270 typename U1 = na, typename U2 = na, typename U3 = na 271 , typename U4 = na, typename U5 = na 272 > 273 struct apply 274 { 275 private: 276 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 277 typedef typename r0::type a0; 278 typedef typename r0::next n1; 279 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 280 /// 281 typedef aux::replace_unnamed_arg< T1,n1 > r1; 282 typedef typename r1::type a1; 283 typedef typename r1::next n2; 284 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 285 /// 286 typedef aux::replace_unnamed_arg< T2,n2 > r2; 287 typedef typename r2::type a2; 288 typedef typename r2::next n3; 289 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 290 /// 291 typedef aux::replace_unnamed_arg< T3,n3 > r3; 292 typedef typename r3::type a3; 293 typedef typename r3::next n4; 294 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; 295 /// 296 typedef aux::replace_unnamed_arg< T4,n4 > r4; 297 typedef typename r4::type a4; 298 typedef typename r4::next n5; 299 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; 300 /// 301 public: 302 typedef typename apply_wrap4< 303 f_ 304 , typename t1::type, typename t2::type, typename t3::type 305 , typename t4::type 306 >::type type; 307 308 }; 309 }; 310 311 namespace aux { 312 313 template< 314 typename F, typename T1, typename T2, typename T3, typename T4 315 , typename U1, typename U2, typename U3, typename U4, typename U5 316 > 317 struct resolve_bind_arg< 318 bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 319 > 320 { 321 typedef bind4< F,T1,T2,T3,T4 > f_; 322 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 323 }; 324 325 } // namespace aux 326 327 BOOST_MPL_AUX_ARITY_SPEC(5, bind4) 328 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) 329 330 template< 331 typename F, typename T1, typename T2, typename T3, typename T4 332 , typename T5 333 > 334 struct bind5 335 { 336 template< 337 typename U1 = na, typename U2 = na, typename U3 = na 338 , typename U4 = na, typename U5 = na 339 > 340 struct apply 341 { 342 private: 343 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 344 typedef typename r0::type a0; 345 typedef typename r0::next n1; 346 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 347 /// 348 typedef aux::replace_unnamed_arg< T1,n1 > r1; 349 typedef typename r1::type a1; 350 typedef typename r1::next n2; 351 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 352 /// 353 typedef aux::replace_unnamed_arg< T2,n2 > r2; 354 typedef typename r2::type a2; 355 typedef typename r2::next n3; 356 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 357 /// 358 typedef aux::replace_unnamed_arg< T3,n3 > r3; 359 typedef typename r3::type a3; 360 typedef typename r3::next n4; 361 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; 362 /// 363 typedef aux::replace_unnamed_arg< T4,n4 > r4; 364 typedef typename r4::type a4; 365 typedef typename r4::next n5; 366 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; 367 /// 368 typedef aux::replace_unnamed_arg< T5,n5 > r5; 369 typedef typename r5::type a5; 370 typedef typename r5::next n6; 371 typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; 372 /// 373 public: 374 typedef typename apply_wrap5< 375 f_ 376 , typename t1::type, typename t2::type, typename t3::type 377 , typename t4::type, typename t5::type 378 >::type type; 379 380 }; 381 }; 382 383 namespace aux { 384 385 template< 386 typename F, typename T1, typename T2, typename T3, typename T4 387 , typename T5, typename U1, typename U2, typename U3, typename U4 388 , typename U5 389 > 390 struct resolve_bind_arg< 391 bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 392 > 393 { 394 typedef bind5< F,T1,T2,T3,T4,T5 > f_; 395 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 396 }; 397 398 } // namespace aux 399 400 BOOST_MPL_AUX_ARITY_SPEC(6, bind5) 401 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) 402 }} 403 404