00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00031 #ifndef __STLP_TRIPLE_H
00032 #define __STLP_TRIPLE_H
00033
00034 namespace std {
00035
00037
00041 template <class _T1, class _T2, class _T3>
00042 struct triple {
00044 typedef _T1 first_type;
00045
00046 typedef _T2 second_type;
00047
00048 typedef _T3 third_type;
00049
00051 _T1 first;
00052
00053 _T2 second;
00054
00055 _T3 third;
00056 #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
00057
00062 triple() : first(), second(), third() {}
00063 #else
00064 triple() : first(_T1()), second(_T2()), third(_T3()) {}
00065 #endif
00066
00069 triple(const _T1& __a, const _T2& __b, const _T3& __c) : first(__a),
00070 second(__b), third(__c) {}
00071
00075 template <class _U1, class _U2, class _U3>
00076 triple(const triple<_U1, _U2, _U3>& __t) : first(__t.first),
00077 second(__t.second),
00078 third(__t.third) {}
00079 };
00080
00082 template <class _T1, class _T2, class _T3>
00083 inline bool operator==(const triple<_T1, _T2, _T3>& __x,
00084 const triple<_T1, _T2, _T3>& __y)
00085 {
00086 return __x.first == __y.first && __x.second == __y.second &&
00087 __x.third == __y.third;
00088 }
00089
00091 template <class _T1, class _T2, class _T3>
00092 inline bool operator<(const triple<_T1, _T2, _T3>& __x,
00093 const triple<_T1, _T2, _T3>& __y)
00094 {
00095 return __x.first < __y.first ||
00096 (!(__y.first < __x.first) && __x.second < __y.second) ||
00097 (!(__y.first < __x.first) && !(__y.second < __x.second) &&
00098 __x.third < __y.third);
00099 }
00100
00102 template <class _T1, class _T2, class _T3>
00103 inline bool operator!=(const triple<_T1, _T2, _T3>& __x,
00104 const triple<_T1, _T2, _T3>& __y) {
00105 return !(__x == __y);
00106 }
00107
00109 template <class _T1, class _T2, class _T3>
00110 inline bool operator>(const triple<_T1, _T2, _T3>& __x,
00111 const triple<_T1, _T2, _T3>& __y) {
00112 return __y < __x;
00113 }
00114
00116 template <class _T1, class _T2, class _T3>
00117 inline bool operator<=(const triple<_T1, _T2, _T3>& __x,
00118 const triple<_T1, _T2, _T3>& __y) {
00119 return !(__y < __x);
00120 }
00121
00123 template <class _T1, class _T2, class _T3>
00124 inline bool operator>=(const triple<_T1, _T2, _T3>& __x,
00125 const triple<_T1, _T2, _T3>& __y) {
00126 return !(__x < __y);
00127 }
00128
00136 template <class _T1, class _T2, class _T3>
00137 #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
00138
00139 inline triple<_T1, _T2, _T3> make_triple(_T1 __x, _T2 __y, _T3 __z)
00140 #else
00141 inline triple<_T1, _T2, _T3> make_triple(const _T1& __x, const _T2& __y,
00142 const _T3& __z)
00143 #endif
00144 {
00145 return triple<_T1, _T2, _T3>(__x, __y, __z);
00146 }
00147
00148 }
00149
00150 #endif
00151
00152
00153
00154