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
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef _TR1_UTILITY
00035 #define _TR1_UTILITY 1
00036
00037 #include "../utility"
00038
00039 namespace std
00040 {
00041 _GLIBCXX_BEGIN_NAMESPACE(tr1)
00042
00043 template<class _Tp> class tuple_size;
00044 template<int _Int, class _Tp> class tuple_element;
00045
00046
00047 template<class _Tp1, class _Tp2>
00048 struct tuple_size<std::pair<_Tp1, _Tp2> >
00049 { static const int value = 2; };
00050
00051 template<class _Tp1, class _Tp2>
00052 const int tuple_size<std::pair<_Tp1, _Tp2> >::value;
00053
00054 template<class _Tp1, class _Tp2>
00055 struct tuple_element<0, std::pair<_Tp1, _Tp2> >
00056 { typedef _Tp1 type; };
00057
00058 template<class _Tp1, class _Tp2>
00059 struct tuple_element<1, std::pair<_Tp1, _Tp2> >
00060 { typedef _Tp2 type; };
00061
00062
00063 template<int _Int> struct __pair_get;
00064
00065 template<>
00066 struct __pair_get<0>
00067 {
00068 template<typename _Tp1, typename _Tp2>
00069 static _Tp1& __get(std::pair<_Tp1, _Tp2>& __pair)
00070 { return __pair.first; }
00071
00072 template<typename _Tp1, typename _Tp2>
00073 static const _Tp1& __const_get(const std::pair<_Tp1, _Tp2>& __pair)
00074 { return __pair.first; }
00075 };
00076
00077 template<>
00078 struct __pair_get<1>
00079 {
00080 template<typename _Tp1, typename _Tp2>
00081 static _Tp2& __get(std::pair<_Tp1, _Tp2>& __pair)
00082 { return __pair.second; }
00083
00084 template<typename _Tp1, typename _Tp2>
00085 static const _Tp2& __const_get(const std::pair<_Tp1, _Tp2>& __pair)
00086 { return __pair.second; }
00087 };
00088
00089 template<int _Int, class _Tp1, class _Tp2>
00090 inline typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type&
00091 get(std::pair<_Tp1, _Tp2>& __in)
00092 { return __pair_get<_Int>::__get(__in); }
00093
00094 template<int _Int, class _Tp1, class _Tp2>
00095 inline const typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type&
00096 get(const std::pair<_Tp1, _Tp2>& __in)
00097 { return __pair_get<_Int>::__const_get(__in); }
00098
00099 _GLIBCXX_END_NAMESPACE
00100 }
00101
00102 #endif