00001
00002
00003 #ifndef AITOOLS_VALUE_QUADRUPLE_HPP
00004 #define AITOOLS_VALUE_QUADRUPLE_HPP
00005
00006 namespace aitools {
00007 namespace value {
00008
00009 template <typename T1, typename T2, typename T3, typename T4>
00010 class quadruple {
00011
00012 public:
00013
00014 typedef T1 e1_type;
00015 typedef T2 e2_type;
00016 typedef T3 e3_type;
00017 typedef T4 e4_type;
00018
00019 public:
00020
00021 quadruple()
00022 : e1_(),
00023 e2_(),
00024 e3_(),
00025 e4_()
00026 {}
00027
00028 quadruple(const e1_type& e1, const e2_type& e2,
00029 const e3_type& e3, const e4_type& e4)
00030 : e1_(e1),
00031 e2_(e2),
00032 e3_(e3),
00033 e4_(e4)
00034 {}
00035
00036 quadruple(const quadruple& rhs)
00037 : e1_(rhs.e1_),
00038 e2_(rhs.e2_),
00039 e3_(rhs.e3_),
00040 e4_(rhs.e4_)
00041 {}
00042
00043 ~quadruple() {}
00044
00045 e1_type&
00046 e1()
00047 {
00048 return e1_;
00049 }
00050
00051 e2_type&
00052 e2()
00053 {
00054 return e2_;
00055 }
00056
00057 e3_type&
00058 e3()
00059 {
00060 return e3_;
00061 }
00062
00063 e4_type&
00064 e4()
00065 {
00066 return e4_;
00067 }
00068
00069 const e1_type&
00070 e1() const
00071 {
00072 return e1_;
00073 }
00074
00075 const e2_type&
00076 e2() const
00077 {
00078 return e2_;
00079 }
00080
00081 const e3_type&
00082 e3() const
00083 {
00084 return e3_;
00085 }
00086
00087 const e4_type&
00088 e4() const
00089 {
00090 return e4_;
00091 }
00092
00093 void
00094 set_e1(const e1_type& e1)
00095 {
00096 e1_ = e1;
00097 }
00098
00099 void
00100 set_e2(const e2_type& e2)
00101 {
00102 e2_ = e2;
00103 }
00104
00105 void
00106 set_e3(const e3_type& e3)
00107 {
00108 e3_ = e3;
00109 }
00110
00111 void
00112 set_e4(const e4_type& e4)
00113 {
00114 e4_ = e4;
00115 }
00116
00117 void
00118 set(const e1_type& e1, const e2_type& e2,
00119 const e3_type& e3, const e4_type& e4)
00120 {
00121 e1_ = e1;
00122 e2_ = e2;
00123 e3_ = e3;
00124 e4_ = e4;
00125 }
00126
00127 private:
00128
00129 e1_type e1_;
00130 e2_type e2_;
00131 e3_type e3_;
00132 e4_type e4_;
00133
00134 };
00135
00136 template <typename T1, typename T2, typename T3, typename T4>
00137 inline bool
00138 operator==(const quadruple<T1, T2, T3, T4>& lhs,
00139 const quadruple<T1, T2, T3, T4>& rhs)
00140 {
00141 return
00142 lhs.e1() == rhs.e1() &&
00143 lhs.e2() == rhs.e2() &&
00144 lhs.e3() == rhs.e3() &&
00145 lhs.e4() == rhs.e4();
00146 }
00147
00148 template <typename T1, typename T2, typename T3, typename T4>
00149 inline bool
00150 operator!=(const quadruple<T1, T2, T3, T4>& lhs,
00151 const quadruple<T1, T2, T3, T4>& rhs)
00152 {
00153 return !(lhs == rhs);
00154 }
00155
00156 template <typename T1, typename T2, typename T3, typename T4>
00157 inline bool
00158 operator<(const quadruple<T1, T2, T3, T4>& lhs,
00159 const quadruple<T1, T2, T3, T4>& rhs)
00160 {
00161 return lhs.e1() < rhs.e1();
00162 }
00163
00164 template <typename T1, typename T2, typename T3, typename T4>
00165 inline bool
00166 operator>(const quadruple<T1, T2, T3, T4>& lhs,
00167 const quadruple<T1, T2, T3, T4>& rhs)
00168 {
00169 return lhs.e1() > rhs.e1();
00170 }
00171
00172 }
00173
00174 using value::quadruple;
00175
00176 }
00177
00178 #endif // AITOOLS_VALUE_QUADRUPLE_HPP