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