]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/include/tr1/tuple_iterate.h
mt_allocator.h (__mt_alloc::__mt_alloc): Remove name of unused parameter.
[thirdparty/gcc.git] / libstdc++-v3 / include / tr1 / tuple_iterate.h
CommitLineData
59cffcf6
DG
1// class template tuple -*- C++ -*-
2
3// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library. This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 2, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING. If not, write to the Free
83f51799 18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
59cffcf6
DG
19// USA.
20
21// As a special exception, you may use this file as part of a free software
22// library without restriction. Specifically, if other files instantiate
23// templates or use macros or inline functions from this file, or you compile
24// this file and link it with other files to produce an executable, this
25// file does not by itself cause the resulting executable to be covered by
26// the GNU General Public License. This exception does not however
27// invalidate any other reasons why the executable file might be covered by
28// the GNU General Public License.
29
30/** @file
31 * This is an internal header file, included by other library headers.
32 * You should not attempt to use it directly.
33 */
34
35// Chris Jefferson <chris@bubblescope.net>
36
37/// @brief class tuple_size
38template<_GLIBCXX_TEMPLATE_PARAMS>
39 struct tuple_size<tuple<_GLIBCXX_TEMPLATE_ARGS> >
40 { static const int value = _GLIBCXX_NUM_ARGS; };
41
42template<_GLIBCXX_TEMPLATE_PARAMS>
43#ifdef _GLIBCXX_LAST_INCLUDE
44 class tuple
45#else
46 class tuple<_GLIBCXX_TEMPLATE_ARGS>
47#endif
48 {
49 _GLIBCXX_BIND_MEMBERS
50
51 public:
4ee39989 52 tuple()
59cffcf6
DG
53 { }
54
55#if _GLIBCXX_NUM_ARGS == 2
2bd8e92c
CJ
56 template<typename _U1, typename _U2>
57 tuple(const std::pair<_U1, _U2>& __u) :
58 _M_arg1(__u.first), _M_arg2(__u.second)
59 { }
59cffcf6 60
2bd8e92c
CJ
61 template<typename _U1, typename _U2>
62 tuple&
63 operator=(const std::pair<_U1, _U2>& __u)
64 {
65 _M_arg1 = __u.first;
66 _M_arg2 = __u.second;
cc6312c1 67 return *this;
2bd8e92c 68 }
59cffcf6
DG
69#endif
70
71#if _GLIBCXX_NUM_ARGS > 0
72 explicit tuple(_GLIBCXX_TUPLE_ADD_CREF) :
73 _GLIBCXX_BIND_MEMBERS_INIT
74 { }
75
76 template<_GLIBCXX_TEMPLATE_PARAMS_U>
77 tuple(const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __in) :
78 _GLIBCXX_TUPLE_COPY_INIT
79 { }
80
81
82 template<_GLIBCXX_TEMPLATE_PARAMS_U>
83 tuple&
84 operator=(const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __in)
85 {
4ee39989
DG
86 _GLIBCXX_TUPLE_ASSIGN
87 return *this;
59cffcf6
DG
88 }
89
90 tuple(const tuple& __in) :
91 _GLIBCXX_TUPLE_COPY_INIT
92 { }
93
94#else
95
8b5bc374 96 tuple(const tuple&)
59cffcf6
DG
97 { }
98
99#endif
100
101 tuple&
8b5bc374 102 operator=(const tuple& __in __attribute__((__unused__)) )
59cffcf6
DG
103 {
104 _GLIBCXX_TUPLE_ASSIGN
4ee39989 105 return *this;
59cffcf6
DG
106 }
107
108 template<int __i, typename __Type>
109 friend class __get_helper;
110
111 template<typename, typename, typename, typename, typename,
112 typename, typename, typename, typename, typename>
113 friend class tuple;
114 };
115
116#ifndef _GLIBCXX_LAST_INCLUDE
117
118template<typename _Tp>
119 struct __get_helper<_GLIBCXX_NUM_ARGS, _Tp>
120 {
4ee39989
DG
121 static typename __add_ref<typename tuple_element<_GLIBCXX_NUM_ARGS,
122 _Tp>::type>::type
59cffcf6
DG
123 get_value(_Tp& __in)
124 { return __in._GLIBCXX_CAT(_M_arg,_GLIBCXX_NUM_ARGS_PLUS_1); }
125
126 static typename __add_c_ref<typename tuple_element<_GLIBCXX_NUM_ARGS,
4ee39989 127 _Tp>::type>::type
59cffcf6
DG
128 get_value(const _Tp& __in)
129 { return __in._GLIBCXX_CAT(_M_arg,_GLIBCXX_NUM_ARGS_PLUS_1); }
130 };
131
4ee39989
DG
132/// @brief class tuple_element
133template<typename _T1, typename _T2, typename _T3, typename _T4,
134 typename _T5, typename _T6, typename _T7, typename _T8,
59cffcf6 135 typename _T9, typename _T10>
4ee39989
DG
136 struct tuple_element<_GLIBCXX_NUM_ARGS, tuple<_T1, _T2, _T3, _T4,
137 _T5, _T6, _T7, _T8, _T9,
59cffcf6 138 _T10> >
4ee39989 139 { typedef _GLIBCXX_T_NUM_ARGS_PLUS_1 type; };
59cffcf6
DG
140
141#endif
142#if _GLIBCXX_NUM_ARGS == 0
143
144tuple<>
145inline make_tuple()
146{ return tuple<>(); }
147
2bd8e92c
CJ
148tuple<>
149inline tie()
59cffcf6
DG
150{ return tuple<>(); }
151#else
152
153template<_GLIBCXX_TEMPLATE_PARAMS>
154 typename __stripped_tuple_type<_GLIBCXX_TEMPLATE_ARGS>::__type
2bd8e92c 155 inline make_tuple(_GLIBCXX_PARAMS)
4ee39989 156 {
59cffcf6
DG
157 return typename __stripped_tuple_type<_GLIBCXX_TEMPLATE_ARGS>::
158 __type(_GLIBCXX_ARGS);
159 }
160
161template<_GLIBCXX_TEMPLATE_PARAMS>
162 tuple<_GLIBCXX_REF_TEMPLATE_ARGS>
2bd8e92c 163 inline tie(_GLIBCXX_REF_PARAMS)
59cffcf6
DG
164 { return make_tuple(_GLIBCXX_REF_WRAP_PARAMS); }
165#endif
166