00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __PANALIX_TUPLE_HPP
00012 #define __PANALIX_TUPLE_HPP
00013
00014 #include "src/common/println.hpp"
00015
00016
00017 namespace Collection {
00018 template <typename A, typename B>
00019 class Tuple2 {
00020 public:
00021 A _1;
00022 B _2;
00023
00024 Tuple2() : _1((A)(0)),_2((B)(0)) { };
00025 Tuple2(A a, B b) : _1(a), _2(b) { }
00026
00027 };
00028
00029 template<typename A, typename B, typename C>
00030 class Tuple3 {
00031 public:
00032 A _1;
00033 B _2;
00034 C _3;
00035
00036 Tuple3() : _1((A)(0)), _2((B)(0)), _3((C)(0)) { };
00037 Tuple3(A a, B b, C c) : _1(a), _2(b), _3(c) { };
00038 };
00039
00040 template<typename A, typename B, typename C, typename D>
00041 class Tuple4 {
00042 public:
00043 A _1;
00044 B _2;
00045 C _3;
00046 D _4;
00047
00048 Tuple4() : _1((A)(0)), _2((B)(0)), _3((C)(0)), _4((D)(0)) { };
00049 Tuple4(A a, B b, C c, D d) : _1(a), _2(b), _3(c), _4(d) { };
00050 };
00051
00052 template<typename A, typename B, typename C, typename D, typename E>
00053 class Tuple5 {
00054 public:
00055 A _1;
00056 B _2;
00057 C _3;
00058 D _4;
00059 E _5;
00060
00061 Tuple5() : _1((A)(0)), _2((B)(0)), _3((C)(0)), _4((D)(0)), _5((E)(0)) { };
00062 Tuple5(A a, B b, C c, D d, E e) : _1(a), _2(b), _3(c), _4(d), _5(e) { };
00063 };
00064
00065 template<typename A, typename B, typename C, int (*cmp)(A,A)>
00066 int tuple2_cmp_by_first(struct Tuple3<A,B,C> a, struct Tuple3<A,B,C> b) {
00067 return cmp(a._1,b._1);
00068 }
00069
00070 template<typename A, typename B, int (*cmp)(A,A)>
00071 int tuple2_cmp_by_first(struct Tuple2<A,B> a, struct Tuple2<A,B> b) {
00072 return cmp(a._1,b._1);
00073 }
00074
00075 }
00076
00081 template <typename A, typename B, typename C, typename D, typename E>
00082 void print(struct Collection::Tuple5<A,B,C,D,E> t) {
00083 prin("(", t._1, ", ", t._2, ", ", t._3, ", ", t._4, ", ",t._5,")");
00084 }
00085
00086 template <typename A, typename B, typename C, typename D>
00087 void print(struct Collection::Tuple4<A,B,C,D> t) {
00088 prin("(", t._1, ", ", t._2, ", ", t._3, ", ", t._4, ")");
00089 }
00090
00091 template <typename A, typename B, typename C>
00092 void print(struct Collection::Tuple3<A,B,C> t) {
00093 prin("(", t._1, ", ", t._2, ", ", t._3, ")");
00094 }
00095
00096 template <typename A, typename B>
00097 void print(struct Collection::Tuple2<A,B> t) {
00098 prin("(", t._1, ", ", t._2, ")");
00099 }
00100
00101
00105 #endif
00106