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