42 #ifndef PB_DS_TAG_AND_TRAIT_HPP
43 #define PB_DS_TAG_AND_TRAIT_HPP
56 struct trivial_iterator_tag
60 typedef void trivial_iterator_difference_type;
66 struct basic_invalidation_guarantee
74 struct point_invalidation_guarantee :
public basic_invalidation_guarantee
83 struct range_invalidation_guarantee :
public point_invalidation_guarantee
158 template<
typename Tag>
165 typedef point_invalidation_guarantee invalidation_guarantee;
169 order_preserving =
false,
170 erase_can_throw =
false,
171 split_join_can_throw =
false,
172 reverse_iteration =
false
177 struct container_traits_base<gp_hash_tag>
179 typedef gp_hash_tag container_category;
180 typedef basic_invalidation_guarantee invalidation_guarantee;
184 order_preserving =
false,
185 erase_can_throw =
false,
186 split_join_can_throw =
false,
187 reverse_iteration =
false
192 struct container_traits_base<rb_tree_tag>
194 typedef rb_tree_tag container_category;
195 typedef range_invalidation_guarantee invalidation_guarantee;
199 order_preserving =
true,
200 erase_can_throw =
false,
201 split_join_can_throw =
false,
202 reverse_iteration =
true
207 struct container_traits_base<splay_tree_tag>
209 typedef splay_tree_tag container_category;
210 typedef range_invalidation_guarantee invalidation_guarantee;
214 order_preserving =
true,
215 erase_can_throw =
false,
216 split_join_can_throw =
false,
217 reverse_iteration =
true
222 struct container_traits_base<ov_tree_tag>
224 typedef ov_tree_tag container_category;
225 typedef basic_invalidation_guarantee invalidation_guarantee;
229 order_preserving =
true,
230 erase_can_throw =
true,
231 split_join_can_throw =
true,
232 reverse_iteration =
false
237 struct container_traits_base<pat_trie_tag>
239 typedef pat_trie_tag container_category;
240 typedef range_invalidation_guarantee invalidation_guarantee;
244 order_preserving =
true,
245 erase_can_throw =
false,
246 split_join_can_throw =
true,
247 reverse_iteration =
true
252 struct container_traits_base<list_update_tag>
254 typedef list_update_tag container_category;
255 typedef point_invalidation_guarantee invalidation_guarantee;
259 order_preserving =
false,
260 erase_can_throw =
false,
261 split_join_can_throw =
false,
262 reverse_iteration =
false
268 struct container_traits_base<pairing_heap_tag>
270 typedef pairing_heap_tag container_category;
271 typedef point_invalidation_guarantee invalidation_guarantee;
275 order_preserving =
false,
276 erase_can_throw =
false,
277 split_join_can_throw =
false,
278 reverse_iteration =
false
283 struct container_traits_base<thin_heap_tag>
285 typedef thin_heap_tag container_category;
286 typedef point_invalidation_guarantee invalidation_guarantee;
290 order_preserving =
false,
291 erase_can_throw =
false,
292 split_join_can_throw =
false,
293 reverse_iteration =
false
298 struct container_traits_base<binomial_heap_tag>
300 typedef binomial_heap_tag container_category;
301 typedef point_invalidation_guarantee invalidation_guarantee;
305 order_preserving =
false,
306 erase_can_throw =
false,
307 split_join_can_throw =
false,
308 reverse_iteration =
false
313 struct container_traits_base<rc_binomial_heap_tag>
315 typedef rc_binomial_heap_tag container_category;
316 typedef point_invalidation_guarantee invalidation_guarantee;
320 order_preserving =
false,
321 erase_can_throw =
false,
322 split_join_can_throw =
false,
323 reverse_iteration =
false
328 struct container_traits_base<binary_heap_tag>
330 typedef binary_heap_tag container_category;
331 typedef basic_invalidation_guarantee invalidation_guarantee;
335 order_preserving =
false,
336 erase_can_throw =
false,
337 split_join_can_throw =
true,
338 reverse_iteration =
false
345 template<
typename Cntnr>
349 typedef Cntnr container_type;
350 typedef typename Cntnr::container_category container_category;
352 typedef typename base_type::invalidation_guarantee invalidation_guarantee;
356 order_preserving = base_type::order_preserving,
357 erase_can_throw = base_type::erase_can_throw,
358 split_join_can_throw = base_type::split_join_can_throw,
359 reverse_iteration = base_type::reverse_iteration