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