annotate libstdc++-v3/testsuite/util/testsuite_container_traits.h @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // -*- C++ -*-
kono
parents:
diff changeset
2
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
3 // Copyright (C) 2009-2020 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
4 //
kono
parents:
diff changeset
5 // This file is part of the GNU ISO C++ Library. This library is free
kono
parents:
diff changeset
6 // software; you can redistribute it and/or modify it under the terms
kono
parents:
diff changeset
7 // of the GNU General Public License as published by the Free Software
kono
parents:
diff changeset
8 // Foundation; either version 3, or (at your option) any later
kono
parents:
diff changeset
9 // version.
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 // This library is distributed in the hope that it will be useful, but
kono
parents:
diff changeset
12 // WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
14 // General Public License for more details.
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 // You should have received a copy of the GNU General Public License along
kono
parents:
diff changeset
17 // with this library; see the file COPYING3. If not see
kono
parents:
diff changeset
18 // <http://www.gnu.org/licenses/>.
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 #ifndef _GLIBCXX_TESTSUITE_CONTAINER_TRAITS_H
kono
parents:
diff changeset
21 #define _GLIBCXX_TESTSUITE_CONTAINER_TRAITS_H
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 #include <bits/stdc++.h>
kono
parents:
diff changeset
24 #include <ext/vstring.h>
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 namespace __gnu_test
kono
parents:
diff changeset
27 {
kono
parents:
diff changeset
28 // Container traits.
kono
parents:
diff changeset
29 // Base class with default false values for all traits.
kono
parents:
diff changeset
30 struct traits_base
kono
parents:
diff changeset
31 {
kono
parents:
diff changeset
32 // Type, nested type, and typedef related traits.
kono
parents:
diff changeset
33 typedef std::false_type is_container;
kono
parents:
diff changeset
34 typedef std::false_type is_adaptor;
kono
parents:
diff changeset
35 typedef std::false_type is_reversible;
kono
parents:
diff changeset
36 typedef std::false_type is_allocator_aware;
kono
parents:
diff changeset
37 typedef std::false_type is_associative;
kono
parents:
diff changeset
38 typedef std::false_type is_unordered;
kono
parents:
diff changeset
39 typedef std::false_type is_mapped;
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 typedef std::false_type has_erase;
kono
parents:
diff changeset
42 typedef std::false_type has_erase_after;
kono
parents:
diff changeset
43 typedef std::false_type has_throwing_erase;
kono
parents:
diff changeset
44 typedef std::false_type has_insert;
kono
parents:
diff changeset
45 typedef std::false_type has_insert_after;
kono
parents:
diff changeset
46 typedef std::false_type has_emplace;
kono
parents:
diff changeset
47 typedef std::false_type has_push_pop;
kono
parents:
diff changeset
48 typedef std::false_type has_size_type_constructor;
kono
parents:
diff changeset
49 };
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 // Primary template does nothing. Specialize on each type under
kono
parents:
diff changeset
52 // test, derive off of traits_base and just add the true traits.
kono
parents:
diff changeset
53 template<typename _Tp>
kono
parents:
diff changeset
54 struct traits;
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 // Specialize for each container.
kono
parents:
diff changeset
57 template<typename _Tp, size_t _Np>
kono
parents:
diff changeset
58 struct traits<std::array<_Tp, _Np>> : public traits_base
kono
parents:
diff changeset
59 {
kono
parents:
diff changeset
60 typedef std::true_type is_container;
kono
parents:
diff changeset
61 typedef std::true_type is_reversible;
kono
parents:
diff changeset
62 };
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 template<typename _Tp1, typename _Tp2>
kono
parents:
diff changeset
65 struct traits<std::deque<_Tp1, _Tp2>> : public traits_base
kono
parents:
diff changeset
66 {
kono
parents:
diff changeset
67 typedef std::true_type is_container;
kono
parents:
diff changeset
68 typedef std::true_type is_reversible;
kono
parents:
diff changeset
69 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 typedef std::true_type has_erase;
kono
parents:
diff changeset
72 typedef std::true_type has_throwing_erase;
kono
parents:
diff changeset
73 typedef std::true_type has_insert;
kono
parents:
diff changeset
74 typedef std::true_type has_push_pop;
kono
parents:
diff changeset
75 typedef std::true_type has_size_type_constructor;
kono
parents:
diff changeset
76 typedef std::true_type has_emplace;
kono
parents:
diff changeset
77 };
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 template<typename _Tp1, typename _Tp2>
kono
parents:
diff changeset
80 struct traits<std::forward_list<_Tp1, _Tp2>> : public traits_base
kono
parents:
diff changeset
81 {
kono
parents:
diff changeset
82 typedef std::true_type is_container;
kono
parents:
diff changeset
83 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85 typedef std::true_type has_erase_after;
kono
parents:
diff changeset
86 typedef std::true_type has_insert_after;
kono
parents:
diff changeset
87 typedef std::true_type has_push_pop;
kono
parents:
diff changeset
88 typedef std::true_type has_size_type_constructor;
kono
parents:
diff changeset
89 typedef std::true_type has_emplace;
kono
parents:
diff changeset
90 };
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 template<typename _Tp1, typename _Tp2>
kono
parents:
diff changeset
93 struct traits<std::list<_Tp1, _Tp2>> : public traits_base
kono
parents:
diff changeset
94 {
kono
parents:
diff changeset
95 typedef std::true_type is_container;
kono
parents:
diff changeset
96 typedef std::true_type is_reversible;
kono
parents:
diff changeset
97 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
98
kono
parents:
diff changeset
99 typedef std::true_type has_erase;
kono
parents:
diff changeset
100 typedef std::true_type has_insert;
kono
parents:
diff changeset
101 typedef std::true_type has_push_pop;
kono
parents:
diff changeset
102 typedef std::true_type has_size_type_constructor;
kono
parents:
diff changeset
103 typedef std::true_type has_emplace;
kono
parents:
diff changeset
104 };
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 template<typename _Tp1, typename _Tp2>
kono
parents:
diff changeset
107 struct traits<std::vector<_Tp1, _Tp2>> : public traits_base
kono
parents:
diff changeset
108 {
kono
parents:
diff changeset
109 typedef std::true_type is_container;
kono
parents:
diff changeset
110 typedef std::true_type is_reversible;
kono
parents:
diff changeset
111 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
112
kono
parents:
diff changeset
113 typedef std::true_type has_erase;
kono
parents:
diff changeset
114 typedef std::true_type has_throwing_erase;
kono
parents:
diff changeset
115 typedef std::true_type has_insert;
kono
parents:
diff changeset
116 typedef std::true_type has_size_type_constructor;
kono
parents:
diff changeset
117 typedef std::true_type has_emplace;
kono
parents:
diff changeset
118 };
kono
parents:
diff changeset
119
kono
parents:
diff changeset
120 template<typename _Tp1, typename _Tp2, typename _Tp3>
kono
parents:
diff changeset
121 struct traits<std::basic_string<_Tp1, _Tp2, _Tp3>> : public traits_base
kono
parents:
diff changeset
122 {
kono
parents:
diff changeset
123 typedef std::true_type is_container;
kono
parents:
diff changeset
124 typedef std::true_type is_reversible;
kono
parents:
diff changeset
125 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
126
kono
parents:
diff changeset
127 typedef std::true_type has_erase;
kono
parents:
diff changeset
128 typedef std::true_type has_insert;
kono
parents:
diff changeset
129 };
kono
parents:
diff changeset
130
kono
parents:
diff changeset
131 template<typename _Tp1, typename _Tp2, typename _Tp3,
kono
parents:
diff changeset
132 template <typename, typename, typename> class _Tp4>
kono
parents:
diff changeset
133 struct traits<__gnu_cxx::__versa_string<_Tp1, _Tp2, _Tp3, _Tp4>>
kono
parents:
diff changeset
134 : public traits_base
kono
parents:
diff changeset
135 {
kono
parents:
diff changeset
136 typedef std::true_type is_container;
kono
parents:
diff changeset
137 typedef std::true_type is_reversible;
kono
parents:
diff changeset
138 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
139
kono
parents:
diff changeset
140 typedef std::true_type has_erase;
kono
parents:
diff changeset
141 typedef std::true_type has_insert;
kono
parents:
diff changeset
142 };
kono
parents:
diff changeset
143
kono
parents:
diff changeset
144 template<typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>
kono
parents:
diff changeset
145 struct traits<std::map<_Tp1, _Tp2, _Tp3, _Tp4>> : public traits_base
kono
parents:
diff changeset
146 {
kono
parents:
diff changeset
147 typedef std::true_type is_container;
kono
parents:
diff changeset
148 typedef std::true_type is_reversible;
kono
parents:
diff changeset
149 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
150 typedef std::true_type is_associative;
kono
parents:
diff changeset
151 typedef std::true_type is_mapped;
kono
parents:
diff changeset
152
kono
parents:
diff changeset
153 typedef std::true_type has_erase;
kono
parents:
diff changeset
154 typedef std::true_type has_insert;
kono
parents:
diff changeset
155 typedef std::true_type has_emplace;
kono
parents:
diff changeset
156 };
kono
parents:
diff changeset
157
kono
parents:
diff changeset
158 template<typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>
kono
parents:
diff changeset
159 struct traits<std::multimap<_Tp1, _Tp2, _Tp3, _Tp4>> : public traits_base
kono
parents:
diff changeset
160 {
kono
parents:
diff changeset
161 typedef std::true_type is_container;
kono
parents:
diff changeset
162 typedef std::true_type is_reversible;
kono
parents:
diff changeset
163 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
164 typedef std::true_type is_associative;
kono
parents:
diff changeset
165 typedef std::true_type is_mapped;
kono
parents:
diff changeset
166
kono
parents:
diff changeset
167 typedef std::true_type has_erase;
kono
parents:
diff changeset
168 typedef std::true_type has_insert;
kono
parents:
diff changeset
169 typedef std::true_type has_emplace;
kono
parents:
diff changeset
170 };
kono
parents:
diff changeset
171
kono
parents:
diff changeset
172 template<typename _Tp1, typename _Tp2, typename _Tp3>
kono
parents:
diff changeset
173 struct traits<std::set<_Tp1, _Tp2, _Tp3>> : public traits_base
kono
parents:
diff changeset
174 {
kono
parents:
diff changeset
175 typedef std::true_type is_container;
kono
parents:
diff changeset
176 typedef std::true_type is_reversible;
kono
parents:
diff changeset
177 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
178 typedef std::true_type is_associative;
kono
parents:
diff changeset
179
kono
parents:
diff changeset
180 typedef std::true_type has_erase;
kono
parents:
diff changeset
181 typedef std::true_type has_insert;
kono
parents:
diff changeset
182 typedef std::true_type has_emplace;
kono
parents:
diff changeset
183 };
kono
parents:
diff changeset
184
kono
parents:
diff changeset
185 template<typename _Tp1, typename _Tp2, typename _Tp3>
kono
parents:
diff changeset
186 struct traits<std::multiset<_Tp1, _Tp2, _Tp3>> : public traits_base
kono
parents:
diff changeset
187 {
kono
parents:
diff changeset
188 typedef std::true_type is_container;
kono
parents:
diff changeset
189 typedef std::true_type is_reversible;
kono
parents:
diff changeset
190 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
191 typedef std::true_type is_associative;
kono
parents:
diff changeset
192
kono
parents:
diff changeset
193 typedef std::true_type has_erase;
kono
parents:
diff changeset
194 typedef std::true_type has_insert;
kono
parents:
diff changeset
195 typedef std::true_type has_emplace;
kono
parents:
diff changeset
196 };
kono
parents:
diff changeset
197
kono
parents:
diff changeset
198 template<typename _Tp1, typename _Tp2>
kono
parents:
diff changeset
199 struct traits<std::priority_queue<_Tp1, _Tp2>> : public traits_base
kono
parents:
diff changeset
200 {
kono
parents:
diff changeset
201 typedef std::true_type is_adaptor;
kono
parents:
diff changeset
202 };
kono
parents:
diff changeset
203
kono
parents:
diff changeset
204 template<typename _Tp1, typename _Tp2>
kono
parents:
diff changeset
205 struct traits<std::queue<_Tp1, _Tp2>> : public traits_base
kono
parents:
diff changeset
206 {
kono
parents:
diff changeset
207 typedef std::true_type is_adaptor;
kono
parents:
diff changeset
208 };
kono
parents:
diff changeset
209
kono
parents:
diff changeset
210 template<typename _Tp1, typename _Tp2>
kono
parents:
diff changeset
211 struct traits<std::stack<_Tp1, _Tp2> > : public traits_base
kono
parents:
diff changeset
212 {
kono
parents:
diff changeset
213 typedef std::true_type is_adaptor;
kono
parents:
diff changeset
214 };
kono
parents:
diff changeset
215
kono
parents:
diff changeset
216 template<typename _Tp1, typename _Tp2, typename _Tp3,
kono
parents:
diff changeset
217 typename _Tp4, typename _Tp5>
kono
parents:
diff changeset
218 struct traits<std::unordered_map<_Tp1, _Tp2, _Tp3, _Tp4, _Tp5>>
kono
parents:
diff changeset
219 : public traits_base
kono
parents:
diff changeset
220 {
kono
parents:
diff changeset
221 typedef std::true_type is_container;
kono
parents:
diff changeset
222 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
223 typedef std::true_type is_unordered;
kono
parents:
diff changeset
224 typedef std::true_type is_mapped;
kono
parents:
diff changeset
225
kono
parents:
diff changeset
226 typedef std::true_type has_erase;
kono
parents:
diff changeset
227 typedef std::true_type has_insert;
kono
parents:
diff changeset
228 typedef std::true_type has_emplace;
kono
parents:
diff changeset
229 };
kono
parents:
diff changeset
230
kono
parents:
diff changeset
231 template<typename _Tp1, typename _Tp2, typename _Tp3,
kono
parents:
diff changeset
232 typename _Tp4, typename _Tp5>
kono
parents:
diff changeset
233 struct traits<std::unordered_multimap<_Tp1, _Tp2, _Tp3, _Tp4, _Tp5>>
kono
parents:
diff changeset
234 : public traits_base
kono
parents:
diff changeset
235 {
kono
parents:
diff changeset
236 typedef std::true_type is_container;
kono
parents:
diff changeset
237 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
238 typedef std::true_type is_unordered;
kono
parents:
diff changeset
239 typedef std::true_type is_mapped;
kono
parents:
diff changeset
240
kono
parents:
diff changeset
241 typedef std::true_type has_erase;
kono
parents:
diff changeset
242 typedef std::true_type has_insert;
kono
parents:
diff changeset
243 typedef std::true_type has_emplace;
kono
parents:
diff changeset
244 };
kono
parents:
diff changeset
245
kono
parents:
diff changeset
246 template<typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>
kono
parents:
diff changeset
247 struct traits<std::unordered_multiset<_Tp1, _Tp2, _Tp3, _Tp4>>
kono
parents:
diff changeset
248 : public traits_base
kono
parents:
diff changeset
249 {
kono
parents:
diff changeset
250 typedef std::true_type is_container;
kono
parents:
diff changeset
251 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
252 typedef std::true_type is_unordered;
kono
parents:
diff changeset
253
kono
parents:
diff changeset
254 typedef std::true_type has_erase;
kono
parents:
diff changeset
255 typedef std::true_type has_insert;
kono
parents:
diff changeset
256 typedef std::true_type has_emplace;
kono
parents:
diff changeset
257 };
kono
parents:
diff changeset
258
kono
parents:
diff changeset
259 template<typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>
kono
parents:
diff changeset
260 struct traits<std::unordered_set<_Tp1, _Tp2, _Tp3, _Tp4>>
kono
parents:
diff changeset
261 : public traits_base
kono
parents:
diff changeset
262 {
kono
parents:
diff changeset
263 typedef std::true_type is_container;
kono
parents:
diff changeset
264 typedef std::true_type is_allocator_aware;
kono
parents:
diff changeset
265 typedef std::true_type is_unordered;
kono
parents:
diff changeset
266
kono
parents:
diff changeset
267 typedef std::true_type has_erase;
kono
parents:
diff changeset
268 typedef std::true_type has_insert;
kono
parents:
diff changeset
269 typedef std::true_type has_emplace;
kono
parents:
diff changeset
270 };
kono
parents:
diff changeset
271 } // namespace __gnu_test
kono
parents:
diff changeset
272
kono
parents:
diff changeset
273 #endif