sprint 1-alpha
sprint/container/tuple.h
Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines