sprint 1-alpha
|
00001 /****************************************************************************** 00002 * sprint::tuple 00003 * 00004 * Copyright (C) 2005-2011 Paolo Medici <www.pmx.it> 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00019 * 00020 *******************************************************************************/ 00021 00022 #ifndef _SPRINT_tuple_H 00023 #define _SPRINT_tuple_H 00024 00025 // $generated on Nov 3 2011 13:17:22$ 00026 00031 namespace sprint { 00032 00034 template<class P1> 00035 struct tuple1 { 00036 P1 p1; 00037 00038 tuple1(P1 __p1=P1() 00039 ) : p1(__p1) { } 00040 }; 00041 00043 template<class P1, class P2> 00044 struct tuple2 { 00045 P1 p1; 00046 P2 p2; 00047 00048 tuple2(P1 __p1=P1(), 00049 P2 __p2=P2() 00050 ) : p1(__p1), 00051 p2(__p2) { } 00052 }; 00053 00055 template<class P1, class P2, class P3> 00056 struct tuple3 { 00057 P1 p1; 00058 P2 p2; 00059 P3 p3; 00060 00061 tuple3(P1 __p1=P1(), 00062 P2 __p2=P2(), 00063 P3 __p3=P3() 00064 ) : p1(__p1), 00065 p2(__p2), 00066 p3(__p3) { } 00067 }; 00068 00070 template<class P1, class P2, class P3, class P4> 00071 struct tuple4 { 00072 P1 p1; 00073 P2 p2; 00074 P3 p3; 00075 P4 p4; 00076 00077 tuple4(P1 __p1=P1(), 00078 P2 __p2=P2(), 00079 P3 __p3=P3(), 00080 P4 __p4=P4() 00081 ) : p1(__p1), 00082 p2(__p2), 00083 p3(__p3), 00084 p4(__p4) { } 00085 }; 00086 00088 template<class P1, class P2, class P3, class P4, class P5> 00089 struct tuple5 { 00090 P1 p1; 00091 P2 p2; 00092 P3 p3; 00093 P4 p4; 00094 P5 p5; 00095 00096 tuple5(P1 __p1=P1(), 00097 P2 __p2=P2(), 00098 P3 __p3=P3(), 00099 P4 __p4=P4(), 00100 P5 __p5=P5() 00101 ) : p1(__p1), 00102 p2(__p2), 00103 p3(__p3), 00104 p4(__p4), 00105 p5(__p5) { } 00106 }; 00107 00109 template<class P1, class P2, class P3, class P4, class P5, class P6> 00110 struct tuple6 { 00111 P1 p1; 00112 P2 p2; 00113 P3 p3; 00114 P4 p4; 00115 P5 p5; 00116 P6 p6; 00117 00118 tuple6(P1 __p1=P1(), 00119 P2 __p2=P2(), 00120 P3 __p3=P3(), 00121 P4 __p4=P4(), 00122 P5 __p5=P5(), 00123 P6 __p6=P6() 00124 ) : p1(__p1), 00125 p2(__p2), 00126 p3(__p3), 00127 p4(__p4), 00128 p5(__p5), 00129 p6(__p6) { } 00130 }; 00131 00133 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7> 00134 struct tuple7 { 00135 P1 p1; 00136 P2 p2; 00137 P3 p3; 00138 P4 p4; 00139 P5 p5; 00140 P6 p6; 00141 P7 p7; 00142 00143 tuple7(P1 __p1=P1(), 00144 P2 __p2=P2(), 00145 P3 __p3=P3(), 00146 P4 __p4=P4(), 00147 P5 __p5=P5(), 00148 P6 __p6=P6(), 00149 P7 __p7=P7() 00150 ) : p1(__p1), 00151 p2(__p2), 00152 p3(__p3), 00153 p4(__p4), 00154 p5(__p5), 00155 p6(__p6), 00156 p7(__p7) { } 00157 }; 00158 00160 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> 00161 struct tuple8 { 00162 P1 p1; 00163 P2 p2; 00164 P3 p3; 00165 P4 p4; 00166 P5 p5; 00167 P6 p6; 00168 P7 p7; 00169 P8 p8; 00170 00171 tuple8(P1 __p1=P1(), 00172 P2 __p2=P2(), 00173 P3 __p3=P3(), 00174 P4 __p4=P4(), 00175 P5 __p5=P5(), 00176 P6 __p6=P6(), 00177 P7 __p7=P7(), 00178 P8 __p8=P8() 00179 ) : p1(__p1), 00180 p2(__p2), 00181 p3(__p3), 00182 p4(__p4), 00183 p5(__p5), 00184 p6(__p6), 00185 p7(__p7), 00186 p8(__p8) { } 00187 }; 00188 00190 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> 00191 struct tuple9 { 00192 P1 p1; 00193 P2 p2; 00194 P3 p3; 00195 P4 p4; 00196 P5 p5; 00197 P6 p6; 00198 P7 p7; 00199 P8 p8; 00200 P9 p9; 00201 00202 tuple9(P1 __p1=P1(), 00203 P2 __p2=P2(), 00204 P3 __p3=P3(), 00205 P4 __p4=P4(), 00206 P5 __p5=P5(), 00207 P6 __p6=P6(), 00208 P7 __p7=P7(), 00209 P8 __p8=P8(), 00210 P9 __p9=P9() 00211 ) : p1(__p1), 00212 p2(__p2), 00213 p3(__p3), 00214 p4(__p4), 00215 p5(__p5), 00216 p6(__p6), 00217 p7(__p7), 00218 p8(__p8), 00219 p9(__p9) { } 00220 }; 00221 00223 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> 00224 struct tuple10 { 00225 P1 p1; 00226 P2 p2; 00227 P3 p3; 00228 P4 p4; 00229 P5 p5; 00230 P6 p6; 00231 P7 p7; 00232 P8 p8; 00233 P9 p9; 00234 P10 p10; 00235 00236 tuple10(P1 __p1=P1(), 00237 P2 __p2=P2(), 00238 P3 __p3=P3(), 00239 P4 __p4=P4(), 00240 P5 __p5=P5(), 00241 P6 __p6=P6(), 00242 P7 __p7=P7(), 00243 P8 __p8=P8(), 00244 P9 __p9=P9(), 00245 P10 __p10=P10() 00246 ) : p1(__p1), 00247 p2(__p2), 00248 p3(__p3), 00249 p4(__p4), 00250 p5(__p5), 00251 p6(__p6), 00252 p7(__p7), 00253 p8(__p8), 00254 p9(__p9), 00255 p10(__p10) { } 00256 }; 00257 00259 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11> 00260 struct tuple11 { 00261 P1 p1; 00262 P2 p2; 00263 P3 p3; 00264 P4 p4; 00265 P5 p5; 00266 P6 p6; 00267 P7 p7; 00268 P8 p8; 00269 P9 p9; 00270 P10 p10; 00271 P11 p11; 00272 00273 tuple11(P1 __p1=P1(), 00274 P2 __p2=P2(), 00275 P3 __p3=P3(), 00276 P4 __p4=P4(), 00277 P5 __p5=P5(), 00278 P6 __p6=P6(), 00279 P7 __p7=P7(), 00280 P8 __p8=P8(), 00281 P9 __p9=P9(), 00282 P10 __p10=P10(), 00283 P11 __p11=P11() 00284 ) : p1(__p1), 00285 p2(__p2), 00286 p3(__p3), 00287 p4(__p4), 00288 p5(__p5), 00289 p6(__p6), 00290 p7(__p7), 00291 p8(__p8), 00292 p9(__p9), 00293 p10(__p10), 00294 p11(__p11) { } 00295 }; 00296 00298 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11, class P12> 00299 struct tuple12 { 00300 P1 p1; 00301 P2 p2; 00302 P3 p3; 00303 P4 p4; 00304 P5 p5; 00305 P6 p6; 00306 P7 p7; 00307 P8 p8; 00308 P9 p9; 00309 P10 p10; 00310 P11 p11; 00311 P12 p12; 00312 00313 tuple12(P1 __p1=P1(), 00314 P2 __p2=P2(), 00315 P3 __p3=P3(), 00316 P4 __p4=P4(), 00317 P5 __p5=P5(), 00318 P6 __p6=P6(), 00319 P7 __p7=P7(), 00320 P8 __p8=P8(), 00321 P9 __p9=P9(), 00322 P10 __p10=P10(), 00323 P11 __p11=P11(), 00324 P12 __p12=P12() 00325 ) : p1(__p1), 00326 p2(__p2), 00327 p3(__p3), 00328 p4(__p4), 00329 p5(__p5), 00330 p6(__p6), 00331 p7(__p7), 00332 p8(__p8), 00333 p9(__p9), 00334 p10(__p10), 00335 p11(__p11), 00336 p12(__p12) { } 00337 }; 00338 00339 00340 /************************* make_tuple **************************/ 00341 00343 template<class P1> 00344 inline tuple1<P1> make_tuple(const P1 & p1) 00345 { 00346 return tuple1<P1> (p1); 00347 } 00348 00350 template<class P1, class P2> 00351 inline tuple2<P1, P2> make_tuple(const P1 & p1, 00352 const P2 & p2) 00353 { 00354 return tuple2<P1, P2> (p1, p2); 00355 } 00356 00358 template<class P1, class P2, class P3> 00359 inline tuple3<P1, P2, P3> make_tuple(const P1 & p1, 00360 const P2 & p2, 00361 const P3 & p3) 00362 { 00363 return tuple3<P1, P2, P3> (p1, p2, p3); 00364 } 00365 00367 template<class P1, class P2, class P3, class P4> 00368 inline tuple4<P1, P2, P3, P4> make_tuple(const P1 & p1, 00369 const P2 & p2, 00370 const P3 & p3, 00371 const P4 & p4) 00372 { 00373 return tuple4<P1, P2, P3, P4> (p1, p2, p3, p4); 00374 } 00375 00377 template<class P1, class P2, class P3, class P4, class P5> 00378 inline tuple5<P1, P2, P3, P4, P5> make_tuple(const P1 & p1, 00379 const P2 & p2, 00380 const P3 & p3, 00381 const P4 & p4, 00382 const P5 & p5) 00383 { 00384 return tuple5<P1, P2, P3, P4, P5> (p1, p2, p3, p4, p5); 00385 } 00386 00388 template<class P1, class P2, class P3, class P4, class P5, class P6> 00389 inline tuple6<P1, P2, P3, P4, P5, P6> make_tuple(const P1 & p1, 00390 const P2 & p2, 00391 const P3 & p3, 00392 const P4 & p4, 00393 const P5 & p5, 00394 const P6 & p6) 00395 { 00396 return tuple6<P1, P2, P3, P4, P5, P6> (p1, p2, p3, p4, p5, p6); 00397 } 00398 00400 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7> 00401 inline tuple7<P1, P2, P3, P4, P5, P6, P7> make_tuple(const P1 & p1, 00402 const P2 & p2, 00403 const P3 & p3, 00404 const P4 & p4, 00405 const P5 & p5, 00406 const P6 & p6, 00407 const P7 & p7) 00408 { 00409 return tuple7<P1, P2, P3, P4, P5, P6, P7> (p1, p2, p3, p4, p5, p6, p7); 00410 } 00411 00413 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> 00414 inline tuple8<P1, P2, P3, P4, P5, P6, P7, P8> make_tuple(const P1 & p1, 00415 const P2 & p2, 00416 const P3 & p3, 00417 const P4 & p4, 00418 const P5 & p5, 00419 const P6 & p6, 00420 const P7 & p7, 00421 const P8 & p8) 00422 { 00423 return tuple8<P1, P2, P3, P4, P5, P6, P7, P8> (p1, p2, p3, p4, p5, p6, p7, p8); 00424 } 00425 00427 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> 00428 inline tuple9<P1, P2, P3, P4, P5, P6, P7, P8, P9> make_tuple(const P1 & p1, 00429 const P2 & p2, 00430 const P3 & p3, 00431 const P4 & p4, 00432 const P5 & p5, 00433 const P6 & p6, 00434 const P7 & p7, 00435 const P8 & p8, 00436 const P9 & p9) 00437 { 00438 return tuple9<P1, P2, P3, P4, P5, P6, P7, P8, P9> (p1, p2, p3, p4, p5, p6, p7, p8, p9); 00439 } 00440 00442 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> 00443 inline tuple10<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> make_tuple(const P1 & p1, 00444 const P2 & p2, 00445 const P3 & p3, 00446 const P4 & p4, 00447 const P5 & p5, 00448 const P6 & p6, 00449 const P7 & p7, 00450 const P8 & p8, 00451 const P9 & p9, 00452 const P10 & p10) 00453 { 00454 return tuple10<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); 00455 } 00456 00458 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11> 00459 inline tuple11<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> make_tuple(const P1 & p1, 00460 const P2 & p2, 00461 const P3 & p3, 00462 const P4 & p4, 00463 const P5 & p5, 00464 const P6 & p6, 00465 const P7 & p7, 00466 const P8 & p8, 00467 const P9 & p9, 00468 const P10 & p10, 00469 const P11 & p11) 00470 { 00471 return tuple11<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); 00472 } 00473 00475 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11, class P12> 00476 inline tuple12<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12> make_tuple(const P1 & p1, 00477 const P2 & p2, 00478 const P3 & p3, 00479 const P4 & p4, 00480 const P5 & p5, 00481 const P6 & p6, 00482 const P7 & p7, 00483 const P8 & p8, 00484 const P9 & p9, 00485 const P10 & p10, 00486 const P11 & p11, 00487 const P12 & p12) 00488 { 00489 return tuple12<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12> (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); 00490 } 00491 00492 00493 /************************* new_tuple **************************/ 00494 00496 template<class P1> 00497 inline tuple1<P1> *new_tuple(const P1 & p1) 00498 { 00499 return new tuple1<P1> (p1); 00500 } 00501 00503 template<class P1, class P2> 00504 inline tuple2<P1, P2> *new_tuple(const P1 & p1, 00505 const P2 & p2) 00506 { 00507 return new tuple2<P1, P2> (p1, p2); 00508 } 00509 00511 template<class P1, class P2, class P3> 00512 inline tuple3<P1, P2, P3> *new_tuple(const P1 & p1, 00513 const P2 & p2, 00514 const P3 & p3) 00515 { 00516 return new tuple3<P1, P2, P3> (p1, p2, p3); 00517 } 00518 00520 template<class P1, class P2, class P3, class P4> 00521 inline tuple4<P1, P2, P3, P4> *new_tuple(const P1 & p1, 00522 const P2 & p2, 00523 const P3 & p3, 00524 const P4 & p4) 00525 { 00526 return new tuple4<P1, P2, P3, P4> (p1, p2, p3, p4); 00527 } 00528 00530 template<class P1, class P2, class P3, class P4, class P5> 00531 inline tuple5<P1, P2, P3, P4, P5> *new_tuple(const P1 & p1, 00532 const P2 & p2, 00533 const P3 & p3, 00534 const P4 & p4, 00535 const P5 & p5) 00536 { 00537 return new tuple5<P1, P2, P3, P4, P5> (p1, p2, p3, p4, p5); 00538 } 00539 00541 template<class P1, class P2, class P3, class P4, class P5, class P6> 00542 inline tuple6<P1, P2, P3, P4, P5, P6> *new_tuple(const P1 & p1, 00543 const P2 & p2, 00544 const P3 & p3, 00545 const P4 & p4, 00546 const P5 & p5, 00547 const P6 & p6) 00548 { 00549 return new tuple6<P1, P2, P3, P4, P5, P6> (p1, p2, p3, p4, p5, p6); 00550 } 00551 00553 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7> 00554 inline tuple7<P1, P2, P3, P4, P5, P6, P7> *new_tuple(const P1 & p1, 00555 const P2 & p2, 00556 const P3 & p3, 00557 const P4 & p4, 00558 const P5 & p5, 00559 const P6 & p6, 00560 const P7 & p7) 00561 { 00562 return new tuple7<P1, P2, P3, P4, P5, P6, P7> (p1, p2, p3, p4, p5, p6, p7); 00563 } 00564 00566 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> 00567 inline tuple8<P1, P2, P3, P4, P5, P6, P7, P8> *new_tuple(const P1 & p1, 00568 const P2 & p2, 00569 const P3 & p3, 00570 const P4 & p4, 00571 const P5 & p5, 00572 const P6 & p6, 00573 const P7 & p7, 00574 const P8 & p8) 00575 { 00576 return new tuple8<P1, P2, P3, P4, P5, P6, P7, P8> (p1, p2, p3, p4, p5, p6, p7, p8); 00577 } 00578 00580 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> 00581 inline tuple9<P1, P2, P3, P4, P5, P6, P7, P8, P9> *new_tuple(const P1 & p1, 00582 const P2 & p2, 00583 const P3 & p3, 00584 const P4 & p4, 00585 const P5 & p5, 00586 const P6 & p6, 00587 const P7 & p7, 00588 const P8 & p8, 00589 const P9 & p9) 00590 { 00591 return new tuple9<P1, P2, P3, P4, P5, P6, P7, P8, P9> (p1, p2, p3, p4, p5, p6, p7, p8, p9); 00592 } 00593 00595 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> 00596 inline tuple10<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> *new_tuple(const P1 & p1, 00597 const P2 & p2, 00598 const P3 & p3, 00599 const P4 & p4, 00600 const P5 & p5, 00601 const P6 & p6, 00602 const P7 & p7, 00603 const P8 & p8, 00604 const P9 & p9, 00605 const P10 & p10) 00606 { 00607 return new tuple10<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); 00608 } 00609 00611 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11> 00612 inline tuple11<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> *new_tuple(const P1 & p1, 00613 const P2 & p2, 00614 const P3 & p3, 00615 const P4 & p4, 00616 const P5 & p5, 00617 const P6 & p6, 00618 const P7 & p7, 00619 const P8 & p8, 00620 const P9 & p9, 00621 const P10 & p10, 00622 const P11 & p11) 00623 { 00624 return new tuple11<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); 00625 } 00626 00628 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11, class P12> 00629 inline tuple12<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12> *new_tuple(const P1 & p1, 00630 const P2 & p2, 00631 const P3 & p3, 00632 const P4 & p4, 00633 const P5 & p5, 00634 const P6 & p6, 00635 const P7 & p7, 00636 const P8 & p8, 00637 const P9 & p9, 00638 const P10 & p10, 00639 const P11 & p11, 00640 const P12 & p12) 00641 { 00642 return new tuple12<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12> (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); 00643 } 00644 00645 00646 } //sprint 00647 00648 #endif 00649