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
00035
00036
00037
00038 template<_GLIBCXX_TEMPLATE_PARAMS>
00039 struct tuple_size<tuple<_GLIBCXX_TEMPLATE_ARGS> >
00040 { static const int value = _GLIBCXX_NUM_ARGS; };
00041
00042 template<_GLIBCXX_TEMPLATE_PARAMS>
00043 #ifdef _GLIBCXX_LAST_INCLUDE
00044 class tuple
00045 #else
00046 class tuple<_GLIBCXX_TEMPLATE_ARGS>
00047 #endif
00048 {
00049 _GLIBCXX_BIND_MEMBERS
00050
00051 public:
00052 tuple()
00053 { }
00054
00055 #if _GLIBCXX_NUM_ARGS == 2
00056 template<class _U1, class _U2>
00057 tuple(const std::pair<_U1, _U2>& __u):
00058 _M_arg1(__u.first), _M_arg2(__u.second)
00059 { }
00060
00061 #endif
00062
00063 #if _GLIBCXX_NUM_ARGS > 0
00064 explicit tuple(_GLIBCXX_TUPLE_ADD_CREF) :
00065 _GLIBCXX_BIND_MEMBERS_INIT
00066 { }
00067
00068 template<_GLIBCXX_TEMPLATE_PARAMS_U>
00069 tuple(const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __in) :
00070 _GLIBCXX_TUPLE_COPY_INIT
00071 { }
00072
00073
00074 template<_GLIBCXX_TEMPLATE_PARAMS_U>
00075 tuple&
00076 operator=(const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __in)
00077 {
00078 _GLIBCXX_TUPLE_ASSIGN
00079 return *this;
00080 }
00081
00082 tuple(const tuple& __in) :
00083 _GLIBCXX_TUPLE_COPY_INIT
00084 { }
00085
00086 #else
00087
00088 tuple(const tuple& __in)
00089 { }
00090
00091 #endif
00092
00093 tuple&
00094 operator=(const tuple& __in)
00095 {
00096 _GLIBCXX_TUPLE_ASSIGN
00097 return *this;
00098 }
00099
00100 template<int __i, typename __Type>
00101 friend class __get_helper;
00102
00103 template<typename, typename, typename, typename, typename,
00104 typename, typename, typename, typename, typename>
00105 friend class tuple;
00106 };
00107
00108 #ifndef _GLIBCXX_LAST_INCLUDE
00109
00110 template<typename _Tp>
00111 struct __get_helper<_GLIBCXX_NUM_ARGS, _Tp>
00112 {
00113 static typename __add_ref<typename tuple_element<_GLIBCXX_NUM_ARGS,
00114 _Tp>::type>::type
00115 get_value(_Tp& __in)
00116 { return __in._GLIBCXX_CAT(_M_arg,_GLIBCXX_NUM_ARGS_PLUS_1); }
00117
00118 static typename __add_c_ref<typename tuple_element<_GLIBCXX_NUM_ARGS,
00119 _Tp>::type>::type
00120 get_value(const _Tp& __in)
00121 { return __in._GLIBCXX_CAT(_M_arg,_GLIBCXX_NUM_ARGS_PLUS_1); }
00122 };
00123
00124
00125 template<typename _T1, typename _T2, typename _T3, typename _T4,
00126 typename _T5, typename _T6, typename _T7, typename _T8,
00127 typename _T9, typename _T10>
00128 struct tuple_element<_GLIBCXX_NUM_ARGS, tuple<_T1, _T2, _T3, _T4,
00129 _T5, _T6, _T7, _T8, _T9,
00130 _T10> >
00131 { typedef _GLIBCXX_T_NUM_ARGS_PLUS_1 type; };
00132
00133 #endif
00134 #if _GLIBCXX_NUM_ARGS == 0
00135
00136 tuple<>
00137 inline make_tuple()
00138 { return tuple<>(); }
00139
00140 inline tuple<>
00141 tie()
00142 { return tuple<>(); }
00143 #else
00144
00145 template<_GLIBCXX_TEMPLATE_PARAMS>
00146 typename __stripped_tuple_type<_GLIBCXX_TEMPLATE_ARGS>::__type
00147 make_tuple(_GLIBCXX_PARAMS)
00148 {
00149 return typename __stripped_tuple_type<_GLIBCXX_TEMPLATE_ARGS>::
00150 __type(_GLIBCXX_ARGS);
00151 }
00152
00153 template<_GLIBCXX_TEMPLATE_PARAMS>
00154 tuple<_GLIBCXX_REF_TEMPLATE_ARGS>
00155 tie(_GLIBCXX_REF_PARAMS)
00156 { return make_tuple(_GLIBCXX_REF_WRAP_PARAMS); }
00157 #endif
00158