1 /*============================================================================== 2 Copyright (c) 2005-2010 Joel de Guzman 3 Copyright (c) 2010 Thomas Heller 4 5 Distributed under the Boost Software License, Version 1.0. (See accompanying 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 ==============================================================================*/ 8 namespace boost { namespace phoenix 9 { 10 template <typename Dummy = void> 11 struct vector0 12 { 13 typedef mpl::int_<0> size_type; 14 static const int size_value = 0; 15 }; 16 template <int> struct vector_chooser; 17 template <> 18 struct vector_chooser<0> 19 { 20 template <typename Dummy = void> 21 struct apply 22 { 23 typedef vector0<> type; 24 }; 25 }; 26 }} 27 28 29 30 31 32 33 34 namespace boost { namespace phoenix 35 { 36 template <typename A0> 37 struct vector1 38 { 39 typedef A0 member_type0; A0 a0; 40 41 typedef mpl::int_<1> size_type; 42 static const int size_value = 1; 43 typedef 44 vector0<> 45 args_type; argsboost::phoenix::vector146 args_type args() const 47 { 48 args_type r = {}; 49 return r; 50 } 51 }; 52 template <> 53 struct vector_chooser<1> 54 { 55 template <typename A0> 56 struct apply 57 { 58 typedef vector1<A0> type; 59 }; 60 }; 61 }} 62 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL( 63 (A0) 64 , ( boost::phoenix::vector1 ) (A0) 65 , (A0, a0) 66 ) 67 68 69 70 71 72 73 74 namespace boost { namespace phoenix 75 { 76 template <typename A0 , typename A1> 77 struct vector2 78 { 79 typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; 80 81 typedef mpl::int_<2> size_type; 82 static const int size_value = 2; 83 typedef 84 vector1<A1> 85 args_type; argsboost::phoenix::vector286 args_type args() const 87 { 88 args_type r = {a1}; 89 return r; 90 } 91 }; 92 template <> 93 struct vector_chooser<2> 94 { 95 template <typename A0 , typename A1> 96 struct apply 97 { 98 typedef vector2<A0 , A1> type; 99 }; 100 }; 101 }} 102 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL( 103 (A0) (A1) 104 , ( boost::phoenix::vector2 ) (A0) (A1) 105 , (A0, a0) (A1, a1) 106 ) 107 108 109 110 111 112 113 114 namespace boost { namespace phoenix 115 { 116 template <typename A0 , typename A1 , typename A2> 117 struct vector3 118 { 119 typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; 120 121 typedef mpl::int_<3> size_type; 122 static const int size_value = 3; 123 typedef 124 vector2<A1 , A2> 125 args_type; argsboost::phoenix::vector3126 args_type args() const 127 { 128 args_type r = {a1 , a2}; 129 return r; 130 } 131 }; 132 template <> 133 struct vector_chooser<3> 134 { 135 template <typename A0 , typename A1 , typename A2> 136 struct apply 137 { 138 typedef vector3<A0 , A1 , A2> type; 139 }; 140 }; 141 }} 142 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL( 143 (A0) (A1) (A2) 144 , ( boost::phoenix::vector3 ) (A0) (A1) (A2) 145 , (A0, a0) (A1, a1) (A2, a2) 146 ) 147 148 149 150 151 152 153 154 namespace boost { namespace phoenix 155 { 156 template <typename A0 , typename A1 , typename A2 , typename A3> 157 struct vector4 158 { 159 typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; 160 161 typedef mpl::int_<4> size_type; 162 static const int size_value = 4; 163 typedef 164 vector3<A1 , A2 , A3> 165 args_type; argsboost::phoenix::vector4166 args_type args() const 167 { 168 args_type r = {a1 , a2 , a3}; 169 return r; 170 } 171 }; 172 template <> 173 struct vector_chooser<4> 174 { 175 template <typename A0 , typename A1 , typename A2 , typename A3> 176 struct apply 177 { 178 typedef vector4<A0 , A1 , A2 , A3> type; 179 }; 180 }; 181 }} 182 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL( 183 (A0) (A1) (A2) (A3) 184 , ( boost::phoenix::vector4 ) (A0) (A1) (A2) (A3) 185 , (A0, a0) (A1, a1) (A2, a2) (A3, a3) 186 ) 187 188 189 190 191 192 193 194 namespace boost { namespace phoenix 195 { 196 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> 197 struct vector5 198 { 199 typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; 200 201 typedef mpl::int_<5> size_type; 202 static const int size_value = 5; 203 typedef 204 vector4<A1 , A2 , A3 , A4> 205 args_type; argsboost::phoenix::vector5206 args_type args() const 207 { 208 args_type r = {a1 , a2 , a3 , a4}; 209 return r; 210 } 211 }; 212 template <> 213 struct vector_chooser<5> 214 { 215 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4> 216 struct apply 217 { 218 typedef vector5<A0 , A1 , A2 , A3 , A4> type; 219 }; 220 }; 221 }} 222 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL( 223 (A0) (A1) (A2) (A3) (A4) 224 , ( boost::phoenix::vector5 ) (A0) (A1) (A2) (A3) (A4) 225 , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) 226 ) 227 228 229 230 231 232 233 234 namespace boost { namespace phoenix 235 { 236 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> 237 struct vector6 238 { 239 typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5; 240 241 typedef mpl::int_<6> size_type; 242 static const int size_value = 6; 243 typedef 244 vector5<A1 , A2 , A3 , A4 , A5> 245 args_type; argsboost::phoenix::vector6246 args_type args() const 247 { 248 args_type r = {a1 , a2 , a3 , a4 , a5}; 249 return r; 250 } 251 }; 252 template <> 253 struct vector_chooser<6> 254 { 255 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> 256 struct apply 257 { 258 typedef vector6<A0 , A1 , A2 , A3 , A4 , A5> type; 259 }; 260 }; 261 }} 262 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL( 263 (A0) (A1) (A2) (A3) (A4) (A5) 264 , ( boost::phoenix::vector6 ) (A0) (A1) (A2) (A3) (A4) (A5) 265 , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5) 266 ) 267 268 269 270 271 272 273 274 namespace boost { namespace phoenix 275 { 276 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> 277 struct vector7 278 { 279 typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5; typedef A6 member_type6; A6 a6; 280 281 typedef mpl::int_<7> size_type; 282 static const int size_value = 7; 283 typedef 284 vector6<A1 , A2 , A3 , A4 , A5 , A6> 285 args_type; argsboost::phoenix::vector7286 args_type args() const 287 { 288 args_type r = {a1 , a2 , a3 , a4 , a5 , a6}; 289 return r; 290 } 291 }; 292 template <> 293 struct vector_chooser<7> 294 { 295 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> 296 struct apply 297 { 298 typedef vector7<A0 , A1 , A2 , A3 , A4 , A5 , A6> type; 299 }; 300 }; 301 }} 302 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL( 303 (A0) (A1) (A2) (A3) (A4) (A5) (A6) 304 , ( boost::phoenix::vector7 ) (A0) (A1) (A2) (A3) (A4) (A5) (A6) 305 , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5) (A6, a6) 306 ) 307 308 309 310 311 312 313 314 namespace boost { namespace phoenix 315 { 316 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> 317 struct vector8 318 { 319 typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5; typedef A6 member_type6; A6 a6; typedef A7 member_type7; A7 a7; 320 321 typedef mpl::int_<8> size_type; 322 static const int size_value = 8; 323 typedef 324 vector7<A1 , A2 , A3 , A4 , A5 , A6 , A7> 325 args_type; argsboost::phoenix::vector8326 args_type args() const 327 { 328 args_type r = {a1 , a2 , a3 , a4 , a5 , a6 , a7}; 329 return r; 330 } 331 }; 332 template <> 333 struct vector_chooser<8> 334 { 335 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> 336 struct apply 337 { 338 typedef vector8<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> type; 339 }; 340 }; 341 }} 342 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL( 343 (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) 344 , ( boost::phoenix::vector8 ) (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) 345 , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5) (A6, a6) (A7, a7) 346 ) 347 348 349 350 351 352 353 354 namespace boost { namespace phoenix 355 { 356 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> 357 struct vector9 358 { 359 typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5; typedef A6 member_type6; A6 a6; typedef A7 member_type7; A7 a7; typedef A8 member_type8; A8 a8; 360 361 typedef mpl::int_<9> size_type; 362 static const int size_value = 9; 363 typedef 364 vector8<A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> 365 args_type; argsboost::phoenix::vector9366 args_type args() const 367 { 368 args_type r = {a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8}; 369 return r; 370 } 371 }; 372 template <> 373 struct vector_chooser<9> 374 { 375 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> 376 struct apply 377 { 378 typedef vector9<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> type; 379 }; 380 }; 381 }} 382 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL( 383 (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8) 384 , ( boost::phoenix::vector9 ) (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8) 385 , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5) (A6, a6) (A7, a7) (A8, a8) 386 ) 387 388 389 390 391 392 393 394 namespace boost { namespace phoenix 395 { 396 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> 397 struct vector10 398 { 399 typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5; typedef A6 member_type6; A6 a6; typedef A7 member_type7; A7 a7; typedef A8 member_type8; A8 a8; typedef A9 member_type9; A9 a9; 400 401 typedef mpl::int_<10> size_type; 402 static const int size_value = 10; 403 typedef 404 vector9<A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> 405 args_type; argsboost::phoenix::vector10406 args_type args() const 407 { 408 args_type r = {a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9}; 409 return r; 410 } 411 }; 412 template <> 413 struct vector_chooser<10> 414 { 415 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> 416 struct apply 417 { 418 typedef vector10<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> type; 419 }; 420 }; 421 }} 422 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL( 423 (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8) (A9) 424 , ( boost::phoenix::vector10 ) (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8) (A9) 425 , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5) (A6, a6) (A7, a7) (A8, a8) (A9, a9) 426 ) 427 428 429 430 431 432 433 434 namespace boost { namespace phoenix 435 { 436 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10> 437 struct vector11 438 { 439 typedef A0 member_type0; A0 a0; typedef A1 member_type1; A1 a1; typedef A2 member_type2; A2 a2; typedef A3 member_type3; A3 a3; typedef A4 member_type4; A4 a4; typedef A5 member_type5; A5 a5; typedef A6 member_type6; A6 a6; typedef A7 member_type7; A7 a7; typedef A8 member_type8; A8 a8; typedef A9 member_type9; A9 a9; typedef A10 member_type10; A10 a10; 440 441 typedef mpl::int_<11> size_type; 442 static const int size_value = 11; 443 typedef 444 vector10<A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> 445 args_type; argsboost::phoenix::vector11446 args_type args() const 447 { 448 args_type r = {a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10}; 449 return r; 450 } 451 }; 452 template <> 453 struct vector_chooser<11> 454 { 455 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10> 456 struct apply 457 { 458 typedef vector11<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> type; 459 }; 460 }; 461 }} 462 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL( 463 (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8) (A9) (A10) 464 , ( boost::phoenix::vector11 ) (A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A8) (A9) (A10) 465 , (A0, a0) (A1, a1) (A2, a2) (A3, a3) (A4, a4) (A5, a5) (A6, a6) (A7, a7) (A8, a8) (A9, a9) (A10, a10) 466 ) 467