From a345e45d144c0e83aed85b6d29f64af3d21b4453 Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Tue, 24 May 2011 02:38:19 +0000 Subject: [PATCH] re PR libstdc++/37144 (A bug in include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp) 2011-05-23 Benjamin Kosnik PR libstdc++/37144 PR libstdc++/28457 Interface changes for ext/pb_ds. PB_DS_BASE_C_DEC to unique PB_DS_*_BASE macros. * include/ext/pb_ds/assoc_container.hpp (container_base): Remove. (basic_hash_table, basic_branch, list_update): Derive from container_base_dispatch. * include/ext/pb_ds/list_update_policy.hpp (null_lu_metadata): Remove. (move_to_front_lu_policy): To lu_move_to_front_policy. (counter_lu_policy): To lu_counter_policy. * include/ext/pb_ds/tree_policy.hpp (null_tree_node_update): Remove. * include/ext/pb_ds/tag_and_trait.hpp (container_base_dispatch): Adjust template parameters, declare here. (null_mapped_type) Remove. (null_type): Just use this for template tricks everywhere. * include/ext/pb_ds/hash_policy.hpp (null_hash_fn, null_probe_fn): Remove. * include/ext/pb_ds/trie_policy.hpp (null_trie_node_update): Remove. (string_trie_e_access_traits): To trie_string_access_traits. * include/ext/pb_ds/priority_queue.hpp: Use container_base_dispatch. File changes. * include/Makefile.am (pb_headers): Removed and changed file names. * include/Makefile.in: Regenerated. * include/ext/pb_ds/detail/basic_types.hpp: Remove. * include/ext/pb_ds/detail/bin_search_tree_/ cond_dtor_entry_dealtor.hpp: Remove. * include/ext/pb_ds/detail/bin_search_tree_/ cond_key_dtor_entry_dealtor.hpp: Remove. * include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp: Move.. * include/ext/pb_ds/detail/binary_heap_/ point_const_iterator.hpp: ..here. * include/ext/pb_ds/detail/basic_tree_policy: Move to... * include/ext/pb_ds/detail/branch_policy: This. * include/ext/pb_ds/detail/branch_policy/ basic_tree_policy_base.hpp: Move... * include/ext/pb_ds/detail/branch_policy/branch_policy.hpp: ...here. * include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp: Add. * include/ext/pb_ds/detail/branch_policy/traits.hpp: Add. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ null_metadata.hpp: Remove. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ const_point_iterator.hpp: Move... * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ point_const_iterator.hpp: ...here. * include/ext/pb_ds/detail/list_update_policy/ counter_lu_metadata.hpp: Move.. * include/ext/pb_ds/detail/list_update_policy/ lu_counter_metadata.hpp: ...here. * include/ext/pb_ds/detail/list_update_policy/ counter_lu_policy_imp.hpp: Remove. * include/ext/pb_ds/detail/list_update_policy/ mtf_lu_policy_imp.hpp: Remove. * include/ext/pb_ds/detail/trie_policy/ string_trie_e_access_traits_imp.hpp: Move... * include/ext/pb_ds/detail/trie_policy/ sample_trie_access_traits.hpp: ...here. * include/ext/pb_ds/detail/trie_policy/ sample_trie_e_access_traits.hpp: Move... * include/ext/pb_ds/detail/trie_policy/ trie_string_access_traits_imp.hpp: ...here. * include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp: Remove. * include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp: Remove. * include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp: Remove. * include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp: New, fold all types found in the following files into pat_trie_base. * include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp: Folded. * include/ext/pb_ds/detail/pat_trie_/ cond_dtor_entry_dealtor.hpp: Folded. * include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp: Folded. * include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp: Folded. * include/ext/pb_ds/detail/pat_trie_/head.hpp: Folded. * include/ext/pb_ds/detail/pat_trie_/leaf.hpp: Folded. * include/ext/pb_ds/detail/pat_trie_/node_base.hpp: Folded. * include/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp: Folded. * include/ext/pb_ds/detail/pat_trie_/internal_node.hpp: Folded. * include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp: Folded. * include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp: Folded. * include/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp: Move... * include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp: ...here. * include/ext/pb_ds/detail/unordered_iterator/ const_point_iterator.hpp: Move... * include/ext/pb_ds/detail/unordered_iterator/ point_const_iterator.hpp: ...here. Adjust for above changes. * include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp: Same. * include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp: Same. * include/ext/pb_ds/detail/resize_policy/ sample_resize_trigger.hpp: Same. * include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binomial_heap_base_/ binomial_heap_base_.hpp: Same. * include/ext/pb_ds/detail/binomial_heap_base_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binomial_heap_base_/ split_join_fn_imps.hpp: Same. * include/ext/pb_ds/detail/container_base_dispatch.hpp: Same. Adjust for template parameter ordering change. * include/ext/pb_ds/detail/cc_hash_table_map_/ erase_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ constructor_destructor_no_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ insert_no_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ policy_access_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ resize_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ constructor_destructor_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ insert_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ entry_list_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ find_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ debug_no_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ constructor_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ cond_key_dtor_entry_dealtor.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ debug_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ erase_no_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ iterators_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ resize_no_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/cc_hash_table_map_/ standard_policies.hpp: Same. * include/ext/pb_ds/detail/tree_trace_base.hpp: Same. * include/ext/pb_ds/detail/unordered_iterator/iterator.hpp: Same. * include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp: Same. * include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/traits.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/ policy_access_fn_imps.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/traits.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/ split_join_fn_imps.hpp: Same. * include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp: Same. * include/ext/pb_ds/detail/list_update_policy/ sample_update_policy.hpp: Same. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ trace_fn_imps.hpp: Same. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ erase_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ constructor_destructor_no_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ insert_no_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ policy_access_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ resize_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ constructor_destructor_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ insert_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ iterator_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ find_no_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ find_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ debug_no_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ constructor_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ debug_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ erase_no_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ resize_no_store_hash_fn_imps.hpp: Same. * include/ext/pb_ds/detail/gp_hash_table_map_/ standard_policies.hpp: Same. * include/ext/pb_ds/detail/standard_policies.hpp: Same. * include/ext/pb_ds/detail/types_traits.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp: Same. * include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp: Same. * include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp: Same. * include/ext/pb_ds/detail/tree_policy/ sample_tree_node_update.hpp: Same. * include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp: Same. * include/ext/pb_ds/detail/trie_policy/ sample_trie_node_update.hpp: Same. * include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp: Same. * include/ext/pb_ds/detail/trie_policy/ prefix_search_node_update_imp.hpp: Same. * include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp: Same. * include/ext/pb_ds/detail/cond_dealtor.hpp: Same. * include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp: Same. Adjust for template parameter change, fold into container_base_dispatch. * include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pairing_heap_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp: Same. * include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binomial_heap_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp: Same. * include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/type_utils.hpp: Same. * include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp: Same. * include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp: Same. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ policy_access_fn_imps.hpp: Same. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ left_child_next_sibling_heap_.hpp: Same. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ const_iterator.hpp: Same. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ node.hpp: Same. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ info_fn_imps.hpp: Same. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ iterators_fn_imps.hpp: Same. * include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp: Same. * include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp: Same. * include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp: Same. * include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/thin_heap_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp: Same. * include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp: Same. * include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp: Same. * include/ext/pb_ds/detail/ov_tree_map_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp: Same. * include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp: Same. * include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp: Same. * include/ext/pb_ds/detail/ov_tree_map_/traits.hpp: Same. * include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp: Same. * include/ext/pb_ds/detail/debug_map_base.hpp: Same. * include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp: Same. * include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp: Same. * include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp: Same. * include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp: Same. * include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp: Same. * include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp: Same. * include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp: Same. * include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp: Same. * include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/splay_tree_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp: Same. * include/ext/pb_ds/detail/splay_tree_/node.hpp: Same. * include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp: Same. * include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp: Same. * include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp: Same. * include/ext/pb_ds/detail/splay_tree_/traits.hpp: Same. * include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp: Same. * include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/list_update_map_/ entry_metadata_base.hpp: Same. * include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp: Same. * include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp: Same. * include/ext/pb_ds/detail/list_update_map_/ constructor_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp: Same. * include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rc_binomial_heap_/ rc_binomial_heap_.hpp: Same. * include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rc_binomial_heap_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp: Same. * include/ext/pb_ds/detail/rc_binomial_heap_/ split_join_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rb_tree_map_/ constructors_destructor_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp: Same. * include/ext/pb_ds/detail/rb_tree_map_/node.hpp: Same. * include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp: Same. * include/ext/pb_ds/detail/rb_tree_map_/traits.hpp: Same. Documentation changes. * include/ext/pb_ds/*: Add doxygen markup. * doc/doxygen/user.cfg.in: Add details for extracting comments from pb_ds. * scripts/run_doxygen: Fixup __gnu_pb_ds::detail. * scripts/make_graph.py: Move to svg output. Re-format generated tables. * doc/Makefile.am (stamp-html-copy): New rule. (stamp-html): Use it to copy non-generated files into html docs. * doc/Makefile.in: Regenerated. * doc/html/ext/pb_ds/sample_trie_e_access_traits.html: Move... * doc/html/ext/pb_ds/trie_string_access_traits.html: ...here. * doc/html/ext/pb_ds/string_trie_e_access_traits.html: Move.. * doc/html/ext/pb_ds/sample_trie_access_traits.html: ...here. * doc/html/ext/pb_ds/tree_text_lor_find_timing_test_local.png, hash_random_int_erase_mem_usage_test_local.png, multimap_text_insert_mem_usage_test_small_s2p_hash_local.png, tree_text_insert_timing_test_pat_trie_local.png , multimap_text_insert_mem_usage_test_small_s2p_tree_local.png , priority_queue_text_modify_down_timing_test_local.png, gp_hash_random_int_subscript_timing_test_find_local.png, text_find_timing_test_hash_local.png, multimap_text_insert_timing_test_small_s2p_hash_local.png, multimap_text_insert_timing_test_small_s2p_tree_local.png, multimap_text_insert_mem_usage_test_large_s2p_hash_local.png, multimap_text_insert_mem_usage_test_large_s2p_tree_local.png, multimap_text_insert_timing_test_large_s2p_hash_local.png, hash_zlob_random_int_find_timing_test_local.png, multimap_text_insert_timing_test_large_s2p_tree_local.png, binary_priority_queue_random_int_push_timing_test_local.png, priority_queue_text_pop_mem_usage_test_local.png, priority_queue_text_modify_down_timing_test_pairing_thin_local.png, tree_split_join_timing_test_local.png, multimap_text_find_timing_test_small_s2p_hash_local.png, ccgp_hash_random_int_subscript_timing_test_insert_local.png, priority_queue_random_int_push_pop_timing_test_local.png, multimap_text_find_timing_test_small_s2p_tree_local.png, gp_hash_random_int_subscript_timing_test_insert_local.png, priority_queue_text_push_timing_test_local.png, cc_hash_random_int_subscript_timing_test_find_local.png, tree_text_insert_timing_test_vector_tree_local.png, multimap_text_find_timing_test_large_s2p_hash_local.png, pairing_priority_queue_text_push_timing_test_local.png, tree_order_statistics_timing_test_local.png, priority_queue_text_push_pop_timing_test_local.png, text_find_timing_test_tree_like_local.png, multimap_text_find_timing_test_large_s2p_tree_local.png, priority_queue_text_modify_up_timing_test_pairing_thin_local.png, cc_hash_random_int_subscript_timing_test_insert_local.png, priority_queue_text_modify_up_timing_test_local.png, random_int_find_find_timing_test_tree_local.png, priority_queue_random_int_push_timing_test_local.png, tree_text_insert_timing_test_node_tree_local.png, pairing_priority_queue_text_push_pop_timing_test_local.png, gp_hash_random_int_find_timing_test_local.png, cc_hash_random_int_find_timing_test_local.png, priority_queue_text_join_timing_test_local.png: Update local pngs. Testsuite changes. * testsuite/ext/pb_ds/regression/tree_no_data_map_rand_debug.cc: New. * testsuite/ext/pb_ds/regression/tree_data_map_rand_debug.cc: New. * testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc: New. * testsuite/ext/pb_ds/regression/trie_no_data_map_rand_debug.cc: New. * testsuite/ext/pb_ds/regression/trie_data_map_rand_debug.cc: New. * testsuite/ext/pb_ds/regression/list_update_no_data_map_rand_debug.cc: New. * testsuite/ext/pb_ds/regression/list_update_data_map_rand_debug.cc: New. * testsuite/ext/pb_ds/regression/hash_no_data_map_rand_debug.cc: New. * testsuite/ext/pb_ds/regression/hash_data_map_rand_debug.cc: New. * testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc: Fix typo. * testsuite/ext/pb_ds/example/basic_set.cc: Update. * testsuite/ext/pb_ds/example/ranged_hash.cc: Same. * testsuite/ext/pb_ds/example/tree_order_statistics.cc: Same. * testsuite/ext/pb_ds/example/trie_prefix_search.cc: Same. * testsuite/ext/pb_ds/example/trie_dna.cc: Same. * testsuite/ext/pb_ds/example/tree_intervals.cc: Same. * testsuite/ext/pb_ds/example/basic_multimap.cc: Same. * testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc: Same. * testsuite/performance/ext/pb_ds/tree_split_join_timing.cc: Same. * testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc: Same. * testsuite/data/make_graph_test_infos.xml: Same. * testsuite/util/regression/common_type.hpp: Same. * testsuite/util/regression/trait/assoc/native_type_trait.hpp: Same. * testsuite/util/regression/trait/assoc/trait.hpp: Same. * testsuite/util/regression/trait/assoc/type_trait.hpp: Same. * testsuite/util/regression/rand/priority_queue/ rand_regression_test.hpp: Same. * testsuite/util/regression/rand/priority_queue/ container_rand_regression_test.tcc: Same. * testsuite/util/regression/rand/assoc/rand_regression_test.hpp: Same. * testsuite/util/regression/rand/assoc/container_rand_regression_test.h * testsuite/util/regression/rand/assoc/ container_rand_regression_test.tcc: Same. * testsuite/util/native_type/native_priority_queue.hpp: Same. * testsuite/util/native_type/native_multimap.hpp: Same. * testsuite/util/native_type/native_hash_multimap.hpp: Same. * testsuite/util/native_type/native_set.hpp: Same. * testsuite/util/native_type/native_map.hpp: Same. * testsuite/util/native_type/native_hash_set.hpp: Same. * testsuite/util/native_type/native_hash_map.hpp: Same. * testsuite/util/testsuite_containers.h * testsuite/util/common_type/priority_queue/common_type.hpp: Same. * testsuite/util/common_type/assoc/common_type.hpp: Same. * testsuite/util/common_type/assoc/string_form.hpp: Same. * testsuite/util/common_type/assoc/template_policy.hpp: Same. * testsuite/util/common_type/assoc/detail/ trigger_policy_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ds_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ size_policy_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ probe_fn_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ tree_supports_order_statistics.hpp: Same. * testsuite/util/common_type/assoc/detail/ trie_supports_prefix_search.hpp: Same. * testsuite/util/common_type/assoc/detail/ list_update_policy_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ trie_supports_order_statistics.hpp: Same. * testsuite/util/common_type/assoc/native_set.hpp: Same. * testsuite/util/performance/assoc/timing/common_type.hpp: Same. * testsuite/util/performance/assoc/timing/multimap_find_test.hpp: Same. * testsuite/util/performance/assoc/multimap_common_type.hpp: Same. From-SVN: r174100 --- libstdc++-v3/ChangeLog | 509 +++++++ libstdc++-v3/doc/Makefile.am | 10 +- libstdc++-v3/doc/Makefile.in | 9 +- libstdc++-v3/doc/doxygen/user.cfg.in | 499 +++--- ...ueue_random_int_push_timing_test_local.png | Bin 6710 -> 23669 bytes ...hash_random_int_find_timing_test_local.png | Bin 8534 -> 48189 bytes ...m_int_subscript_timing_test_find_local.png | Bin 8445 -> 47325 bytes ...int_subscript_timing_test_insert_local.png | Bin 9396 -> 46842 bytes ...int_subscript_timing_test_insert_local.png | Bin 9557 -> 42763 bytes ...hash_random_int_find_timing_test_local.png | Bin 7916 -> 33303 bytes ...m_int_subscript_timing_test_find_local.png | Bin 7570 -> 33148 bytes ...int_subscript_timing_test_insert_local.png | Bin 8499 -> 34794 bytes ..._random_int_erase_mem_usage_test_local.png | Bin 7405 -> 31203 bytes ...zlob_random_int_find_timing_test_local.png | Bin 8436 -> 38509 bytes ..._find_timing_test_large_s2p_hash_local.png | Bin 7299 -> 30126 bytes ..._find_timing_test_large_s2p_tree_local.png | Bin 6706 -> 26937 bytes ..._find_timing_test_small_s2p_hash_local.png | Bin 6732 -> 29768 bytes ..._find_timing_test_small_s2p_tree_local.png | Bin 6396 -> 26702 bytes ...rt_mem_usage_test_large_s2p_hash_local.png | Bin 7275 -> 32571 bytes ...rt_mem_usage_test_large_s2p_tree_local.png | Bin 7191 -> 29526 bytes ...rt_mem_usage_test_small_s2p_hash_local.png | Bin 6845 -> 31758 bytes ...rt_mem_usage_test_small_s2p_tree_local.png | Bin 6925 -> 29258 bytes ...nsert_timing_test_large_s2p_hash_local.png | Bin 7000 -> 30954 bytes ...nsert_timing_test_large_s2p_tree_local.png | Bin 6764 -> 27038 bytes ...nsert_timing_test_small_s2p_hash_local.png | Bin 7035 -> 31038 bytes ...nsert_timing_test_small_s2p_tree_local.png | Bin 6853 -> 26974 bytes ..._queue_text_push_pop_timing_test_local.png | Bin 6892 -> 26303 bytes ...rity_queue_text_push_timing_test_local.png | Bin 6760 -> 25070 bytes ..._random_int_push_pop_timing_test_local.png | Bin 9275 -> 46818 bytes ...ueue_random_int_push_timing_test_local.png | Bin 8986 -> 41433 bytes ...rity_queue_text_join_timing_test_local.png | Bin 7989 -> 38222 bytes ...eue_text_modify_down_timing_test_local.png | Bin 7633 -> 37071 bytes ...fy_down_timing_test_pairing_thin_local.png | Bin 5878 -> 22019 bytes ...queue_text_modify_up_timing_test_local.png | Bin 7748 -> 36882 bytes ...dify_up_timing_test_pairing_thin_local.png | Bin 6105 -> 22214 bytes ...ty_queue_text_pop_mem_usage_test_local.png | Bin 7424 -> 31248 bytes ..._queue_text_push_pop_timing_test_local.png | Bin 9006 -> 46440 bytes ...rity_queue_text_push_timing_test_local.png | Bin 8477 -> 43334 bytes ...m_int_find_find_timing_test_tree_local.png | Bin 7377 -> 30133 bytes ...ts.html => sample_trie_access_traits.html} | 0 .../text_find_timing_test_hash_local.png | Bin 9361 -> 39495 bytes .../text_find_timing_test_tree_like_local.png | Bin 7650 -> 34994 bytes ...ree_order_statistics_timing_test_local.png | Bin 6739 -> 29805 bytes .../tree_split_join_timing_test_local.png | Bin 6734 -> 30904 bytes ...ext_insert_timing_test_node_tree_local.png | Bin 6690 -> 28340 bytes ...text_insert_timing_test_pat_trie_local.png | Bin 6011 -> 22337 bytes ...t_insert_timing_test_vector_tree_local.png | Bin 6270 -> 22889 bytes .../tree_text_lor_find_timing_test_local.png | Bin 7796 -> 28354 bytes ...ts.html => trie_string_access_traits.html} | 0 libstdc++-v3/include/Makefile.am | 45 +- libstdc++-v3/include/Makefile.in | 45 +- .../include/ext/pb_ds/assoc_container.hpp | 295 ++-- .../include/ext/pb_ds/detail/basic_types.hpp | 211 --- .../bin_search_tree_/bin_search_tree_.hpp | 386 ++--- .../cond_dtor_entry_dealtor.hpp | 70 - .../cond_key_dtor_entry_dealtor.hpp | 81 - .../constructors_destructor_fn_imps.hpp | 12 +- .../detail/bin_search_tree_/debug_fn_imps.hpp | 6 +- .../detail/bin_search_tree_/erase_fn_imps.hpp | 21 +- .../detail/bin_search_tree_/find_fn_imps.hpp | 87 +- .../detail/bin_search_tree_/info_fn_imps.hpp | 2 +- .../bin_search_tree_/insert_fn_imps.hpp | 28 +- .../bin_search_tree_/iterators_fn_imps.hpp | 10 +- .../bin_search_tree_/node_iterators.hpp | 48 +- .../bin_search_tree_/point_iterators.hpp | 48 +- .../policy_access_fn_imps.hpp | 10 +- .../bin_search_tree_/r_erase_fn_imps.hpp | 21 +- .../bin_search_tree_/rotate_fn_imps.hpp | 4 +- .../bin_search_tree_/split_join_fn_imps.hpp | 4 +- .../pb_ds/detail/bin_search_tree_/traits.hpp | 111 +- .../detail/binary_heap_/binary_heap_.hpp | 279 ++-- .../detail/binary_heap_/const_iterator.hpp | 65 +- .../constructors_destructor_fn_imps.hpp | 48 +- .../detail/binary_heap_/debug_fn_imps.hpp | 8 +- .../pb_ds/detail/binary_heap_/entry_cmp.hpp | 72 +- .../pb_ds/detail/binary_heap_/entry_pred.hpp | 72 +- .../detail/binary_heap_/erase_fn_imps.hpp | 71 +- .../detail/binary_heap_/find_fn_imps.hpp | 24 +- .../detail/binary_heap_/info_fn_imps.hpp | 14 +- .../detail/binary_heap_/insert_fn_imps.hpp | 77 +- .../detail/binary_heap_/iterators_fn_imps.hpp | 18 +- ..._iterator.hpp => point_const_iterator.hpp} | 28 +- .../binary_heap_/policy_access_fn_imps.hpp | 2 +- .../detail/binary_heap_/resize_policy.hpp | 187 ++- .../binary_heap_/split_join_fn_imps.hpp | 52 +- .../detail/binary_heap_/trace_fn_imps.hpp | 2 +- .../detail/binomial_heap_/binomial_heap_.hpp | 64 +- .../constructors_destructor_fn_imps.hpp | 15 +- .../detail/binomial_heap_/debug_fn_imps.hpp | 2 +- .../binomial_heap_base_.hpp | 145 +- .../constructors_destructor_fn_imps.hpp | 30 +- .../binomial_heap_base_/debug_fn_imps.hpp | 4 +- .../binomial_heap_base_/erase_fn_imps.hpp | 35 +- .../binomial_heap_base_/find_fn_imps.hpp | 5 +- .../binomial_heap_base_/insert_fn_imps.hpp | 66 +- .../split_join_fn_imps.hpp | 69 +- .../detail/branch_policy/branch_policy.hpp | 124 ++ .../null_node_metadata.hpp} | 31 +- .../traits.hpp} | 83 +- .../detail/cc_hash_table_map_/cc_ht_map_.hpp | 273 ++-- .../detail/cc_hash_table_map_/cmp_fn_imps.hpp | 6 +- .../cond_key_dtor_entry_dealtor.hpp | 79 +- .../constructor_destructor_fn_imps.hpp | 27 +- ...uctor_destructor_no_store_hash_fn_imps.hpp | 4 +- ...structor_destructor_store_hash_fn_imps.hpp | 6 +- .../cc_hash_table_map_/debug_fn_imps.hpp | 2 +- .../debug_no_store_hash_fn_imps.hpp | 4 +- .../debug_store_hash_fn_imps.hpp | 2 +- .../cc_hash_table_map_/entry_list_fn_imps.hpp | 2 +- .../cc_hash_table_map_/erase_fn_imps.hpp | 2 +- .../erase_no_store_hash_fn_imps.hpp | 23 +- .../erase_store_hash_fn_imps.hpp | 21 +- .../cc_hash_table_map_/find_fn_imps.hpp | 10 +- .../find_store_hash_fn_imps.hpp | 2 +- .../cc_hash_table_map_/info_fn_imps.hpp | 6 +- .../cc_hash_table_map_/insert_fn_imps.hpp | 2 +- .../insert_no_store_hash_fn_imps.hpp | 4 +- .../insert_store_hash_fn_imps.hpp | 4 +- .../cc_hash_table_map_/iterators_fn_imps.hpp | 2 +- .../policy_access_fn_imps.hpp | 2 +- .../cc_hash_table_map_/resize_fn_imps.hpp | 2 +- .../resize_no_store_hash_fn_imps.hpp | 4 +- .../resize_store_hash_fn_imps.hpp | 4 +- .../cc_hash_table_map_/size_fn_imps.hpp | 4 +- .../cc_hash_table_map_/standard_policies.hpp | 2 +- .../cc_hash_table_map_/trace_fn_imps.hpp | 2 +- .../include/ext/pb_ds/detail/cond_dealtor.hpp | 99 +- .../constructors_destructor_fn_imps.hpp | 2 +- .../pb_ds/detail/container_base_dispatch.hpp | 259 ++-- .../ext/pb_ds/detail/debug_map_base.hpp | 139 +- .../ext/pb_ds/detail/eq_fn/eq_by_less.hpp | 3 +- .../ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp | 150 +- .../constructor_destructor_fn_imps.hpp | 20 +- ...uctor_destructor_no_store_hash_fn_imps.hpp | 4 +- ...structor_destructor_store_hash_fn_imps.hpp | 4 +- .../gp_hash_table_map_/debug_fn_imps.hpp | 2 +- .../debug_no_store_hash_fn_imps.hpp | 4 +- .../debug_store_hash_fn_imps.hpp | 4 +- .../gp_hash_table_map_/erase_fn_imps.hpp | 4 +- .../erase_no_store_hash_fn_imps.hpp | 4 +- .../erase_store_hash_fn_imps.hpp | 4 +- .../gp_hash_table_map_/find_fn_imps.hpp | 10 +- .../find_no_store_hash_fn_imps.hpp | 4 +- .../find_store_hash_fn_imps.hpp | 2 +- .../detail/gp_hash_table_map_/gp_ht_map_.hpp | 259 ++-- .../gp_hash_table_map_/info_fn_imps.hpp | 4 +- .../gp_hash_table_map_/insert_fn_imps.hpp | 2 +- .../insert_no_store_hash_fn_imps.hpp | 6 +- .../insert_store_hash_fn_imps.hpp | 6 +- .../gp_hash_table_map_/iterator_fn_imps.hpp | 4 +- .../policy_access_fn_imps.hpp | 4 +- .../gp_hash_table_map_/resize_fn_imps.hpp | 4 +- .../resize_no_store_hash_fn_imps.hpp | 6 +- .../resize_store_hash_fn_imps.hpp | 6 +- .../gp_hash_table_map_/standard_policies.hpp | 2 +- .../gp_hash_table_map_/trace_fn_imps.hpp | 2 +- .../pb_ds/detail/hash_fn/probe_fn_base.hpp | 2 +- .../pb_ds/detail/hash_fn/ranged_hash_fn.hpp | 83 +- .../pb_ds/detail/hash_fn/ranged_probe_fn.hpp | 71 +- .../pb_ds/detail/hash_fn/sample_probe_fn.hpp | 43 +- .../detail/hash_fn/sample_range_hashing.hpp | 51 +- .../detail/hash_fn/sample_ranged_hash_fn.hpp | 48 +- .../detail/hash_fn/sample_ranged_probe_fn.hpp | 50 +- .../const_iterator.hpp | 57 +- .../constructors_destructor_fn_imps.hpp | 12 +- .../debug_fn_imps.hpp | 16 +- .../erase_fn_imps.hpp | 4 +- .../info_fn_imps.hpp | 2 +- .../insert_fn_imps.hpp | 2 +- .../iterators_fn_imps.hpp | 2 +- .../left_child_next_sibling_heap_.hpp | 242 ++- .../left_child_next_sibling_heap_/node.hpp | 79 +- ..._iterator.hpp => point_const_iterator.hpp} | 30 +- .../policy_access_fn_imps.hpp | 2 +- .../trace_fn_imps.hpp | 13 +- .../constructor_destructor_fn_imps.hpp | 22 +- .../detail/list_update_map_/debug_fn_imps.hpp | 2 +- .../list_update_map_/entry_metadata_base.hpp | 4 +- .../detail/list_update_map_/erase_fn_imps.hpp | 4 +- .../detail/list_update_map_/find_fn_imps.hpp | 8 +- .../detail/list_update_map_/info_fn_imps.hpp | 2 +- .../list_update_map_/insert_fn_imps.hpp | 4 +- .../list_update_map_/iterators_fn_imps.hpp | 2 +- .../pb_ds/detail/list_update_map_/lu_map_.hpp | 166 +- .../detail/list_update_map_/trace_fn_imps.hpp | 2 +- .../counter_lu_policy_imp.hpp | 51 - ...u_metadata.hpp => lu_counter_metadata.hpp} | 76 +- .../list_update_policy/mtf_lu_policy_imp.hpp | 55 - .../sample_update_policy.hpp | 52 +- .../pb_ds/detail/ov_tree_map_/cond_dtor.hpp | 74 - .../constructors_destructor_fn_imps.hpp | 92 +- .../detail/ov_tree_map_/debug_fn_imps.hpp | 5 +- .../detail/ov_tree_map_/erase_fn_imps.hpp | 36 +- .../detail/ov_tree_map_/info_fn_imps.hpp | 2 +- .../detail/ov_tree_map_/insert_fn_imps.hpp | 2 +- .../detail/ov_tree_map_/iterators_fn_imps.hpp | 14 +- .../detail/ov_tree_map_/node_iterators.hpp | 45 +- .../detail/ov_tree_map_/ov_tree_map_.hpp | 314 ++-- .../ov_tree_map_/policy_access_fn_imps.hpp | 4 +- .../ov_tree_map_/split_join_fn_imps.hpp | 15 +- .../ext/pb_ds/detail/ov_tree_map_/traits.hpp | 78 +- .../constructors_destructor_fn_imps.hpp | 31 +- .../detail/pairing_heap_/debug_fn_imps.hpp | 2 +- .../detail/pairing_heap_/erase_fn_imps.hpp | 2 +- .../detail/pairing_heap_/find_fn_imps.hpp | 3 +- .../detail/pairing_heap_/insert_fn_imps.hpp | 15 +- .../detail/pairing_heap_/pairing_heap_.hpp | 137 +- .../pairing_heap_/split_join_fn_imps.hpp | 19 +- .../pb_ds/detail/pat_trie_/child_iterator.hpp | 93 -- .../pat_trie_/cond_dtor_entry_dealtor.hpp | 79 - .../detail/pat_trie_/const_child_iterator.hpp | 111 -- .../constructors_destructor_fn_imps.hpp | 58 +- .../pb_ds/detail/pat_trie_/debug_fn_imps.hpp | 25 +- .../pb_ds/detail/pat_trie_/erase_fn_imps.hpp | 114 +- .../pb_ds/detail/pat_trie_/find_fn_imps.hpp | 134 +- .../ext/pb_ds/detail/pat_trie_/head.hpp | 129 -- .../pb_ds/detail/pat_trie_/info_fn_imps.hpp | 6 +- .../detail/pat_trie_/insert_join_fn_imps.hpp | 209 +-- .../pb_ds/detail/pat_trie_/internal_node.hpp | 603 -------- .../detail/pat_trie_/iterators_fn_imps.hpp | 12 +- .../ext/pb_ds/detail/pat_trie_/leaf.hpp | 169 -- .../ext/pb_ds/detail/pat_trie_/node_base.hpp | 131 -- .../pb_ds/detail/pat_trie_/node_iterators.hpp | 338 ---- .../ext/pb_ds/detail/pat_trie_/pat_trie_.hpp | 470 +++--- .../pb_ds/detail/pat_trie_/pat_trie_base.hpp | 1357 +++++++++++++++++ .../detail/pat_trie_/point_iterators.hpp | 484 ------ .../pat_trie_/policy_access_fn_imps.hpp | 12 +- .../detail/pat_trie_/r_erase_fn_imps.hpp | 6 +- .../pb_ds/detail/pat_trie_/rotate_fn_imps.hpp | 10 +- .../pb_ds/detail/pat_trie_/split_fn_imps.hpp | 160 +- .../pat_trie_/split_join_branch_bag.hpp | 93 -- ...ess_traits.hpp => synth_access_traits.hpp} | 149 +- .../pb_ds/detail/pat_trie_/trace_fn_imps.hpp | 16 +- .../ext/pb_ds/detail/pat_trie_/traits.hpp | 328 +--- .../pb_ds/detail/pat_trie_/update_fn_imps.hpp | 8 +- .../detail/priority_queue_base_dispatch.hpp | 61 +- .../constructors_destructor_fn_imps.hpp | 10 +- .../detail/rb_tree_map_/debug_fn_imps.hpp | 2 +- .../detail/rb_tree_map_/erase_fn_imps.hpp | 4 +- .../detail/rb_tree_map_/find_fn_imps.hpp | 2 +- .../detail/rb_tree_map_/info_fn_imps.hpp | 2 +- .../detail/rb_tree_map_/insert_fn_imps.hpp | 2 +- .../ext/pb_ds/detail/rb_tree_map_/node.hpp | 67 +- .../pb_ds/detail/rb_tree_map_/rb_tree_.hpp | 166 +- .../rb_tree_map_/split_join_fn_imps.hpp | 4 +- .../ext/pb_ds/detail/rb_tree_map_/traits.hpp | 86 +- .../constructors_destructor_fn_imps.hpp | 17 +- .../rc_binomial_heap_/debug_fn_imps.hpp | 14 +- .../rc_binomial_heap_/erase_fn_imps.hpp | 2 +- .../rc_binomial_heap_/insert_fn_imps.hpp | 2 +- .../ext/pb_ds/detail/rc_binomial_heap_/rc.hpp | 134 +- .../rc_binomial_heap_/rc_binomial_heap_.hpp | 124 +- .../rc_binomial_heap_/split_join_fn_imps.hpp | 8 +- .../rc_binomial_heap_/trace_fn_imps.hpp | 3 +- .../resize_policy/sample_resize_policy.hpp | 126 +- .../resize_policy/sample_resize_trigger.hpp | 145 +- .../resize_policy/sample_size_policy.hpp | 48 +- .../constructors_destructor_fn_imps.hpp | 10 +- .../detail/splay_tree_/debug_fn_imps.hpp | 2 +- .../detail/splay_tree_/erase_fn_imps.hpp | 6 +- .../pb_ds/detail/splay_tree_/find_fn_imps.hpp | 12 +- .../pb_ds/detail/splay_tree_/info_fn_imps.hpp | 2 +- .../detail/splay_tree_/insert_fn_imps.hpp | 2 +- .../ext/pb_ds/detail/splay_tree_/node.hpp | 27 +- .../detail/splay_tree_/splay_fn_imps.hpp | 62 +- .../pb_ds/detail/splay_tree_/splay_tree_.hpp | 164 +- .../detail/splay_tree_/split_join_fn_imps.hpp | 8 +- .../ext/pb_ds/detail/splay_tree_/traits.hpp | 82 +- .../ext/pb_ds/detail/standard_policies.hpp | 24 +- .../constructors_destructor_fn_imps.hpp | 19 +- .../pb_ds/detail/thin_heap_/debug_fn_imps.hpp | 4 +- .../pb_ds/detail/thin_heap_/erase_fn_imps.hpp | 58 +- .../pb_ds/detail/thin_heap_/find_fn_imps.hpp | 2 +- .../detail/thin_heap_/insert_fn_imps.hpp | 54 +- .../detail/thin_heap_/split_join_fn_imps.hpp | 20 +- .../pb_ds/detail/thin_heap_/thin_heap_.hpp | 185 +-- .../pb_ds/detail/thin_heap_/trace_fn_imps.hpp | 4 +- .../tree_policy/node_metadata_selector.hpp | 87 +- .../tree_policy/null_node_update_imp.hpp | 50 - .../tree_policy/order_statistics_imp.hpp | 58 +- .../tree_policy/sample_tree_node_update.hpp | 42 +- .../ext/pb_ds/detail/tree_trace_base.hpp | 110 +- .../trie_policy/node_metadata_selector.hpp | 87 +- .../trie_policy/null_node_update_imp.hpp | 50 - .../trie_policy/order_statistics_imp.hpp | 103 +- .../prefix_search_node_update_imp.hpp | 62 +- ...aits.hpp => sample_trie_access_traits.hpp} | 66 +- .../trie_policy/sample_trie_node_update.hpp | 44 +- .../detail/trie_policy/trie_policy_base.hpp | 156 +- ....hpp => trie_string_access_traits_imp.hpp} | 14 +- .../include/ext/pb_ds/detail/type_utils.hpp | 2 +- .../include/ext/pb_ds/detail/types_traits.hpp | 266 +++- .../unordered_iterator/const_iterator.hpp | 12 +- .../detail/unordered_iterator/iterator.hpp | 2 +- ..._iterator.hpp => point_const_iterator.hpp} | 16 +- .../unordered_iterator/point_iterator.hpp | 6 +- .../include/ext/pb_ds/hash_policy.hpp | 36 +- .../include/ext/pb_ds/list_update_policy.hpp | 140 +- .../include/ext/pb_ds/priority_queue.hpp | 50 +- .../include/ext/pb_ds/tag_and_trait.hpp | 311 ++-- .../include/ext/pb_ds/tree_policy.hpp | 80 +- .../include/ext/pb_ds/trie_policy.hpp | 228 ++- libstdc++-v3/scripts/make_graph.py | 18 +- libstdc++-v3/scripts/run_doxygen | 4 + .../testsuite/data/make_graph_test_infos.xml | 1 - .../ext/pb_ds/example/basic_multimap.cc | 2 +- .../ext/pb_ds/example/basic_priority_queue.cc | 4 +- .../testsuite/ext/pb_ds/example/basic_set.cc | 12 +- .../ext/pb_ds/example/ranged_hash.cc | 4 +- .../ext/pb_ds/example/tree_intervals.cc | 24 +- .../pb_ds/example/tree_order_statistics.cc | 2 +- .../testsuite/ext/pb_ds/example/trie_dna.cc | 10 +- .../ext/pb_ds/example/trie_prefix_search.cc | 4 +- .../regression/hash_data_map_rand_debug.cc | 189 +++ .../regression/hash_no_data_map_rand_debug.cc | 189 +++ .../regression/list_update_data_map_rand.cc | 2 +- .../list_update_data_map_rand_debug.cc | 116 ++ .../list_update_no_data_map_rand_debug.cc | 116 ++ .../regression/priority_queue_rand_debug.cc | 142 ++ .../regression/tree_data_map_rand_debug.cc | 144 ++ .../regression/tree_no_data_map_rand_debug.cc | 144 ++ .../regression/trie_data_map_rand_debug.cc | 131 ++ .../regression/trie_no_data_map_rand_debug.cc | 131 ++ .../pb_ds/hash_random_int_erase_mem_usage.cc | 4 +- .../priority_queue_text_pop_mem_usage.cc | 15 +- .../ext/pb_ds/tree_order_statistics_timing.cc | 4 +- .../ext/pb_ds/tree_split_join_timing.cc | 4 +- .../util/common_type/assoc/common_type.hpp | 296 ++-- .../assoc/detail/ds_string_form.hpp | 6 +- .../detail/list_update_policy_string_form.hpp | 10 +- .../assoc/detail/probe_fn_string_form.hpp | 12 +- .../assoc/detail/size_policy_string_form.hpp | 4 +- .../detail/tree_supports_order_statistics.hpp | 2 +- .../detail/trie_supports_order_statistics.hpp | 4 +- .../detail/trie_supports_prefix_search.hpp | 4 +- .../detail/trigger_policy_string_form.hpp | 20 +- .../util/common_type/assoc/native_set.hpp | 4 +- .../util/common_type/assoc/string_form.hpp | 4 +- .../common_type/assoc/template_policy.hpp | 60 +- .../priority_queue/common_type.hpp | 12 +- .../util/native_type/native_hash_map.hpp | 4 +- .../util/native_type/native_hash_multimap.hpp | 6 +- .../util/native_type/native_hash_set.hpp | 4 +- .../testsuite/util/native_type/native_map.hpp | 4 +- .../util/native_type/native_multimap.hpp | 8 +- .../native_type/native_priority_queue.hpp | 18 +- .../testsuite/util/native_type/native_set.hpp | 4 +- .../assoc/multimap_common_type.hpp | 56 +- .../performance/assoc/timing/common_type.hpp | 4 +- .../assoc/timing/multimap_find_test.hpp | 2 +- .../testsuite/util/regression/common_type.hpp | 33 +- .../assoc/container_rand_regression_test.h | 2 +- .../assoc/container_rand_regression_test.tcc | 61 +- .../rand/assoc/rand_regression_test.hpp | 28 +- .../container_rand_regression_test.tcc | 14 +- .../priority_queue/rand_regression_test.hpp | 25 +- .../trait/assoc/native_type_trait.hpp | 50 +- .../util/regression/trait/assoc/trait.hpp | 10 +- .../regression/trait/assoc/type_trait.hpp | 12 +- .../testsuite/util/testsuite_containers.h | 2 +- 360 files changed, 9174 insertions(+), 10122 deletions(-) rename libstdc++-v3/doc/html/ext/pb_ds/{sample_trie_e_access_traits.html => sample_trie_access_traits.html} (100%) rename libstdc++-v3/doc/html/ext/pb_ds/{string_trie_e_access_traits.html => trie_string_access_traits.html} (100%) delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/basic_types.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp rename libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/{const_point_iterator.hpp => point_const_iterator.hpp} (80%) create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/branch_policy/branch_policy.hpp rename libstdc++-v3/include/ext/pb_ds/detail/{left_child_next_sibling_heap_/null_metadata.hpp => branch_policy/null_node_metadata.hpp} (69%) rename libstdc++-v3/include/ext/pb_ds/detail/{pat_trie_/node_metadata_base.hpp => branch_policy/traits.hpp} (51%) rename libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/{const_point_iterator.hpp => point_const_iterator.hpp} (82%) delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp rename libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/{counter_lu_metadata.hpp => lu_counter_metadata.hpp} (64%) delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/head.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/leaf.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_base.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp create mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp rename libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/{synth_e_access_traits.hpp => synth_access_traits.hpp} (50%) delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp delete mode 100644 libstdc++-v3/include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp rename libstdc++-v3/include/ext/pb_ds/detail/trie_policy/{sample_trie_e_access_traits.hpp => sample_trie_access_traits.hpp} (67%) rename libstdc++-v3/include/ext/pb_ds/detail/trie_policy/{string_trie_e_access_traits_imp.hpp => trie_string_access_traits_imp.hpp} (88%) rename libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/{const_point_iterator.hpp => point_const_iterator.hpp} (89%) create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/hash_data_map_rand_debug.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/hash_no_data_map_rand_debug.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand_debug.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_no_data_map_rand_debug.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/tree_data_map_rand_debug.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/tree_no_data_map_rand_debug.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/trie_data_map_rand_debug.cc create mode 100644 libstdc++-v3/testsuite/ext/pb_ds/regression/trie_no_data_map_rand_debug.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 76afc47d46f..9c1cc0396e4 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,512 @@ +2011-05-23 Benjamin Kosnik + + PR libstdc++/37144 + PR libstdc++/28457 + Interface changes for ext/pb_ds. + PB_DS_BASE_C_DEC to unique PB_DS_*_BASE macros. + * include/ext/pb_ds/assoc_container.hpp (container_base): Remove. + (basic_hash_table, basic_branch, list_update): Derive from + container_base_dispatch. + * include/ext/pb_ds/list_update_policy.hpp (null_lu_metadata): Remove. + (move_to_front_lu_policy): To lu_move_to_front_policy. + (counter_lu_policy): To lu_counter_policy. + * include/ext/pb_ds/tree_policy.hpp (null_tree_node_update): Remove. + * include/ext/pb_ds/tag_and_trait.hpp (container_base_dispatch): Adjust + template parameters, declare here. + (null_mapped_type) Remove. + (null_type): Just use this for template tricks everywhere. + * include/ext/pb_ds/hash_policy.hpp (null_hash_fn, null_probe_fn): + Remove. + * include/ext/pb_ds/trie_policy.hpp (null_trie_node_update): Remove. + (string_trie_e_access_traits): To trie_string_access_traits. + * include/ext/pb_ds/priority_queue.hpp: Use container_base_dispatch. + + File changes. + * include/Makefile.am (pb_headers): Removed and changed file names. + * include/Makefile.in: Regenerated. + * include/ext/pb_ds/detail/basic_types.hpp: Remove. + * include/ext/pb_ds/detail/bin_search_tree_/ + cond_dtor_entry_dealtor.hpp: Remove. + * include/ext/pb_ds/detail/bin_search_tree_/ + cond_key_dtor_entry_dealtor.hpp: Remove. + * include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp: Move.. + * include/ext/pb_ds/detail/binary_heap_/ + point_const_iterator.hpp: ..here. + * include/ext/pb_ds/detail/basic_tree_policy: Move to... + * include/ext/pb_ds/detail/branch_policy: This. + * include/ext/pb_ds/detail/branch_policy/ + basic_tree_policy_base.hpp: Move... + * include/ext/pb_ds/detail/branch_policy/branch_policy.hpp: ...here. + * include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp: Add. + * include/ext/pb_ds/detail/branch_policy/traits.hpp: Add. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + null_metadata.hpp: Remove. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + const_point_iterator.hpp: Move... + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + point_const_iterator.hpp: ...here. + * include/ext/pb_ds/detail/list_update_policy/ + counter_lu_metadata.hpp: Move.. + * include/ext/pb_ds/detail/list_update_policy/ + lu_counter_metadata.hpp: ...here. + * include/ext/pb_ds/detail/list_update_policy/ + counter_lu_policy_imp.hpp: Remove. + * include/ext/pb_ds/detail/list_update_policy/ + mtf_lu_policy_imp.hpp: Remove. + * include/ext/pb_ds/detail/trie_policy/ + string_trie_e_access_traits_imp.hpp: Move... + * include/ext/pb_ds/detail/trie_policy/ + sample_trie_access_traits.hpp: ...here. + * include/ext/pb_ds/detail/trie_policy/ + sample_trie_e_access_traits.hpp: Move... + * include/ext/pb_ds/detail/trie_policy/ + trie_string_access_traits_imp.hpp: ...here. + * include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp: Remove. + * include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp: Remove. + * include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp: Remove. + * include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp: New, fold all + types found in the following files into pat_trie_base. + * include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp: Folded. + * include/ext/pb_ds/detail/pat_trie_/ + cond_dtor_entry_dealtor.hpp: Folded. + * include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp: Folded. + * include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp: Folded. + * include/ext/pb_ds/detail/pat_trie_/head.hpp: Folded. + * include/ext/pb_ds/detail/pat_trie_/leaf.hpp: Folded. + * include/ext/pb_ds/detail/pat_trie_/node_base.hpp: Folded. + * include/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp: Folded. + * include/ext/pb_ds/detail/pat_trie_/internal_node.hpp: Folded. + * include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp: Folded. + * include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp: Folded. + * include/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp: Move... + * include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp: ...here. + * include/ext/pb_ds/detail/unordered_iterator/ + const_point_iterator.hpp: Move... + * include/ext/pb_ds/detail/unordered_iterator/ + point_const_iterator.hpp: ...here. + + + Adjust for above changes. + * include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp: Same. + * include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp: Same. + * include/ext/pb_ds/detail/resize_policy/ + sample_resize_trigger.hpp: Same. + * include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binomial_heap_base_/ + binomial_heap_base_.hpp: Same. + * include/ext/pb_ds/detail/binomial_heap_base_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binomial_heap_base_/ + split_join_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/container_base_dispatch.hpp: Same. Adjust + for template parameter ordering change. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + erase_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + constructor_destructor_no_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + insert_no_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + policy_access_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + resize_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + constructor_destructor_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + insert_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + entry_list_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + find_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + debug_no_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + constructor_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + cond_key_dtor_entry_dealtor.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + debug_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + erase_no_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + iterators_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + resize_no_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/cc_hash_table_map_/ + standard_policies.hpp: Same. + * include/ext/pb_ds/detail/tree_trace_base.hpp: Same. + * include/ext/pb_ds/detail/unordered_iterator/iterator.hpp: Same. + * include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp: Same. + * include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/traits.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/ + policy_access_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/traits.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/ + split_join_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/list_update_policy/ + sample_update_policy.hpp: Same. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + trace_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + erase_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + constructor_destructor_no_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + insert_no_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + policy_access_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + resize_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + constructor_destructor_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + insert_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + iterator_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + find_no_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + find_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + debug_no_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + constructor_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + debug_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + erase_no_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + resize_no_store_hash_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/gp_hash_table_map_/ + standard_policies.hpp: Same. + * include/ext/pb_ds/detail/standard_policies.hpp: Same. + * include/ext/pb_ds/detail/types_traits.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp: Same. + * include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp: Same. + * include/ext/pb_ds/detail/tree_policy/ + sample_tree_node_update.hpp: Same. + * include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp: Same. + * include/ext/pb_ds/detail/trie_policy/ + sample_trie_node_update.hpp: Same. + * include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp: Same. + * include/ext/pb_ds/detail/trie_policy/ + prefix_search_node_update_imp.hpp: Same. + * include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp: Same. + * include/ext/pb_ds/detail/cond_dealtor.hpp: Same. + * include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp: Same. + Adjust for template parameter change, fold into + container_base_dispatch. + * include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pairing_heap_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp: Same. + * include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binomial_heap_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp: Same. + * include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/type_utils.hpp: Same. + * include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp: Same. + * include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp: Same. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + policy_access_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + left_child_next_sibling_heap_.hpp: Same. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + const_iterator.hpp: Same. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + node.hpp: Same. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + info_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ + iterators_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp: Same. + * include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/thin_heap_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp: Same. + * include/ext/pb_ds/detail/ov_tree_map_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp: Same. + * include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/ov_tree_map_/traits.hpp: Same. + * include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/debug_map_base.hpp: Same. + * include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp: Same. + * include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp: Same. + * include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp: Same. + * include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp: Same. + * include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp: Same. + * include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp: Same. + * include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp: Same. + * include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/splay_tree_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/splay_tree_/node.hpp: Same. + * include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp: Same. + * include/ext/pb_ds/detail/splay_tree_/traits.hpp: Same. + * include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/list_update_map_/ + entry_metadata_base.hpp: Same. + * include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp: Same. + * include/ext/pb_ds/detail/list_update_map_/ + constructor_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rc_binomial_heap_/ + rc_binomial_heap_.hpp: Same. + * include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rc_binomial_heap_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp: Same. + * include/ext/pb_ds/detail/rc_binomial_heap_/ + split_join_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rb_tree_map_/ + constructors_destructor_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp: Same. + * include/ext/pb_ds/detail/rb_tree_map_/node.hpp: Same. + * include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp: Same. + * include/ext/pb_ds/detail/rb_tree_map_/traits.hpp: Same. + + + Documentation changes. + * include/ext/pb_ds/*: Add doxygen markup. + * doc/doxygen/user.cfg.in: Add details for extracting comments + from pb_ds. + * scripts/run_doxygen: Fixup __gnu_pb_ds::detail. + * scripts/make_graph.py: Move to svg output. Re-format generated tables. + + * doc/Makefile.am (stamp-html-copy): New rule. + (stamp-html): Use it to copy non-generated files into html docs. + * doc/Makefile.in: Regenerated. + + * doc/html/ext/pb_ds/sample_trie_e_access_traits.html: Move... + * doc/html/ext/pb_ds/trie_string_access_traits.html: ...here. + * doc/html/ext/pb_ds/string_trie_e_access_traits.html: Move.. + * doc/html/ext/pb_ds/sample_trie_access_traits.html: ...here. + + * doc/html/ext/pb_ds/tree_text_lor_find_timing_test_local.png, + hash_random_int_erase_mem_usage_test_local.png, + multimap_text_insert_mem_usage_test_small_s2p_hash_local.png, + tree_text_insert_timing_test_pat_trie_local.png , + multimap_text_insert_mem_usage_test_small_s2p_tree_local.png , + priority_queue_text_modify_down_timing_test_local.png, + gp_hash_random_int_subscript_timing_test_find_local.png, + text_find_timing_test_hash_local.png, + multimap_text_insert_timing_test_small_s2p_hash_local.png, + multimap_text_insert_timing_test_small_s2p_tree_local.png, + multimap_text_insert_mem_usage_test_large_s2p_hash_local.png, + multimap_text_insert_mem_usage_test_large_s2p_tree_local.png, + multimap_text_insert_timing_test_large_s2p_hash_local.png, + hash_zlob_random_int_find_timing_test_local.png, + multimap_text_insert_timing_test_large_s2p_tree_local.png, + binary_priority_queue_random_int_push_timing_test_local.png, + priority_queue_text_pop_mem_usage_test_local.png, + priority_queue_text_modify_down_timing_test_pairing_thin_local.png, + tree_split_join_timing_test_local.png, + multimap_text_find_timing_test_small_s2p_hash_local.png, + ccgp_hash_random_int_subscript_timing_test_insert_local.png, + priority_queue_random_int_push_pop_timing_test_local.png, + multimap_text_find_timing_test_small_s2p_tree_local.png, + gp_hash_random_int_subscript_timing_test_insert_local.png, + priority_queue_text_push_timing_test_local.png, + cc_hash_random_int_subscript_timing_test_find_local.png, + tree_text_insert_timing_test_vector_tree_local.png, + multimap_text_find_timing_test_large_s2p_hash_local.png, + pairing_priority_queue_text_push_timing_test_local.png, + tree_order_statistics_timing_test_local.png, + priority_queue_text_push_pop_timing_test_local.png, + text_find_timing_test_tree_like_local.png, + multimap_text_find_timing_test_large_s2p_tree_local.png, + priority_queue_text_modify_up_timing_test_pairing_thin_local.png, + cc_hash_random_int_subscript_timing_test_insert_local.png, + priority_queue_text_modify_up_timing_test_local.png, + random_int_find_find_timing_test_tree_local.png, + priority_queue_random_int_push_timing_test_local.png, + tree_text_insert_timing_test_node_tree_local.png, + pairing_priority_queue_text_push_pop_timing_test_local.png, + gp_hash_random_int_find_timing_test_local.png, + cc_hash_random_int_find_timing_test_local.png, + priority_queue_text_join_timing_test_local.png: Update local pngs. + + + Testsuite changes. + * testsuite/ext/pb_ds/regression/tree_no_data_map_rand_debug.cc: New. + * testsuite/ext/pb_ds/regression/tree_data_map_rand_debug.cc: New. + * testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc: New. + * testsuite/ext/pb_ds/regression/trie_no_data_map_rand_debug.cc: New. + * testsuite/ext/pb_ds/regression/trie_data_map_rand_debug.cc: New. + * testsuite/ext/pb_ds/regression/list_update_no_data_map_rand_debug.cc: + New. + * testsuite/ext/pb_ds/regression/list_update_data_map_rand_debug.cc: + New. + * testsuite/ext/pb_ds/regression/hash_no_data_map_rand_debug.cc: New. + * testsuite/ext/pb_ds/regression/hash_data_map_rand_debug.cc: New. + + * testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc: Fix typo. + + * testsuite/ext/pb_ds/example/basic_set.cc: Update. + * testsuite/ext/pb_ds/example/ranged_hash.cc: Same. + * testsuite/ext/pb_ds/example/tree_order_statistics.cc: Same. + * testsuite/ext/pb_ds/example/trie_prefix_search.cc: Same. + * testsuite/ext/pb_ds/example/trie_dna.cc: Same. + * testsuite/ext/pb_ds/example/tree_intervals.cc: Same. + * testsuite/ext/pb_ds/example/basic_multimap.cc: Same. + * testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc: + Same. + * testsuite/performance/ext/pb_ds/tree_split_join_timing.cc: Same. + * testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc: Same. + * testsuite/data/make_graph_test_infos.xml: Same. + * testsuite/util/regression/common_type.hpp: Same. + * testsuite/util/regression/trait/assoc/native_type_trait.hpp: Same. + * testsuite/util/regression/trait/assoc/trait.hpp: Same. + * testsuite/util/regression/trait/assoc/type_trait.hpp: Same. + * testsuite/util/regression/rand/priority_queue/ + rand_regression_test.hpp: Same. + * testsuite/util/regression/rand/priority_queue/ + container_rand_regression_test.tcc: Same. + * testsuite/util/regression/rand/assoc/rand_regression_test.hpp: Same. + * testsuite/util/regression/rand/assoc/container_rand_regression_test.h + * testsuite/util/regression/rand/assoc/ + container_rand_regression_test.tcc: Same. + * testsuite/util/native_type/native_priority_queue.hpp: Same. + * testsuite/util/native_type/native_multimap.hpp: Same. + * testsuite/util/native_type/native_hash_multimap.hpp: Same. + * testsuite/util/native_type/native_set.hpp: Same. + * testsuite/util/native_type/native_map.hpp: Same. + * testsuite/util/native_type/native_hash_set.hpp: Same. + * testsuite/util/native_type/native_hash_map.hpp: Same. + * testsuite/util/testsuite_containers.h + * testsuite/util/common_type/priority_queue/common_type.hpp: Same. + * testsuite/util/common_type/assoc/common_type.hpp: Same. + * testsuite/util/common_type/assoc/string_form.hpp: Same. + * testsuite/util/common_type/assoc/template_policy.hpp: Same. + * testsuite/util/common_type/assoc/detail/ + trigger_policy_string_form.hpp: Same. + * testsuite/util/common_type/assoc/detail/ds_string_form.hpp: Same. + * testsuite/util/common_type/assoc/detail/ + size_policy_string_form.hpp: Same. + * testsuite/util/common_type/assoc/detail/ + probe_fn_string_form.hpp: Same. + * testsuite/util/common_type/assoc/detail/ + tree_supports_order_statistics.hpp: Same. + * testsuite/util/common_type/assoc/detail/ + trie_supports_prefix_search.hpp: Same. + * testsuite/util/common_type/assoc/detail/ + list_update_policy_string_form.hpp: Same. + * testsuite/util/common_type/assoc/detail/ + trie_supports_order_statistics.hpp: Same. + * testsuite/util/common_type/assoc/native_set.hpp: Same. + * testsuite/util/performance/assoc/timing/common_type.hpp: Same. + * testsuite/util/performance/assoc/timing/multimap_find_test.hpp: Same. + * testsuite/util/performance/assoc/multimap_common_type.hpp: Same. + 2011-05-23 Paolo Carlini * include/bits/streambuf_iterator.h: Use noexcept per the FDIS. diff --git a/libstdc++-v3/doc/Makefile.am b/libstdc++-v3/doc/Makefile.am index b564f1cff41..7e75cc71d21 100644 --- a/libstdc++-v3/doc/Makefile.am +++ b/libstdc++-v3/doc/Makefile.am @@ -136,9 +136,17 @@ doc-install-xml: doc-xml # HTML htmldir="$(DESTDIR)@docdir@" -stamp-html: stamp-html-docbook stamp-html-doxygen +stamp-html: stamp-html-copy stamp-html-doxygen $(STAMP) stamp-html +copydir=${docbook_outdir}/html/manual/ext/ +stamp-html-copy: stamp-html-docbook + cp -r ${top_srcdir}/doc/html/ext ${docbook_outdir}/html/manual/ext + cd ${docbook_outdir}/html/manual/ext + rm -rf ${docbook_outdir}/html/manual/ext/.svn + rm -rf ${docbook_outdir}/html/manual/ext/pb_ds/.svn + $(STAMP) stamp-html-copy + doc-html: stamp-html doc-install-html: doc-html diff --git a/libstdc++-v3/doc/Makefile.in b/libstdc++-v3/doc/Makefile.in index e17773370d1..8247b60a91a 100644 --- a/libstdc++-v3/doc/Makefile.in +++ b/libstdc++-v3/doc/Makefile.in @@ -324,6 +324,7 @@ AM_CPPFLAGS = $(GLIBCXX_INCLUDES) # XML xmldir = "$(DESTDIR)@docdir@" +copydir = ${docbook_outdir}/html/manual/ext/ # EPUB # Assumes ruby installed @@ -649,8 +650,14 @@ doc-install-xml: doc-xml test -z ${xmldir} || $(mkinstalldirs) ${xmldir} $(INSTALL_DATA) ${manual_xml} ${xmldir} $(INSTALL_DATA) ${api_xml} ${xmldir} -stamp-html: stamp-html-docbook stamp-html-doxygen +stamp-html: stamp-html-copy stamp-html-doxygen $(STAMP) stamp-html +stamp-html-copy: stamp-html-docbook + cp -r ${top_srcdir}/doc/html/ext ${docbook_outdir}/html/manual/ext + cd ${docbook_outdir}/html/manual/ext + rm -rf ${docbook_outdir}/html/manual/ext/.svn + rm -rf ${docbook_outdir}/html/manual/ext/pb_ds/.svn + $(STAMP) stamp-html-copy doc-html: stamp-html diff --git a/libstdc++-v3/doc/doxygen/user.cfg.in b/libstdc++-v3/doc/doxygen/user.cfg.in index 920a4cd4acf..6332dc19909 100644 --- a/libstdc++-v3/doc/doxygen/user.cfg.in +++ b/libstdc++-v3/doc/doxygen/user.cfg.in @@ -1,4 +1,4 @@ -# Doxyfile 1.7.2 +# Doxyfile 1.7.4 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -33,6 +33,19 @@ PROJECT_NAME = libstdc++ PROJECT_NUMBER = +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location @@ -57,7 +70,7 @@ CREATE_SUBDIRS = NO # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English @@ -179,10 +192,9 @@ TAB_SIZE = 4 # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. -ALIASES = doctodo="@todo\nNeeds documentation! See http://gcc.gnu.org/onlinedocs/libstdc++/manual/documentation_style.html" - -ALIASES += headername{1}="Instead, include <\1>." -ALIASES += headername{2}="Instead, include <\1> or <\2>." +ALIASES = "doctodo=@todo\nNeeds documentation! See http://gcc.gnu.org/onlinedocs/libstdc++/manual/documentation_style.html" \ + "headername{1}=Instead, include <\1>." \ + "headername{2}=Instead, include <\1> or <\2>." # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. @@ -266,6 +278,13 @@ DISTRIBUTE_GROUP_DOC = YES SUBGROUPING = YES +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct @@ -282,7 +301,7 @@ TYPEDEF_HIDES_STRUCT = NO # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. +# causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the @@ -441,6 +460,15 @@ SORT_GROUP_NAMES = YES SORT_BY_SCOPE_NAME = YES +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. @@ -585,142 +613,165 @@ WARN_LOGFILE = # with spaces. INPUT = @srcdir@/doc/doxygen/doxygroups.cc \ - @srcdir@/libsupc++/cxxabi.h \ - @srcdir@/libsupc++/exception \ - @srcdir@/libsupc++/initializer_list \ - @srcdir@/libsupc++/new \ - @srcdir@/libsupc++/typeinfo \ - include/algorithm \ - include/array \ - include/atomic \ - include/bitset \ - include/chrono \ - include/complex \ - include/condition_variable \ - include/deque \ - include/forward_list \ - include/fstream \ - include/functional \ - include/future \ - include/iomanip \ - include/ios \ - include/iosfwd \ - include/iostream \ - include/istream \ - include/iterator \ - include/limits \ - include/list \ - include/locale \ - include/map \ - include/memory \ - include/mutex \ - include/numeric \ - include/ostream \ - include/queue \ - include/random \ - include/ratio \ - include/regex \ - include/set \ - include/sstream \ - include/stack \ - include/stdexcept \ - include/streambuf \ - include/string \ - include/system_error \ - include/thread \ - include/tuple \ - include/typeindex \ - include/type_traits \ - include/unordered_map \ - include/unordered_set \ - include/utility \ - include/valarray \ - include/vector \ - include/cassert \ - include/ccomplex \ - include/cctype \ - include/cerrno \ - include/cfenv \ - include/cfloat \ - include/cinttypes \ - include/ciso646 \ - include/climits \ - include/clocale \ - include/cmath \ - include/csetjmp \ - include/csignal \ - include/cstdarg \ - include/cstdbool \ - include/cstddef \ - include/cstdint \ - include/cstdio \ - include/cstdlib \ - include/cstring \ - include/ctgmath \ - include/ctime \ - include/cwchar \ - include/cwctype \ - include/backward/hash_map \ - include/backward/hash_set \ - include/backward/strstream \ - include/debug/bitset \ - include/debug/deque \ - include/debug/forward_list \ - include/debug/list \ - include/debug/map \ - include/debug/set \ - include/debug/string \ - include/debug/unordered_map \ - include/debug/unordered_set \ - include/debug/vector \ - include/profile/bitset \ - include/profile/deque \ - include/profile/forward_list \ - include/profile/list \ - include/profile/map \ - include/profile/set \ - include/profile/unordered_map \ - include/profile/unordered_set \ - include/profile/vector \ - include/ext/algorithm \ - include/ext/functional \ - include/ext/iterator \ - include/ext/memory \ - include/ext/numeric \ - include/ext/rb_tree \ - include/ext/rope \ - include/ext/slist \ - include/parallel/algorithm \ - include/parallel/numeric \ - include/tr1/ccomplex \ - include/tr1/cctype \ - include/tr1/cfenv \ - include/tr1/cfloat \ - include/tr1/cinttypes \ - include/tr1/climits \ - include/tr1/cmath \ - include/tr1/complex \ - include/tr1/cstdarg \ - include/tr1/cstdbool \ - include/tr1/cstdint \ - include/tr1/cstdio \ - include/tr1/cstdlib \ - include/tr1/ctgmath \ - include/tr1/ctime \ - include/tr1/cwchar \ - include/tr1/cwctype \ - include/decimal/decimal \ - include/ \ - include/@host_alias@/bits \ - include/backward \ - include/bits \ - include/debug \ - include/parallel \ - include/profile \ - include/profile/impl \ - include/ext \ - include/ext/pb_ds \ - include/ext/pb_ds/detail + @srcdir@/libsupc++/cxxabi.h \ + @srcdir@/libsupc++/exception \ + @srcdir@/libsupc++/initializer_list \ + @srcdir@/libsupc++/new \ + @srcdir@/libsupc++/typeinfo \ + include/algorithm \ + include/array \ + include/atomic \ + include/bitset \ + include/chrono \ + include/complex \ + include/condition_variable \ + include/deque \ + include/forward_list \ + include/fstream \ + include/functional \ + include/future \ + include/iomanip \ + include/ios \ + include/iosfwd \ + include/iostream \ + include/istream \ + include/iterator \ + include/limits \ + include/list \ + include/locale \ + include/map \ + include/memory \ + include/mutex \ + include/numeric \ + include/ostream \ + include/queue \ + include/random \ + include/ratio \ + include/regex \ + include/set \ + include/sstream \ + include/stack \ + include/stdexcept \ + include/streambuf \ + include/string \ + include/system_error \ + include/thread \ + include/tuple \ + include/typeindex \ + include/type_traits \ + include/unordered_map \ + include/unordered_set \ + include/utility \ + include/valarray \ + include/vector \ + include/cassert \ + include/ccomplex \ + include/cctype \ + include/cerrno \ + include/cfenv \ + include/cfloat \ + include/cinttypes \ + include/ciso646 \ + include/climits \ + include/clocale \ + include/cmath \ + include/csetjmp \ + include/csignal \ + include/cstdarg \ + include/cstdbool \ + include/cstddef \ + include/cstdint \ + include/cstdio \ + include/cstdlib \ + include/cstring \ + include/ctgmath \ + include/ctime \ + include/cwchar \ + include/cwctype \ + include/ \ + include/bits \ + include/@host_alias@/bits \ + include/backward \ + include/backward/hash_map \ + include/backward/hash_set \ + include/backward/strstream \ + include/debug \ + include/debug/bitset \ + include/debug/deque \ + include/debug/forward_list \ + include/debug/list \ + include/debug/map \ + include/debug/set \ + include/debug/string \ + include/debug/unordered_map \ + include/debug/unordered_set \ + include/debug/vector \ + include/profile \ + include/profile/impl \ + include/profile/bitset \ + include/profile/deque \ + include/profile/forward_list \ + include/profile/list \ + include/profile/map \ + include/profile/set \ + include/profile/unordered_map \ + include/profile/unordered_set \ + include/profile/vector \ + include/ext/algorithm \ + include/ext/functional \ + include/ext/iterator \ + include/ext/memory \ + include/ext/numeric \ + include/ext/rb_tree \ + include/ext/rope \ + include/ext/slist \ + include/parallel \ + include/parallel/algorithm \ + include/parallel/numeric \ + include/tr1/ccomplex \ + include/tr1/cctype \ + include/tr1/cfenv \ + include/tr1/cfloat \ + include/tr1/cinttypes \ + include/tr1/climits \ + include/tr1/cmath \ + include/tr1/complex \ + include/tr1/cstdarg \ + include/tr1/cstdbool \ + include/tr1/cstdint \ + include/tr1/cstdio \ + include/tr1/cstdlib \ + include/tr1/ctgmath \ + include/tr1/ctime \ + include/tr1/cwchar \ + include/tr1/cwctype \ + include/decimal/decimal \ + include/ext \ + include/ext/pb_ds \ + include/ext/pb_ds/detail \ + include/ext/pb_ds/detail/binary_heap_ \ + include/ext/pb_ds/detail/binomial_heap_ \ + include/ext/pb_ds/detail/binomial_heap_base_ \ + include/ext/pb_ds/detail/bin_search_tree_ \ + include/ext/pb_ds/detail/branch_policy \ + include/ext/pb_ds/detail/cc_hash_table_map_ \ + include/ext/pb_ds/detail/eq_fn \ + include/ext/pb_ds/detail/gp_hash_table_map_ \ + include/ext/pb_ds/detail/hash_fn \ + include/ext/pb_ds/detail/left_child_next_sibling_heap_ \ + include/ext/pb_ds/detail/list_update_map_ \ + include/ext/pb_ds/detail/list_update_policy \ + include/ext/pb_ds/detail/ov_tree_map_ \ + include/ext/pb_ds/detail/pairing_heap_ \ + include/ext/pb_ds/detail/pat_trie_ \ + include/ext/pb_ds/detail/rb_tree_map_ \ + include/ext/pb_ds/detail/rc_binomial_heap_ \ + include/ext/pb_ds/detail/resize_policy \ + include/ext/pb_ds/detail/splay_tree_ \ + include/ext/pb_ds/detail/thin_heap_ \ + include/ext/pb_ds/detail/tree_policy \ + include/ext/pb_ds/detail/trie_policy \ + include/ext/pb_ds/detail/unordered_iterator # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is @@ -736,11 +787,11 @@ INPUT_ENCODING = UTF-8 # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.vhd *.vhdl +# *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.h \ - *.hpp \ - *.tcc + *.hpp \ + *.tcc # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. @@ -755,7 +806,7 @@ RECURSIVE = NO EXCLUDE = Makefile # The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded +# directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO @@ -766,9 +817,10 @@ EXCLUDE_SYMLINKS = NO # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* -EXCLUDE_PATTERNS = stamp-* doxygroups.cc \ - *.gch \ - */.svn/* +EXCLUDE_PATTERNS = stamp-* \ + doxygroups.cc \ + *.gch \ + */.svn/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the @@ -821,8 +873,8 @@ INPUT_FILTER = # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = @@ -832,6 +884,14 @@ FILTER_PATTERNS = FILTER_SOURCE_FILES = NO +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- @@ -934,7 +994,13 @@ HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a -# standard header. +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is adviced to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when changing the value of configuration settings such as GENERATE_TREEVIEW! HTML_HEADER = @@ -953,6 +1019,15 @@ HTML_FOOTER = HTML_STYLESHEET = +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the stylesheet and background images # according to this color. Hue is specified as an angle on a colorwheel, @@ -1155,9 +1230,10 @@ ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = YES -# This tag can be used to set the number of enum values (range [0,1..20]) -# that doxygen will group on one line in the generated HTML documentation. -# Note that a value of 0 will completely suppress the enum values from appearing in the overview section. +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 @@ -1216,7 +1292,8 @@ USE_MATHJAX = NO # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the mathjax.org site, so you can quickly see the result without installing +# MATHJAX_RELPATH should be ../mathjax. The default value points to the +# mathjax.org site, so you can quickly see the result without installing # MathJax, but it is strongly recommended to install a local copy of MathJax # before deployment. @@ -1295,6 +1372,13 @@ EXTRA_PACKAGES = amsmath LATEX_HEADER = +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references @@ -1504,7 +1588,7 @@ MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. +# pointed to by INCLUDE_PATH will be searched when a #include is found. SEARCH_INCLUDES = YES @@ -1512,7 +1596,7 @@ SEARCH_INCLUDES = YES # contain include files that are not input files but should be processed by # the preprocessor. -INCLUDE_PATH = +INCLUDE_PATH = include # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the @@ -1530,57 +1614,59 @@ INCLUDE_FILE_PATTERNS = # instead of the = operator. PREDEFINED = __cplusplus \ - __GTHREADS \ - _GLIBCXX_HAS_GTHREADS \ - __GXX_EXPERIMENTAL_CXX0X__ \ - _GLIBCXX_INCLUDE_AS_CXX0X \ - "_GLIBCXX_PURE= " \ - "_GLIBCXX_CONST= " \ - "_GLIBCXX_NORETURN= " \ - "_GLIBCXX_NOTHROW= " \ - "_GLIBCXX_STD_C= " \ - "_GLIBCXX_STD_A= " \ + __GTHREADS \ + _GLIBCXX_HAS_GTHREADS \ + __GXX_EXPERIMENTAL_CXX0X__ \ + _GLIBCXX_INCLUDE_AS_CXX0X \ + "_GLIBCXX_PURE= " \ + "_GLIBCXX_CONST= " \ + "_GLIBCXX_NORETURN= " \ + "_GLIBCXX_NOTHROW= " \ + "_GLIBCXX_STD_C= " \ + "_GLIBCXX_STD_A= " \ "_GLIBCXX_VISIBILITY(V)= " \ - "_GLIBCXX_BEGIN_NAMESPACE_VERSION= " \ - "_GLIBCXX_BEGIN_NAMESPACE_ALGO= " \ - "_GLIBCXX_BEGIN_NAMESPACE_CONTAINER= " \ - "_GLIBCXX_BEGIN_NAMESPACE_LDBL= " \ - "_GLIBCXX_END_NAMESPACE_VERSION= " \ - "_GLIBCXX_END_NAMESPACE_ALGO= " \ - "_GLIBCXX_END_NAMESPACE_CONTAINER= " \ - "_GLIBCXX_END_NAMESPACE_LDBL= " \ - "_GLIBCXX_TEMPLATE_ARGS=... " \ - _GLIBCXX_DEPRECATED \ - _GLIBCXX_CONSTEXPR=constexpr \ - _GLIBCXX_USE_CONSTEXPR=constexpr \ - _GLIBCXX_USE_WCHAR_T \ - _GLIBCXX_USE_LONG_LONG \ - _GLIBCXX_USE_C99_STDINT_TR1 \ - _GLIBCXX_ATOMIC_BUILTINS_1 \ - _GLIBCXX_ATOMIC_BUILTINS_2 \ - _GLIBCXX_ATOMIC_BUILTINS_4 \ - _GLIBCXX_ATOMIC_BUILTINS_8 \ - _GLIBCXX_USE_SCHED_YIELD \ - _GLIBCXX_USE_NANOSLEEP \ - __GXX_RTTI \ - __glibcxx_function_requires=// \ - __glibcxx_class_requires=// \ - __glibcxx_class_requires2=// \ - __glibcxx_class_requires3=// \ - __glibcxx_class_requires4=// + "_GLIBCXX_BEGIN_NAMESPACE_VERSION= " \ + "_GLIBCXX_BEGIN_NAMESPACE_ALGO= " \ + "_GLIBCXX_BEGIN_NAMESPACE_CONTAINER= " \ + "_GLIBCXX_BEGIN_NAMESPACE_LDBL= " \ + "_GLIBCXX_END_NAMESPACE_VERSION= " \ + "_GLIBCXX_END_NAMESPACE_ALGO= " \ + "_GLIBCXX_END_NAMESPACE_CONTAINER= " \ + "_GLIBCXX_END_NAMESPACE_LDBL= " \ + "_GLIBCXX_TEMPLATE_ARGS=... " \ + _GLIBCXX_DEPRECATED \ + _GLIBCXX_CONSTEXPR=constexpr \ + _GLIBCXX_USE_CONSTEXPR=constexpr \ + _GLIBCXX_USE_WCHAR_T \ + _GLIBCXX_USE_LONG_LONG \ + _GLIBCXX_USE_C99_STDINT_TR1 \ + _GLIBCXX_ATOMIC_BUILTINS_1 \ + _GLIBCXX_ATOMIC_BUILTINS_2 \ + _GLIBCXX_ATOMIC_BUILTINS_4 \ + _GLIBCXX_ATOMIC_BUILTINS_8 \ + _GLIBCXX_USE_SCHED_YIELD \ + _GLIBCXX_USE_NANOSLEEP \ + PB_DS_DATA_TRUE_INDICATOR \ + __EXCEPTIONS \ + __GXX_RTTI \ + __glibcxx_function_requires=// \ + __glibcxx_class_requires=// \ + __glibcxx_class_requires2=// \ + __glibcxx_class_requires3=// \ + __glibcxx_class_requires4=// # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES @@ -1671,11 +1757,10 @@ HAVE_DOT = YES DOT_NUM_THREADS = 0 -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# By default doxygen will write a font called Helvetica to the output +# directory and reference it in all dot files that doxygen generates. +# When you want a differently looking font you can specify the font name +# using DOT_FONTNAME. You need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. @@ -1767,7 +1852,7 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif. +# generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. DOT_IMAGE_FORMAT = png diff --git a/libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/binary_priority_queue_random_int_push_timing_test_local.png index 76e02f134f01c94919c0abf6d8912bd380b6e01e..c69cf1e7641a7fe8a51bc8f073daf582026bbb21 100644 GIT binary patch literal 23669 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 TKV)hEA{<6AwZRpi_5Af;jC>z* literal 6710 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 CIvGI# literal 8534 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 literal 9396 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_local.png b/libstdc++-v3/doc/html/ext/pb_ds/ccgp_hash_random_int_subscript_timing_test_insert_local.png index 2449e1de324c4d44bbc4f2d10433d3ab840c69a9..2b8c0e76d5f2453ab0e4e5cd97c0cb34103587ed 100644 GIT binary patch literal 42763 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

{UtLJNC!b7#@~Lzj2wKmWTth>Fg% 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 I8yfq+04*nRh5!Hn literal 7405 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/hash_zlob_random_int_find_timing_test_local.png index 0be2f00fa63e49b970f46ac8a2c4e0e99cb917b9..81848ba8b2e3d445667e8fd3f9b75a37d0d978a1 100644 GIT binary patch literal 38509 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_hash_local.png index 32a61cac9bdedb9421c0e3dffc6ce7a9064e05b2..121af9e45a1b5e6946ab8bd8079e6d3f3aa170bf 100644 GIT binary patch literal 30126 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 XJ!77OP56Lks}ex(7;0ABc8L04Md>-y literal 7299 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_large_s2p_tree_local.png index 10b3980edab6b26b2ef76e829a2abb8bb2d4f237..3ac90d56c860aa3999b2b74590d5fe20fc48d4c1 100644 GIT binary patch literal 26937 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 FzX0=H)+7J` literal 6706 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 Jt5j_x{}%=aqB#Hn literal 6732 zcmch5c{J2v*!Cb<#z^*xqDVr@SZZX;PSz}A9b=j7vPWcBL-x>+-B<@h$gZY@OesRh z8fr+k5YoKQ^uFgi-+90HzwbNW@60%!=f3ajy6)@#&7Ao?SYtzN80$$^2m}Jt)zL78 zKNNh zO%%u_W8h>QoJ@w3sX!wrg;OzbDh^I1!>NE3s0Ls_G*Ag-ffyhL*Z>+}fnqAHA=(;T zI1Gl2!BA=a0a~!a;V?Kd21li}3sit08HXX0F=Q&}9*6?D7%C1!C1a?dJ>UnB395k| zpno6&bO=-fFd!PJ1gSs=AO_d~8emar&e6hP4K6YcN2M7F`UA9JMJD6ORNyOU7pMS1 z9F>ft0w00XzyP2NqywWtx4=r^2apM>fgL~-Xc%+|R0A*|8dL&VKnEZO*Z`VJ8xbuV zguxnIR4_4MBjP`SZXx=gw(suRn5Ab*LbGs8DboGkdrOPteL3z9o2yd^hhML*kr>l9` zCc;GyO{?8FC*>vD3sJ|2^L53SCMX}&MWBw|B)O@^UTlJ>M!MTUK8SJf3el11MO2ZI zN0_0h5Hua9kfbVoETc{&5yJ9+5gc7BlKq6UWtD^J!Aep}abwwEzx9|U$kdrAt6}ib zvxQ0*_a9u%cG8mbj*xwpA{+KghA*?}uSj%3&%@d@=%ZMdBlFHOtvVT_X1cOp_unlv zUd?QmTUSmuT|+0u96GLlT>bE^>*K3JSZkNDu+aeQ=iEwu3{m#}1%c5ax8vbU zmO;tedx}h4l`R)V4XHaww?IOq< zyDhUe=v}t}$I-pdbPMu%po;W;dS}zV#UqwzU)palocWY|BeT5+?z3%Nv36`*LP|v9 zrHc*fGw+E%KcPqe7TeR+Nm$#d@#)DvDR%*zp7kcK<*b$}D2otlej>I9>b6qY&aH14am`QSQM$KTlPc2lyRMnU*d>RAPKKNB z`*JE{huX&Kr3E*(EwZQ0nruDiKH~gmrme>iTlarCp%6-DcA`N`%R{=CoF@Jn(VzI* z_dWvK5K%s5eRTsrth=gIW@J*MkzEWsH@LS513=OQhbCxOKvx;cTnbA(S`s7t+^^%i znDV5A3U_E7VjaIFXqV`&nK}LVl0WNHimOu1T8E|J@1ecupXN=re4~Z*Do?7P{<2kG zuVO$U#=ZyC<{yU+JaXRa%=bV2+|ibaT>sEk?q&9SI+e3kncpYgyu;~M#oXcl8p3W4Ua#KK?^Bdl*GvQ-YyTtd(R^8TKV7LrQK^z=OSW`9-#2a(m#O zoJoys>s#@P<4O>A?=;~J8gKrcr9F=->mgqIk$N`it52y>`v!)dhv^j->6yFR%fr3W z3*$k$cZo~i0GY(v8C^=z&neG#5nhYoVp(CEUQ^10U*kL4g?JSAh+gw%ExW?2ROiW4 zXtC|;HobU~+o40T@MK;~Jgy@p)QwK8$Y-m%8hRp*aVW~(vXd2>;5Yl* zQtpFEoGLOivdVGZ`trd}!YLi`XPL*GGt<2c>{sILt-{S!oHH|Oood?AJA>07oFxSM zsx&T29u{(t+Sr}V&-0EtTOeh*oVD!k0@Y0Lhh z&(sk5Uep7Ql@?r8ebJTwmXuD>*A{KOl;UvdU#(;b->_#m&+e@LZ8*oPwnwHd-d-41 zkBLd1+?qPbURS^uIW>#HR!^_8?;5HH{zG;5*701d)oyB`v+gkVjh6>COWOj|0-D@w z`n}ay^xT4P4d*!&0+AzgW^kt|H@oi_o-6787gn+Ku&Bn%95-=!99*xxF!|ZC$rn(F zjetDM@zQk3)U3Enqi@f!9S$hO%bF_Fap@yp&e``~oRrRis#{%@tn3OH66KI*%rI5pG? z>d4BUNFulM2&5bC^W9$%TIH_(jTB9={en}a5Y0PXT z_hxLr+CVLr!E7YInCN^gE|rHV^d2+J{7O+>`;EQ?m=X)L!BInj6kT;!7=^UfP32K2 zg$_(SjI4ShY>%8&N#%jhH*?%ho>Y>EBs@v8$vy6pJPEBfjV|QuA6*di|I#>ap~KuZ zul0u`v{yjEx0#1Cn%I)I>TS&E|K;_#vfhPyv13m-j>Rc1wP2rxKjC)nNps%3?~t5( z$>xKwE_5yTt0CTjEzw;}vByrnA)FFfZtFECY+3kM(K})@_G@bjn9A(6G3&cJVluf* zd7lkbAKpYE3QsPc+o9aKdOrUNfhliXah&opo4rE&6Dh;e0uhyh=Qt6hppIth3Q*N_ zL{sQIn*6TA`qR}#B)_R?M-&B)#7GMor+F@hUr7lV(i}2IPRAr`8I>;_4AGg7D_OQk z6JEq5Q{TVKbKW1KYZBi<#`PjTzKzO@_gZS#H!|1Q8=~9BTHpP$gnV^7+5Fer$6*e( zPhIzzckm1sbVj9C1<_@3#YA4Eo-zAAJb=*PK26~+`0zXT#diiOvrehBpsH4VoaU-G zL{gkRE_%m_u1q8&IL5O?D3W2r?^P+^2Yi=z~V^m6k@ z#^Z@hZsI|_TzdMk*j=jL zH(@)Z{%EMt-|DBM-EE@P8ADaoeEWo}A-?iDd?k|2))kqfsLsX!J?R;qghn;@`vY>f zW#j^_#qiyxt=^-^Bpb2>XzKO2kU8CUfVu9mW2P5vF+Gap1xDC->kX?(O!`G?*>-{( zZoK#FkXIY)0fDJ*9!lEP}lwr|$VRdaqR80GBbJE`tl<8x>|eTp2ok;|KCOy3fKNo3)W{NxR)C zFyz%K67zm-lQHRhaG^*$B>-|_!>%aQX+&vYM;Fm_`bNxKk%RhAr+N#Yd9I0_+tB)> zpfl-o8bxUqikTK~T>nj~J40H|BgB={ePey;KhK+Qy5g3Tt|-8xarGDemLWF?F4V5O zE}x#Ln6h25-N4^squnhX$$_#S$C}+>e|4WwPkjxiaKBPTcHVNIYxRu#G}!UfBTu3$ z;3<*x?iPo|+Je;etlaRMN8hdIs-qD6tP$y@aZR~p^AGtY&i(T8ThiA)b5Z}@8x;vT z2cyrVH+z;L`I(4@N1+7pZMua}eb4ZR=P!S4TvJuNTV4Nf(M?gGFJHvB@lLiD9o z_F4Vj_x1B$l|Y?F#;&i==Fh1)k#m!bfYA8!Pd4=S`^CkhL!N5E3sN2K)oRU!(g{** z;Ojwr-iQLp|9}2V|9^UbAh|)slIi|TE+ih_#YY06Pn+*Jw#qj=3|lBZyebqsqIg^C zNBF#mPloi)S008N$WH%J(zKZ2ru^@-0xNHP6$${7S$t(mvCN#2>_E`y>wDHOUjqE2IS_|IdwlMANjj zxcOXU!J$Th1XV_Pr+jTb-5cXpVMen0(#29Cqb*XG^H^KLWe{GejbyqQbIHy^n3`%z5ymM3xjq z{3AiGcfY)9AyiQCqn=3aEF68^B0hf)&4}gS$_lIPQv7YU+P`2|r=8?}*`Kg+f%JD_ zN_3M_PfXr^*z`BqLf|*^iungirPrRhAKyk3>4gXn2oj%$o70hOFY2OW9x#rTjiR)X zLWJJ$`?+K@CzTg#bZDj5pJs^NS_!O2gZT;F4^NQjd2pX91g8i#HxuZDB=01CeEJ^u z#4DF>>T-6)D}#Gc#{4GYP6G_=DHKRc=k72@g2+9#jH~0YsubW@1Gl- z(UKXoNDy?gw^V`-EC?D-udYpZKfE!~9Za)YG^0QWYxMkhS(}6;b^OUuXl$loMq=I| zf@#xcZ!1XU(PLPQ)uY1NP(F)}FAnVw`#T>-Pjvqr*)0!bt)G8$IlQN|{924vgydlT z57ZfSIUC-?cP^bWl#^&3mXcX3AfRRa_^r=oP+gl38V@b)4UXGc>l{YhtDj#i92c0v zMOW%mWQ}A=-e4HMEnDrR**^r_*!VSz*4)V?v(ML0{UH`t|FlJ(aBBI~r~vB>w!W=m z@kyFI`HcG>Uw87rUP-!;)hXdVA(m`ZqI7j~jgQnjrpZ`4zAGpf#3R|btydj|KdZEx zo*P@7(jv_>`>qDFUHr+xymBc_;%DYC;&vK=SX#tde8ES6N_pBD7WJeoA~Cu$|`{t@AIHqJj|3?{|T}5v(Ty* zlBm`ux$2oZ5$Zek81=z&{Wz~@>Lr+0Y8%Jj90aA_A*QhsX39rG-4Y}DWt+6+y9PwU zOzBURDrq;Wjs~dqm$y5dQ|v_+_tFXXCWz}i8Q?CMzv-2 z(y;(Od6G2%#Q!ItGzmPmX36W=F-I6UiLD?dLw2eUU5tIfNmTHhjW1D6Pmo1kXEN&a z%B6~{|NVHck7IQ1-FT;>!u~;L;BOA z_at4;#OG%hNuYJF;kO=Tsn0bVedMJp56Hq#iRVqoa*ob)Z>wxQecPcto)UKp(VHfF z%#dPMo<{r|;)1h`xQZYC_1G{lX9pSK0YfB>bMho`C$V3}tKZQpNBnP}D3W-dV`*=B zK-I7g^8DJJP49@^zna`be|u>AC(8qt!PCfwAA=#K@jCuiK@drgPsdlUd{I1axlw?X z3xLgme=l?LYCrVocKTmF03Jb>@_>o|*@yMx77Y~t;A5_Cx5ONn&Y(qem4kO9v*ZKm zgVx;&hT>yq-7JYr-1a{hg*1`+M5X{1k(O#GQTmXYBWSFuy+n9>C6}yPEfM1J zK`-)%GHJg|EC(KQI`YJPY?GAw(;9h)7oKbd`&2_@rYVEjdSwK2wZ!jF-4SQ`bC(}J zPhSo%ooG?xe{+&IP)p4}v2fPzH&kNMs?GT@4PH-4iZ1ST2h}rtS%(?Q>W^XwOYb^N zjG3#ige_Ckhy?7r&lgX)G8ODc2oYYqE^FdsM9ak+9jb7Qa^{}1OAvlh4G5(lMdSL^ z(IH&9l_tg?*p#=|f|~gRu0MTOPrw@ZaC4Jr3}d%_pGLj=y`_qb;xTyek2)FI>kd7G xj;f`dC|{2YL1Oj2!)zP>Q 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 F{|5%vShN5D literal 6396 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 ly_I~!WpN-ekQKhA3rG~*^wCZYTeHe^{3kHLS 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 literal 6845 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_tree_local.png index d7322f287a83954beeb0a610e17499585f6a53bb..9bacb35ce545c0915825c622326ac994b0cf52ef 100644 GIT binary patch literal 29258 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 literal 7000 zcmch6cTiK^w{{SaCen*^73tDK6Ql~#Lk$EJFqBZFcj+bIs|cvnPz0nW0YZyNeF*|D z5Tc;;uA9ai69~wKmw7$ATk0( zMuEsg5E(E4YycX-0)m0rWJ(^&g#d$5U@#F3CR5S^76JiApuh+s7(u460GucU7=;3( zh+q_%LJF8mM1YAXFp&r*k^zoDD42`@lTlzY5ljZM0;~ZrfHc4opauAV!~iw`4PXJm zWJ*C48@Nyi1QCHCQ|bfK0u~B|KoJorGNoLA1>hv25JVz^NCv70NC9&ZWE6r-M38~< z06hSjKr|o+P(MHds1RTcfB~cdmcUei2ap)R2A}~fGDSIx8?b?kh(eJmLIU*xX#tB! zL=nk=u0Xi}3&4pY6H#P9M?h&n0Du=T9S|C*7LXFq1E2{+19AYIfP#Sv0oDK*KpKby zXaPKc!~iw`O{TPnG8=FMHgJ)FjsZdf^#N%Ci%2F@8u+LE6c&FvO6ljHCQ(TJ(Vf!X zKT=XS{!xe0?LP%mDF3N}()>TPC>8w41V97J0q7DS9#GStRDV|D|M|@$Dn<}U$`EMe z5CQ@*u~WWO;|p>B0)xV#2Cz_@07Pg6JlF$dU}Gs_=oJtW8sZl09T+O2rl2e>svK;CW$*P3!WJJ&P8{31b0}(X!JV zA0P3u3I`+q+=7A+-zOi?$Mux_()#%I$)JF2Q$rRVWJ;WM^ixAIUoqZ4Q1V3tF4Kl| zKZUE+WV>vgF@9@Y@lu+w&cWl5+XG3snwj5msE8B|!s)8>4#E3mN z(!lhCvb<2|4j$I*i?eeHIIZTKbG;EE=@6KF_4QpbQtAlP!-skJd$3RGYJ>vopF7`q zH*M}&sq=gGRU(x$zln6xdG20@chPY`>sV4Mu{LwfCA@FmSM?R|D8 zGsa05mIALrw>mQKwVgOGi%ZjEV%5+-DLBW+wOA2s6&!=+BKYtQpdGJb?N;Vt#v<5@ z@CM4*b8dH9caI}Dpbdruse(%&r&ALN1Ev9~x<6if>K1R_j`ncUl#7(a-Vf>x9 zso{-;G3yZ^jSS>C*5xAr+QzC)rQ)p5%1xbQsN?alrnvTT*8k%q6F;jyh`WP(9 z;|N1{jOc@T zo#MeSbLJ#wCOacEO+#bl9Rsg@#5HBzJNyz7gEAvC!WRz^eiO4&nr<9+(S{6F-+ z>0}v4_37PS(KN&Bx^`T!UFDc*Ox-m-b-zbFiRRGHJ-Yf(^J!#>V=hkF8@6BOtt5^FSQPIs>W77ed3aB*cJK>)|&Opak}ZB zV_l+xsXdyWC8GV=&CR)24I8j`(e&tcbFV>mn;OJ)BaIjK6)U4@w*(SbimpB;6ii4r zG%zutqagCi4y3Ychv{55Mwn{Q^u0D^xb{q8eCHi#r4i>MQ))yNAqhQ9MO}L_9cs17 zXtNY~pdegf3H3I+Dm&SGHq|M12TG&1s&=dLj8=Qc(3g`#$DVwstY}@ z*4a;XR}#gVUp(q(b;OED>lOS`X}+QqAjXh3QP{HTcNhJ6X=(JY=M!l~`zqi^4UZ60 zLylFiybi}-w6l}z2a?dv--_O##`dUhJwdU4R1tI~+Hws!tKUnzL3Vmd?a(zU830Cy zD9r{6=%v3MzBXfOSTiiOk&Q1!n-u+0;b<|*z=<`x^fLh~+w)dAmfEkZ5p5_RX%Ss` zlHM?{kUPc2H(37_SlZz-h7JyXx=<*?)7x8qcc1#S46_TCZm;gwi|t3RMdlv$Q2XiH z<=le)u$HTG$vShDb@Xh%@+e-exD!ZrTEvm-8yG5By9!TR%g4LiQ|@lh%c#B?;#c#O zsxeW?O1NAcYiYGD$G=+H75bZYR?n>;`L|9%J= z_mWY-8}-G93fy+pI^L1mZYFEo+8##GeO8T)|G;&{xfjyAllQWVd#jOCz{AP;oRRdh zD6_vs`o5~hWQcF!0Z+!d?iF9<;y3Et=6LS7G_G?@ao0Cv#xy^Bm=aTO)cJnT>|5Vl zgo~awN!PVYi_J_6YLZr#nSmfF&qliZ!^!>!UIP5d(yP`{4ZJS!`k6!Yv|*4)Y{RGYB~ zv~zhMEk|yb8%=&n|I)1E%OYgPC|SA(nKqW=BUk+G)`zL6rXzJr?;32x_UM<;f~?V3 z+7}DQPsCA@KBC5;Y>g7$lT}MyG0Vjkh<9GeK zuF&>!*Bxl~-=dWRurC46xKtI@f4J)15|`Spq*h~}zG+UK{UIq|q zS?zX^7p=YJ|K^>-yI%|_)PFToS5f!Dc#7Vm3m8jGI~BVX>podY-N z;0KUOzV0lUa7k~5_-9b@ndTszsqq~pQJIZQd>{fu)yun4XI{4B?Pl5WfSbfrD$-^0 zeZgH$KV-5Ydz4ke>>j}c`$eYUrscELSB&;O{l6yP=Zp$QLTm_p8R3$WMW%tmJ*kh* zL|QFU&Nft;zH`m@V&IEfMs6D1`~7(jc1bgI-lSh~AqOWsHOEcY9POt!TduS?D{#5k z=}VVA#>YN?wIyi!`zDW*n`3ydPgfpSoc(k<%Xr^nf^BUGU{VVjG3*EKRJ)V&b{pC1uPv-OhIpn@1DiMjddR|RfVa7yf z`_dAZf_0s^4h^H#|6Pn#d?Yo$$DoJur#yDiLPyZ+C-qqTgyRUx^X7IZ#FBd z1~zs|D{5S@6hD)_LC(FxZ?wVY5htYGSdaU$^ouoiIk++E_-)CZ9q;WU)6o1yal^!} z&~Ecx+kByR)1``XlsSh$RfKo&eFHIq4y^0TT%%%n_zl&K(MfGH(h{&Rg~g$LrqjN) z&L3K|d&{hO567uwgP1K)J|*W3qbrj`a5=$c_D{I^D#@Aaq~FIQLg=MwQ@Y4DWvmL> zB(wRhi~ZpT6&OataS*^7{DiZeP^-qo9MXOl^1lFf6W^?)rh#yjUxL+2y$?^uD*ze) z{*sN;+o%euF@#c(^7)*reC^wgolp@q+HOF$73Rh2{pHy3XBNS_7|oWmuMdF1;MsYd z0+}BfZK)}EDN&|VU|j>jw^ubVp?_okmph#Q*~Wf-a={sm1`bi0C=Q&t0< z*u(sXSL&M6GZuuE*mgT#jXeGw-Ke$aq61r00Uk#tWBgT_0DeJwOo}K!Tkf{qXf*@j zbFnBjyqLE$x?qfM$SMvcv&7VY zF$Q?fehkk7F7@kRblI`FRG}QQd|BhtOFAKf_tGc75dQO4av9nWYVpSRPRGN>KOjuOQqsPKIdd->UrV0 zzr*BK7Gon8MgL8jV^XM{hb?FiQqp_1dEa>giTji&Og!;t(=528B{ycQs%Hn=HkedX zY55H|m=YHiR8sW3^)#fUk(jsQQ)5oqa?GiYm@D`(r{3{!a6;Ed0_^Uj$0Y1f!8P@Bmh#`cc%9HIc(=>t-354J60uKI zwVlnz>?M_mOkkRE9SMapFQi()Rpi+K4=Pdx*?PtrvBQx0`|Ykf+fL)LYjVWc=SOyF>Ph|oA(A)m_kGyjvo)`#h6 zPVYtMCgJb3A#iWq;tx<40^hkthSJNZw{Zf-UHG}Z+wS$V9k}cY-^3Z(TVtOKt1)3O z8|}I_aPXO=5#u-Q9Z%YMzjyQ(wJ@lmAd4gFC|Z$UUu#lL3vJ`3j2Jg0#@pV#D0=1} zQKyKK!hN=7pX|~8Y0e6_|qv$o3tXH@Mt6Shd}r+Q<_# zn!*Hr*++7iT5>N+2)|XJ$vjgZsQprOIDu3XF*S5S8gc`E?%+{tK^9ZiV*OZ&XMybg z;djkxh|7HV=KBUQ{4JNCW;TVd(s81Emu6nSJ8~uXiHFtOYM|LIx-7K+YLNoB3A;Ie z>45OSg3x#vS)YL~eNEs-)7OK`s&*TqZs{w3y_=jlwBJ(V7$UZ@gHOn>GHK9HP`yycbs-r35mwpyU z?vn=`yM$u4Tm|EE>moC>(Wx%$8P}z_ zBGZ2hn2*p7@R^+|`TXnH!2BZLn0LJYKvpw1VpXj_G2c}vYFc-Kb-&eBWotfJrk&6p zt=_6berRc=rivbE$85PP9QX8^=fQt601K z!tOm@T?qS5c$$CT#>SsFDxejjl{+OXGuOd+&M9}gdJKIM;vm>-EJDw-ls1Zac2oG~ z1kYT86G8#6xOKN+;U~PvDrD;8b8vP}>IZkBW7brTtR}x!6p-v>@0t>#eo3BNF0F|L*>ZEeZNKZV#(<(-p)SCbhb%{ z4|dAB(XBLa$~`p9TD(TDgKz<>dy|TNmUYr!I;?@AJm45o1rn~{S~G`jU%_h`mE^D@ z4en~CsKh+igQYWIxP&Vf=$W*PrdnUISUbsnd-a*WokkemOSk4YMpw%K->J>w2Hcoa z5#_6!nqk*uLilUXen!z9i`>}N^|^DLvEcu)0Jog1bY-oP#abNMUEPhO6|SfiWx1ZS ztGj+v(ulT=h9AK5HW#i?(T}u9Ei6R!^Tp{arL52 z?R&btMx2SK_RFumQpJ=PLJ2hYbe{ziimo4*giLU6lt}27D-@UO=XNeqVM6Kc);Ozu z(kk2a&KoS0A_3iN2bJO~pi1^m2x9Ug>i+t;{A`v%yt@pRKZhN^#hfitNV@@m{p zN}~SH^Il;%ZI)JZh>lH`I+eyTy>$LQs+hW<;1k1iZ*`nC2Yb;QCz62Wrt1=@j{afT zw}g69UV>x{`g>`=qK(p3tk|-R<{6|NM&xePO}LtSGwc~ zumM=PmIIfZi6bT9(G0Vg8}u09UWv(4*X5e!;(oyF!|?oXLzune>l?v8sPe~(a4O(; zFIuSt5gy0cWMw#4J6~y%#mOC*Q*ZUZTl~69(8t<2wxsJhB<6Yf*~Xe6M!sko+8u%m zY>YUr?34K{&3uEC^QIjT9q$Y~H9WpN#&T`G(4o4Nl`=-Y4)^9M?6z05WYJnB>%cP7 z%(reZ63~}Qe#MJmCn5~n#qK27uh{&y<7H5N(LrdERk>4LTFMtQyhQZ1@ZAkm8W@*V zsk5=9$0)`OyVUn9Tvj>X5rp4zR$?CLuL@&S@6CYnXb~`Ss&)`-Y%vSe)`q*7$dHifZAg^_J$EK!Om%OI5OLMH2kK~an- zg^95wWE)!y#_(Rgzvp?6=g;@~>z(6ZnB$)7zV7SuxjxHzp4X#mS50|1k8wgE5FT?g zV=D-RNfH8qzG7zupR@%Jnu9my`{&JXu!C0wyL$ropCi!B;Xb&2=->x>UOqb%e0Vg- z#6HM602ze3bJz2Ua8_Z4ngCvJEL@7X4)gJ) zJT#fSU~Fvs{nG!hZ)H*gEC~r_jKMOS@+JDex%=ybjseX}4|zlfqc(opEk~@hu?;nb zdl&gWCtce*%$K5zU#KKVFcw_*cXAi1TBAnV+s{KVWdSh)cCVWepwia z0(Xu{NceF9Iq3K2bIS7GQUH2E2z_U=J7EhN%a zrpKcUb+{;Z5Jb=rnBgO74I|Ee;Uej6q#r>Ny__;53;+3T}TMhI!@YZ(o|YfY4GKp?Df?O~jyHhW>uU zrs@6t&H0Ym-0(XaqmB2Ms|J3{`g-_pso~{_%UBnp1TrLzV2TmI)WdJ)B$yevBOUqf zlTSo^P`s9zzkR;_*|{S+qm1mWi@n*}MjM%KNe}LkGSwM03TnLlXSv;a{{>#VXrIfit(kec9C?g z)!qL=>tITi-bYuCPM?$cRle#LY&bichjzJ*WQ*FK&Nvx7|6{J?si?LJeXU1T(glxv zs*<6N(9HD_JtTh&7Q{LTyN|6qi;70SfnzvoIi!(w;wz4*{m89ROvWgqzabpGvx_K^Y{$+@@&P^ zf=WWb!j@wKMj4~szhc`a&cMS(x1QrD^VD_Un=c5ho=A}_@+)FEF^<_l(ve#NIhcdc zB0W~F72^A1gB*;Ovj52X)EWDlxmV=6x)+JHWl-{ds>08f#oI_0%_|?je2|-|^~XHN z!Z7g^Mq0!AHqo1TNFJIMTW^hJP#B5shIYm$Mlu~tPd$7x#++gGyUSB&MK(LR&pxZg z$D~flqo+KZyvpompj-HdM;pCANIZp7=C(r&B$g2I?$gPCJ)oczcp#Fyf9*rjPK zsh2G}* zb?^G<>T#-}jLoM{%_wb@>tWO)V!|mJYrQ~Wpe9#gm~!kg_BP@jVZT&mo1h_3 zx~MD3z&2x&e<$VnBjF3T8%MV$_)f{#2QKy8>;g1Q%6wgB!{ z;Mtd3>=M3IJ7tf!EzoZqh%hnK|$*^hnb`5U~ zzZq?+^Y@>|gfPn0AGzMqlw_$kF>fC|*CZ`%u8w~x89IUWSJXrQNin^%vAfUb6z0v}nt`8MJ7W#nKdDG81rAuSq2=N(st4MEwUPuW?2j7waN^)iwm zz4WRmA4JL?qwPP>jf&nyq~zFUJNrwrN}SBhIMh}dKgA)u-yKW9nj^J%yx7E8c5@Nh zqipO&l=LhIUc?K6sm6`s1oyKI3dr|%Q)dy{rz#IOr64v(MVXDd#_rKFTEos__xZWEvV^Izz*Ds;nvczPViPg`$Eu+J5`1gY5pjRK zhC}-(L;iD-9naL8>k^+lI_>^tGvc4rk(I_rxM?VieJ|`YJIWQN&u2Y=Ks+Sue0-kQr(1}6P(Z%eVh*N1b}VvV*OLSLB7 zmzQoM9bv7IL$aAedy*4%L0>(1!?glwL#NJ+bB6N%71?}@K#uS$)wdi!N0*-PLa?`u z?w))v`o?S~4nDM5u&dEMc6O=(nP)9=dhe~!QrX4dP;LF zkS04FYPd=WEnk;p@hdeFe~ubH{0to1LI_e~A)*F72vgChCqwXe!g%4S|ihN!l6 z7yDzpiNRDuc*L9r+|dU)@=4W6PP)_sNs*T^cdoFJnv7v*@T2C$pBzd1DTpau$Y^8^?j_SMg>=#5wz5Eq69V~^ zgEjVIxaOt|a$~ap{OwL($i8)nh__CexFM;+V^MQ(xGigPoxLq+#EZ_9Z~lH(DzWw+ zt?}E*$s_6Si2NwDLES5Yr8>R}>x~Sl)G8N%!bcuUA&gZE{++bX(zgwgyA%{yf_$BD z8lgG2twSN*&Ed3|Y)#+6KiL5-+nX;@V~wxNa5Bh2?BkdVG{ibiUXmZ*`4HU2tm4>} zT1|W;<{L4RIp%WW)Ykx>ClFnT+d>$|KDg+Y?UVs0#u4L;-5?rJ_wGf9IAbl?izdeA zsLQf+oHUt8T4Upt*zFs+L+}r5jba>wRyY&VEmRua_rR?m%$&@NShF3j)Dy~37+0Xa z)#9&M7g!>PI>N6Tzd5DpGAkqI9tLgGq|6X~@{hJ1YUILn`3kW5*!LhxoVQ9kJ;6?< ze|v(6=*el?QA!D#A8*~yJ9#DRA0gKue5NZ;Z*OZ##E`y-58&rMMA4=G>+@?l*}bEy zYHvLM^cb%WPdI!}EKNUq^~h&El9sMbUA!@JW!{bE(*Sk0n+QX>KAQ_Ow)#S9g2X!qwy_u}`r^S; ze=D@e@Dx_E57b;KJy_3EKXoI1Sl7?Tzx^RH*&-jqzIjWRdzc5Yx4WIzf*h=HSV&iP z3@In{!^HD9ghOCNDzeWq9O0b^q*S?sjewK$$% zmnP)% zu6LkU6J6h{C@Hy*eRyzCMUWTCc+b2^s)zTUhVdJ0$i>d*T2~++Eqq`f6X~VGwyhl zVCHP58<9z7U|^r9QP&%UiLz8f-Qa2ecMse0SB`JEHa!2g_aYutqXQ!a>9Boic2QLV zU3;z)ctKNY(;~l$+-3~H)f1@=YoKc*2fvfnItm9(PMA+>?1x`7Gz*gIKT-6Bbwas2 zTpPKd@hIWXWB0CzMc#<4iBRq6m;OU?&M9Uvp@%zO!#Xbzg%k2@hSG~<$lhD!8Iu!s zvZ97#Y*aOT@oP3xg;DhwMM&Sctc`RN5~IK?O8BVhV0QTQ>kO;(qS~{d>q@<`6-cY< z^HTSqHy~h}q>7LA5X$lgL0&p_-A8kTMQbV0 zVVg?J$QG`7Ie>3N?*>x(s?$kE)h#_krWFPBo;KJbr? z$qrlT$&N<)Mfdq$QCn*j=;!mAr)ryq8yahTA{`T0+&#u4+6+zfUXz)&M!0@=IVUas zg%%;kslPx)n|r9QwnHCi!@`+p&~$ z|D2+G%M23?s8j{=lWr0ff;_BL5yY?7L6J=Kh3o8+hOAa`(hy{wP}@Ym*K+68yH{EY zehUtJ%)Py4e4<`fZ>HcGqL`F)7Je#eyCnFacLUiCtsb!_rq)5qz4Xtn5ciaIu#pa{ zW%zxGMB1KJGyF@RcUof~0eKGP7NC{KL_als%gv=bQJByBY-;nO#$o#js%LRc<`K#x za(z2R23aTOb;wWHaFn3}C;TGafmME<_9*K0(?g^Xs>aU~oZlZZHbK_?Y@t)>6Q4v} zN5hL>hWHrx4pw+X(l=k80e@Kh&e+w)zXTo>gB4aUw!qex>af(EHgJstJ${DY)@RuK zJ=(7aL@i`pGNIKM84hu@`PsZg)y9#{iEhYEMbv)dp@njb5g1w>Z+(hOYErhe%Iw3( z$QXB|$w6svVO?~YObA{W{MO+Q`u%nBzB98qZ+jP+qAldVP50C%g(vpOyEg6Gpj=;8 z{xUH>mi4AHB9`*Q4Qonatltn3in^!=N(4C93=DmbmUh>l^};80$w`f66r{L`jtai+ z=nTipu(xdXG9}!|L7wLcbhAi90nx}R*YX-_V>UQhul-w@74 zjZ;^#y@E|nz;I^ zi1;|c{bEfxA%gjb`R9^$JW(ea!KXM*`pSF}(g(RfiHyO$^gtHF0+{M&e*H5A9^#}K zQbt~JZ8HkM3g>k+(BaOG!c86^@aoxxXc!sgfqWRjdifqLe!$*tPy-)A-J25r+596@QS5M3LlO96C8|ccx*X_WvcI1CMab(mm6Ty7;=r!(&r;VSClJ)NR zwz*Li9)763RwukRblzS0vSU$wrLm%~#WtybpQ>BK4GC+c2n(BR1p0E@5{LD4}pZAI_P-mEvl4EAr92*QFJ%S;T}9QIxtjFYL1Zgdpjf5&TmK zPT*=LaD#{_nw&=;&sj!Oz z|3ZY~;*I9M7xrwTw|iW(o*YrXZ9Sq`^&!>#xm;v(;AH#KMutt}%6>s9QG6A8LN3&4 zmb&cm+OSlzj8lqJg2%DO&9DjLL2c2YZh26n9LpY;|H0Qo!y4&N=9M&r4<)^vr*_QO zR5l%E=ACJz8z4jE1CO^Ic@~VEdW%$-Q|S3iuOY7|j+ds(W8_24Y9^=H5f^q(FFBK~KxnEY z=5cJkdZ2VY+fOhgahxS$o=W>DX2iTDehX4c=#$J~I~~`KyjBy3xGSVXDP4Y8ATvETOGS)Y5{oLSw*jw~V3l_$=*mjq>O>@CvuB^1Ked4aR+7M-5wQc(X zCJ{5)sFk4A?dRks@53sZeJ%>VQj{H^9e|3FJQTMPe)d*Wbt-yYsDDq;mV^sr|z3`oMSUnS92Hg!zUp2iwdV{!p*Ln9u}BFs@uI_W${v3{N1|bJ$#Ya&rL90EBgBo>9Za#hS`c!UmU@^G^%fk#ee=SXIk&COf zDNb*j?4UBk5cRB4Qo}a?cqU@D(v%}bZi?y^SC8O6(qqhX4i(iU zaS0WcTxM#SU;oWdw9k@kEG8@2gvos>R!f!00zaP0`{!I#)QXO(WHgyC05CKiiZQ}<}jXhLc`-iLe&+=6is)eZ7;*D?5B!Itlp74OSNYW)}f(C10`4N zQ2Q-e%Wz>LrR!lI7v>RBfNE$^Ycs_A&P_j`;bgzf{4a;IqZO(f+ltX;PM$l08h_6! zDFlsrqhE63ug&U}+0m{Wjm>A9;ta~@P2syY_P0XfnU>vq`i|i5Ucp{{Cc^rtH|*r? za0MTY!39r*dK@Gw5M?X}7D@_XFv?hfP8W@V_On9DuKMZ=*{4|1xv~7BQO3fjqd$Ug!G3}d&=MMjS6B?m<$RB-UQirtFckx=+?D6eSN|maY6&C}b`U z_oX@xZ<9$`ho3BU&z~Ea%+eNbcU`+BRr=nu&_L5MKR`U2<;8c&No)rqTU)9R(ROxg zx-~x^CImCli-xxTJ?+~ugTP@aVo6a*kVpb-0V?=*dFAbU;o80$0^~rTsB~LsS$I*3tw}gE5 z`?C|Z#;9SN!R!fF%BGoLO$;d4Y7+`LDv~%9 zzPY5;)8aq4oGY)NC1L}tUd6u-51;?%Knq>V1aVA zp?|lMS!_Ha>N2asp3LYaUBr=_nb9xnk003zdP(Txc5Nb&(zD2*F0#4!xQ`E6XVey& zb?e1`_Ks>>VOnX^d+Ek*#_wRF_9V~n=}tEkfOvY`I$2l*#vwi(0|(WPFz5W7z1^FM{2np{5_si;M4I?R(%;a$&B;mG7pm-o6Q0k_7&pij!YEZu zKzuwxJ`6i+Tvt(tcg}*C^6h@2mlbRuKne7xub7xLatGdMW zSagJsOjCclxEC9;#|(KPm0dA5zGnx@r7S)r>!{;uUrCjiD+^v?7ps%I zRjsXVQNoSF-fB5*tRBsmy+$UztYV*;8h??y_Pvi(r;g9YEMwx?qr3Pg!Vr!qBj+~2 zho+`2`ej&6;4^tXP&s0{#)u2lmN8O`8vg4UHCEt_!f?85wZxG;ul16^iVj(3>%ip- zKabB&NF*CSbGLx}e*LN;aEq>BZxdru39@h9{kC3onFvPoIwNf9Dz65Q~uOcivEU2M7XER&T`PEiPCcZ^5o| zT}kdQ-!SAf952i~a0lN!RA7ayg9j?Kor?Y$xpz@bvo9y zU=&8WUmqKFj}1P;BmYF)-Uk^DMa$Xi$()RHvu|P=3h?fzadJb(u(LkPh5U(+AD3x( zuW=>A*4X$>Wuc$lNMQQsX=;?krLpR;yfa69v_}e4X|+4=(@k|`cY?r_O+!Ov+A7jk zse4gHK7bK@c#_=g%*la_;by)musHrrN1v84oMwFgdL)MgvQ8OHuvOaryu<`sx9VG^ zFE{+9rN0NthLb(e6P_p|(0B&ZdOEO)Lw~|nN_g8PUU6ZkQ4j;P7ty;t8VS4GH2L!LMWpQZWdlXzAtj- zygHir+;4Nm$U2!o_LU&rVz0rUm;pZo^6ln0df)V*T5jgmUm+#|+IIEv+(2>P0mw+U z$WUQ?CmoXeJFSznc6j>`aEmz*Eu^K%r@-?3g7OmR?@ComF9vgK=&}j_Z!N&X9T7tk ziS>}!)-QOUKD^qd+%`KYBRyRsVrxY*H*CH%598e4A&M;pv)s$Z-UDvtbAsHX5{Wr! z?U3+dB#OS&w>u@d-(cyt0+E-OpV*@>FMnWcjw~}NNe@rl5k*OsP8-E?7{YUB!FtKgHzf`LBN2%ME`h7Gwrjw|>Pc(Qx8Z`18~ zX&hew64!B5wGeP|-DPeAHA~45-UhlTQY#km=_?-FoWIAT!!jJc++1v#qqDm8642(> zXPp}F$#%r^qGzWwTqWM*9@x^R7UvUgG;#JF!POl}!CH()2F-WF;Chn7Unr_cXX<3m zE%)qQGwJ|H6m4mQHrTxR%l9+j{C*-q4_bae6Y-8ktoPohL|!Rc5a8o8w*{@ZAJ6Ut zbqGi91$pf$uJ$xO0+sxxx|0p_4jEDeXp!9t)plL0Ep@W&t^{DUGnl?Dqr4yX@bmGN z*1CHV{uf@?&NE~6iDE%v+(g(n#D>QF#x4u$gALdMz@`tpPuR7e!-%9E*a9We-=7n- z>Bw}iPSW{&3;!`kpyJR_E$va6l)EQ@3CB=Ki^rptNBT~iEYh7#4dM^=-0ppVq2bNoJ@d4VRq9G zVGd!r8bYfX)aRi>|O#ANzYjZRXGE z=pGFQcAMxFJ(ejwVLPFN8oxFK;&Ou7PXP1&rj9q!_2IrqWC2zLyGi6wcw2eT4tBA6 zz+a-ji(|EuRa#xFRK4yue{!zjANn3jlFlSpg5izWYT0IX<**34W{aRE5|uGY?3JnWqmg22Y+D4J<`rv@Wu-Tg z+S%U!$GZt1VN<$G8*&qUs5hO&R)ljHIz6NSZlfw6L8K!?_%XQJ6T<>UvMcmUztAj7 zusfG59~=x|5rbQ@`V=k*sfQ4l7O>%?jA`bjCZ-I?OROG+(d=$y{oh(|j;U;<5ieb9;q@)E#X;lnR^Xy$OWt)BOq>#67Qv?fx0S<0rPB@|jB1Bq~kFOyEfA z|81V`Zb0)Jj4~E7FVw>v3G@I(?^e-%GR5_(1@_=u@BNw=?-k%S5+00k4!?W6$%S<$ zEqcR!uh$nI%+}w1+D`=T3%ksmD`h`4b!y@&3awB{LCEI;Qav07AnZ?b6?S0qWvYtd zhNF=zflSr>N0^>G;+07IK#h!E1z9=OgQTR0o;BO?STbTpsotd(k1~#-_N#EUm476u zA;^$7xM>{u9q~iZ&?#wY8#unGIcy^=3dp_oor`=^NIkz+QiynB8%L4|Q~)!AVX&)w z15-;^!xyoM2lYR(11UV=K$=IwKw&C3dq)krWs75)w< z1SCK&?G&VW&NomGQ(KM?)VjmrzFJ=W`LhSL6n5!X?bJsBOTQ(m-M{7Wy#3u-qk3eM z;g=^l9FibHM}$V>l!IvA>cuFwEQk>-lYEYNhIlVuO`m2N4Xpq<<2LeX7>&wEURiy| zDfP%Crc1z5U%eVsIN3?O;=1p70!;uryV$zVSXRcBU(=BFY&U&D7{7(&%_LtXT16KQ z?k`b|vK<5_ZXq-Sn+fQYFE>r@#o=lLzPAI?R>b}VIaF8 zGr@h)-_1`p>jX{^RU&~D=ydqzB3;ATx=sUs5tK-MPe7G+Xnyc*HdG%lyfGI6vfM#> zD34(#Rcz;em;QVb2ujAe!gV2PcySCU=@*ID{+TeE;{L{!>^Od`k!e^2lXmlSHX2siLF*)dklaox8ttf&8xMdcnmZ z8kI6)xVzH9fvZ#o60>ih*wl7g`|~BHpbeJqSbs+gi1pfvL6!QXn$6u!ZlS_g#3l4r zL7o4I7Bnk8Jsm`?qV4VNE0`h=505Lhl}_ZDl@8w45HN(EozQ=)H760iIC+1Dbe-1> zmV%#@!KM(KAygM6QX4ve$>EWlbbSLqc{OL4-mO@b^Ss{ZOn5kQc?_nhi{3e};F-q&lQH>hDovnToS4{<_E zt^0d$Im=xA&}{#@cU$X}reM5+b&)ab^RpnfXUZ&0K=h;y&3cG_uPJ+ktA6gmzYhd$ zb^PCLPJgT%;GVxKDk{RHR8=$8jz%6*L+?dI?bFAtUrz982L0`?qk%3#9v=RYlJR40 zLR7#t{e5k`qw4Q zBTgxsg>MC2`PNs@Os4>WY%N`(IA`rV9@+a4C<{Wa7cF#aAqQ6*rjoL^huxC>IVG;o zzC^j0A{KMQsos*2|Gv4xt#56r;a|ge^#eQKm_I*sNl^cF9T_Q_t^Z){Tyb914mVs> zBkZ47Px{%zQQ{m6Nv_jPH6iL+{7z#oBKKPl$%oK_0nMk}GL@va=`&L2UmwNTvGF|< z-vjt50uWTpXanxT)K;a+#rYl37&;tZIlKZp_gP1{f&VXb7mKiSVpC!L8br&}xPCu4 z)_GF(a@Ofm%U#uni7HKh%Yi`SD)a=ISD~?R_ucQ!_}{< zf!D^Jz3%Pp{R$^EJv%GHWRha`Ms25|q5{BN_h{`ao+c>-@aen0^|iHAIf}~4{s+6x z4UF6G0i2=KHgY_YCSG8gyy?;$<`5MX^)iB&-%OBQi$b95!X4QJO_zJRyHDw(Xu-g< zKLNj97;V-uGD3@AbF#9ksRTD_0Fzjl`TCMT1#_$lGLMmm(|KCE!;Oa;b$S)#5*dwobX9ZHuj+KU6UE@UUpZ|BKL$`l#cRPUZx*Kl$?f zWB`aXf@ihrfoTp&Xt;ltnd(X&*V+s{a@H_v^^-`vpoj<>luI>nxM1C#zXh(DTK+fF z+GKp%V>uK-)Y_o|uUL7IFR!XvrM4+@W>R%|xC?1J*Z6ngcQW7QN6BLWbN0WKZoW?d zDvf)fO&t0goZ%9t0H$kgK2+&EWMv}txu-`lgm&e)6z(iUF!?CFs3O%$qmxt-Fy4aB zQ@hn(4aCt}mwwF5msjmkON(=@R=h9()=khubNBzGoXjLsnelFWoK8#Blf~s<=QZ$2 zT_6QK0lVCI!~e)Q z3-Yw%&Q9ko?Z~NW(U!Zz%Hv18_#?#(GD>**-!wEd%z5TT4tmW0D2@BcA#okV0^WcR ztE_rU@2wxVuDwa)-z{`aooH!SN2#jguOtJv(0Z82bLTWZb-0VzSyNNPxrBWR0@NI( z%C(hm$R*srd|nVW^;BEsKm%<8IO@qCH_(%fMP-nCK*6pWI$v7+)n>&jb3S}aCl--0 z;u_bdcldG_!w7|zyW(M+2y6nPd0y4km4qgsW4BXssB!;&NN;f^4QJ9Wl*O19QhCD#`Hn$XqX-{*t6ihiX>o8Gt#IaAiq5PIvi)}!-~{)RHC z!!)jzRpIEfadqmnpLAXq3+h)>$;glX^^}W1ApP1wf#QvtclpFf}a zL|AU2ukguS9DT4_2$*-z;GbE#XZi9^AA57V1FU(=-p)cD z2yCQnTpz9V9oklQtRs1@OZBsV{;2&O5OI{%g{kF^JKGz#>~@Rj zE1~UL4<0;Nz-*+Lxr{SwaF7b%B*oCvfg7N%_t%Ap99C+JveVHCW^em3dYvla zoZ2i7n$teM%j6|)r$5x$AJapJtv!1#96Ix7+IygA!re7FjK)_7jll zt-!`t(f_`gCcjm}yhux1?Qz{(OFRlk%7=a|Q33?A9}ee`q2j#fdV>E!*y`_3Rqjm^ zUn;^R4R8NC)~5P9b>%_8#Kj4}XxFR(j3^}%N%FnJO1)33vT}*|eaunf-sj`0SMm&- z(O`95U6PEYpNO5gw^v@(61Mo-B+>ASssB&SJEILBOcI5swShV%-=ime8&o+x0U&qm zfios+y%qT-CGxFr-kfNyu2z$jmseKqRh5_joNO$;efC^b;L=H>umB_rFzGh1*7m{s z*>esK2MdP=hZ7uu&pU5^mPrmeB|p4Yu_~l!s|IkoMhXGdnh)^5o`Q1-1_)0Yd`udp zWe_V{+fE=?S^vbP`XPTJb&yaxXmX^M7X2b(+Umv?a_8Jx3l)?hID9y$_2mO_rH-~Q+cv?3g>uGf1qRB3H7 zY^^ZAw7D$&H0z&bu+J0ioIEI-P&Zaz$2F-U^tng@PhTZtmAs}rxpHk$c~lRc*!G@vXJa8xzl_EWK3gg&R=W`}Sn_YpzVq9B65?Qu*nqxOGpM4v0p8;!J1 z?waM4coYB%yAkiLmC5zru+MALJq&=#MTvT)%pJpT2=hpt%nkhwE^C@Aa@4)UgCv;> zEw5G(Bt_OoG4GhsvaUJ#49JA;gcGW2KvRZPF+CYCx%d0em*=z=pvrE|RCnv-0IRs~ z>Kuhs@f~krTxA0)arkq&E5Azf^D)4}fooq*wyuNnQ*4sztKsab#lks0cKMjD~2Bs2tppxb}cZhE_3?wB9w0|EY) zF~?Ms5)IBunNhBTqgZ??@2&nnzjZg6fMURgCrg{{{oPD3#Gx-uE6|+UxOF{P9`w*6 zgUf2+Up79^BVC z-oX|K2l6}Dz97&OOQ#-l(3=6x6jKBJf}__>1dgVF(h;2`D8meYBk#-eVCVj1kx&x85#MjSSjWEllQHPGEj!$-y` zDHL&6N$Phtk{W31Uj z>YER59cz&EVm-}P$8-ns3j*{CuW+S+1v0)p?Y@=pnDSF=bhR#xV9DOc$VCV=l@etD z0Oc09n%6{k{tu`j7l2;pC~;N2FPYUa8gXA2PG~1xRl_5X zmR<$JVs?ZKi4*0*CFN@6AlkbnC^YQ}>#2 zwNM~cVBTb{WNCuVHqz6)fu8U{p)w(E40hPvVeDb_LH`<%G%#U+GGx-6%y5ngvp!7g)+%W$W0M=_%BjtHW_nz z=m3CQ{<*L+NfpITVFY>?IpCs;R9R+v^JUJicnCO)0_%hHHPJbUvc!N|g_mG$eWpoc zDqlFm^*SFOe=Vi2)j^7a6lIdhXHgS!6V-o1L7AqG55T^}JUFW00%j;tHe?|APX8MJ z`tF4ZKZJ5y&0_15qb0{`Mb*YhoTNoLxZ)+(Pr$4j)-fECj~eJ2h!ZPi1hi=QR}w2z z9M$DFwUDStJPr5F###Y~ntvLGCKnz{f?WJ0p@xq@D7DQ5LmKEk$hv2Uiq9t0N{a)m z(%h@xK=SxW`)xr8+}E`F20ezlcO~xOxd|Qd1~TcrMJ0F=enCS3jNXCcB_^#Ft01&S z`kPC?cp+=pmbp{c4nR8Zl?-su=Pqc5oLD1xxI<_{@B9Ho`H;zzFZQ`L=xdvN!4@v% zou`bcC`9cuP289eoRB1TP+MN97+M@y$7{tv@=>g{Pajj#$zf&MR$%7=NAM#Rgr8Pu z3oI#^R&!Yd_`g-2e8hqbue?R(~b$_fAcmUnUnhi zu*ncoMI4St8y|&4&M5*A*|;p#Vsa|z;B?^!8MQN;Z*a8-j13;gkO<|Im$px51k5Sj z0N0($_}No#*Gbx&q;_RFOs({95@m?n#B2GYfi6KdH{f*f6(Ci8{wPdQ;O#hN$g?Tk zz2yJ2hW|p}FLg;rwLa2U*}oJW_69+nrwE9T0Ln-rC|H22@}j9IrrBWHvZ~MA~JNIgo=&&rNKtJrNDKD{wp?PDRdq z3OjPYVQ(CokwrGgsl3r5RYVr~mhb@AJ#!OXxxedocw?w|PgtiEQiF)LpKB_Z_MsPFR-V7k$gUx>O-QS<&J#R zCz2|^1{r)|58so}#OLhpI{_!J9L!rVG7`PSIJ1#lc8c1<7b?ER2N>lG9bLWHG-f*S z1JsGx30JE7{P4?f&jm<}_6Sc@YY%J)l818`xjbZRO?44gS!nGffiWwx)oqT#7a*f7 zIdfDGTxD?)FvoNlL;c?TtS1xv3uA}(YS8PkSYG%77x#VI)Tlv|3^j`A%WQBw8H$$8 z6v9Vde0=%qE9O_H>>{{?vi z8OWyGEMRUM2L@7$NYX`C*1Qore}}RAB*WKee@gt)ie4yuLoNb>!fzA52NNBLj?}%o zp?iRE5-vG>p5&K_TgpnhUH_3(r-}C_j{dz0&bbVein7VMM^&noA8(70y(^yBXCuIu8}zh~B#jczf{{9A6V*(uoH3%`(5 zxz5)|+CzuaBs^_w_R+f=Ga5t;=JB;t(y7N2Zm~ap9NPA`yy&)EiJ;HXv6v51uM1~n zg}z)KSX&cHV`4lmarn38@i?RZQn#YQw#~I~e}1DN=VEUewi*rUPUUu-fqUMW)mVRE zC^4(RQ5R*|J}k+WO}4n}91b55!_!Bwrldu6^9$?+ zuX9tDx7?gwa!jRjCnZM_KOxhz$}h&=`Yj2OgS2YmO}Y4dQ{UV}xWXNu)$N5KnsCkH z8GVpWhz0wVTfEui<#n+;Z-3V}tz%n=s-(rnk9Dsr_JdNRm@72#*#m*B7?KBfCVw%4Ur#4j!Gn)@xY?rH}n;|y|#CVW!1_P2!)0d;%(IQ@M+ z*!ttS-73XB`y#KteX)6T`MM-raht80H}Ju)CJMIoaF$CYWQHmJO&VXI$LJoU{}tpN zI{hei z9xJch&-)ayH_MNHI3(D+o#(sjJ&P7aTx^R8c+L5ja~JxTKO>oGjG6UhH@jEfWbHH& zPNWD*Z6~NdNkWT_Ajx|yARCJe3}y&5QQgGokYorOG?KkuJMU=y6oRgpTNzP~iFddw9quWCq5-`;8~{-zVIEwV-PeVSrhN8NtH3f@3gfCjWu%5Y|1X zznKf$dykv~hx9U9Y3Dm#AJ1Ao)L=@2MwvFasRhfv zIs(kNpI4i+KW!4aH?*^FbiLBPZ$AtjCG_Dtm(#5bh-oo{AAKZmnQb>)&Ek$-dnWJm ztTVYw90l*GFZb94>LuB7Ue-||?HHE~CK#u4vG+U1u_MoKF_N)diD&kNUG|MmZSM3P zzRxx>5?l16gMXnOx@Xp~hTE98;d^N``=WdMdBQuMK2v)2X`q z15=hG>H7PoLg9?rdwU{E{kKC8XM1Z@7{vyL4^( z7K}dS^qszYdy-aDyQ=Q_pSGl&B*GrO{}}u1|7q{Lqngg5brV7rltH8@T>}V6Gjybg zB7~|Sy$TXq=pY@!fHG1w)KEu_qErE;Ny$(L2u149dz0QfxhHe){o}3o-dbTGHQJ zq80zFs9T} z!%+uVd>j7+V+g|*P&^qKP>){7ZFBBe7nc~?tukQqYB0&N&X_| z8uILNA?f{Vm70{kA`%CG9i654itkuZg$pegTt96u3Kxn-r4YD|_jkYZB6>sYkdL;LUKU}^t*`*C%Q@5(oYpyi#c|vPK?8A zBYqZ@Z&fEG>hH~rg>U!hZP}*7`9q;qe-oAe)+RU;*I1BwPz~*0l!f}|>n-b~WZzI1 zGXsrj>KOP1yM6Z(qq;E(>DAi`26J*jdiVD)6|W1P{=RNfs#I;z2Qw$Nw|M2p=WPd^ z?{Vjov-h3$h=xX#Z6W3z%S=k;e*6l^M|;a zzpc0snhrsnIxd>9(tx+!yJ!?{IjZZ?a2KWpYJ6U2@kUi?m7V6Mlo~may(z@moWkWJ zSILVxt(_zK&N=ZygZQaTD{lm>O1qEK*3tHwXAMqN7;V}u{aRWzZ9pxn=2Xj8zmeCl zrF%~N4tRmq-7t?A?N4eK4qOQ|1hw55AJISXtF$I+Qd z=bPkdF!*!2%Eoiik%li%1I}J9Y_l1EY1wR#_9^}o?#IiZ>?^T#Z%YtiA+%yU?S=?0 z`4g(Jl#%5x=hw|L+N3Hkku7m+@uyd)My*YTk0{pW*t45Or`Bif9wO6p*)+@Ncy3BK z%je~{8|>-Mk@)(k>ykgN25kt|*`qvKy&ph#fAnODa80hwW{I%VGg~W(u0WBeAKkd= z8F-1kBTCyKzo@lI35>8?=^M%ct8gM6iBe3!xu% zp!RclFIB6J_#8zrs$Zle#DQHOKSi zE$6!ul<5b735_IJ*dun1c_XCwZx^`}Nr``E`^3+2>1F$L%cq%;=fkJFx^@RF&{CF9 z-~w2VZuzC1{B*^vdh=z-`?^b981O&C*lRw~{dROZer#Ug_m;)ABQ5{S4IN30;QsCf zBT0Wbw>Le?r*VoKRgs{95bP_Ury{&&A1e4RKc4;@Tq92-TG+JGks?yPnBiJA{X6~g z#1C1>X5Aq-0!5te(-wD#=6d0z$vHVQ0AAs$CYnFu0QeFBAd((@O{2OwSx3GxT{$!; zz6|xq!GRxAU|iI3%#Iyxj)t$l0epmS3l*i7r*a~W-WKr-%_n=I75XV@;9;uZLs#E4 z+UXKY64a+w^U*G`u3H`tT(Ew(d4_%r=@hyBoOkytwYbT={sOxyFC9`*gFR z=VO|62Ovb44D%&I4ropw7Vv#aJ?diEsOISPqX=9bm8Dj?oU25ydS5glo-nAIg4ZJm zk=?qS);^{%`P&a%HfN%&MV}*~jlhSsrm1&Ct#TOKljkx5XI850t>%;?NmwM}lD>~; z$@{n@hXRNn{r4Nb3ik;G1j3>rtS%eygRe8b4S{GteXe#cQHVp7W_PR!gWJc6bp4pT zj!D=Vs}ozAK2<_&kD_3QF7=hyJvY`OS0phFo0Q?Sjz&kK#lJTg=%1+JPQj;HTS`GGw4PH7~Yo% zMC%k^KfBY-zK$0%je@1&Cfebm5V;2%dDI(zxmbg zMa{Pz06B84h-`s7{CGwA3m6YeBElsw1GBF7>;$c2Rk(Az2!z;x*a#Wj~OpchRN0IaUbm1Wgl z=H&mv==s}YCdJPb<6kZ%Ubg_k#|MZKMb?!8+jfA+ zoo@ZDRgR~${X-ot^jg{&G_-4N>h)b%7urh)Zk#dlsw&Ll&q&<4pjai<32p>imHPk_ z{#%AUAZrZsD^X@$S))Ny=E#=o>KZeV$C>kebpBSR>|{VBfLx5lRREr!C?ErLG|ao# z^>vh6aU-cA+{0wI5X%V}DEjkORuBjwKE)rMpK$3}d^S@xdKc*l9+VMdbNo58XPxZb z(tHi%YyMAOt`6q`i>m|hJXCC&_jibT(!nH6Z0!-l@s;Zus+JnFlBhNXgnhze-n3JX)tbQ(uBNwZr&h6X+%u!2VJVs3fMeIf@PZ>{!|l&HUG1``=qDMhP&`{f!7#8UYqo+>? zOcM}4KXEJdRk&q3ldwUbL@Nz@%?u6&z+o|w z5Z>GNR{G5<-MKvK_E`Z9i3MmTOtR7(WT!i~7ZwPI5i642)&v}?!m@9hFdT76_u&I* zs-@3w#mE4eq&k2O!KP%&Nm5IvzTiDEy6rvdeeB|Odsp?9_OAh>BIc^(0-DDbV5R+R z2oDFXUYdZlw{6Wd8MgS#ly5>bYZ%h$IXML56=~(@s+f*G;JV@$5~%g4Hxd9vPg*7# zFG*mGh~3=}BO8oeuS=#C5yB}gy5S_Rybidkue zm(A5SGB8brOI1AoKm#fgn%r+{dy|9Y_oo*{KUQ=p^rXrY=LQoe5G>elh_CUu(5&HQ za_pqoo&T^>M;-FOAXv>%#~(?G87oea;#sDNqYz-d{fHdTY|Ymv#DLDlcA+B$%z9qX z#B59KbvaMlld@U2atk6_`e~2tsX8K9(8#z?6=87)Nw`lKLmkxP|3V#j*N!d75-L<_ zfX|2aWo?o}ugIe!nd8sV0ytAK0UrOno`)hUzu9`Hrin_IqsPdD!p?VzQK3-u7%HkO z$EY%&L%J$G1|T z`!&%Wd$RD@-Se!v2yf*xei(s0a8lI?E!Smw!~ZD^`>R&TvM+4gy`&b|vYaInroMfD z80b2rT4?sERLz*z@`QW^$7R-j@65F2fnhwB9&cced}OEJj9zMmu53-Iwg8p-(*6T51O7s@CUv+_4?l zRerzjGE$LPcH3}e(Sn@3P0HH=QNuXr)zRjWu%zwbrO?WF1XX3{&>H_2!&G~J&BRh= zyEVlYivkYO`ZR0j)oa5Z`}};|4WctHTHfA`EUI;xHf7CEbHbDbf88_8u7C~YT}@mT zCqU)7#r?Q}zQNiakvto`NgD!PeiLS`HCkNXm4>Zxlt)!I@4ncss+*m96CUVO9AUoC z(*wj}&HsJ%dTe{rAZ*7BjI>h!n-VL*v zIU-k=Jhmp}q^hgg+s81Yv1BRD0hXz&o7z6l94C9M0ddVz8R;|r_skbT|EzlTdA_EU9f$py6Nl`!Wcu>?a_r+ z_DsTqO7Ck^caBDhJvK;M8{?Z40xfbAk|(g(-M)C&mP>-ulYZgZ|9M8-1y1Pr(~T#A5O=R{WvEMB@QR9_Q0cEvJOQM}1-;%EBA8w(MIG za03(B_nnw%j2XcfnfqJo8+mMRa-VJKMwq%>?ghWIAaBZJ9atD+mcR-%B3OL84;M8R z>R>l9OuL^PO9KymSXCFQfdm!y+VpGVm(aXY>PniLH3tGZ-A7^Llg52L5qhfnNRmCO zp=;)R@}XR%f08d~i6rC<_q2Pjyb*Ic!NX3gLuF0L-LqXMzl0?gn(}nHgHt6qr`OzA z1sjV~8<&4pC?I5gG4gA@ltoX}yhCD>P*&c|GF4%flUHtFbmGX(3!6+Dzpwe&<0f%BQ`_nurEgr%7>q<& z@!D$w#;JKEcp)Ki`w80^{J@JWYr`om^^8rd)l>1SI-Ya;uKPZ%ak>lrv#p z^K9hh*37V2+KJ{^o9Fb-H@`MOMsUMQw&Z?^s^F54Ev-}9$~>|x?Y5yxg$@rOK7Aql z<-F?7r^EEd-2H*mXhiRTWR$1h!pTG2eL^B)jTB~E$!Q-LD-rDLavX8wL+SZq=PXXe zgQiAssNu?<_MM)Nne@nrSj5`t&w)+KWrkYpKQejs4Z-0@O+3;(MHM3sfEGqRp@~_! zSTE$Nge$jk`snPVEBCiNXOGLHC@Ja7$6vgW%GxRt8XVu&n7)Fvxmzx3cCf4CqT+Yd zt40FA;-w=I3B}TL`Nrrl;hY?70)I$(3NBQ&YS!x&KH+sh4b#+rI)!% z4Zt}@1Pwx(y(Kf<>(K{MjK#xcYrh&I?0o{J9+%f&5SRA-7(6lfRl7TNv{R{ueqST; z_82R=cH`pK->{J#3fhaPJ6o})DnjkM5dnp4vz1=7CPahH(~xPPd!b*Z_f7GAe#>6r z&70(p2{tL#1mYwls7=Ha;`keO&;@${18KpSJoh2k2vkbXO7Y^5aGHb^-}m?m=Wuak zNyZ3CAT>?9L$1=G(UqWyWQKo7l#61o@WTHdZuJ3?&ZV(>Hp`U)%-%xX;UwTL7b(s( z0J8BO$lIQrCh)j_Iau|$s(c50(!&CMp;?~Vd(FURg==dFvTn~4 zVHOp>*hA4C4*Dm}VXCoW@Hpg-^Z2k>ls3_CMfb?Ip1<>;qpBxI@>3jf4S}?>^BFMa z3Hff?w6y=dh4|?c+aICO4gQd%&>N;$>rYqeB9>NSnR8K4hw(;0?|QB4W?;-h|o2`ho)9#(VvK6~zEA3PmvZRn;P!dXC^b zmXGv&$pCq&*X@Hr8kg@nN8-#r;wE&fek|adKRuc{a6y4H0_(f$9u$1l_hd$((k~=* z`76Q-ihSY+TuMU7IYbkqN*16DCWD4ahEJaSMP_XR*(ylG6akZ0%DyeZ0g%4am`2A) zMoW5#Q?_TRV`5R(Brg8*%&m35>+j~~gz2;4ne%mnvwmuMH6_eqMT`)!x5+1v5LP+% z0N&%9h#zKsOjvhVch5nD9g0W0h9|(RPp8o+2TH&PP%VSH9HnaC^(a(c(p+aapEGnO z(wDtDKKe-}4|Mk$>e>azvyhnMD8`n_(koYZ_l&AE`?`$%X-tS{XPwX70#c!Su#FOp zezlr0j2V_&P)cK6eYrQiT{OzV<5X~H0y@sW!mBowp&V5JkKcw(-$%yMwRcIBkxByC zeJ& zR~4M5Y*Cx74X?wsYBGDr`_g*RN7wmEm6Cc*ZjTu$FIkG3pErAx563{~a2J%UZbi~C zeyXkI#F$tIz64pVXCs~9+JmD{)$(J?vlEb2ERS`*eCPUKgiO@IJA6s{h{*OYLcOZd z8FkJt#P;TZ?8VV#?_fl5WyRqe1!KEoZ9>^oq872Ez;kt8IqDd6e&m=tagXxo3YRTs zDINJ-!Y|Mm>u-maEMM?z?vM3MSug?z#G${GQ3rPB)!B3nOSu$=v^=#bgx%^8`_zHx z-aOj}mhRfio>g$MN%-jS-6s^%NvF7(2X#%Hg>`|ZlY+rNnJQF_>t zg+7{xGaI>XqD|R`*aPYp36kqqd$Qf55~?-@JJvl=7SgB90m`M{Ueo*h;ml?mk1Il2 z*gX3DLnaFUEj;cE5$0j=)CLCH^bm4m2?`h>Xy-mDV(t~JutRsWc_5Xr#qHu0;V`%cD4=lAt7`82Zv zePwT6WHfVz{@uV%q8NG+B9^!KaUUPtg|_zLRuN6ra2dHbLQIvh%{_!JrH|Bn+iznU zJw_bo;jGN2><6zl=`?;W##ufYqsha6XrJ`m$;X|4emgUmiPxs(`HUmVl+%=Ya%ly^JuC*Opk%;Y<}Dg;7%NdArhAZZyYF7n9| z0+)76tHmOf`hOWh9b*b}{dCe0nbG;)r_`R$MSTNbl#4W>kRFH6-`zgQz@ zFL3_ckb#r{JYJBOToPqx3ZAIRu(!ZnFEC!X>x^RWQ?%Y+W)aNQ>Ozf)U94ec?i+E0 zDqjvfsaI&@Yy3A^FTl4Qf6mXJO*YhU^q&`!fOt zN|uTMuC=81yr!_QuxUe>l2Xv#H0T%a0LquAnIrTg2ZGL&o^sDV4Mo#3w<|#{_0uoT zAdU0(f-QF+9EH^Ebat(Mkeli_CcKE6$(wTTc-QoA_Gi#nKB^2#Oys_J@`BtD;EJeW zEB^)1jc^|4nDY$GrcRdJTfi~)2F1~`emzA==RP<@#%;8jh(m}|B=l6MAcC(1==Fi7 z_f#1CI$ct0msI)bY?PfM><4b7*>q8&@!D=46RPtJz=!DZ7fE=JR-ui5KmJF2rWLtD z1nQkYc-3(%4gP*#Tbl()yJ?`Bau-yuAvG`7FA*YWxJ|7p3JV#gLy zU)%$wUq5W|EuHOp!#j#M~+Su+(Aecc7l_{Ar#*?jRX_fYwu3!JBt> z=O|?YgA%KrznUs$r3DD+V$sXc`KJ0d;iKXl<1Il`kS zYjL2O;V6m#j{-RkF^Z1advX($)S<5^s>j1EhKnlbF<$K~*qWBSRsQu?6v+hx|cNT{xn_l!;_V zPHbD9yxM6(axjp6cb9fmZ2cw69EVd9Zp1lWUR9JP?6=#UWq~m`X|$X%c_2}A{Ygn|&m zBI1HB`26{EDW~ImU8NvA&^7j7@bBwbxaa*@j^EJTVkHj^JKzGKk^k3POB#Ng;7&-J z>+Fo!g!S8J)nO1_=xY32LfBPv&`hMOHyOTPvyq^Wm9k(|2^|23IRZ0^`c zN$a2$exSG%0_&9yj>oqi#Z8yCaeoLWT>#DLtKDwJ#F?h(yqHZiY6|+s_qqg|+z@d{ zOX2?)TmI+8mNEYSVX=i=tO4;8M9l87Z6f;qCq)bR(>k21U=M?NSu-rN+fex&MhKWrlp>2 zeT&oWG>^^9kSA6uDJdy_^^Bo|U&?yYNhY+uQBq`Y1E6Xl8+&PGJF=Lr6bd>85jKRah2Y5d)0ZqHn{?#t?IVTh6Ad zh?+dcvuz7Ej=alX$B6GEyb&$R;++OmW94doyLLl3bbwV$U-d5C7|5GHXC{<3F8UNh*t0V*hTK>;uPMryG$hyy$_bA(slsR;HrKd&E!$T=*X+n}a zW8tA3|8NA*u|HTAG~fd$ZV$yF#VOO(1kmYD0GSQXR!e8_F!rgvP7Y%4%-5T}jf{+H zj~6pRO8jTg@rYyYM}Q#!X}B`E+732YE*DS=lumN93v?tO(qcQUBHW1RK+6rrHRwH9 z2=$&;cbrA1*9im`L4`VSwhImaQ)Md-X9OSGgv3FtI~+*l*;FQDOl*}CFF3$^yFZx8 zkp3cWIIT&-_hG2#BegBW1dlaI@X~<65_hpQ&2_svJH6+_0DJffHX|skH`;w(5rC|_4 z2-!`tWKC$kd%S;r-~0aeeaH74hv%5(V95|Hl@^OfK=4=y9uL8jA$TfnDj5MGVZ zk|9)J0Bisau)t&xO{L|bU04JHk3f(S2r4Ztu&`JJ7LUM^5m+jX1sKF*5qLZTPe$OW zG*Tdzj75;~2r?N#rUH&&DuRkdQ1J*V89@bE0c!vTNCTFD78nDG0XBdJSYR@hRuIhw z7aofxW3g0PeIPBc@OUhqjKx!Flc_*gP%dBr z2Juufo(gmXN&^7^FAxrd2Gs&7fgXS+m<{9roIt^#Lckh;0n%V5papnnBD9=4yx;;^H%ejYZ7M(R*^T6+(rq;Wh{ht}=Gf@zcw zYoIm%kQS|i!%P4gEC9Y1`b&SQnmDNqr9CV3KHz_%XCC~ z87)*4BQuNu!O+2lW!}=`7*SCK2<(3`IP|^v0esg5T5!6cuz>w~PhsV6$&JYZ${WTb z4=rXrWAB?kQE@i0;ZGGkUG3#NIf_U{4>5Ln$3pM4Jo{z%d}Kf8+d|@IxvIQOo_>q| zmy6cB*N&~dSQM7DK?NIZ&}X$gf!9X1;qvB&Ob>E%3>FF{ZJ}&c?mrxg39MNq?=o+V zJf!|9(0?V)dbvY4x2IBAM$iVg_Tt8jxd0-ut|NQ?;MP;qCudj*FzKx45vj5bMrCJ4 zJq&Z3E3jz&z&V^pJTkyHZbnU6w9M2uDf65CNDPeY)LfR~7B<_mHW)u{bM0oPI8OM#MJUuTfi;q|#T((O>eA z&U|bxzD;POhN-$@X(Z+XQQV`^>WTPDg%VLI1Q&QR?S4Y_z<9_=%n`~s*OXD>*)uI~ zx(zY}$*S<&1ixp)GbUf=NTtk_O|dh^dH#m4k3ZThJi~w!PtiT=Y}84QA-(T0(Ja5! zd6ak}AsjmJx{#GULzw;`Q2GoECmw5~f8gB-!PFL>oerXT29ta1Z|B-`;0AGz3zPL1 zd-kN6mx45mI*)qWwW7696_y!a?$**_THcu(0`On!v5%{?P)_?ppE4mB+n677_2M4U zgp$kl%=g%mBaN)!%%x0o3m@Bx0VP|yHq>!Lq;Q!h4jPkxT)1p6-zx17!G@)2ARciE}i`WDJz6TVxf0sA`Y0d>=7LTsKNc_nBn z^}GgH=IJ)<~m4U-8)FA9R=0Va&o8&Qxcet zF>8j?KZ2rVYubPwc;}oZp~Ny&*}mH!U4rJY+b)a_nx4qaaqmiJu^CLhIv3#s>294l zNI&4Tu(c+p?`RsndOaDY;ut^sqGagQ5=!dtW6iNqFI`)D1G@>^JJD%~u@V+tTP5ZM zot6lW3S_0Hqr7dg5o_OU#JTIQgLfs)+KAsH(|a|~Z|cTAYCA(E8+#5M(_jq~Ez;VovO4VNuTSD~d#BDa0Ki&u_E$qLLwjY+d zSboDX=wV3sx@S1@F?4iwsx8aQFU;Ql{hiiNO}Qr3+N!BDFxYBHTy0%HF}-G`2<|f1 zVm2Q@TCv$dgrS9BkGZK2=seD#(3R!~2P$oqR|ju6d&`8d%ef@hXg5vr44u*bpeQ;< zx?p8D$Ie3)BJ3h9k+FW0-yy}K695f(!#hDHw8c-6<`iocQ!9E1fl#srH;NjA=Y zEtwnU?qhVv)bJ($eZSZFN_2C`raQ)hzIDn6@mzMQi%Y1i`*YMEg@Qu20H34l5fq3S z@iocA2l2(D=QirvvwC%ofbG|U*QKnA+O5}bj>(j z3<-FRJCbj_P~PdeO@Ul{Neb^9H4$ZOiO`KFCf}w+@!Ul>T=kQHXVk44Uw6w#E`H2B zek-9=mY>B($sc`=L+;|)h~NEm6*rAh*L9phT!C^y@vOW?NrYmv_DyYK%zhTe(AKta>bqeI0u}1kr*vrZP*a(kiIi2h1egX)s zi3E=Dt9aI3)_OdCOv*DkTLrM1vOpG=y7CwXzJ+2!T~))m&a?lPU9b3h={@FD z8Qx@t8YaIN(U+NQ8r|x|IDlZ4G@ z7dE+Mko z*%~+Egu}mu^FxeGe4^P#LDPlx5FE#`|3{*Fg8S zc(|$}dDPj57TpCY`AWia0Y7D*Tj_J)5i$A#Lx^&%_qbxMNr2E-T&x_i8gZ zblT5jZn8gAWo&h(xPj^VX?yd$$)XI~_X(x@+pc%Q*NivC$_N>)6$?84%H@MazieQC zD7NqcZz&nl$i>>4!EepO-yclcz?NbI?_cri`%>*6_oiVm&%ayyifMvQ-w0FfCc%}N zbML%4lFDP)>O%T^in^vsdDh#7J9)28+sK=Oi5MQ#>F!ICDxDV|ztyPSaIF8jH^qDD zbgHlRhBHcoiyY<@W$dgqiCers_%=i1H zh6YxBd7(EZ{QBT~{-Lu^-BzFYVy(zG#cnyfG+0TD-E<j3}JmTa^MJjGqdPhB$SA4{+`H?L3gwzFWBykMu`FCBi6<%s_Ur? zuBuTdY6&+7(vt5cbny$VJxLy!Tq|IpzY23)aK*EvhTvz~ZlZq)*s(LU2HwfZi+fNa zk?Z3RR(!wv)V+RpTVl{f+Wd0nF2=P>e^+|DOTHT)J;D#F z`|#oh8>L4k&^@4o77;_*b9&M|mU3+|Mk0MSe3gf4YjL#ygUYi4Pq9LW$6C zi&`jk_mKnwy^1Qk9h*b2sEkUP;3Wi3T+Nt{*rX83c6LU?-E%kS-fj7`Z|xsts18m) zI8Xmxj68BJFo)nzC(XU<@-MW3h6PxD^gp?mKi_WBlB$!l{5xQ=aFgxXc{~1&OOblx zi|oC9UT;cQ@LULD0On8>)~Ad4-ogy1GvFEAV3sjG?8f0f38wH zLC54yhh*D%%v5lT-xUElm8j^H8Z9UjJvjbdmOLV}sS)=3dv#&>JLC5JWNyY|MqqkRCm2tzC z*Vm=Ca$mu5K=fTlC?X(lInk@yIHqS+J=m?fKb}}dsM%#_QfpQ99s2#SYueoRX4knK z?TDI6m%%u~&jf|9f3#6cb!%!I(uRvw6Yh!`{}_9Q!-wkrsCBd3AtY)IIN{xUpEIeU zxZjd8YBv)Iql)Q1PCfqb1u(l}5y*Z0FQrbF~4$QL*4C1FUvn{MmZ;I-Hp zQ++pqCFeRQwPsrQ63Sf5b?aR4*nLYlj`4@0Db{aPMjgxW$%kW|@O|BhpBVO!_0(vO zX(wINQSjSw$~yD`mn{8?0y2^VhGUd^Iq1tjzTa&xEMxI#q%}7$&M%wpJz>_hh<0@D z$Hncv(M}mkMq;#m1^Uao7w^dY@spcX6Q}3)`ikvTH?w<}*%&3C&io~habEO;gR)d z?$#wO;Rm>_Ug<8ugOKI|x1AWPvGZ>Tb)54BVgW-!bctt|EB}t+wpJG_O+uC43{(DU zEVr&*(h@Zdmr>&qRL?lmn@C8`yk3F2%($F_2yK%r`)(`@M|K@svHsI~jAO_hyA<{k z#QVby*zn@3W9%5&?V3WGgNds&C$x|BbT)L4*kY}T+`#>1X4Xq4ytSY$yH~`f{qmmN z%rJe>dG*Ti>L$x4j*s{&Hh0}vzjl4 z@Ktg_;R7GblltsO$VM?_QvQzZ?1qvy>ZmS@5A=b&IA7xO52qw|=c7+Y40a7M0v|7N zO6N;gnuPs4Rr`*Zdi29V(W#*yCPVz^s|%A@n%GoG?7FQR!4?rr`JYF892W59PfSvC z<(93GWj1=Wzd`=l=sKoMS2kV27nuFeJ_O`*rR%c^+qvE?8m#e zN1$ptzkT@fJF=GdFNX^@2&JUim+(sWaVz@#vG3i}$jxb#%Y62b z;I7I#ke5H~kIPORH?C!K3!iW7nLgF;?R+y%aWl(hD*-x2!_-4{c+8fc<`qcJ%{P)K z0kl&?T)hUx4g(QRpZxxcvUR=^_@W*w?DWDfCT2M=ixL7KaQ4l0S7oE}lI~>wlQdjY zzRo?bbA;Gpex10kX2`RV(319pa$zVx?_(a;bV2K^I7WcuHj{RPG*LAp|F3_}!(Yg8 zo=wHaTdNt%yaP?0w!AD;ubZ*3NDeO|dSBbW-(~qH!+`0UP@L^uZqqvkCnCq0Olu`& zsN?)c#fbMZGplkR-h8I8P<`P+8f&Z}tCf8t_$PeUc#ZoCZmx+rfYUW(ZVmqbLTQ$UOPn2X zU6zl%x5tbN;%VgG**f0m=xAgvio`gZzF|+!yV@&Ox$-VuT886!M-xoy`2YL@_#n>q z))#0~k)K*gKIC6pSxvVMnx5H*9bJd-R69&OXrNsiLuV=+!}{F(ODerM(GxJ#O^Z`J92wNta{ ze8MSMb-S8K%Y?Dse$)9quQo;d(^FBxSzD+ni{gbOqUdT$zN17m|E$S`JXHGkiM#qe z{;}3(Q?|RV+h`W8@|Z@?;k<^aol*UJleY#?{aiHMXc=8+3-HA z@SaUo_Jo{m68@O@Im+FF;9HfeQ7*XJ6UNKZyC<0S%{Fp2QJp8P5(rINW*fKR8TAG* zOi*;rJd!g*lgMAn5XJ$o{PJ|f4cabJ6k#T@njo^3LkSW-jwCig|CGorR-_A;(eACv zEyuGyR}iAEem06?L=yiLo<^Ujf1|}a&f?=5f8NpWZPW-aa*LWvkSbtmNU^4}4_SPA z6-m`osM+SZCa%0^@Bn7ThYfZ;|304+F2X0~iX!#&D^ni+jMbar|8`PB|KT8*?+VY@ zY{`gMUxgp${D~AU3#vYO zvXh1AeLv^V4)IAV*N{?U>V(1>91Sq?r|WtV{IKe>eRdn6{Kzy&@wYZnsaejfk8WHs`M3%)4$@4cWhIBD@eEsgd3 R4!({<4E4?Q%5^Ts{1>hLY%u@; diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_hash_local.png index 4af78faa524c40ec973bbbd2eac89943e90eb490..4174fabe923d64918101af1793e40e4332408f50 100644 GIT binary patch literal 31038 zcmc$_XHZjJ*fyF%QL0gzbOVTVkls;4303L6N;H7wa-xUz3)Kl?ns`(IT}Fh9D4x3j_kc zyF>we^2Kim3A~W`+(jB+0)8-;9%6y_mp!#Ce1PkRFMh#yZ)F4mA71xWH}^I2K=}qZ zcsqjv0s=(Q?yf#g4xY}U9^Q{K)|FU6AZ`#6amP3?b9FKx)p&RG+t$WCqbrCzFU;?+ zHu1q9TuXVJJ0d-lI?|47d%RjET=0TVqDjC}PilzQ1rw|7_Ba>ewAyq78*vr3RJwoM zu^~*;<>uh;|6~2MuDH(sPo|_#w)(@3)4_yiX=!N|dAPg&|NnaN zwTG2GL1d17l@8^Z9sZF2y}P@6<~=lVhl}K+N1lLPq&~S^Ta14W4D!>T&0k-T3Moop zUjD$$oaYRZk`*}5gGDk{$}5!gl9EE75{%bb3lZ>HLwg0^bHQ%a{x7ZF-9O%0)lokd zhHHqn&KE#hl6Jfmllp&IQ*^al9xo(o*cS_s02V^tM7>KBQAp!U$u+ui2k)y=uh3P|$s0+I$C}d~C~k6kR^rh?#d+Wwj1>PgiHNPY zB{+%y`TKLt=JO~bKg+0Bp{Kj>?_(oiL_06BYdnrkSga#sl02InbuH6@GXnFzGiQ26 zTDm|zKZ|^FKgx!m@Sh(kGF;>S>UkJo)*um|i^+foAkav8f{t3aJ;z(lTKZb;CyxzZ zV6zF2kuz4e%yq?rXkH_*0+{gl@_2Q*W_5_42Z|%jErSS|M*t#xYNsW>coLeC+UQG z8~7|G;Rj(9w@h8<@rc3eSN7Y6h~g`nTFk*pv1w^l1*QQFh_*Tc1j(~aP7mS>hw78} z_J#cwZ7U#H!X%^`_LK3`q)#%t6vz~i0a#WOu>si_U(#ZpqQ7n}Ri@)RA^1`C)5s7WQLDOca=d~?>>#L2=>b-w2PGN z+)E2MRF#tmN1X4^yNf~Mn~>5Q-KRcnpV#M$yMXa$|MwLz^eb%9HapkU9xmOt7B3;c zZ%H>oc>qHv_o(2CaZ)uLu8TkM6(~>$m&B@5ejg76r50|*wk2TiDsKYdB;3~6L0$ZG_s}A$A%-ySdmT+ za%E8y#>`>7o({P7+$|~037eeYz8Yc&T%9yf3{~c95?gA%soz3YNOxjP93>1AUJwG5 z|2mIqRRw@lK@i`2h{*)+;fE*`$GtBhfEyqQ#e{44qO}@O*v+MPvq{5_w9=&m#^YxM zu?QipFHVK{3>_0A&1(+=L_DR$uh%~j%i6cCa|PC5dFW&8eEAlK9R*4&_~T=fsgkptMWrWuD%p^?* z7_*@1q5{`ADE^_7z%rOukCF+2D1i@|Veduo@b>i9+Z9uMgotU^v(&=mnls5w-&alq zr<@`s)Ai#%D^^WN0}kgWSUK+`j^@Csmv3>6Cx*!-#p3HTV>g<~Cis`E-vS2LW34F- z8Ko+8B$7K>Ow{l8W9yrKSj4BLnS8q2+R;iF=5dV4bmEDK9xKn$QCx%;UgBP&Aa-Y3 zMQCNAHqGaqSc37d7E%g5VC4S1Mgxh^4gTjJCjKSHIgy1qjFsKemi_QnUWLI zeCdSp0B5|?a{`!9{W+bSjVL@UQ#l@6D+qUw!Op$3vK>brrQmrYroq5?WI;KIwj|gu z9=IuwNK4o|d<>sn(vFfiAACr}ZZ}CMKMSh7M?M9vCU<}N*)=6J6u7ICz)p0#nHE$Q z+zdXkB7Pz4!G0CpN@7gI*YN3e28Bv{UPD`VJ|?jv_ho~}1qlP#MOIkIo8qx$?kq*d z`t{4YlzY%H>pwW)UQ`UMDmOt*Jh}Xy;^-qm!nWFA;kz4X;ZmN``^0N?3vfsA(hvCS zI3~!rdK(`MHvhTG5V_C-VZS5{(vSbl_Tb-LzA`eX@HT-8LDu)i+Md`}dk(K+pz=Z! zk$Bnx)?=6_s+Ah)NBB$N60#Rbdf`vlBzFmateot*(-N(b{t2b!HglT`F^ejhY?t>e^wWo~6Vtj`+sR zq!)6gef0O(s_jETavdiSHfmi`gEH_a$TYdeYl^g97vC^F;`SeC#A_T%>{OuL2%jA9 zPM9ZrB(RfeaNmB{xziFocA=4WTEY20L;N4Y{F)-l@Ylu9AC%5?5L zw7-<+JZD5ah!-UUlB%npMLHLLpcrFPvGj`nf-mC|O88czG;O=Td<(v8$}h5BebbYA zAnaalF!LJ;$%h_;)lB=jk>nLlMv_{RLVLNU>8uC5_M^rE(%z55rRhw_-;=M(p(&%YQaU}Kso zkI2R8>sQm)Ub&)BS*a?wuf`Zu;EoGemSp8=?u_e>)nrR=pW_8a#2{>6CsZ|GE!+M}X}VN&Tre+b zPq|VL|HmqNV%^SJna0NgzT?!XGy?>D!HM}Q zP`Vdb^*cQ9YUm%Wbc;7X3R`iajU2N|+!1U%%TaF{ZUWFO>%ZYcEOrLJwkQj=r8olf z>m0oeoUby!M_akEy*v~KUoM8m!DFG<;e)|5Y905ly@{ zi9UrC>?-*t>07s#z;7u6VZrO%S<>&jodMTWbk*t7WVWXy{l)+B0r8&Z>XECz>h`H+ z^As0A;5e@eh zU?W;Yw0wsQXo|0=-s@ly1Yd5ZQM$AfAt!B>JPB0Vw|5^k=u!kTR3xBYQJ^&1Uei+Y zHr+sny;%3);~rF@@Uq@pel!|a3m_73m2-E;rMHTky6av@1EzPynEeJeIb&iW0If!q zxzO<;mPCa;dT&0Qvuh|%2x`!4c8b9Yo>e+uhca* zG6JSAV^A3M7a~ny7I-zCP` zb4uT*EH`Wd{r>rIHTv)N@`tN1r$_~)lXu);!nd4E-R1OAb~(ntq{>U9oP;Jq5l%(O zug8=f#+(JJziJMmNpb0@+_}hT)TRHoR7$zPV^4eIm9eHo4Y7q~xi#O4C z{0na?hCahPc^7k#pCmG9`IBpaD7CiBCrt!%*FO>VBbR>e#t;un{wGel%U>O)QeZNb zbM#ngQa65y@=C7;TC%~cWE7Oe;YSbz!t8Aeeub|m$yW?5f_pMnAS3ibGO{6}xpZ?1 zt79e-a0iInRMTjBWQlgLe8?#DpakEtpb{Z6_TdMg4b`hx*eor!vCzv0#>Aaf4D(x^ zYJT0P%>+um&pl%=jIHQ}*y&CvS!n*Av2Lx*|FB6(OA~1Tyw(lumbq|nbCmGYKe5O& z7=pG-(Lsu^cKpfAF-Yh0F+tG8Vs|5@dF3(2@=LGM2vY=vJ!PuD%|EmQ5$=!Z$C@+C zLCx9BJ8?yqLnEH!;%>P-?-@3N9;TSZV|OEBkWcT^C+-;LEtl^xKB$r2lq-dJzBab9 zx~P9{*M zb?Zvm#S;8bg9oxITsS}v2q=Z;#eXFjQu&uu+r`jn%bz3FXXZKxO7@0(=29Ab@L=dP zg)NlxjZ}paqm_jEKo-?W=FW5|bKc$-)086$#rW1`=&%?(VVTd(rej+TuipgWV~@3|Oy~+gcQq=e~AfPT2b!ba~{`pQ-B-`62%x z6RJ`GgJ|=HNr;CuJ0f<3^)1vT*+%Hph}48bf^!5VzdyI(+NYmS4D4@<)7-4;5^MmR zft@@$9xHb}5GR!lvA;$tbYw6=I7RkU#BL@?k&jT;ssWA%f*m;E`mRub+~uHG4k z#Y*~=#9~c4zfz$+m#^VXuNGV-k{f_EaTH8;SG|4>|HF~<4<2`QtP@fv*489#*!Ilx z7;qo8STD0{Q88%MgAaJ&#od;QrqHvyme+neB8~Wz>2<#|nN|qi7@X2rwx#~b1s9$A zm+eMzRJ2?h5XA*fELJ*#)(5!NE$u%Gjm@mJFDh@Z{J#O3r7Lyb-c=ICTmFG*jt8=z zFDy0cNdBB2X^>>tlLj49|~tomQ&`%pE@AVg-jia8pCO&S~|@Egrz~+{ua`L zXzL-E;5d8a{coY2D&{I^*9-qsAK2xgeK`fHrI(qsQh4leVdRw^Dh|(jBLofDl>DZC_)aTXjlf0j5^7;{ePmsXeOH3p)!kUF_qKSB(KdbNLwNwh4=#+4a zf19#R2>|sZ3#gKRj=@%d%k%Q=_=*IB-TFOBZq31G)gs(VR{^|6I@Ys3ml0>I#Y@dw zSZOV^fL9I1&gaKrexKgd@d9{MY;Y%U-ay*7 zW)A1Pwp22`5ql2${F1MjPXwgzv5b+~+|f03?K7wls5N!Qj{)dGhO8GldDUx6pGe-9 z)F3KZ(fgSM{si-q*u0zxvrxZ8<2SAblXaWEW+h@7;yZ03eop@V4@--2x{n_Jgu|JzM&x=nM~Q{9$Pv zPp&&?lcAIj?K}?sF!rrr7bu8|0>1fA_OWt`@by@1xJH{@;a>ba{3(UR~fR( z=xvuRKJ>+2N60~HT9Wa*3LAeimBdQ^&073v#A!tMf~bSLX&#>17D5N_nNX0-U9Y{J z@(?wI26h(7JVgQEO-lq#@5f=$PE%#+f&8wOZ(0 zl|(;!*Cqp*Zu90xx3*e-)71m{pR~T3ZS=AN7deu{<{evC4;0u<<&d%KSc6=t*7b^VFn7-*38$)v}E{5|~P;ZbNaND^IQ+;?*tZP~gePcQbQb zgfZAwogRx)>HW;wh~$B9Cz{~Btt@u#TQ3YLS* z0AMuu)8j#r(3WESq;Cyqoj+FDt1G%H25aOV5fT?+qY{}h{cMz9E-*E%%BJS-Gz-iO z3PHUdI!!egOFwJqY4W(P(jr!>Ebtg3+AyqSFKPc0KTh<&javI~UbZ>7ONv+gs$v(R zSNx*(vDD(tyuCzkvqvb?BC0HxhMVF@;w5`J;br%wj4FMGdv-txx{Q2;RA8&6UIb%4 zY3+-@mtTcC5UnODHIg9+E89nAu)l zw7L({K(x`p%9zkkUi0vZ-1?^6on9X3x%72ICt!o#W;mM7HVSEgJBtga4wTAWufo<> zz(u#Z#Uv|C{|EPfr^tp}fsKQGczcAkog?tq30?#+L78v~+5d9)5Ow%FV-VgX&52rt znDs=qtWj7)Flww%edW8uRdd&Su`yAa1B^%KNdUEbe-l6mEOhKztWURY|D>0*AX2sq z(Zgw1YdKix8%366u0&YqSMLQH!DU~Gy2huQECRt4rxMUTqkUgM1 z{B!<5#goIg!BkT@bzT z#Iq(EUsKLSv!H!s8#3U?VTWL+X&jv>OkUj>y@3m>J20PICOjaN5$Z>0f{6-p?;S`s zMC{?3X>FPXqkt5qkOq@e+57DYp$WGfV>OnW*LbXb6qfCy37!Up2`-&w&IM>Gl#W!T zR%rk!snvYKW~5ZJ+nA(bUuk^oQnw70Sh6QJ3r_L?Ng_s?CP?E{L=B(N+KArBQ=wMs zuUJ?~Ks9ITyZ8n1e#%xwD!et9PGuC#E#}(PGrTeiUl^FX^8QYZPF2MZqpUQGLjWiU zA0Y*Ba3Rl3j@Ve(NKa<&9noADk2F-^-~L%nLUK zuTw-J)5kfbQ>#o6HXhh}Y8~KvKKjbkucGEXaJ{0zfwGbXywBqf7b!Ez3(2j8mbltQ z3!fiP^Po4PV&}C^mxiJI+QBz7AdQzx`AStvB{uW%)Y=xGEPUY0GW@jnPnmwIDk`zn za@4;{7G<%jo&{jjgLgAdPu_mQn^g?kL_Uph;tQ>+<@?igZV(|GVSqetSXF1m95LD} zl0-;+BzfY?&#DxAUNKmcT&$fKW&a+36+Ddm@rW!*8tbYit5s$6!|Yv}g;!P8xHCD4 zg=ik%g0sByvbxh;a(^v*GCVI=2XZget?e1Mk5{s3E4Vi_QN%;t^*KG>m5n z*x`S`UmGtVFfHdr^0jLA)|KHw-j72H?>L$Y!cu6Sk!wcAkq>pz4MXYi0u2R|Yvcff zkY1?(V8;MtLpLY)(pKgiBeTi{Kd(fxBXkhRNaF-o!qX3ntha@#D`{|%gkK$fBpN_d;>&@%vVB;R`@1rJfqWJvFYl4Vk`3oIoX z4!fEP1LOtG-{v&(*CIapvE&-9FKcu@^@th;p-?@7zTF*HNXA69T2WlH$?8{23t&|k zRp`jq-$2Hv~7WL+kVbz4hy6E-PcYR>nWTZ}-j+>4XsPNL5 zH4`jpaoBdwCpUh7|u*7O?5YFDFfM9z&n}9F_l?q((caUHtSB{q?3Q)`$egl z_b>LtF9%+)1=kuAuf_Jp-_+~LB453^bUtQSV)5a{XDeE{mz7^8kAQ4U3bU7@Y3!g* z6-gelta}I&w&qy=`}{@JLP2S5Oo4m_=`?<3Bb4OR|8Dq4scQ~uO7S`0U1TGLjcxRE zV1Kw){=U{CWN~1I=lE5q7TfIF_~L;*$rO37e7K6>jSqd8zfa#I9KUm~%KZ^hH?5>1 z5M1#c?->?rd>mZ2Ec6^(pJdL!4X3{5!Y)ivUi;y*{NG6WNcxBuORkuNX2FmiN^x%+ z?{9&432x>3R(f|znP(%HDjkA*HPohWuGd@%OyRqGx#ZsP@J!?7t7o!Zf-hS&+hPgx zI9nIr6BJ1h8UKe}kzs^Q&X!nscLQzu9q@l2dVccPMc(?#$={-O>UaXc71)EDn`X!y z>C?0_y3#UyOO4T}-phj^gVZ$g%hH3VWePtF7`gcE1$CaijMCKA1;1aR+b`|(~a-~7< zN>uEU=^J0m?3EfyQ8Ep!bo0f~p8PvN4Y_mbMR2(A(`%%g#5a@YsB;5rwJ}X}9tcMs z|BLVdcax!{y59ZgnosH5y7l*2{HhIup=sPdq6)) zOK=33kofVc4LsCMB^J`iirXlTOj^Uq8w&%HgvSTFE1O$Oc+hR9tz$=yWQo9sHfpC9 zxyL*k5j|kF6jRJ^_Vg!tSbF;zL|!#-QQD}O+rH0o$3Mi+XejVUCFYLH>y#B4M+8ZE$D6Hw+w2w5G|Ch-o`5NYIi18|$EGqZp zTOcMs;=%cv2^6M~?*E24qe6~aAK4|E@aa7Hzghq(9yVF&^vV?Cvz;lf{m7t#d!as) zTm}8U%y)~)@e%?(mBzxd4-^){+mEIc(+6TJ+D33gzH{9uFIoK|7hJYZ)tZdD96a~K zmVZ&*H^FOto@5A8Y?JKy-c)kX&&b1%tJhlZMCi>tWw8)HJp1=Og zZkskfw7&V*z(_83k#>THeJ1vvP)@66e@>HxCq>@j78Q~s7~f)Hg%~J;KBP`%@+{s8l?> z6ARU1QgWvZ9_|=8JlN)9T$>O99a1b+!{xvaq5@a@ZcDnLJBks(dT zDc`}NR%j7a@8#X#oxb=j$Y68RI(3s*xR&tc{SlzGu*i7$#Yt+j2-AE31l6qsv}=7y#4Q{h_)qs(WP|j4jyXmr+kx!^*;)Ew4Ib@ z>CE>916>96Xzo`1__OJNLYcgC@LY-jL$j^JPj`nY1ON8OPG{bB{&AmOEnnN!lu``X|CP<=FP&gj_{4V?E?V$H#| zPB9|YKT{=~{JF&K30EteKI*3B+5}AQZiqE*-UU%=r(0xe7gbGc10zUs7xg^boN1MH zXIBDI(6C$ySuN|(ARLZXna6WCd076H*<;;XU=%zhJ4R5f+ev z>Zw#TySLVqk681;tR_Cmu!zdo`T(Tg<5Nf}&cdQT_I*2Y^`IUf`wT!pH1J#@bj`-c zyY1-&m&%DAJA<*gN0801-eL8=j#xHXm!U$7){x!hsy4PqJ?ZUF=~WJLW#1HVn#hu* z;9>X1Z1yo>?!1cT`&4&Rm33raN(KO7r2M3`ktSo z#2Ken`c;_Xdfh^H3LUG|W1WbtxenFy)r!7sA+)KL>a_N!d`p#b`H28X2r_*mnZDvj z+4q|nt9yri;b$+6^yQuVV`auZch!2${ju|EXY5lsUag2WNW0x0x)p>#OlSFzp$9%@ zxYr{$rkX;Uw!X0?P6f`zay4)N5ZbTV@`0KseZ1G6j+bE3Ta(Ig6+DEhx0b!YDed(p zBL|-WN*-NyB=*h^cMR7H?cZasBe#gZCO)$K8^B)|1^K$NdZDA|?1O$mA$QB_d_{At;% zDp?z=cyyK%4J;!%#kMIpl=477&&9@c$x7(S6@>%R)8QxVO04W&ZLp`sO?zWjkNVti zvtjP`PjX+2*jJ|bDrnIT@RWU;ZC6Oz_Lf5bY1Uv_v{_$IZq^zSqt~qSEuyc&y2|A4 zOVP2=#y9F6=7b%g6LS<@hlKz1W+|pgX(?%mq#ZWP1Qa(-_isK%4{7|`S)bgI;e}Gt z;R80NN_w)DLxh9AK9{{;;bP`B163nF!^*MLDgYJV*Y#QoCuo(znpz2I8R4d|`2a~J zT>yubQ5`-7f{}?i2p$V#$x)tiJviFx;MzF&ooJ9P2gLLTrpt}%^(!~~GUa{jkOquv z8E8t2F8%NS{lX&?&n~%Tlq6GfVKx)<-(he*4m@Q0|hxcAM#QqSQ_J9$6HG3!(_&LMrerj1?1p5&j(txqqy5VS)+u z`+hdh7%JkH&r*tnFC0=nv3LZB*Si6kjrmFSD9UbWu)yqmssEEf7~n?5pXx!p5P}*vH&1vnyVIloI{toWjqrMVK zeFv|^`QgYFKIOzLF5oap%HGe+p3E}>k2^JW;<$%!s|G?de7Ue*3v?9knUaz3M zw2?wDAeshpRJkcZt79ZP>>|-LQe`!+j+mAnw)PoT2|X&@{UKB`A+!_=oInpv309AP zD2pP!9%bmXkt78X^FQ@HJWtq9@eTD~pTZs}mC|nd3b+(8jJ}!A#!b1*)Qcfmt#Zrr z?;>c}W!y%%JnH6?*QzJ|$5lL<5C3FNpRNapl~fH`@;9BI9nU3iRUG}iSg^{M4|Sj% zkBFFpcCw8>7Fp%@10U6`hzotlzswb@q&60@j<#1PdD?HRS_7w42t@D1X)}JBN--mt z^aCr0G@N3*$unzAyxK*_m4;ocUMX%ko6ine9}PR4??3nsSl0eFbM}HD0-8uR#po?#MC z`o`5X!#GB%o^C-Clc;!1d0y1TNf=Uu=USwb;_=n5vCvC}2ed@<1bvtiJeOZQH8bM% zUl!f>0-q&O-S)ki@>0HaQbSd)!zq#d<`aCgNxVJX$#|!d;TL1(ds#hVJ8PiK%tx8dXydXCtCgR zBXAgzm(T7w#tnA?@hTJB4#Nns1Zlz*5{AhA*s&tjSP>MR?RxuE;M| z5Jhkuo8F~BSRl(R?B{#KwMzeDF|7&>Z!2MMu7avfn2|aAE!OB)FP^`u8wp-1>Kn!U z?V-00S*tS3QVQBW2i&tRT={gTe>zdh!$K7xh?rIuXPm_BX_02?ZA^rK$Z4o*g75vj zW#JmkQyrg2UkIH6kz#5zP+FcM)(l0u-0aHaAFX*AsJae(MM}_@e5`pSF#B!#axGR% zG1eOEM)Jn~Y@rd2Ht+0MN0g}&hcadr!hUn9c6Ap-q@S2Z))ye0lTGGGFxbgGmSCo*Jz<%}6BQ(>uzW!g(2g92VtG6zF;SkM1f!X{*>60CHv=nf5x)IK$9D1}f3hZ~|+>U(0n%FV78J45(oQht##~m!( zoNFuYEZR88F}0L_GxGOZT51Qbh*^h>cB2J2+K~5M+ntO@Fn zJt1^ev$ZfEuzB*KPrl^g;?R8??-;75!;W7w+hMlS?2gBVnfyL<=cwkucr+SASBh%Z zm0X7kFVl8ZkWZw$HnAjp6DUz%7O>!NPzvzdeEuJrt5vh)3!ZF1#enS?I_FL&y zF?l3#DS&S(rh-?V+;*R+)nm;%!hU=dr~5c>7oJ-zi>Bx)T`d#Y{IK(roG^i{4|kSC zb5dl#aZ!HS)?Jtg&@en)NFyFcE_;W6E)yxj*VAe1!3&ZSW zEd5HA14;pTln1W1zp9=v%0Hz!2-)M#byp{K33C$a{ep{G?Rmu&bJuh7On5mX`(hI{ zy6uh<0nrD~qST~l59V7e9-Ja3tq>;ZnS|H$iQ~{7Q{F#tu`pDGQ(U0Zb0r{hQY`u3 zH#cVknO)WQ{B(cAa4cQa>iVBh`HUgOS5ln(0p!Fq!Zl&romF(+(0F@Bn%@;bpAn!l z#=qc~5XNTrfCvb$r#Wk{u-rg9zS|f1@a|r;ZO~k-EN9J36x*LTs`>w@MN`FH20l04 zG{`=&u5*E6Yb#Z|$J5#;r81=JA5v@v%GmyP7}>D^1Xz4x1Aubo>;IF0sAmQUi1`&; zKz9?FlW?}0o|$clgy*hQkGmfyI%g z9@Qb*sG36dIky2Mtw&*-ms}cul+DQ>BddRgoGMoH*jF~roHbhc#<&{F{ z!Q*yi3g{z<5J)v?2NN>cWywFQ=}P!7%JelWkzvM~3mT8BdZoqO2s90t&_u_7R1I+= z(GU%1|3?~EI*a|x_NGFtN1XU4vhHKT5K9o*PAPDl(VxTEk%&^Y8Sj=>1RrZFRICjG zmQcCaUhlgR%d^b1Snay|s`r?;TECQ*-oVoEoYr*j-iSdFeM8L^&STp*VnG^U1MPa$ zQeT`HcmYBgA|EJO@m20ZQ};P}>&j3$mdici`D<1~7PQh@AUsCq`y7nrkj|5F)7Tx@ z%8N@1(M8j*_yXq#y-OcQue1DI#BC8;JqHy^Nh;_c^RO*v5<5{NR8q&fJk26{cGDrt zwyizm14jt@63=P>_1AmXS8sEuWYR~ULW4uqSnu5?cNA=Uvtu6i(l_efi!=)%U@t$9 z<$miP(=Ni}5l+6o3{`~OvkX3VVKDW}}{KKk*4@3f-3Mv?J?elHHOBjka` zhKalC2vz$~Q*>6Bn*?4Ndt+;||}xUrHg{=M@II0Lwfk%NQ&)vIIK)gITSdQpxxO1nHCrm^7bn463_VcV>^L<4=oIxByx&+mRKdK1DKPPAkGaAD~ znjgw07$2j@n^R7}Z9v1tw%37p*RR@kp1#8<(6+Ua2=|&1GuZF+-AcYdrW6^&{L0yN zP+>Ptk-X-is7`hMZ~xPWeNI%qX%Om<+Es^VZpoJbQd=(utH;+g@m1Otl!HvS%`NZN z{x;Jptch^Dq}$1?Kv(4 z4`)$XFAU}WFncjGH^3x1$`Tm6LqBpv-~i0-p0JJ6knsxR71ty>e<vFAwv&R9b;gtQeLixieR2{|tPk+5hzZNOMCVm;%g#;O21-K<+)rIQe5^7`MMxl2FR+|xM6Swhf==g1t-7)$)sohxk;ba z8g1eH7~r6F`aQ=>vH{9hvC009SZdBSUHC#BD~E>!Nh)lzNp6s;7Me=KuFoozISjGq z%rkiu*8BIHomEKTue#1=mor@7->jIR`#Bsdx5Kyox{uZ!j;@6Lbr{3sRX59po5n!2 z#E{IW5-|u$KF~NN{}PwH-s@wXBi@BTS|F5@jC3k2e=w?zSpiKMn=Q7brAgpVdE9>= zs2=?NQ+ij~O^&)cL*1orDSN>+9{`UAs*d4uZ;<6P7>|VwGNI$@gp(YIgAIU6-+}2kBJ6Zoo!= zQ_hmu5Zmhq1~Rf%eeuqqNj3HWCjS0i0UsNbs7VZ(FX~QKZ{Oq6Xaj@v$m6YXA9aqT zJuiDc2pI-+cN(fZ2AiM+WBOMhf1t%h$HttmtNsA>J8r8pyRWm?BI)x*U)18|?w&JE zx8-zJbMJ0V#H-hpt_{q9XyGmPQq^X>himbY?nPTyu+dYU3Z{f+T(8IzXH)FUCx;1A zin4)-wjUNg51m#t+SXye_~3gKwmm@x0!)&(C9Q52U1p@?jBysqY#zQi&7TOlU?T;q z=iirMS*Qo*=>&T$Rb(i7`Sjl8P+G&$8VFy?butxDvk*FLsXzvxEWhOoU}$hsDsYO0 zS2QKx^|{D0;b@26-4@FAo8-6+NQd@OZJTojAVlS19A6`*;8M*O#gMA;*k74(e~oC4a5Gre53(T|_Pg@TO4*kKtuVHkKpUTQo=YpGu*9D^M$#N#K<}$! zKz!gYrU{^PRI=URtHZ}%vI%*yal1TE?gEWAC`SDIXYnf+nk_mIOagSkw;8kQw{f9N z+Ka(5{xJUpJn+--jjx*3EPY-VS~sZYb#X(YD%??S6C_S|KvpXcHx;z20&bOM70vSZ zbwgwD`@g3VY>}=JHvj=5H;D|n@aChoq@-lm;0;Ta^fIVtJRXn@KwBtHAwxp0CKul{ z*QDpFh+G5lHmSKB*3uj}$;aFV&`7sJ@Bs_88z;;Ptd$N~C09!GNUX<>aKpoxVBxV? zJ7?Dy7mbQAzs1cPXwFjl(s0DYb(r)hh0i!dRvobs<;vrD$&=Z$27jv6RTj<<&tR9It zPm2e10~(@}|F2UL#qpw5lM@$ayUq&yTS2hTU*e(<6F@ir-(K=-)xW_VtDI{axk?QY zx~^Lnej~(+>|;KfdO2<`3fJ%U3A|NGF3y}val&<<-VNkNt}9>>**>UxeB@CT`k*uEiE}vPPwI>FQtSxjBG1yty{W$~3Wi!)XT?Mjy@b%Y~0SMt74omu4PC1wy2vBeQEERM?VCY%+m+a<0*9g$= z>ZBX3TT;#ZGeXM$81P9^i(?0-k~D~Ax#Kd)LXio^Je2}feZqT4*N4&NG2(NLSM2I3 z{>RS$W5mIsqk^jW_lll0rSj-k9kB#$f@e%)3iuKtnQFq>By|2&oM!1fl ziaU8+!j94=)fa+qfIZnJreoQ?v)F|8b>0itLZ9c**xjS*vIf&7{Q&#&mSMR}<<8R=6RtYB#_3?)wi)4XlwUS@^yqIW@%^6wG@?lye|KqdmjU<70?YFpa{t!Beir1** zZEORZc%t~#ZIGv;gGslkI;=cw_1^vbbZVc7VjRT>c(+@5nuutw?k;>CcdTQtN|GRD zz+>Jp|LOr$gbb2a=59gDFT3ol%fE}EOYyetiG{YSdVhn%KK4&!pD(T63#2Sjk9nXH zVP!sEy5njuwV9dL^J2*il*sV;-7_r(gyH$!OBvM2c^oI$)*xs*X#h!lkMqA(9%vy^ zK_4MOD3PQcmZ9tj#|cqSGk=ncWQbUl0Yn4raqZ(* zPRR;YCi4l)7j}Mg5h?^d)ZRYA5?LLtfa|4fma1UupVetTz0q(YQA8_#MJ|KX6CCz# zzDr$XEoWJk9;*5wZ8rxIe0@{V{=c--cW=KA-km+HQ!eFkRaH$qZ4nZ$dUF&mdgzpm zTRRV`JhwdMl62jpEWPFl92v_He4gc{P)7<7ve7|g)(rhz5Cx_?dux}!rHO%3pp+oz z>)SSD>>PdLkYPx4lG=E{O`3wD45o8qLAqM0>hOI;!!&iJK=sLk?4C%r2;?)p<=gWD z-}ej>%OJJN_b|vB;K`D|bp)c-Q{?RqGkng!CzNn};rt!0qxNUbTUk}7?tFnKJjzx3 zno7 z6fh;#8l4!i!@Ux{GvS~bvSOj??!zC`na2hqhb{Dtmsc$zh zYr$WvV8!0KBlQ%Pwp3_SlSKajI?f&MN~X)L>$6IxM75)hFQLz*nEOfiJ2U-_&pAigVoZFD1D;^*;0&soL{3-vT#dV2@L-*bv6!BCeEho9Y4aU z>NMZ}Pjltni`t&Qhv8x$PkPGEA9nKC^KOQGefecT>#hJ`z`j1qqwtigtLIfJ=hqIk ztImfHPfd0-#Jrzo(Z13;<~j3F;-YE1w~1?@bLfliPdCrrz1&c_o_a=qt)CvEuOBlW zTl#LePOZhU2A%G9PS28b<7}94{ey5gwa58iou*UC&I#DTWd}jO5(FlI)c5RlU*UT* zzJc&>GAUm8g6M>e!gL|yq05dE|&iGgXjOL z?W@DuirPF0L5sUXDee+nt3ZH4arY7$3I$qR3IS?30Rq8WtU!_Cg#v*J7D^l3t+-2Z z*-O8j`DS)z=h@k3_n$m@a^;+yd(S=ZPu}-Z7r~{!Zb8kbYVKK{@en2yt2#u~1ck-o za4*43-}mYwi{A-FDq`*$><@ybsI9Mh@+?Qr zW3s2<4u&QQy4^FiW6X_pxl`IUTBW2jbwP&Xwb2Vco=~z!myo$jhaAh@2|Q!o_Kh&9 zZz$Eii#_`{^`ZLh^anH#kD|nY=g@Bc;UyQ}Noa9>Xv_I!<=uvdW9m5<)1u8|a#Bp7 z*4oNuUt}I4-UtL`1Ls)KZCtp(Dzr`_^50;XF#MQW*g;`F1Yy>@UQ*K|N1*ojTEJ>o z8Rj9hpOnabA(9xQ-zgfZuYLC-ur9Q#lk3xq#qo<_tw1tBv?i^qt9K#m#rwv)1~E07rY7vn>)e< z5%v%MsK84dNi4@(N$yyk(k>2Pa5;RkNE$kkve0XAE%XBu)Qy)&*3Z~ zz`XWkn0>*cY(t+JHC35V1xpM)J-V!OM(uCm%RhWAL3#|?&&lpBKHqDoM?SeEKX0|D z4b|DaRNFP61CjN*^~#O?BAvWDLmNJ~(~6m8^xeIS^FaopEt23^Se+mZJILAzW>?^> zjHvW7hCbR9!mi($`Eu8|8p&m8eR}!Y@;7k_?1Mkrk4Er*2!Rc{=_w`$KJ!FEKA@Jf|v!5!z zx1heq9^BZZP&Zf})=gzwXQn1x2aUn1L8_aMe4mxeetq@WM`cTov^z(m`tc<}S;6^I zD)Q{(4)5ZzBsrl<73Y zG9u1CjfHNJ4<{pmFRcR$hX)enXF=5D&f`ZlI;^k*yKu(OL{I_z`1H{t_|7Rfy4MW~ zTFBsov)$ITy2mU$(Lrl;uOQ~{x=xiz@Yx-v&$p+;ik}=qMG9#$HME0N&e zEds`(Z}38&e=jxnUmLptJ8<)kIb33#H7_rI!`Rd+Q%(4$!3WWS;Ie{vXKW}yd3(8o zWyN%(Ls^+!U=l7ZRWhE((a}JI>3L^Q_7b^LB4h3F5^6Xc^3wNgc0ALSe~Ik3N~<)) z5nfnCQI+$GhkAJ(N9#OGnJ%)~owuA3hbAF zlc!UtI=p~>h&TvML_<#t7sG)rUd4qIzx@`zcxAr3QOx78_tpVJhOz5)OU!q`1i=mr z3<$m1i+*`U7^*Y^TnsE)+#L`H$&^<|AR1l-(I`(8Qdh|8LsVIFk&9P@rL2q`u z;u^4Tmt$^dAptamgi~sm+k8_XU>Z9Wb?i%oHOo=d+iNSbVeb%PWn{NiE+YaWLUGG=#|t;_WqO8{4mVd^ew?N_M#on z3}EP@Ugl3B4^s1)Wtr2^C{0Wm!BU)^05Ut(TYEx}6}om;B0FwASwU@gRzXk70za5a z!3M{Kk!~l^MD`;P7{%#T!85{!xJvm>cIf4Gl|Fv@+mAZDSYNVbDgme<&gj9_e`N3Q z$_$^o>J0E3;kTfsB*0NcxiusUc_k%L(c+DQE-k?4>ynZZjSBTm+(;fxH%r1;*~bwrR|%oX*nm>L z69)Jr7H4E#H_tTXj-L(G>bJ$gCbGqd3VotwSx+hL&Iiv@*`-3&=-4d4NrYH9I)p;B z=k5(Z=Rmk3qdR^&_I+d0+N;;$td(>RxL1ahy1khzLpUCeF^zm?3^>sWyv9sPo+M*~ zBl1ZWl9+22$Z>FS>0MXQgZ{daOcmCzryRSxyBl+@6ELa?N=Pi#^q<+R%5Y)V`5;XK znswLgtI(4VVNBo@WV+i66ngRrtYR4HOye1bwsC-&f#vZ8WD*sYz>1msJ#qGf3z~@TxS$jbisYZa1hZ(kcz|y$E zSNsgss9e}%&h&0QgP;AK>}!9CX51Y8{IDf0*P4e8^ZjF)#2V`Nd;20{rlOpS zrJ6K%wCd@7B1#qJu&S!q_vKT*Wx?_j+h7=AY8?6K#3KEWB$`PAc6PM0-g3IBo2`P5 zmS{->Bvr7A_zFGbRPvQz5CEgUAsfL0>7#~FP3o6FmULK2jMGN7p+R7EB3(l^$f<>> zi%i?EAz`Rp+UQDv%$K{+3cLjj9#kH`G>i+snfLq)Rvet*P5gk+JD~=HEsxqs#p6Ic z1)g-R0wM`AoJT|r#d5cJH`ups8MFmpurRz~opcy1H2Sy^Oh;;TpXn=8=MDS!`G<&K zumk6~Q?>Y+G&hn;UX<4dbXk-()<2i&rvBByb9L<3A)nwW0R@m$9br@hD~rIiA%~fkXxd_4Sj4IAbY?z*$+->) zT2(!S#_pmd?4A&Fcqf#Ze{{Uh@QHGUerD|M5i!PK=kwzmE%*x3+0(=|u}j6%q{aKp zYD~+in&*9Z%HQ_nFjg1|+Lc4_B%~9Pa+FJ44*gnBCFJ{w!;=Y%_xgT%F>l?fUs9wj9UT@=!f`C^jq1_sSs_?M3?J`1Bl=&T9$TVN_{ z8Zr=H=w{_2i#bS)IKZTNB4+%%$ zRH`(&p;BBP%ALNZbdGA#)1 zEyl9@NJv(v;)w>2UeftXCSLfp>sDc_FqPbtf-UA(g78U<=z8I(*-P=i-F)pz7kEn61uHj>xVjTNFNqPqk%O% zRHaOFhN;IHQOIj6VXzkicxYdNhL8G#c3Em6CVh!uV&fpt2T2QFFJiJb!M z9HAMb9dEXokaGAJgqad6WVgpFegrE%!>&)>^>4{{$F66otogAQ-INJhnBVVzH9!*2 zCLec)ilZBt{-B0GLskKYldnDj#!T1WL33{eM(iVMW4F~$mU&M0SNgA`=X%6sLqjBI zou%GLUN+yt?%gz|{gJ$%{cR;)riEAc#Xw4TjVHrTwJ{Ri8!FfwLL}AdwVCTcHY)^R ze=3|Tnh}}Z#10H!d0@WJQ2QnyvDpTNF=?aMpp$dn#y)kyEbr&W4=mkbE(I>HC6Z^gNe+*0b5s<^>P4;2nHGY|Dop5`SOWNS1U>Nnacip@Wu*KAxwygtxNi5(`Et3`&7EY6P)^>{Wxwc(>#MdZ@wufz5 zR{mj5?s{KI%1kaQQ@w^=x5IQtio#&=AOX4-N06yyrQ)c{7~k(Xby-o8a=B_IXw9u`6%zI_yid4eHqYR4 zU6?7UXq4RDXS6&LeKZ<_hU9!Pc!OjR$PD}+2olp*;xIx zSag|mbra$-f`=AbZmpmP$sdgm&esy+6vzqQwS)to(tyi^4Orc*Ao#d)8)d*|&GnLs z>xY3R$316fz6c@;$B{~ht0f$8LOn1rX#1tf6~gJzqB=aFDK~}poIdu*7pw#ge6{`O zgu88fXHTKVwoiC>(Fai9PibBboq}9+w43pA2w#Gz_#~vO+4wdjR^;rh>zJa@A>8mA zl2$m?NQ3O>7`PX~vMRuRQ5X4dCVM~pe8vxjkV@cg{jTTIaL=UDP1z^fzTprW#S)o1 zxA>95muEycQ)oq_$9)Dk5j8_e2Z<4v6^L$4vNqv|JBAk;dVS=H8}WW0@(?z|m+Nt3 zQxAxugQyEp-K2TE6thg2FUUpOHu50mSWT*WsMZ=?EUy$#g1v@)wcAg42_+JIY&R_zUlsFoTz;Bt87C`bWsk-8-Xx;R>tMfNV&R*O9OkY)Y<|UVOnkcs@=SsUc>^3T#x@qz9 zh%(Z|Ea6~XLpl6CHI_(y`D&_FgT)YxIoZqT zuA>N&y)(4`DE8@AaZW4wA$2lR*ZL8xV&LfpNtJ#UR;qfBP0%(g(Ob?TU5t(@ee{k6 zE}a~jMAB`-|D$@HsFR|&nxi&8D$`Lm)*4t=@ydgL7j`Y(wp1QXz6zR)oN@2S^|D|+ zcQ8?oWV1kQOi#ph+!-4md=)0^@yzjX{SBPy>CM!x!sQMj!7|fhNr-6$Ws{7AwRyjQ zxwCUG#chVqj|$@`aJb!F$I_Vq6J(=sG_mQ`{&0#K%ZzyW>ENUcj}~-A%SjX^htl@R zS_Q;s)wsOn#1$oK(f&DLui-aRhgtgJYhI3f+l8OpKYu3kyy5AST+QUb)PIbm1Re1B zk4>;BV6iPIZ$5`FWtaHMG;&O*Z}{r+eXr2K(9P)4*%~##z%FuSc>}zx2o?xT(tG(q zp?;3ubW2EaNy*%Rk-l?hf^3VE9Hcr2UrUK9?e_NmiSvZbF3AjQ_+Fim)HKPARyY-T z7zDe%ktP>4LwRQQqS5Z}A1Acjs3F4u!C%w&pbgugjeCIie0f}c-P*>~RKvuCV%nuu zKeG=nyV|3E{yAcXn}JMkK}l=u#f*znmadQ02rO6&5#0E9Si63fq{Q=bDEsCc6{V|{ zDEVz>^7-Ab_{f+U90I0p_Ru4c<2}+Yj!k)Jp!XM~6wKL8#`eJh<|OmO2EJR8kde3I z)Fie=@V)n6H1p8<_))MekN-z^{j{hR8r4#KYkoLU8{O&@ChbPo@>Qev@&?O&k5@}8 z%xfOeEG#TMo&!=GbS^K>`@cl>z|1m69r2)9B(|>8`U@!o)7V9g)VUz)iH=ZFI58xH z!>nmSe_ME*21ph_$t|c}K`}icoNG$F(oezhQq6_=%>mccyJy*$6$|lG47RF3@oJCi zuSGUdG3Z_b7^4OG-$7(<87uI_;;Bj0QUC3@8_;nA-akKTog2};*xIUlI6Nrdj(p;P zE$))uD$ej0&X4VFj5O40A<^U2QB!%o*sf@hA9T9-m2ODYCz8$^{ievL;#8?J3grjF z%>M*j_{^j--=hOne!ivYhLZtej_G{GaqPDOYp zEj7`U;JS(k-BbLG;T!r~P<_xBgafj$==6@O=)ZufiH1ME-B~?enPXQ-SI7XsP%{PW zqrzcbFgcc+xB_Gyq+0PlZ~um3l_)-?Wc7kUc4`=1m`M7~%ss?o==gpGo;5|L<%|+X z(LKN0yOZV# zL6;)Q5K8*34-<=Z0z>s`0t)5aiA8mUI1`t`CU-wb3{nmC4U~JaYVS-bgV;bE{ig-_ ze^!-3go-s$NW|#MC>$e5ta?qqD_*wqeFM*P{QZC>YSfT_P7YGPKg|VMcj|o@Cn$ z4#KMr;ka6!HpTf4sphhLwy+;J^`Y@;qu_vvtv``1%?0`6*mWW3G?-Gqro-mrgbh&p z&;rwnQ2!m^5jW2(Rc)x6o(W`rjUxGUT)&FhwMFrnu|l~$@pY<)(pbcQQZ!Qww9;!kowzEMl=VfA5lytpj^w}ou+KI6Fv&IW#( zY1B-{qF#7-plVx$hnoA2;7_6KdSY9mM$J$BcujPibMYWBt@|%kgYSKa{=N5W_%oSz zkId~a{ndz=(ORdnp208W{0ScAXxjA8dC0f-RM@C(B$|Gwo(ZpMxDz%WCI>~&d1$|N zC)S1L*As8XFGabl5g$=E)Wk_=5t8dfH=$>4TxWQ4Cv6NNIVhDN+4$7?MjzhHFiUq1 zi5t2|bdO{z&uI45+}4Ac-w!WiTI<28v^y1GE57!m-S^LkXUtf-pR4?l2Q}hX@Z|f%@1o_JCE7h zUt6rUbbzX{Zpyh-m2vrCR>A&Ff&x*KP@g~|ND$qKN}N3?^X>!F;p_h?IARwB>>cj? z7j{S>yzrx&Jw{5Om}+mcZmU8ybzEIwrFC>|d*y>(rKjarC&3hz5 z|M?ylSU1%>2E9=2qQ~$yq?$G*HW5Sfaa}61bw?G|ksLd(@F#CDF8E&o(NR>?H6Yy= zmu8ZM4^-Q|xLXM~k3cs+ZX0rXfQT6;0+aQwD?v_~Dy6xj(W6e7uE+}WuoOl&J-K*a zps!SwcDND!w&mJq=oqgN_b)lvEe?iwZ?z<2CsMc!Cs65Dwz{-;{T{7* zf&dl%E4iEH-WPyfN+bzwf*<{k;#cO^&YovCpHd;;M$+U4I>3m6Z^rSpNNpt%EG+T1 zld#}j)A*5u=>Jf-18z+cYZO%` zQR|aQgmcwY8>@ZX0pz-V0iNrMtMBvPfB5k5XYMU>Hn|v1)j&zduOt8>R5)4A>*K-J zw6RQ+`eK+=!{`4B5?x>6ZLjH1+}X|G z?dAQfMVvVOoVnIZP12+-Z#z2jTnI*O8*z8h2M>=q_39k~Q5hX_BeC|Sz|F@dR*wKY z1-FdfbMokh0RE^CUj}X~)q|3F&k>RwwH$4^QgrfksHubdUnfZ?_~2CG?)McPlJmLG z@cqqk*5OYfuh;vcI>K@?MpG(bzaQSHq#rSA^P|BCz~q|M+O@_~C1Vfp9lSR))Anxw z{*pryce9+T!|Q^OK05N63hC<0@0V{<`6lnDJz2SvCTD%?fm^6XB}2Dd_mYC1SWRHZ z)4j!Br-SuTx2i7w^~x`l-YYo5Fd)%6rGEN(#vLkEZ-MsIMfuV0*QFp7ubpkl%7QQR zHVQ44P}7WVX4NG21(nP*`FF$SvIdw!&%&*zu@_e3s`;zhk@ZAsx?LY4&1_#3Bq`IJ zb?xJ$I*z2<&GuTcZVs7pt4^ev{$70FT_G7cS4heLr3gEC?iP`SU7v;@%ki9LNf1AW z`tOwE+jcHRTNo;~70#40Khcp?2v!C_Sd7Xz&H4?~jw8-Urd8eWaG=5&W0}pJ*hV5= zcjLKbEQ)}qYk2n~$iV!(y4=}Zkq@qEUoB{~HR9Jz^0I+TV0Xh6_W1tk-2jwj`h2^} z!&M4nw1tUfF!Am2T5iFDkUZT5jAJw>+NlKuJIG<))LXV&F-{*9QG5v9>Ifm>vF~xp z8DlvL(jGceuMu#FdK4Q2Kdc+Uq88r!fp3R~Okpo1Xj2$Z8(kA;Ior$2(G8V#Ohx%L4|9~zPOv5U2cMOAR@~ajWdAKND}5pD zWh?eiV1|VKURBToc`oqC-&bS8jdd0NgWlj*5w7I7Q^zA+7p5B~jK^DhW1 zqS;COpNdD6$bZ0R<-r3qgnpA5vbPmOlH1Cf|LP##mJ^gkJt(nxl+_c51)!pf?<-0U zg@t6JWnelxne5oKKY8URTbX$W(MtQd7myGwWM&({=aLg5ry6uXU_aab zBGYdw;B3{b)iEztPPi)aDvqD8c@Iy0T>j~0k9dWw3yBs&>Le? z+8#HO6Pg_#fvtTrF6|PduT-G@wIY?f+Zx*vd$!R|)VP;Rchi$qm6yue ztH`(Otj>igAH8r6nOBVrq{7s9r2_XK;hC0OLjg>;GVy88G5~;2x`&&Sio2ax{3aNW z$=07c)y9`aCsn*aGoJIRRzoI`L`cq=>8`oT>c$7ZRw;RMU$GxMm9(!KZicMeoFHMDJWc#?fhyaUeMtIeT)cO;`}(4()7FSSj7CPT0o$F&ROT z9o`1Q50OM0z;&a6nCYh?jk*}0NL!wVa0_IcpwdD0vhexQED-n{{W{ZB zk%LaOmDop+lB_#+_SHvL+E^mJlp3x|;#-@~NQ^|9v>M6%$=+YrT~I+a3toZg;w;m( zLEq!u1yS?Lu&a#pHyO%);^(J_`hAv8U2fKlju|l`Z*LN|%ZwMbjQ`MO z)595^Jy&JKy#ir|KVtq;1;oL>dF0D{e}B2UQt9|tk~%O7MY#=tk__yicgqWq=dZ>) z9Csr*9-tw=$Fgbq`1lN|3=R&)u*sK;Us&yG7;ZIOYToH#c_92`jjuL!UmY-$8Yk>e zY6#}(;!Fd6k8@v?i@>8*dZtu2K}Kf(Ue}G=B)X=dtK!P4J&ALYnK03m&?eg1q9If4QtXi2IG}C6|S28ay3UY_v*y=j)%7d8`N}N3r~1twv*CBtrjFb{9kInam z?+!1tj0^u1AFoNx|6#GZnI`UJ^Sa7|wf>uj7ym@zs3*;g8o~~1%(@3(o6h^Fn!)c*2&kI#46e&1e>l<9fS|! zzhEvba6x;jk*((?cP9=>Hg2j5GJ3QWuO2KaM{Z7*F9 zkrkp`$WJ325A5J(){`l(%yxTNLEvvf>$KShOs)zi(?hJ&{|j}OfU2fdD}S2GyYKqH zp(zNq{?Zhl_Sye|rLd*^|IJdcD5%i<7bHbkFYSNMQLLWG?*f_V*Ph9oCdQM}QGTG2 zD_zVE5_ecD(*#R;Ou1>qtL5w)jC^{wgsZSqZ}cfu>{fUBPOcHh4t+)GQ+KM{hz><< zFZj2j0kZ|ok$9!ZEg*FX;#rj6)9Yr7dJ3bVN6SAQXvTzx;4!wWUy`b%Xh}riC_1E$>+`1QD3LY{V^JLjThig}o_XkVWizm#fA7ZsQ-PNkF4X)V1>U$Bq2ms( zl35KXaoT7O>ve#?(Enb1Qrhow3%horwTL| zw{aSn*04RkkXw&V2hkEPap>j@lD^cMSafre%Q>KLyoOZ-$8a{!r|%`lc1U%^m^;ny zG)Ay`&Mw(CMqR5wU%6kGuqAyqR}2C^s=${= z;Vn%5DUy!+z8u}JJmVz>cGAa|@22T>e)B+BkzQL7oO#czp1EDGBSh*)U8uHN5d2k$ z61)pPY(miS-p6Z98)Y4*gJyu3z{Id71**R+2JreV1)?J zF;!J8sfBEB3rB*sn$ZA}WVv8$Y%B?6*?*_spr3Ks(eXBrZo^L1+OJ6oCK));Niv&1 zf(@fbTfU;nEJ#;>+j#eIG<)(cx+QuCwfqWF95)nV+0Oi{MR$)=-b!E*NVuM&Y!~Ez>>)8{v zo-VX|rE~W_{|$aBQPf*QUT@Rn3)J&cBj-}f%!^Zs0%8Ip3f8Zc4qvXkSUegrx$oYE z17y{SN_%ind2zhkXV94->&^y|H*%kHcJ0rd@Y(q#uSd<L=-4ATjPQ~e1pDU5if~6;M2`(zR8@WEWqDPlF7ZIdV5?kuHRa) z?iW-{bIRDnWHedG=;>mHv~!e+iOJyWprtIobzmOU0tGpyP-0ef{LcYq;-Hf!o_SX1 zlWD|Vdn5a-nud!Vv&f3hSSSC}qw$yaVGTNS=`8~?D(lzwe+-%yH`30QB}vm2Dh|aj zt>K?i+wy1d&-IX$It70B3<@vPsG69<6b5wmM{idxCq0VDg8UvA?e^qy82x=nYKO~u zI!IF?AwYgu)b5@n-4QgxgBq2indTW9uV zXvi&%LW*J{L9m!{*`7b({!80{?g2Kz9_ndC<*IAnNVyQY8}S5wOvK+lIWN1?5%*`g zBjjkv|C8Bzj`N#+IgIU!bm64cu=Sr403^Loe`qS4y*B*Lm>?-Xgrr{po#p~_k@<+n z^x)Ye)vjikT&>WWeiC1Z`!i&J?|MXFasZd)Q24B)^u_gdl~8_Lx$5XuOEWR)i8~Lp zrM=#wn+u{9wM3ND9AF-R z+^V0h?rKxPd-tET9K%{pRz;M&moaM7vq@zSI5K9ae!jhfRtr%IIXx%{{A2IG7z6p%Lm;Udd_r_Ra5|I3O=~;FkWHlP zUFKhOqVuh_ku9e`?2DL!#W>*zzfs}x)6Y%l5Q7IRe_>2#!|t!6&l=l~lo$(c+Dr* zpw2A5yJNC=Q2fo2Dx$yI`T&7;)_Hcd2kec06FmzggA^-T#r$^=C4*~qX462ywr<>i zJ3dllxsV57gVAairVnb63^d$1I{y|@K$S2NIS+Y}yjM6(!l1 z$-O;F0{@;M`B81R=G#OWY9LzLyyoT#1LUzUu)6n&t8g;wDQ4%tO0v;RH*uxwpfJwt z{DWn!@RE<01l7BuvGO-Za>yZQq%uAmn1k0R>RS5{#-&(#_x_t~W?dci@UT zQs8?b!iDj8zQ;E8{B)e5G9@J?GjO%|*jmW|M+&@*!x-9{P@}x94ESN>zXiL{XsA-Y zUTUKLJV(i`klmwg?8c9`q?OJO?_my2%U4G9@J))rGt7r15TK9QTZ_Z^e}_gPxY+&6 zBQRFJS_%)D4Gv5nU1n}E#SOuH6Z1nz`$g#-E%~;MAWia`9K>L%jL{f>8#d?~7zlBs zq{<~cqtP1z#o(XgSaG-gCZDU(*TAI2zck1)ymmt$6fe-OPg`e@GaROLacx3?6q4Zp z8$?nPj%jOKV#|5DG^?(TKz5{1U2hp-%X@$2Hmh{Lb4{jNpDz~wxj3Bs0mzNg+5uKk zute3=qzv>}Z)MJ|`zBDHGGGzyG875a`ukH@QevxP-@7gXX<|GAS8_RM4tzldAYT^! zDZ9FwUe^%u!FYKZv2!yKR4{;g_+b7q9I&=j3YDNKVp419k4TP0bE0|A2}WrA37PLz z(iJDywC1}Yf)H&4FXoG2b%us6&<^U%+54_h8GmQe3C@+H2XGDV4Ow~os<3O7odvi? z6u{c$2+u&&dx7TfkU+Q@mzmw%6n0 zBKBn}tW0$U-A)Li1t2&|b-#L$kQ3T=6$M}QU5FQOu5`Wv%Fe}pbm~yc<~!Dh`MTU$ zOQ>P+bVvOL!Y{2mYge2?reS+Z{6qs`(bbJ3bK{BU>fagsPk!NFjpqf)sbh_0FRu2h oxf%QqX5v5drT-@^?Il-|=R31_;VvoQUB`IPdwO@vZ`+6e4^D_a0{{R3 literal 7035 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_small_s2p_tree_local.png index 40b5b2c43272e937b0c45d8c204c5dffc8084aeb..c5f4e57e6d7c3e1f238c27c471c71fb59d124420 100644 GIT binary patch literal 26974 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 F{$F&3qSOEY literal 6853 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 KwTrc!WBv_#V8osP diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_pop_timing_test_local.png index 97ca4e9daad5f4c2f39b95cc741017f49669228c..81f7a5900a023384ccbc4a4c81cc44bcfde231f9 100644 GIT binary patch literal 26303 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 J6<&0{{~w_MXjA|I literal 6892 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/pairing_priority_queue_text_push_timing_test_local.png index cedcb4cf4b22dcd3a76a6a27bfa3f51bdbe7ca88..472d8691f2e7b69512e89d9c2daa5b138e0117aa 100644 GIT binary patch literal 25070 zcma&O1yq#L*FHKhgoucMfPjLM(lOHM4-kfw?h+ijq&o~mL}17vjggj=u0a$822eU> z=x*t{XZ-&EZ+&;&^}qMJZ~^n4_q_X@v(G-ye)jVc{a8zd;ws}+2n0d_S5?x5KnPhN z5Q6+GB;b?9z^DlDjmYaiaQ!RbU+@*X*Whr;Md`U}UGJBRj&6xY9Z zl`-Kri683R5F&h{ND+BU|G^LBEm20>^_Ki{qK0TizS#P_y)y+XP{y0T%ibS{#IaL z&`cAWSzv%6))O-_8WzrW7rI@$lDM^7{`RZS!EP}_kmEj^lL6mP_ScM(Qc^$jRuFLpl02$-Jrs|zMy&aqsMdjI{c(jsq-30H)jH^<(V+^v@0thM#A zvH9?0&NJw6%8&P*#O&)4Y2Wox*g*Nqt*OnXz%*}%U?7f25E#m~Eq`&CQXK^MEjX71-J4@vI~*6&Wn-&16b zlfO86%@!xKTZ(MYJ%Np+q6NUDA9pKK%06&uIX_t2-sxa*58ZAhm0#`u+`YnUR1z#m zBP_X8jU1%KU=8i0=#2b&q>kes&|$EaKV8@-jC6E^25^c|4z}9V#d&NEtrmJMm>-N9B&_Y?7W+?7?G<4I*Dx~VDYQ(bPC)N-l zRr2sTNmc_`b1lisvpwmYXI zs{yl`bMkk^Yn9$Ac*idHiI>k@rwTM+E>>JX^8D|B3Kx?{;Qo-2e9My`Z`RiK&X7v+ z;q2-fg_@?bJ4fNOv$IV_L4S64cSWqZZ-?d?xhzFCIQu=RM|O!wfOkQLt)>!&R;mDU*|vpV+4;f+_gmwH8khFDV$*HQ5)S zX(kWrExm#cz}TnPt0&x|{FZ-xXzTy1ZWMO1lIO>7TxN~nv}FW7pL22C7sjlIT0dC+ z%_ai;AQbNrKIbRHico)Jtz?Frop!@I2z;wElk5gZvkFv5d zpIP-f15CQ2dFS(!(J~vqVDOB*!<7Lp)2hwvpv~j5uV1}iplA&a{o!9m#kdQ)&(Zrk z{=qpQV3m9^tx`LwCnhGo6ERQ}?Z{8oc_lXf{ol>0p!xR?pI>ZGOkeoghey+J37iA( z5iqXxm|5Eo_;Z4vCVAl2*=$jiEX_|tGFAriw$7WjLfp5DN}B_fIiDcEj+`G(hdERj zR>OKFZ1YSi5f*GKw(lG3`;A$?w!NZgSZO}pltzbLUYK2+FD)&3f#`N9xmi1Rao_O; zD)~XX^9UO3hEprgAGGqSsxpw}fjsTMiy7{6xUU0R4OePE>^7orO<(B7TlAct3|BSm z51aXw3T(DrmoAP%TlB1V2ey!v{QjI2tU6A7>-swM8lf1(E5a|l#_0s((D^MwI|}YZ z`IkVh;#%pJ4T4wY?X4Zm^6yWAj9{y#gudwS*X@ zo*a4kX5Wo*2F#uU<$HU7vw#*`Wx$-{+jK+lMu+S9DXK9tK*3>sS@+6B$XbeTu5c9DSHd3O%xXf65kzpeQ2J%>yw z_nAzhR{M14aATt8GMXzp?W?wTPRM~{az;i_GCF27{TAA_yel(vb;K3h*%?js^+i46 zy;i5n5$W8s_p;lZ+xNGHA66dTh9yj@#o)7@4*7DY;d=># zDXuig!b3f+$N1Ayy^x(5V(vTkbm~vw+83q>o0&OV1v;~aT;$ZWWyqJ(J1_)xhLqVK zS3}zQ0zWGyev_UZ-N-j%>9^4f(4zeO{NSNNgK}osK=v=wjR9WVWk{U6jSt7S;hdUQ z@Ac90@%jiT>7(%~XFp?2+iXU4KDweEMLB6{>5TUrgpu<_ko)(RSzWOcNDxll+E?;& z{)n5HYs>Br>f#b_hPk97s9Inybos_{XW z(nDK9)>To@G3#o^*Ra$TiNe6W9`Uf?F7CWwVY{F4pH2?9F0)EoE&|&c1NJP#z{S2o zfgOlYWh_R;2F|1LxR8^*%IP74w69B*a2%tk6APS!h%CZs|G8NFYJEP$w8l--&CPAW zAFakg1PviCN+OXp($^n6&<;Bp$T(fE>=R=#UK{>mJ67>D4mFmP9x4W>s@7Ef2=5&# zD7I)gFul7%x-#M3Vo~olRWA?8!Mhbl(j#dBKEAV7QkGzk16=F#8u$%za&m57-c#w; z@U_|W3&97k!1P(ldo5z+Z+l^dH>msiG9|s*g0`Cc)N|WE*47uPcdO9jzLym=n9j(z zGqGa(+`D0A8Kk)pptb&KVdrN&`)&QCQ2Ej2a z2tdCr!tK(qbLSlpYur)tVWI8z0(DXj`9odd7nst4y8ke?)-%`+9H(10+7&_)XtZTK zn+@i;b9JHNFGyQ>Is)g^EXriYNfI)}% zqHgbYfhX$JKKXGqXytRNS{#6;ey0Z;K?=FkFc|b_S5MC!R7Qq0_0KMVL{}{tUEJy6 z(C|;#VoN=>wWD;~4*`54i{^^AWc;_s#HWMze4>~GmunELXCP4WN^CXmh3)|_nanO2 zeRYlD+2qCPmi+#tSKr2TgP;3iPX>LCl+S7qIUS!wKx-uNmOW32lBR1bUwCuKDf1{m z;4DiE3k#*@bXmyKQEa?odyd!?)Xg#KtRZzrf&f_^RO>NT+lT-%!l1)eY)jx$91CmP9s1qsi}M> zyJ3rS&6!>XXmGZyLf?v4IvVs|j$yT2@^Ma79md=9Z5#gVRV$Nqd!Y~z>H>QhJv82c zw4_>}o?#+tp4=i?)yW>gv`Ure6ZYAEtzxV zY~Zt?y02;hVZ`uLc;KUcmTz-Vj;u-R1pJ*P%4*!l`I9ZgN0P0(T@XQNl=x$F{PUbY z=(-+D5cy-VbOzZ%mCqszs$H4bMZhh+RjLJ?EF^!`WbSdZj7~>tR)WtYmyl|r$NtQt zX8kCIYP3c8M8p~+-~VdP-RGOYjtj!<5b@s&6R$L46sjKoE<~5!?vmQr*hv1&%S+nG zs3l-;F@S@EV_<+G@n0tPxxP_~$jq*fVDSa?@u}!zjh_Bcuv@0R`eYBEudbf%ulaG| zI-~IEp=DvEg%n}fwXGV03-UA7{w*dUv455-6udjWMJ~hqN1nd+4>pwi>vhs>Df|_V zWT)L7MvpS|Jxn&@z{S6r?eXZ{geoBbe@Nl=s{Kmv^KT_Qpru<>Vt*PX%uHa#9ixL8 zgCL(^iiR^soZXdxhc!UO*)w^P|1xZQ{>KCo`~;DW!B1VeQx*Ukl>SX3bwZU!5k|ag zZOZL#nza`V3Uw%c*IJK^()IOq`f$Gp0?a1HFGBVk@+Uh#tEy6Sa$4G0dVO;Vy0xyZ zj#S^s%F>cqke9b%+Kv9{(i0U|kV`ofhVjb7T=-BM>N1ap70f(&`O{Ntf;# z>oS)yJrvP3@#RVr9pvSkHZ8I2XRNM{XXoUMDRTDg>g$s~%kukESMEA7Pu_R2>DO|) zT+*Q(k$*@^624ybzvDlGHGDZo?@M|>a-9VDffpmkEaz$)r92jo z7OYB2LibmPrUOgcN|OEBDwIb*RnO2NpOVyryCk<0=y5=Z^(vsUGZ2OpLp_ zp9}seMukwVB|cqJpfDL^O^v=X8+e2HHp?@|>M6hEkZQ-8r1 z9eA*QoYAmZzjm~`D%kY5UlLP$()h}&cjG58Y^JNbdrth1|6C-zL>XPD&Fg&mZ_5Le&C$N@IWy|JG$w^6*K2ts;vK3j~VrY&u z9`+y3g?(LJfn{j)eD3!6{fC78uF{`*e{t|BR_~pxsUp+^exoQp+MwKiL|(yByuU9CXlMj;0r<2M?L?2moVn-3Kd+L3${lPLDuMd$J3 zUn>3nIC5Oks_A2V5J=VCz31qTBZg%NIBG*+6L$;Db+flLXPrJA^-6CAFGi3uA6fa( z18m=DXkp>=?O}oQx7~-DBWh0SNHjZLj3&{E(P8bkZ{M22xp=K~`*m^MWx)yl&Ir-C z!Y@!b)%zh|0bbEcMzbWawFW>yUDo_X-=cgJ;+DOskW;p9x^N(kv9u{D{7?UgOGcW0b-D`-x&nx)aaRCt z;d6mAFX{b3j=Z*C`MFRtLoBt%d89<*+@P%`W(fVjyE1bC@#occSeXdwh{R(8MBmeUdi9eYCMAj__IEfCh z2V&u*%2B*$C3m4;j2l1>M!ASZc|G#k?_dsE=ffmY8VPb!N{Ci+VD@bsg^=xrdZITa z^!oV~;Qnq`gi7yOP1n67r~lJD9eUbRJcC4^{${sDFsW8V+zm(bMG~Rw4HMtlFc_}k zW?11JH?D~YTy-yM$oXro=iYQ}y2jj#uKWg zbG{xktDj?=BON9F%*B+sDC*ibXT`5m-mcEdll|E23FrCbMy5WqJ=5k_x*{3#=FLHh zw`7$DW3?Ak!A761j?P}77szr?1h(_W<#O0Roy^ahMR)nGvc7!zQgpLHUq?q+q5qJe zNHKb3=fqX5)Urux_~2ZX3m!n!8K_Bj`XXxa-q4sp0Hz7^663RPp(B!jYI>}=Pmatc z+$0KpUK3bLhs7Ea6orr2s2AZ5kZ~E|KU^$M-QXisjs1g}6T9}na3@Pd!O=S7618kq7Ex#ed(}s`PBlw#^hOgkaC0RmC+`ag z#h7wZh)xYZhh2}HjS%BX5BlSS|>;ozw zjIQ>b^^cjXZxg-ncN0{_66WU+BoR_AU-ID!vY&E39j$NQz?bk>5Pk_+G%RplCdkhU zx1u?-X=uZiIR0GnD`7Z(wmaWBaSFK<;ZJx#^W(=4t2id{&EF0W(!V!5&g8WCpbUUJ2n)h+>rtem)4oK&pyE3T|ciyd&s`YmEa#lVAFI? zj+b)eQ;RE#i}?&qP16%15&@(569p0rm7$@qEu=T=H&|RJM5K*PQ7~w5z`1T*D{dIW{+aGwfU;+i^TiL+)c(N!ae7;u>D38% zwZd^xxykBp+@owFcT_}*j7sIUcDn`pzRVyWIdWgMF9@bhaeXnhUdc39WpM(+bg;6} zd1<+f6C$i=p~{}%6V{~(eH$l-{;mwxM}jsgz_THmS!g3}SY`#C%p~0?* zqP8hjcj6NQHnNm}95M~aby%gy zj)IZ2k7|A!cNeL@Ni#9my>^s=x|31X+Yw46z1mD=DIIAo*1Mv>gu9AUp{S!S!lxCw zda1%J12mgqkj%-l4}*L*25k~IC=%n*zsQA`Mc1W!p{4^r2fkw0;qX!@J){!5KI1|93x$yn7mtYHpx_w& zq<}auux+3JcVmGbKodqdp7&fgQoSGj$49QUHs&jqQoK?WNo}NGyzX>tb!$xpLxvGW z96XeI@(he_@?ePjSg2AkB1cu~_Iep@60E+z6w2cOYM*XsLKoqL}eeNII+-E+Ls%Bd@ffg;4z z`#)pYBb9$&jbLIA8NV4ug3oDG;+?ux673L&X=68G(p}i>_`wY8#qQsjAtL8cb80$# zhV)bcBvt7#A27~{YWB(FgGabK?*sVOR>7qzg?*>vc<*pDwC(i#Tgt24d3Ecn;V4>& zJ@h;x1ICa9R-uMXT@tim*=ED#Z|gI7SSk_?J;tuzu|}c2*nJ*U)}kz~1t+=)e-(^wtck! z?R<1%#2-u*<^!VoL1V5)zY)>Y0|TRHK6qb!qkC?6$tk3)tF=G|Kc(iA8MdR2OHUh< ziR{^V6MhV;Bk4agTVj<_4f=&{w-&=VYDXSkk9^Wb|1~cPd(ZET< z%#w_`9IwScMLeC^X;q+WrQZF#5;y!W8_-pgW3OU8!h}jq{`xYB9p)V5UEg%L-cFFm znSG_>i#geuzV2J=wtD&qT8sv~<7LBvi+1?E3^H>0`wj9lFVA^6-Wp z7q47fIQz;71mWwPYwPKg>QvMH5Oc_`33)_dcA@jC()xmDWr^a3mDKl${bW+46oEEP zar_DGb_gy6*6;&+L1IpsnXn#h-p#&}irj_WQK7bN>qo10T|W$Sdd7Y(?DE6Ki3BR& z?R{gYHr%>qH#axL*c_&xgSu_>Dz1-hIrL$_8^#HCO0_)|sFKPIyMp-Uo$7sSTgIal zCCkc9IZ9@n>Jh^GjX|y_0lmjT(d~WP050{opC9$^6Jsh>@w+vrJm_|w2B}Ug^U+p+ z-CK2^>h4E47Q}%B5j+Y#MMmNfN@rPVtZM~3Z6ug=d4Ld8)V=4yU3TM^Gs3w|*5*1i z1**vLg>d)=Ur*?NeEPV!OF>j-+W&|^Vx{iM1OH}y| z5Fn3`6(4^)#C4q}+wPg~B>-ALs?~c!?M^rwS+kD5uZ=f>VJ@@j$&2%1vlCN}jjJG{ z2+!=?!r4U9Wz+Pym{csS08Z#b2TRx)Kj3sX!~Zk|sr&&<#pM*h#9IL5?nm(&79WXF z$g5T1D^3F>6pY@(q9f)5VW5l@gg*nn)&M%%9smZjujeY_0`P`|wUI3e>pno8hJ^ii zL#r+RNm$X5tDpyT>o;(;GZzQBCF-ODM(SQ3XKMC+ zKskABA(6-s4q0~u6YLI6I9fm&5NjXGja?4U&dx%}uU`Gr<*jkUI|n4C8>gUn>_ijS zk*69siXC>pOo(;HVIu6$=K-a-0C2}CL}urEcC$3o|JDM~oKoJF*p36dWeeLtd7YF{ zWzyBwyFI7jVFWZ}$T-FDZnAdx8OP94iQ+X|GE*ML6Tm>-)?b(`PG<&H^@%y7mXo0+ zLuC^a6u#Qd|K7m1g=Hu?C1~^G8)b#tu!H<155<8@29th!r`Yl zxxhcGLq#=b0!F2luK3!#%=;it+qK`HI<{HPaHL+BdpVa$!JsI40IE1{w*ghWr!aD@ z#lG%ztL5@7V6#Jd>~lg8rOhW!KML})PdY)_TdV8umKUhCwa9_Vr3(dxhiWjB8K5AV zD{R|-#^jLLSqrjn$>r@f%AC_K-qIv`TG}zdfLr718)vcyqqa{t=T?Ca6~OF!&D{;K zfbb5vyg1kH`MWisz7d1fy^J)eOD{kfs8aumwnpuL3J)`73!`x^{(Uhsnhe9PPj34Q zc|@SH^rvjEgDPZ;9AH4?@oZ_?YRVDfPuXpA;E>H2e=vmMf-1gQ3hhJny7Cu83iCo%lss7FH--myCC$-vw zCkWa}_%}fXG&RR}+|fSEvz;M}w@(%n1~LQyy}*S}q*%n;oh><7U4!^K1zZirdB(>p z*mfq@bz|(iXUC{2T}=2+Te7rr4(2N_#rdSAPtD@^xw&V4Du!(je^}d;gXuo>3{d)! zkpJe>kA&GClk!M^m^Y@K&y+dl5vxv7{%aF<#vtL)4T26!iQS4sZOL-iS-ldo zns+Q(Qv3Vm&Tgj`-)|^nUNsn2`FOSWrH{=m!m{m5>Qz=73z>9}5M%f6HFcq0KgJDN z{x;2|qqJpqr&Q-B+6V=uwkkw3vPbuFEhVSTqJFT6D03+H%<9D4|5*ExE?R{x_jUAr zgihkeTQgO3qOa3#CY$K9zM&E}xk+A{sN8dt<3H%yCtgK;S1s3HD1Rgrp517=klFjw zXxH+FMoVI*8}H=$)o!;>a#6IyCw?pah0P7)zK|ym{}5nkF(|}=his1cC+s>6oR>qB z)R5+F{)MJy+{$>>nqMLZGXzR{{q6kXqNRe6Q)BDPt+0MO4taU`lQxzMAxCRKQLZ=c z^+u_kT)D6PK_7io`|N%2+0jm_zNQRhcW+N}AxWr7*7(ZDldiSnB~Vogi;aGIz=lk0}*Q`AIU%mE1R@W=wg9(yQoC zeR6YeVNx9JK0oh8eJ#Jrsm&ZL%(jv0HD_GShonfMur7Ct$U_EQl*Z@RBJXeN^XL;A@+hnI6cc^AsdFtUO{ZA3G3_dE`4wfv&TKi`JBdY* zzpYq_mSkq$2Gnakm9rdgll^~EyAd%CFI4%`X`|a&>0;YIJG@oBru->E^}!o%9zDJ% zza7~B^Pt4xfs<0glQ&8qsq_Z<7-{Jg6Y`ZFJW06!MoBp4A-m~KtJG7?&JkBO*7^^@ zPcO)fGRstkzC&@KVE1PQ71k4QlJC}H#>vgdkt;CPkQ`-I7)h!4ny{7BWg(xsxY?woabB$cXkbmZ_wwm4-(`Is$e;<&G$xHBg)=+Emn-{yJ{nLl{I_tXD?&tAYYIp|Iq}kl^v#8!U zHCO@arSXN|DlAO|`5F>hM07@{kW`(5lD*&8Ybov%91vTw9);7jhIQ?}x+-FI~BDF|CkCki3=cGB}^Be1N2>a|5VFLI81Gu(zki`tcUkN2O$C zC7q9NsO~*dDt~cmwnpAHqVsr%;;!%J@0X;4{^BcMEP-<7{pI4TSipJh^^|YH79vTh_JEJl` zm{2#_*W4aE-byyg@X9SWOWg$4CAG+p3#&_$X#fH2coRlDo;N)QAv}dif#Zv6q z{7=`5vT461#o?BtyLg~s5^xAg1i3jWfBTUIZV zT?2aj{hKG%R?jRKt9m~G+H+{Q#w}6XMCRzg^pUVKEmL8`pb}a`x9%}_{x$upN%xQ5 znY$R18GBChyrJObl(5oWsNM|??#-06*F=ddNOxMU4;fimK+RRQX~pYZqrX2%D9+@o zFom0p{Z=hDcwx+If=*^lD8B#O&=~w+*U2jUfsaO*nCw}~hx^8c3wz1m$)ELf*^(se zQg?q&59?38Z(iyROx?P!&t`h`0w{QGpkCG#V;*~ zrkRyJ8RC@0$P$)Hry(8?mD4GU)pRW~5V7N;A?%Vyy1F9o%gV~^EiL>1P^hV^rxILp zI5=K2>#m-3AN0aAx=nz*{f$LPU;0L1{Tf_D1C8(L_tm%(cSuY@X5{u3Av5!$Vxl=zrO-lv>$K{HUaV?%06@6x5-i*DiBFf|S zqrQXHk(M0l=Pj!>BQCcaH?gFgloAdFWHI4XHML|kR50SO@3bA)G-f=Nj5A*=S7+9^ z4;fjqc%MFL^~(4$H~ON)sGV)5ZYjmwV-e^)DK&-(ck@m!Dvp+9F9S^DM#Ezle)~(( z2^z_mmKZD7@qAo(W0cfUY5TPBK5tyo(^Qo`wJ!0bg;c%AkL9+DET47|pHB)$x*wPG z942N>JZs6%Uq&m(&}IFd+Hz~q*Hl&}1}iOi!@G?GkV}(dk67h^3MMO6z~W?JbE+Y1 z?Rh9DvF`w6FM~jci~n^VZU@|K*eR%hU;5&?O3vd@pbi+JOLn_xUEFoI)bKM$N?ibz zTB!5S_6N9pUe<|kB($Q_YBZd&w zu}^_Qf!P;m+Rjfw`n+OZBVA*eUq z*jsYJM`M&gyf^;6R?KD88UWynE6ee%hsFCK{hGF@ax!@00A`}*%Q(mgw0h@*#GZVA zJ&jKw&W4MTpq5P=$1HnNuF?J!0VH}$+ntGAEwVnVgPLFwrXB#@Rm~~TM*8Q@?dsMb zcU|b=rx|0J+o3m??GcVsfz1V*uJ;Ofh5E47cNS6}BF7iz=VdHRO-~N}WkMT7BYyO; zKgCOe52qUZSmG|Ba7-scjC-J5 zA2}EZL^SgJ{QOP#fD(EfnB~rU|GsKH#+*~No*IKK!Md$HRMt%9|%@>`%+7f0Y4U_{8#1EnkjxwG3=+0Gco;p!G@ol&SJUPnr}Eq49$tLt5LoVoCe9ns2D z*d0aDx48|+vrx<#AUl##vQU}C6$zwprJ~3kMG?gC;6dIqpLjqk1wlI?4XP)@tOEP4 zV#Vuf@Fx(D2iv5P48#z{aL!6UCD@LPrq@hXT)4cw)N8x+RhH@8F03J86P{qETc4ZH z>@ExBFa2|?5H2SLT>`2Q+lXoC^bJlHO%JS!n8$n6IoCirUPG^`8G>l=zB?N3nv9y_ za3qSK`ZXnl9EXIFYKc~UM*0$Ll7tdodzCAW8^rT-Lm=14pd`p4Xlk1yR1Xr0 z{v7$I-9JH(@BU`GkC&4WzP)Q~T5tJHxw~4ZGB2DNiQIJjr|VzDGu>iBCjGbw4 zX0nHs@q=Xk5^w{8*4{ce^G92btXrGaYaoQxaq@khXER40GlPZt$}1`7=K=ni^zDQ5DffXOW6AvP5Utj9>L78gUOx{moBazlH#upN z<$X|q{x%$MR}bN(VK%xC>OIBFz%<$z$KDWUo$X}$|8GwJuIw*ftMu@pa8Lu8Z zW_57`nuYKVD7Lh}>%%{!Dsj~%RZKx=A)R^Vqjd+NJgicYN$fl0+%59XLtnDP^tx*j z_07(4csDDVLD%a14=-<(g046rr<;_+j!p-`hZc&ZfE>zAM)2{f6K^aDT54iJ6LxxUTiW^)I!sNf%tq1qhGN7B z)`iSNpmlJgIS8$#GANSR52q6dyS#*86-UmX4fjny*(UHL|C8~^$W zljcia%1-%u+h4!GQ^6f)ihB$*W3<%cT;Yv$ODA4=HvyVE7nla`>fC{4&~q{?W6m)z zy1uiuGAr0_4&ry>hKKL605QyrBJ+xjJtBsBjXjp20$a={BWK({gEW15S0C>eKSnrPf5i>{@7E_bkaw@UjD>6Ia#>4lgPG!R zWZiB?O;HaE681vedX&oWGw!v-&m#2Pnp49M9!1axJxm{CL+*xWh5L|=)DXUb-N*yJ zKEk@b&Cl}x&LFoF;&*p?-5t4OpqVwn6nELe8wi`QE*kzaB>uN*pOYh7#W+!EqY?d++Du z|G)1;IX%;J<%s=~yL$gU;StMY>TD)Lth%Bx7+j|F-JXJlIkL#1N2QRD4DWv6jo@~A z2BzlVKNLfi93j`&pCZK7)%5iLwZ0Epf9hv_Z=3u4U)Xj^H}6&vL0+(wF{F{36KeFh zDB;_w8&s;wg&$+074CVIqk8&0Wd41sleq4i;O#wIj*=y~nLhR$PE84yGVG5=j(-+Z z`!}SIa84G?V|bK4v+An$t}(GW>H0MnBIe`=QnL5(1ug+vkxGq@G77j3E>3~h`koNg zQ8X$<7ewXodx(R*Z3)UWH$-Cp?FxK2b1Hzp19i2lIC`WMG>D)EHI~bs>PukADO2)T z*E9W_H)vyiHQlL(9D=Cs!d}=TGT1lR9P@Zm8zHyv0xb|+FFbYN4&GgsoJ!%o4eV@= zVjkJ3rVI}^zF#On!s;m8P6II)Mvca|sV;)o1nYZxJef^+|MvaqGA-`36O2#?KE))h zfFGW#RpRZvgtw?41nd+L0Z!w+Pc)COPC6q5U+!Ckx7w@_-txFDL{ZCso*<1Mt4`&L zFFf}d>15ZrHM<4LZK6p?qdkI`{SM`A2SlDdkJi6Fhg?kMoIrU!|JAq z{rqcDi{OEEk7Ly2AXt}lG#mRA`8CKpk;)2<3!zIt zHCUB;`>qGAhp)d|8oGnM2kCA12#TL5Ul0D03F2C6|6Xi1G~SzAi0sz?2#e&u!KzPq zR@J6Z;z|*|g5l_YaS-S9p27oe3@njMCEzbvXv4~>OWeNNh(M@=3i;%fM#ZuNpxp#T z=Jy=c!R#m0X@u4YVj^3G6R5bo$bB$AH{NC%qOH4Ng#BDFe-hle>+_SZbjuiz^Cdr39K_$ADT^! zTTL5l6xz8@xJk;X|G!Fr|FnhX>eY&V+-YM@kxf?FuuA197&-eU$3JZewM-!yA3~p|Tj3XUxle5{kY6SI=bt~YIk@q&P~n!sMee-D z->f?@Zz_jff4REKK6MqGMU`!H-Y@^{1(JTShuE`7l0ZyC{Z|Yua0W53^TnLPb>dt* ziJQQN-XXn2Z8=bN6@Y?m1ah{24>|vd1)#l(y$X6koaum2M-Iku+zK8i`$^0!UP<9d z(T_LZr{At4SoIBI7@>exiod=k$^QszRR0y$G^-aB`)}TLLtN(1r2pT8+09(M^{e@v z_+Z9RRa;D6CNd-Z68VNn5U)+{9WqMX@GVg5mqYp%K06`CLEu5JMl=X4uWxO!u28{` zS7QHRc2UQQDFFj`It5;|!I{ZK?#*e82)TKKlrw#-y)4w-n#bc2#oQy%p=9c#p4f=YhLjGReKJWStz1w)KuRm}S?uaRuplU%Ty zYU~oME0vLA7Yk`;G*Y|6?|a0dWKo;=w}vI@9l%W}O>JLGyavKrru7;MXds*rIk_-7 zya~kV15zwLoCV^)NF^9+86BYit$c`aJkD=_j1z^Kv96fo@XCkdUcvuD1awoo1i@q) z1VWXBIG6YG9$uW!@xavAj$aC_kze>zWN*UYZ|p3>S9m)X?J%^)v7hK&3F4_{;se%m z9ei}>H;d7d`wthv7F1k~kv@BZJndeA=7KWv6*La2oi@gf3&y#?rN0H?hxl1jon2iYgJFtr{qgALp z{(AK3#IZP@o?sh#49S&rQMIi8Hivu_3BdB{F!Svz$I(!e_62Ujaj` zx*{Fi9fj(N*S}(Zm5-=BeQexAJFP8z0ic1Ra8V-l%AEM}aD0qJxJ7B>&onxrqFv+u z5(PmR6Ag150W-?b5+=hU z$bbTZ1nLZ3$7ho3Y+_ z9AmCN)2Tx7ZAepg2akamt`F<8Oxzwm{s|3b_)|hCMJNt^iMm!8@t49q!+Cdp$3CSa$Amcy5paguzno|| z^e-xWb~%?LC|>u|7kYJ`_;;}?ja~!%^P)u&8|$KBC)CjiNtJt^Pvb;*XY18f)Q5t6 zGfk?lU&W2+0#t6A%Fi>7S>cD8WVA^WUKeRzb9Uti6k=W_RmaU%rN>Xc2)C!NnRsar zhaRNazAH~ehp^3F><4)M;9wbp)oX%3Iq+Y97l4x0k=L4Td++s;iD@;t5Fab2Dxtqq zhWgVXcieqf)s3|_Wqfv-}WJz!<-<$a9r zJ?o8z9P4ZVJc~V+)RN>K2{R$*BPro%^mPn_0z^gWd(g^4dJch>92Se^(O2eVflzrq z3*^<-#*Mx{GJ+>|Vx}WZsCFz*(if2Ri%bRJ(N&LraI%#3X0il91eL!#BY_%;ii@VMF3rNn!SdpIDr zS9UPm>`=W@_BzeORgF^}OcB-28tbemn6yI!y*`!USWFc%6na~sVtMidyX>7BmG7b) z8#RQB^GqMX0Fw2RWmzCd5`qRuSnTVie&QuJ61nWAM%Dt-Z6(tSH{suS`<@qS%Bg+! zij<+D@=Hp}p=hM0GNPqH8L+|6*`C<^_Dn-nsSJ77sC!itWp~k`ZDr-OM0Sja;s+bX zxB3$Xwfo7GJIV=qlf0dNKTI=O(?302%B2nqQUl8V)w^&hc3Eu^l6ezcA`+o?l8hFl zWw0Y}QlUO9KyuRF(Qy7u(_}$$Ey){&E@U#hNi|I%rC$HQ;#V0D{N$MwlZU~xvmb^1 zM@1*6iJI&ePSOR8v{Wq+Lp4)~hH6a&27)ZV%au?J^~y(6($m_jD}9%y5|(D|C92NP zy=III&mmk=`R2I4i!Q~+XYu7aAjEjRf8Wp^hKs~rHfnIqu#Ub z;+-l^^tf-YN5xo6pw*;?;N9YAcD<@F`KiJm=D6p|q`$9nLEV+UKL_4JFLd45&_REV zn{|_DlVtNtZo%n5fct9rz?*kZLnJPq7zCX$3>}=C6i&5Iy8+&lEqsW|Ga%Pr8^-~x zwvAwcw87~<75O8@NSm+8#B;A1nk(^(Q249#hl$-(`aaF}L^(qE3q3q1*_&7B%8{;8 zqZx4r3w(lLiNGrMb+U5DfNAUxEB@52bg7G>;0sl$|MdU)p*$?L&@5jBcRU+6TH73?Bp>9L1>i}X&DwiR*1<9mbzk21!8h*+akri{n=g8LU$%9nGxMG+johWwOTuKr>_AoyWJ9!Vr|yZ4HfDH zHdqHLH6|2HTstBYg0Y681kC-ODP?BbE>o1dP^^<&-r<>a_#)IX!%+}Y(=p}1f1ik)xA1sF5MAf=R){%wei>Ur4wN9 zhxc54bDqO~DS4eFFvW2|IMzK*V~h&psmyZvAY~%rA!^B@-*%dIG}8|I-I1fT?)tK+ z_qrqBDWMwk?=W32(v%RE-O_wT=3ENmWb1SSAHrgWG~nM)!unU zHMz8VJRt&G*@#goN>d21l@8MD7KDVVARt7F(gdVwC?b%=Mrfih%}`YWNbkMHEp9|W zFdzsBL=Z4E0YM z8J}QUur`%Id7+Wr!1Ra)Opbi=Jv zFX&Ii3*bZO9Q5y!*IP27K-uJKxG39UPEATL52r_}SDkPG{^LsRYL(5}ie+#1VF`De z+dExvC(unTgb6k+kN2&x1)I(lyQwYfyq-bE#(WPoUwV17Y<<`M;VeF9VxJtG9KKgK zw_*2{vxScMr9-fT)8=!xl0Tr&tji^QQeUS z8TQSO9o4AuQNq~!Bxla>3TSF$r7R=<8&B*mMlREWlj%063;m53=Ea@J(aF#wtB1hy zC>@~z7{|9l`wJVM%;v%m`?O8vX`8^kI_8Gm)7N}0@N_jR-A5F`0#nS^qQ>9B2(pix z*YHznNPha{Ud6{H1ZTA!&r=P5hspOzkBOXWd8qy~4MDJu(S1Y?^*h~i`GV5-@8?}4``T!r z!SdR_dZ90?!)4K`$^-+G_rYg0fBg#BgY6Q!(wOd7J3I8^-_GI#SJeLdVL!Em9P+~1 z6eJ_AnksEiXgY@Z3UwKy8!P7e@pb5~vi$BE6}p+yh7Etq(>QoTlw0HaMD9vZ;mgg4 zo!EH%DTStreNP7em!9O+hoj>kviZVWP4xD3_haMRDt_WM18`sAwlpJ1Snpz9xE5sA zAl~_Wa2qoit#Ppa?5sctN0!T27TJN0zwyn=ir7(Yz|5vxJK}Bgwyi(}Pd|n_#{P*< z2yY3sxkRa2weberCa=bj@DaV)Ch=_}kK20p-)rJ4JKDy~%EtM`uJbPcxJjm1K3RJd zj(GO_ngm&%qAOO)wr59^(|B~}4+TY9w%gyK^aWC=R>zezUSyH@WKAeuDYr1DEe^bD zIz&I4(2k+%Ov_-AVqU#FVoq38-I6e(S&Z?V#%K|rRDrNtFpxk6GSz>~yqG-QQOb!gk9ra~z!wf8KPiNIxTuRH@=S@wwA2Ja8A+T7! z!@0O}C9ym8Cl~Z*DBf)T$LSN{yV>mR2T^VM1ijoU#`syr6ZEXx)3rdCYs^r7==B3$ zUi=B0pdIBbYKLCP;`&a=YDKAk;#G?ioZ1#j_P{vnb&bf6o!>ihmeO!ecaf>J@jb7L9K??l(c+ z=+;na)xD$yd`0+9Y|YGOU2Kh`YAsIo{=-X3+u0O<=*#WhHyKmI+yd;)=1M(F6RY9- z+|%IZa*<$LZ&vL3EzIZ?A;GZSp8bJ?Z6imgCovhha>K#ad}Vu+|6NDh74D9SPGc@~ zW3=1XMm1&kY_ZNXo|v;&<;IJNP;R3rr!FtDOL;o|sabW%4Z~)K%i%qNJ8xMj$Ka+8 zz1n@xVg`z(Tx!-6&pO6a6g>J@$&BQa-HQ<7@d{bYoyXKksE}kQZox)WChGb%Az>!L!~&x?+!$ z@$kja>T z^XDsV-)=F?qCMI4&|UsdaE%?LXEwUMKd*T_j3H?eBG7yp%o56JiFL5nTx;}rdxf5X ztNrRqkfwQb5gF9ZtqXo0^IbZk9=7$QP@Z}dnlm~@O|Q8+p5jWx8@9W8eUu{Jag)5l zw)FYki!^(|fYoar$=@(^MD9bzt*@L$?XS#Mjy~5lzuH|KvsoES<~5>qpfcsX^czLq z-k|eK_^NX52?|)RuFeyDP!SiScWDiOb{GHE0D3Ow9DhB(I@c?94}@KA5EnX3?J?XI zo+{CQ54N06dX;({6|3F)XXU-wlC6iVf3j|bl}nd~55ENk#;s}4z5jptzug6&3ckbA zj$Gh;V)YUJ3{-nkOIr${u)3=8AD34bq2Q#ohL=;|T_2xhZ91++#;N()8SA`qpbv*> z;=Z#8Lj@%zvg(z#qa2@kLtlN@2TdQbYBJFUZY}C`s`Ce+H7O`4fV*@;5@yd7hyXtl z4@Ynu7ka^}GmE<9fGov>M#1ktN7V^1 zg!o#bDC1D@leL4GAShU-e@5JE%oyb>Rba=pG3HEr3jN~HOdS9$s%pyO`{tz_#&!gn z_6w@Lcs+m|oT=Qam)Yu^z!wn;+NyeSz0=syQ8*|l=yyTYxRDVDKpv{JNSAYLyokki z0XorOwR80iB#=se{fkQ;C8iF%wFPBm{+-yR!vlzHw%P-JsW>ZxT*?nvKT(9L0Q_SC zIeY^{g%lW(|n2S;$QvDK51xgx>;MvsZBtTb2r4Hn!4miTs;HsRFX=i>M=!R>S%=W%dR|CSBJ3cG6>#n*d!=!CXuXX|z zzxvEG*Y~yQ%ASV-t}5R;e?xB-khBK1m-=2HkR{odRm9HIbWoktT2zZjNsVBDoni4G zCBTYBnf+E=U4?l5Vr-ncKED#V4<9hml(+t6{G5MzBy6F#ySw;pq3+hJq9W|i&3jyO zEl1i)Lc1p50I!xE;0Eg;Wb#Wab=_Q(;3SE$y?%3TJZHp1NiN|6k(VynO)p&T@K83u?ie*wqI zD6_=Kgo*0>9KA?P6rc2kVN&6Cn6Om0Bi}zzL()g=4T~Y%xqx^IEDOPeP|C201Enbg z$3lse{BJbUl`{+}YA;Hby)iKkv1QE!$Anl^ixG`$HIx}yW}0?j$AVUc(m9Q1&-&bl zaP{yQ6e{UekIJ}g;^I@{E$xMenlO1VtYQ0Pr92b{ib2Q%K4a95kPWLsy$+RHZ1|&O z9^TB4lui$AQ>12#O@1_UG&hv-`nFq3BH`;$s$ibf_LYX|j{F4(Oaf|4yI*;$JbKc| z1(B)WJ{%M49C8`eOa8b9R<9cXFg>uDJ6B|jW>7o z_O~pJ9t*L2F1H@b;Gy6+68^Yw6j-t}7A3c?w1#T{Tf7V)3i%H+fp#u?x+`^7@G=~= zj<8_=@P{TJ=!9D%=BpnafL~`SH`VDS;0tN5z7t;nDrSH>s~aB5HT~ibrc*GRi1ea6 znm=MxIP~Zh6Qv)2r<*U_-XMimQf~6QI5jSH%@SmZP2!VdX6cWqCP^ar1X&CNgs1;$x83ua;U^cJae`qUVCmg2YbE7+^sb8rcD6T=_%v#3p-5if$wv_$WR6l7<-aTj8g8P*DJNUq+6(}<0 z&W|byVfJvix($uBUig|JFBM>8pO_i(>3;z%!T8!HAZ{G=-UflPz3+v=&_J0(%~`-G zaQY=%DOj$z+|zv<&ch~*3FG^Bl;YilE%$f-d_$Zg#-BTZp#{i{W?Qrc>M}j9%e>(jP2a-7- z5x_tsk_IgcPa;n**o8M$q- z0#Czc3C3|3KSS-l1wjlOh&PZ@5C}ePT}dHq-eQyS(5lm=TX)MSy2zEXnMsgRj6NGN z?={Af)%-;O$qM^3e6ZMFS^3isHog09&(B;`T|v)Jyw^>|DfiVpotYB5?$p>DbTk2n zpGS#!ZJE&Hm8R$8*aIi8d3YpKbwqolM}H!bcGchCmV9UBF{8)Tw{AFjtzJUlVsSHl z9?mlB>?z5=9dz%As=}Tp(qdsm8L$kNrUJ2NNd=H~(6)pM}Wxg|^m82wK{ zhs{&VIrV8vjJ8qqoV3?%OcZ8Lte}pv*v}lJRo+J}+A#MZP4tKe@HNt86d4k&?fCskqqDM{$LRDj5G$y%-_ z!hnb%K1R(qYg<+hcEwZusBUylYAm%%-x=d7_VTbkZHSKYk>&-U#!OR7*WQ14TJ z!(@t2cH{6;Y}>FlwpMvBd&3=l+7bE<`eFJF4A!XKk?KjTpmOW;&@C{t7arI(swh{* zmlh@_02Cehwx7_Y+NDgJ&RbIW$X|Pv>rIcD8c{;Ge)G%-44sg(nep)JM)EDw79 zbz7la2V>czDR%uKMGtcll9T~sNzmK|s2)Uhiti4u%8Jf^aogS5nop6nuY3TgDiwg1 z0Bn@{rNHG$_yI=<-q{{BgSTb4X>LEkB~#8&+X%h{Yiva}hcr4bl84TNRD4lQq}(SY z60OCrUuvxMbM?M~(g5?r$25I`&~N46vd*`@zW%$gW)fIWdw&c+ygH^89y!Z(} zmCn#7Op^Kw_SCCstLMr=AFCXv+_$WgJdwWIa&G07`TU@Lk)&@E=kjNcb}+RD#cU>i zR-6VXCpjnlZjji${H(B;Sh+?LC=B|5&$+Z==Hv(9&mj>E z^7c@OF+(EJA3kKt`(Wh3R2Zji=1n0Og3>fg@fRb&F5)w zQ{f^wnyeaZ%bn@X?giyV!y3)>4gg9rJ{1jV`liS^nrtkMC6C)zUN@NZI#s~2sk+Qp zF0gs3+}tqEJ13%zmn>RHu|Vm~@^WVz(2yusb3a&EN}L4fpwU;VjI0EXX;8i_jU}## z`6h=_S`TQ0vznWKJi!@+b#&IoH_uFxLdzS3jX_9smsU=&OByKQ$OwG~s^$^j)j*)& zKQ4UU)dQ~gv|6zIx6g+|Ulow8d%&zs48A*@s{yEuA|MXAfi=j#l%a_@H+qlKL*#+= z8h_9`fN3E-My`Zq{qXVd;7AWx{dh=F;-Bz$dF!7%sVkW^Se5_hk`VXk?YH+&aeqBp zz|vCtiCJJUrB?@s6fI7^jU_9&A1bnwnr~q_v4a5` zbq`=*Pkb)b@^`tBjhKP?`_Usoh$(dV&!P{L;%Z;%229LmEX1uVl>qmtY5NA5ssk6~ zAWGDHMOz3w+c(G2F_^4P>-~ni?E~=ANnQ*ob>kTblyx zAD8UxIxte1h5$Uv_*@|lI5_TAJ5K0RopBaFwt?rtYIXWaTJ8 zM(!`Lo)W#2?ptdQzAlj0|K`F^kB0JweUvO=o}kqY9=5U619*52H9tON zY8fc^7a6yEV~VgfQ|&R`t^2&lDHB0-Av}^ZT)3Y7^NZ-+Pft*?U@-BPfE3FuURVnp zLb1H-zk|8`9#ns1MOO|$*K%F>9HezXGkD=0Br#un-uXcT)LK|QFD~52OvHdR83s3I z{YJn+7fZ-g#WHu%o5rj;`V!YSuSQ@Bxq^BKE5CSl>-(1mWq{;iv7XH`HIso^ht`J2 zOIl=n?u)HR0akU$+EOQZDnTy`V8bg2q#MNwZ)K(V-8M$vUpl`%f>fV7W;^jH^Y4A3-T;SbV{SMt<|`WSc=J<5K@{} zNk%GOwkjhnw*$VZtx92JcgLeS;OtCaFt!rDID}r$K?XYA-X@Wz_9>ue7Dt@*7R@sF|+{%^N}lLCq@8#l0@=wVwj@@Y&C ybgS*w**nyNyF#o?;`By1_>_HV#{Y8J%+n-djlvGTcHKCXklRb$9JL$aIfF_y;j-Q)ev`ObOY_nhyX?>*;x&Y5|h>%O+%^}Fu-S?{&4hg_u zuwBL%4J=_W9yAQLrHpSY7`d+BcN7NO3bQb^x&TBN3<-nbU@#&KMu)*5u7pIwkT@8U z2t(3gNQkS%Az?Ti3`d0F=rA0_wIw29L>!Drgc0d5BE)s2BVlwLj825n=`cD3BEcXe z48p-6A`GI#ARvI)AT)>toPjmO&BHx#NF))7q$80KH!YBGI3$jU#LHR!i8v&Y zh$PaHM2HIt*wS%GIuS{yBk2&p2wag64ha#F5FH7DtN=9#20#Op02a`J#2_{Z4PpUj zh+7a>1_u#`qvLQ8w?2>-NJJuzNXHQ&Zn*#jP|}GwIvq!cK=l9=u*E?{97M-Kpgh0_ zfC;<-9iV;y0#pc4gJ1wOKnY9%4v-kc2BASLh|3&T4PkESk?&bcrbTILM zz@Vhx1+?E4Z=7Es_O=V`!W9cCqZ{77e!fn(-F*C{G?Z19PN^gYkl-*FeAw7P&nhTo znuMu*qabWZin*eBne)S8-klOIs{nhg5F0 zkmD1yI){GEL*)?_hQGT@Ik%m#T|o+Au>~6;@PAYF2;?RQRm%7X5ShJ|Ia6|!>)*X6 z^s7uUmBvz^Ea#)8$$>|TFjrKE(;kQP7wD!FE-MTqjJ-RD!`|u$kv;O};5Q}Se0e8z z>vbKHbxX*8ZXGJd&H-_4m7}vPq(a8=Rf$Azd`1`;L%L+zGHPn z51Y5VpFt~67F$gZctCBBWn}*fy);FB{4z8avx|@zIVxz1wta6~&Oe#H(M!2?&2Bem zFl(^4)%DnAbnd5x04(!w-M{#SZ;eE`n8l%}Du)xL8}~3m#_;FRzL9}^%^?z=?|aKd zBHoB;L@i5S7xXA{aP=JL^U$f<&)59zb4Z;n_GWJG-sKb5k6ce7T&!$Q-l8N$c6l-r zE)lvQ;iKBWFj>H-c&x|2=H#0-=f#@mes2ypRE+MOMY7(hnnwnRbR5-leOht!OgowI zCXT(Uar(=wUt2!PC(C$!2x~xk7wXa(p~?8kE1u7%o%?81YS&7|(Uwc(Bccq?(c$ru zyXU-q^@w{eU9TOjF@JnXwQD3}p;okp?H;7EQs{YdqB?WepJbUE4Bw`PhuZTmqHNv| zUXoqi=7??7`k+v!OBvVhDKNpNlSs>yNbX$$Q3M%v>z{MgN43 zf36z*qCe8VJ*LD;y(ZR5F6VT2)c0-cWkl+y-< z(u!ACXFcwee_w=YH*OSD^e?#btE@mkwfE`!spMPVJ~E!x@O-*t^K3Qq=vr0CDSTgy zf8hPMLRlZ1SnRhgjKOK%fWuEt2d@lgjMxzTx4eiyUv%Az zrCaKE{Lkv7QEz^uP36A2KcruvCb-?vw!Fk%+-R%zwHxp!&ZRy!m*3{(>)y&64w^VE z7+KW+Xvkn@;?PwWX>td4L5RDsrNd%|kS+Rp;8G7a6hKm;ZG+$B_;?`KEBu5}laCPn zNypygEuxnAWqWKD@>526uieEEthG`j`{rwHZdgQ5_qji#WXX=QLS!~QG~g0EGJzhX z&TC2}Z(__za+UAo$EsTh`@`a$>FIe;y=zbI`pWqsW`*Amrd9fW>Ebe!3h7#~A(9ir zs9P@^?}!ML5k=i(xgXkIg`ZWUfdh_IhW^jmd>^iSza zScFD*Wsh`3sLK@kcxa~eOPyuB@f%+1(q&AHnPvZq!E;p^W#;Z1dm)$F&j(D?o( zT>3ftwsjjzPN(tegTPwbW6$Fya~B3Xz2O4RqrnCGLY7Qm(w|O&ZZ>SxpEN7BkQx}N zakEhmol+OvzSrkDW35sjU0=6wa`TRwAGw~k!J`XzR~H;DtW>QK;OxxnLx?<@rA^I7 zxXn9#vJS)U(iJ&^D1V|z4zTZvFSR`;Jj)mvl291!M(2W5)w$FG*0tf_ht1m%DIe#f zDNlCnIR1`8KIKoc`79M_LWj>Jz-A519yFujsr&!lJ1(v?j83A9`0O_w(EGRd_D5=4 z6@+i{S_vDyDipLk=$D)~82%+wCX?wd)@n@k|W-ISsm@zlYANV3w7emS7#oeOqN3+SZ5MKl}I}X@dXL{q@Jlc zh3C5*`_o#GrHPv1P93|9c3euEs_WP6F@pz(D*Pl4_;d)eW@~p?CBxiwQ&Mi5@RHV$ zLP0>4y3!yo%&3JnIE9c+{Ce+dIHfVnJY1gO;`-Gs>n5=9(n<*5*x<0)-qu7~EfgRb zsz_@VM-HNN;+yeRi_0E6hA(EDki|2GvP(#0O0uN83EFE_`}U;02!nlCH*8jCoughe zdv*=AT&5jUI6YSA?Gav8hpJ$1q-o=_BdwnjTwJ~$WGuY5tMD@yV6E3|xPD-brFrXy zuNxlsUSH9&PrROHWBX30D!gzyc7t6|PeYVY0)Fn_K89wNKeSUK-KX}Zyp0-M=S&ZW z`zrPJ&7^(ThwhvpG1 znc3tPFZf=GOM3pxCll4J!TR(t`Vbnr8KOR+BA4-@>N(SC8esvzwb}KJlW}dV_t0V z-^RqE46{_#)JKVe9+lx#ruFU5WqmJO%Dj^kj7%!1vHmRszUvO36{;Gl9#Abb+xP1Q zSRczXoq1Va&}q~^hQAWSmpd=9PqoTsBtIs6Hdv#Ewb;7R+%Fq=`e*GI?6E(5;!!>+ zBE_W4i0*9$**&aGDWiMTCdXq0o8gdwG&i`w(Y{>$AoYKFr}|DM3_p0~gD}=KrAg z4fsrqbtoTh(PsKNg@83Fbs{>l?}F{dHoR;kqk8d#`q{=ai9#9mqKs1xOMgZ8_4;bA zP~BTd^ZrP$jxU*8PvS;{p`Dh4E*u3)+hh3D634y;sskgITSoRq5jPll%#jQsj<#@r?U*cQxVm_4`pYM}hLK>{6nak5&nvVE#|DfvO?u^K{|- zpLXSwHRJq#k(4J7UrW8dr%emV0(}6_;2>YJm2vtW)Fi=XGUFy(U>kTfwims}eLeO$ zVY<_@od0Ch9_5Qe64i~`+!Kl=P;rxY#-U`d76olx1%d<~JIZ^!pP(Kr4^HPDKDle~ zX1f<#h-qBZ+s)nq-~MX&pvGqLht;<@=)=VUz7H83#OS_@J%QI}bn{N41-I*XOKAh<-w={&>FO~w{C1W+@l%HmAk z3K^sspfjB?-A5q-dNCdC8YuK6;<{}_1r7^TvIk+sv3a><3O{{OR z*SacR&OC^XkN(1ZJ%A9Q^-^m}C2qi*j@-cBp8RNy&fNN+efs>%;{NAvDg93BHOIT= z&kc<%gt77FKq?hezxmPpXddSt0PF}~E*eFgEc-TbQQ!!<`!5NS!?y@9pBU4Dn($-TZ_Zhm*q|Qc_N9@v(N9eK0_O zqiE@R2%`qfa8ig*Bg}UC?;{$`wQrlpFO6bsiJX|}D(B|;YhD@cM1rV7(3Qlt_@=TV zm32v``izu+$ArfHG3y;}rL@=$Ba?bIsdzM~(U`qi;X%T<&i6uMU+w-~?v!A@bYX`)s- zoidf98u+qQakg$~Q@@Kp(t3MZsv@ZBx9*3<7Uxhz@oD;%_!{4pZugLS* z(#0->e69Da?#zQe#W#@7Zq1A7e&7T4c{=65rPMs~*YxL&-Um5t=4ktTT}+Q4bC-(G zsk7ihJVWIay*OS}5%D0_RZ%hEnDYY05GvjWPh?%TLA|Tm()44R+8b@XD)eMJ98Yy; zx$lJJCovhO7@|Pnz0Bp)cj9hVCpkZV4gDm=IpQMgl^Z6u}eA{qkH&Sd|qzNR<}#P6ZOol(By0VJ)@7j z`qL49K7cyqn$9_21+DJ#e{ZUtEXNpQ_wBD)iM^Wt4T|_fQ2kbqw_52ij9y7!o=TFO zaJZw(grXw1d-GyBLMmyMUl%15A5ieT#LHJFf@9$4(Yp8PZN!%oiin} z$q!g5kE zZnZNqm3>2*u%!KE)0}*Ox~6yZtiM}!p5yJ{gEq!7EZhGvc0P�+Ny~ca2nHS(FyGzla+h-Y)D^ay+1p_6 zN92|4-m|FYZtq2{&({?uv3qme z8swK5IDR!%8nU?Q1a*yc!}Z{cI0{{`tlR!)aj*M@)30Q4@fgth_Ewdj9IAW5k3tM} zjmR}?8{u>u%v}idiS!R2l-55x^MFEW&_vbf(vpXXT^nM#`S|0#wuU2%E<%FM_9JFn znt6&2=gW)-;YfF^yQB85Zzijv^tNwz;Yp~#JY>^V2gTYvkMHjlX#8S?mj2W8!mso* zdFs|eDU2F&V%63`pt}b;T?|jC@vjmhENKK|?jji;pLqUtvn<^Tun?4F8KX-LNiv$H zSype|jny&bRbP7+^U!88iuGYFEujB`)}X7uYF^8!+CRTVZ|R~gsg$d(`reK=*Y3xT zD%Bm_ptE0^2m0>PRVlhCe_WHF^+Q2CPO1zVKGCt-nP*#toYt}4Hu=REJywD7RGPE( zzWJc)eBaU$Qp}z2RUDDnc^r1>o{CI**~Rhu6bbpX#&v$|o$=wi{{HJ3-=xX3#;a)U zT)zjqhAmTW9c+E?BY%o!`A1AxN>Z0GZ>?2l?F3N}bv+*xOy`0>9!cAZ4~uVgwKu$R zvW|Gh<{68okIrsfznfO0dQd{%+eDiDJvJ?K20Suj;?gLd8csEE#6N8uQtPNs?8hns z7435bI%3Nx34M=;)!{N^@)rzxxApe#dg#~sXQ@RtBT-L1O$|n{5iP&zcE#T+Z#{2m z)2Tyww6|Jaxv@+5*urzl#s(6~aSy@eeQ{fRl{5Cd7Z=eYwxhz9@vC#=Nvd0XTlEcE zzFUrX?A+HE8|>?&bF;OhUhS9FQ*7Ya63JQHpq5s9uSSy7_tS%B0>^`!8xnvB!SH{hZ6COMgfC-!SDf1nq}#>P>yR8^N! zH2u$`(|mBG$=M4I92tJKgEm%6w=su$loq$TG4PusRC z`%q!FLWzO1Qj$nwsP6cN=ZR)LG*=3y_MYJFS$s#Ve%&uguok+UoLwYIzn$!o{j3b( z+Vi+xqu_@$wr5;Hdj%@$Y`B`>G~4KyqW+vjNs!fCRt&uiAFhu0MOa!T%v>sEr{Lq-^fxJn8kE|7pF3W?Y-iI)#FcibJj@z0M9u5K*EW7#AOr zA!B~n#|uUtm>wXB=jH!Q3EU-{IbW E0UA;JCIA2c diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_pop_timing_test_local.png index 51f8211f1d41e26b59dc864cc0706528eb1fda69..b8cc15330abeaabdad1f3a138bb0b3b7d72be962 100644 GIT binary patch literal 46818 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 literal 9275 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 NasGPDQ^)ih_f*!bHEw2;m_@W5 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_random_int_push_timing_test_local.png index dead185fa4fea098b06189e39eaa1c9175951e9b..51fa718d279e43fcae7f19c619ae2d7484a00471 100644 GIT binary patch literal 41433 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 literal 8986 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 FzW{y&Go%0j diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_join_timing_test_local.png index 1701b4d8a61ec2289946cc3135f3d1ed14d814e2..67318f04896a176ea21675a4b08d6b8f0728209f 100644 GIT binary patch literal 38222 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

C3Ipi!ltlr9V3X-w#>o{SOBqCAm zTAY_W6#x2L#Uu=h=9+e>t2vJ}sL5(slFLWGLlsa^gj`jAcJY!3JON4lu>LMD#D(Vf z?|CgX1AZPw@5TEN5WvzUU`e<27RcV_dJ3}B(~(J(pNbS}`JiAl1S}%U<|a!UFYRyG zaaw{2y{qN+5!7Dsz3iiM&mUNP6SLBC(A9|cd(QkK)StPhTg#@@yyGM0ERR|Jz48ED z9IhUB`%J`;%}tAjX?dmH^A7HJ|Ig$LkJmcyt~c5|_u(By7w##0-M;*{K6OS*3*waJUV2FJ@^}XRnKbk7?K<nuK)l5 literal 7989 zcmch6cTiJb*KPpmB2h>vQbj-^fEtlrrT0!Kf}sSY3!yiuN)eFy3%!W6D4~l8Xh3QN z>AhHxDpia~$vyG??!5QD^Zj$@o4I=i=B%>Ude*b{oV~M8f{}qH69Xp$2n1r%)>1P8 zfhZ9m5XAu<6`&bR%CG~0s6a+~X6k?l0>MEb6bOU?fe0WFi7dh4AUFyH$AI7j5S&Cd zqTnDD3WUOdPy`T)ME1qNK^PPWg8^X(APk8-l>i43P#^*ZL?D0&Bp?!q1P75&AQA>d zB7jJM0K^7D1F?X~fH#SphdfYlI0g71QdY;R1bgxd{HC}ibOz>fbsx7 z0GPmRfDWL300dAWfEow}fCf+kt^f`oF%TOF4a6dmnIoG485jf%hD0V3s1HaBNCX0g zKmvFL$^}pWMhuC7AptxBOalY}xBz#6XrNkvN`MalCNLYI1Hc3n3{(i927&>gftdg- z00)p5hz*1$ky}Le2F!pA3=+^WfJmS|AT1yfNF;It|F)lu;%`UE{ruY`GN`}2liT~3 zN;1a3?2xZb$ZR8}om zOFH4nxe_4|yHOJ(sE|IE8u17RVgy6)Q{X9K%7{nQbc{F{Fdiyq#>=s! zPkg#Q@pRjtbbWd^m`iD=MlrZ=?Sd6Hiq35JUH;(BQ*6>uLYe8;+Yxpt*0SL_dI$_@ zh*RtSkD9A=gJ>PMi=T?kM@7Xj%=c7pTPJmeExR#Qms)JOf8V;M@jbJ-FuQFfAzU-i z$}y;UJomDTSjeQvneQXsruQAg`C>D^Mh5&b9FjAEjp&~k8+3 ztKGZ>5uN8a8Yvyi!8G?9j@Z`9@LJEw&lY^x`;P*|ZHh4~X*=I1972=52{e*NLv4S? z_D3pY!ka4FZV7OaR_jmvC+(e%!(6GTn$F6#;(yAF5$SdF1>`X^bzyv^O>1S>8-=lb zf7F^Kl!GG=68nB?jCtK^>OjQv=VLcitJW5;iML4wJ;nv_qi@OdbJ3Xb5^vy!sB71ki!y=^^ZZ-9> z;>9DMIz`M6fg^*P-4SBawHEOviSI>Q&c1%fes7c1@c*Mg8ugC&p-As9_-*juQUI5n zj&ydi-0X4aKVJikOcHd;)Am+^jlV}?41~sKo-H(~vQgn39G>Y}n5unfq>25|^?9wz zt>23h@9@rYc$3vR3dg{bwC0~!uZ*D9zEC2PQw0TE@HbOk4>kX7!iT+d_3`SCJhiwo z!ZLVO-5yFO8f$?&4TUAEyED=aK5oqSYGqxq32`E z>CgG z<%WFpV5xXpAu^C|MmS5mg#UBp=(R|dorP-up?ZHraL$M1mcFy3k|HAOk3SEGbA{*d z+QK#I&0Z=ZCD8iBi$d7VK*U8mFicxg_x1*kSoUP*AApOj-XsMcWq7!eDTS=_LjUc6G zX)xm>U0y^S#FlP)r(J8ph+XYI$L+wfES5l6ft>a37D3X?A7qZW$DWU$ zEZZ*DyGAjIkR>)Q6Y&nBCT+3!TQ2oKniju1LC4D@FPh!XPWb`#-eB)&@5Eb{X46-z z+YeyeTOT1=e$VXGy~R*#Mj>QT^b_0_@3=o0#eOg?rA^CcUu5@uq5SltYuxn1?$H^v zWvsVfx}Iewi^UP8!jsAXTRN6heHeG3`Sf~l{4@S+gYf~YSX+l^&d8i-3LN9b7uw

ZV@ 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 LS3j3^P6ZP-(76*3Y=5)cSPrlzW-2Lj>2 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 v9o@dwo<>+{V$} literal 5878 zcmcgwc{r5syC0S8G9n_`l4L~27Dd+Ve6uu28uAJmd$v#^vW6^U{borGF}7lCH3%8| zmh9Oh<7-L8%z4H+|NO4sb)7%XIoElwi|e|d`+h$6=kvK|-sgSixvB9DHfBC%7!1ay zr>k`n20Ma+!RQhgkAjsCu6O2Ou%j?jLvw8q!eB@k41&S1Fc=92qtYTI5{86eNGuFV zf+4B2B!q-P5Ddb?AQB9s(rU3t7#4zIu`nzNhNaTBl8`VG1S4T#Bod571xPR|5=Mn! zR4j~2f>A*LumLo{0-HfKmDY!LK}aMPi6kMBR9agQK@bwcA|VnIqS9D^Bo;zqu}CZl ziKWs=fm#xTBw>*x5|Ts(9Klv36+%+6NGb_Q1ziDa00u|{mVg$>fyMwEKm#nWnMxBx zi@}A3AQA*oY5G805Mi+pmIPs`G`WBUNRqG+i3E|TKs_J@Y9T5XqLLsgkO%w#G{J6Q z2ha~l0EK`x00X1}OHc}UfW`nDKm#l)%{f{c#NZ-fu~eFoKp$ueA`%Hpq5@xmT)+Y( zu~ZV43VZ}k0|NjrP!5a+YJru&4?q*_26g~WKrm1USOYLX8teqL01wa@U;}6>ZA7$c zkOnchs9<8iNT3h21rdo#r48_K{4^Ga6Q#}ba7Z*#hrZLsduSz%`#;CPM*^TJlZURAHw?zYN&BPgp9t9pi-JDd zC?7L-$j1-u4lm58eqqkN>%CZpA4rL z5khd#p`S1^vS?jL2^}FGfpeUSdW^q*?0=dP?3d^ds;p!hj>Oc>$!^<@n0P-e<@f%1 z9X=-+iqQv>&4jI6(nhw5yURvFN|<0oxJCL`yLZz@mTo^A6BELRP83tC5Nx3=q3`aH zi*h3haZ+|xjK!?BTy)>KiA)+J)8b53ZWZsZT=+PQ^hnbsa?(7$*6G3PMIPo zA+DG_bl&t?Q6e+0aK%U`7Z=I@<62qUGCBwCVK>*@()qP50^(f56f@SIHBp~Y<^${^ zNkp&Qx~i)F$kf!~C#(ic25NA^#NWn2N(h1q=2zW6%$IFUGFkQYR??SO4G*UH)ogbh zY7;_S4yxDw@r}Swmcx6k9fC7VYR$eF1b>^nAygueCqK~USMs7F9ty*+X@7}S_H5QS zw{EMvj@l8Hz*P=)Svd!LT_qCeC5%#fsH9Jk?0X+g={Qogt<7Jhn4Gxk|5Y6saUJzc zIgi;*Pq5&`)$~RVJ48wK3zz6G8LH62=1EOdN}sf)Lmtk4KfM~c_zaIrdQ;+(bNzjn zw^Jk@#~GkzcEGiP$i1c>ZUMK^=Xw4G+2~5GT7z3k)q4>P&DUxRe9it=)<#({8fbEnj#VzjmG$e@#ybD!3U7fm(aNhT2y$lJUO^1gOzhHnRDp?Sn=tU-eQ zN4wC_lGAGk{uUDYxrF4=rE!7f)0(aBO@H>YUcH$pnOxr3#c|$k;5KVAw@Aj->}?5a zcQHHW=IGCArIN!fzLPRP5ro6)0{HHwh*>e_rRbR#zHu>d=ng88h07t!m{9&#rI;j# z_4U4%A9v*qxX_n*a~b>YK|Gv6xBkgR%8N;MBSy(J^N|Z4^~GGH9|~hiGrVHAgMPO4 z!~d*4_iALSo#$xj$KER1nt3k~-P#Wi(9yI|6uA)XNnv8NUoI(js5m#((l7A}rseBY z|Gjs>$s|#PnU*kizcqnUHn;F=lT4gkDi9P|CXU=cUwF|>v?#jVhhymIlD%YNUNnor z^DpgsS5u9Dc)x8vt2~~t06P!IL6ubMrSm1ur|hNA7_{*WztWr$d1`+% zdoFSB;;#AEm5^t8a;fn{oVY;tTCw>@JZq&Fg_Ysn$LyDDQn)Gt*+Z-(*y;n9$w`XP z4ySULAR&-Ly{GPC^I!WhI}hU4&-_O1=j^EI`Qj#Vt_oO2y=!SkYL+~hmx`IXPfK!0 zuNND}4tRB19>~#E1S*7>DdE`Axyd!7?U;MpK1UXVd-E-&&oaf8@Co&+^ZmMFA+z#R z!&1uQuVt|=kz$>iH2ez-LCc?sRQSBhIVbxH~)R zt|os~w&VU1X|;MadremRK7GDvqJfHTqD9?Tg${B(PKH6E!UbDxDz5UWZmXmtJK=A! z8rC8dLlIuADRAdNQeD$S_|B){=Y})P27?^8+v&AkBP^yA2ES{dhd!`w|JSKedg0Dl zhNj0s!5OSw;P?oy>rps*Vt%r+>!U+QrW?cxS=i*y#wO|wv3B~n4s4{h8${r(#a-WH z)r0qBzLEupmy|Rgu|Dt3RS{?t!$1mWNb z%uooy&-5VvVcu|ZxsM@x@Ori3Oy}deM3Cv_I^O50gRBteHfXztcRIy)&i(yqfmmnX z^8F>H{K@3_!u-%khhn(p%G}HK0*A|1f)g?E1N^Op4$Ji-+^2{xIa!8n&^~GpZUH8@5Tgp5ki>Wy(&ExA_Xl4Eu}| z0hx-|v!@hj6A}1;2NSDbu4%Zhgz?GJP0u=Qzx+tiO6-g;;aRYIEJ}IG$dV}`(R_2Y z`mJVE;pTixJJ&peLjj_DfO_~Ds`B%P+y?)_>~O` zqwmLYKRlP-mDqi>E)1nSJ#(TwH@Jk-)8=&%>pW3^b|~@?PQ7V*jQ0-aX6G&8b8-WIp1!UdOK^kotir zBLF6gW_Y_M^Rew|WjHZ|*N{$ZT`d#qQ)IR$DR~+U>&d3-GJ|G@hEj|jF^t0en%EKo zhLO&7OzSTD&BKSVCkYmk7vzX8*}pGj6M(usEt{s zd}uSiX3rQs*DFjhL*L3D33gB*M`deL4k-I$6d&71b$h!Xb>E6Mw&<>3vrIwv3f^fU z_mD#;o8}0LahM&|1Hz&TM7jTOgFRA-<3is73R=)cCI=51TCAMSW|&4hBsU?nkl-2L27Y>eGM8-vvt z$`!G0S8+E~bCb$>C6U0CnP=r?G89+uOH^n|d_$!s>YnnSAlG|p4F?Bl!Ip%d0gi%2 zJ(4?*-penK%@W5_(Bk{WUusPlBIKV{7S)aw8CCdaooU7(1cEQ+Nz#qj>%icBl>KBSwGX`OgfZiz~ZJMFCs5<1s&()b2;_ z2b4k+>AXR>h|b2|2y^c6_6OHGS6zRHS;DA0^P@~%uKniUdR`>!AT zQ*J2Of`4$8(|`djpRibe!gDeBw!j6^=X!Mx-W;UDOQPU=f6q@bDkEayYbw5fm>zm1 zl_zG15K!vW7K_DOGyGq^nEd;j&Sa_w2k*zy<0}1at(+ny!vQu#b;C2EI&<0Bs$VB* z3%6(sb$qM3f;>i1c$5{h1%^Xz3C7_H%aS}({m5{Xe!@bCyYTog1H(ZMmhn)Y!Vcwl**2X(d4M%{Jp zu~nFYJp3L;&hBOW*wQSoa~DYX_G!mfIUhr#wOSaBgmtuHr|TW&mb?En=jLAaii%Oz zedP;oNY~Ax5{ncgPVDGh_F^RP%ZS*Av)_!3;#EiS!Y^x>MS-qLWZnS6CS`rmDfZ0M z!&}=#$`&Fk;qNPGHW%Zhzuwb#V8gcMY{kcpcgM;_Sh4<4Sf(o1YUGNada+$hE!9|a z_9!IBC0mSJx)OhEmlTEJOy{DtC#vrB_=>pPTTL>nPt`EVP>d~ezTk#~7~Y0uC2p(D zV6@GIjVpAHJ3C_sZiNcWdaLN#1)CAQR-d2l>;J(psxwjN9N}FW?%##UAhu?t!)+Wa z{KsUYC<3_Rbi%D&!Ur5aFaRAFGoZ@MXVzHy>!EhsSMA!iW(v91GAQ5VSNRVaUi5Ze zg86{bR^a<9>Y^63kceHu=rkd!M+$;>G3J`3jn}Oh4UQqNyhu!1abMO`Iw#KEz{Y40?J4smBf@b% z0Qro}A1Kr~%_)5s^W*re-P_hlxzLS)p~(p8nidw+ah@_FpYqg!8QwlQWA5~@&s7~I>rZBm9Ieb)2q}^71 zn$kL0+Z1>$czepk>3gXJ-GO{$=7k3e5hwH9mKHn89BzE%zI_hyp)@0Hk+0ZKqxXI} zYlwiO*;fuXO{XLCKN?(~hPYIB)@I{Br?II!jEsw>xhZIk$uV5F{#6RsnU=+fmyC3B z53f{n4`&eB`V`(WK3UsF0uNPo@lt?)F!E;g#o;soMdyHdve!QYi*aW4Z zl^MjPI()6BC-)Z`J<8$Mu-hY-aFu)V=^w67clXK%?Q`&19BzT=-$B>+i_4eV2=qH} zOZc1OH4O*)C-^m@D6{=@Q^GMRBk+>{pG!yR>HgJAVk{vy zu+yXF^f*psNrweuX84(2RvP$>Jf0S_wnYxjZX<_wx8<(=%^y15T`xz{JKgAQcZo9< zSA3gtu$Nn`5{4lrjHh|>07&_?AykvvkHxamy~~}(eSg9*svM`9{Yn>AyX&L^Lwmc# zi4|kKjoxrS&f)L$g{qJ2(l}LzH`JQ_FdwtSt6A}$3=>)r@@m|&j}||V>!DU){7$__ zw^6V2qi0kU7mSI@o*sQwrjP%OlQm^8vk#2%4CKzU)7SJIsNURa_@P7H>;vp<*1Vfe qa3Abho1XJiITML3;09qeu}jfDnp^MiA+}L!=6XB7*cT z(!2EbhTr$T_a8jgas`syd*{wQbIv|{?=ebSQ<;M7HW>s0p@6GA)`39q86Xh69TFn& z&i&1OZ}4)>OA)R|0)B!?Y~O&tN!?Y9y}y6fQ2KD*feZzot? zl7?JeLf>rdcVYeh`q6t_hsmwP2<{v0-6hM-4!)5M%y#TUMLL@B+%{C!}dNL$KbiB4!Q}e&GPRd2EiGb2EcdP3TC^0-{~b7Y7$!RL zrxB#!(e44v z!}*4L3-Jn`?evDYrv2Y0Zl}9FLdy2AKHfqj6-Py*r$&%qJH-2UUm>vcdk*aGF&O+= zlUWOF1i}E7cjy5E#8Ct;7jZqjRpnxm^*Z_e^85EjTogi1{&7xJxzwLV)AJ$14#w;c z8R+RXdIB4gdkLW~_@;Qy_u$uY|~oaboY84T4a##V_urzO)A`qV>OO+GQk_c zf7$CCn2euPgoj8Q(}q*vob9@6FQ^Upt?&0d*;xyLndl@R`hc4)`{Ml&AuG#NlkCoD z=}}~zU(gL@*yl5uNa*uYl?yYp41>uOXYA$TE91w6-^0!yiAiT&(1O?=)<8+)FX8hL zXe`X-VX0?nV0?Z0&MV)%-zwD#K{vF1d=u~faecR^kRCne2p5QGkFw%LXXZgQpv>{)*@tu>vgH3n%BS|^^1?+8`JrM&Rl?;|YAiE7ICGqy`xo>2 z&*^*2(S6$Q0xrJVeWf8uU`KAM@HaYq>P*%{uPMIa;a3R<6~%y zz_Vjk;BckttK zYeS_=xaNdLKwRgGFW#^XRWD=rvJ2=hq!`rTpC;U7pJc>;prhL&_i0s=7ji*9`Ct_F z>qbr1!1U#XuKm@w){RmFhPB_--!|y4ppuG+|&BE|-y~XFI?MOLf zSA)so)|F>%;bF1yohs5d{0oN!XrUVJFcnAH~4DFZ*q zEXc2@w(e-6wWoWMI>VJmHShyx-f!fcT>j=yBR|xIQWoFT3NfRydR@I|u<$mBgGy~F z7Llcd^@Q5HhNZ(d^jCJ=*|u+P*B>2SZ((yTqK%n|xKs&b9u3zX2w>eV#LOWJbGbbH ze%wP;@hW>rgBk#%zhQfE-M^-a(bnL}vnVBg?OSdLDz)+3SR8{I@4KNk+Xwy3PTuPqdvzlW@cq+&D_$B)eVM1CjzeF&BxZtP zeyc-yjJ;V3moffL4KHvU!^740X1>&0m)2w(NKe9?eivjKm$UED zC@SteEVAw+Ug2g~2v_E6M0>95%?^JfXUQkhh(JIP2M^YNNYVPs=RUove6?3);Qi@l zy<2V^i_FE~XldyAiK$nw*oMOKpF}=HZyI4XyO(4(`!5N+f|nI_wjCQEc<_S=Cg6c& z&ozt$zroE3;$r2*h07(v6G`MGLzQ$0;KZsY)tFygmA%#lSLxxaNwsT;PGYnkqq#o^ z$nd9B*^mCRYw`Xz8{eqzb$*XFV~osUwnU5!Rm>+FWd_N*M`AcoRk4?naY^1*tCc8m z2sd>V#d+pH)Y1a}X1 z`d}BDqIeazE&!8Zs7Vz5M+ggo7(rJyYg9{VwxRB|=<{E=zv*Mj$lr6BUW|<(E2zh8 z&->(niwVs3PJfyrN)GR954erFIQ{B6?DUmNx6RK2$i5 zmHCyi*7+gS(Cp#~URzvP016_P2*JnsjDzgK6AN!cd}I zxyU~?yxES}{Q}DCM(|#*goT9dkAy7-K~ohF4#mwEfjbwcTbCUecw*cSm!V_6DPs;@ z8@GQ!;bG`8Rrr4RBBJWfXBva%N8!!M9%r`|xBS3Z1Md1-HrHZBj zQK#SQ*^#V)%UW-5i#f`G@JayyL$3Rq$kwMglO0h39cg+i*ZF##YWN@{4}I_Mq%oN$oeBv zRrgV(S~2ducURqzw#qnaU^nQzg0trX97Xv$K^9Mopf`dCYR0$n+URQ_{~X(LDE9gX zJ+LBr?>LyiKS$&tPnz|Sx9f@!2RvH5WuJ9^X>hqvWe}dFYnRj(3>_aJ$x8*?zn}#! z_w#KvUmNhR5{wX-;3;8Q5aQwn6f=s?qjw)R_zG`-0nuW;3}#vcDz4CQ=K~JF6sAr84|0U_m;b(Xt z+c&KKSEiFW9jFv%vd!kRxsbo{CDO(kG6)Si^`%RXhOZ+hh}FD)cGuU@#Uvfp(v2pU zsI}#Ol3p^6Ym=@yCm~hZ^7rSkdUaeidTV@9J2^;GFXtnS4Ze!+OnOEz%62nz;ti;N zn^7+XsW@-g9lVKL!k57JLyz^>M)wxxJrOVeb`L7XIhiXnecC3oWO~qUGT2F7_4b0B z^#i;{BP1S8zsM_YD6YlN>&xyQ#X}Epu^H+%&Fd%T*SupRFO^g0L|bstUi9htsXPqy zZ(vGSa5oCGAE7|7M8MSEsvB|1=}c*qnLj#Nm#1UR;b8a?i|c@&P-t5tEbO^O!PEA6 zg<-&sVWp5}{*W!&I(CJH#+SRw<590LR>*^|J>eb??sK%t^1-sND%S?Il8}gI{HAD3 zqy=ZiRH&4FL~X?v8SzHB?M!s0>T}*#=w3)#Cz=C1Ak$iCWr{aU_@#F07`Z>`=os!K zNatPipjqiC=}|%K0t+dfW=amrJFudksp;4&-tk}_2rt={yM5H0^xaZ09-KCW*4@8g zobZ8;+s7X`**t*utBK$y@Y{I7q#25-jsMs_)}vY0;Yu6tHb?&zb5Rg(Lh9gkDca6n z*4!^asZ5!H?%xrulqR7rp{-%8na1TTiHIA@iToU_7qF7}(Sk$jZJw?Z0+?ulVP2ye zo*A5wTAECQ()+HD?)(sU87IFBko;<*mVE6Du1Q0xnbS&m)O;s_iYTA+TNxh)GDfz`E{Gxc z^89epcfy6o6<~LXkbggwvuOYN|BFu%;wW&P`SbGo>gx&s;dFK!&jQm+DhO@u*hjgr zda$5AL(l^W)OWfciZnVEH&z{ij)Iq;m-odV%Mz1b=ckm4K2j)G z>r&$E*}omQ$co>G7Xt3D(V2@^?U9{filA9sAh@!!bM=(39mAy?c;TB4yF6Ems1Fe~ zno8O%O4uTuK$a;EPNVA7995QCE>)|h!3>$|fNsZcYpmS9RzarDXYJq>nqmj@X;anD z@JA%-L{*x=zj>&(8b&*o7D&B076J(-ku{^(0!>;GKI$2m+tTyNTCXwNM2+qSL>G!H zrkweGzSZDHgE7fEWSwFi-#Ken-wq|t=kuIoI|7~QfM{*7ZvbPC$Hbvr@tZQGy#BHk z)vbOLDNdIS*zLXrL-=>%qy?wUIO-v=-gTrpQR2KKJSB%*)Cun_CvCb1jQJLHA0l`y z4tl&d|HWgWBgA8^u$na#;Cr5&c#(kJKgsqV0{+%?CGuEg#u%CPzH_yH3ej7-@vA(X z2K9uduEI>wsPe91Mr`%dv%neLdp#QfhYX$CyN1KK#$JB9=Kp5kieHYszI zP?fN3W6+I;9b&n(A}dPR8=wR6@ITEx8Ur&bGK&MutuPL3W-RG_{>G0K6d^ki`~IymKbJYd~($_*zFwbtYD?E zuXnb+LDzMTsFF1-tv##ii&9!YHSfo9tE@g4rP<{}`1<9%;9Fcy`cjh^zDH^^j@Os; z&jOZCXJf`z^UmF(M0@ZO=j<-lz6dJdBb^{iYO9v#zxPU z*2?)v33D#|)cZJe-slRdKIXCYj%W#wl{G8!QaBOkEE$ej9jCXJVU#+ybdQP&qKk8OT@^zKLZ#RXqmQt$KWZ8X_2EFPV>Y*siavg{6t^O_d#jz- zrU;Vh;&u*}7oJC$p%I~Ptitp`%&Y?W_B3Xe9^bN>BtVAKNhvnze?>z|!x7pH7C>)#Bmu&wn>K&^MhBT=)8qT^a-Ts|uEV)KpbJ6nuCS zRybI#h;xp@jA2z_CVCY2zpTl8q!X5rpC&uH=b@uxVVP#X-d8)Ws3S9LIxG6oSoRFh zDzcNVsg+Yf#ZjZ?ZP>MetUphpzF^Cdw)0#tlc&G;Y$*OL*=6>;s*ra3edCJ(e;RdJ zZD+(VHWYd3{5D*TlvJ6t^+k!^Gz7>pw5BIM(?76-UIQayAfr zU$h1_ku0pIwC{fy;>Ck7v~^)Xs%f1;8iY8|qt~C`)JmqNZB-`arsv+j(>XhdvvkB8pADGJcP3&by|qQ z<14Kjcmyq^kCBX7@WWPNFY!{xWKexQmd^SJL=2RLYLdf&)jb{^!o4C1cj;Y!-3D3{ z_5xd3;V;)&vrT` zIrxuhgJ!o&YSL^Um<@&mz z(SL#eVeW5{?{6Uv7`6?ZH!DS0gB}dtLv0fE5j~^vO*C~y*v#uLsiiH!o@98T2S5dN z?PLo(qkHt4d`xsFWDiNF`TTe_zu5d&sZFO13Cl~m_Fx;3S%jAEni}H4Cs6Az#yA#- zycO~Os=(6IVn!Wbc+2Ozs6-IseP=%N6 z1gJTE_||lz+bvoD?VK<2v85BP^;Y`hJtg?1gPDxaq`-c+A`b zHFzg&bgX92bMImPxbT_y0Wt5l7{x&Z_V?H(_i9Fd2!JrRMZemBh2AY2Htvu+w*2#R zzj=w}_e^8TLcw35ryC=Git0DVzZ4`YDJeOZd?)(FW%fknZk4Lkx!m@(IfKr&K_3wx zGf+iw>#Fd#q=`xtl6RQA6u*7vz|M3_hEh0bs{8cSdW)IYdfLV8YO0oTYozhx5D#28 zqGMwEH3Mp>Z)&J;cLepS9S;gjuPc8wJR(X>sPnpW5Hm_xBcOG=szSJ2i7 z5OMIVdq*7m8=2?HMCY36|9&-t&yb%?fk1L$%5TP{JaFHUjEpSQX9{qV7aP?xp)%rY zcy*P=55G1uk)DkJl+LVWezf1b?NiPw{6_oehzcG?m@xFd#P5)N78Co}=$soaeKYjd zpFPp+JEx@Z5!JefgO;;KA6c{YkN)eWx;Y)L!~O7Jq-=WQ>Sz(WRjw4%-F*EhaIO01 zxYYYp>0>XPJB>RlO{<)Z)1w8S4}AP?36tr-eK^EePkjmE!(2OR!4+Lg@K#pmJ%JRX zjo)D|;p382x5G_|O@&r$Ka$i8<2qCw;a_jnNm9R+oS2}Bqp58%>aY@i|G*Dz6M}SCyrh*ny1P+3}R?>bJUOR1s96=tn-oQ5u6cn z?*+}C)x6J5Dp+jbdsG+IK7nPp7azu5py&MHYjyY^%Z%FsaUbNGV;2-urAcoxr#n{S zucnV}J9jQ;eV#WZ`GHrEpWjry%>GSJg16r*{^TLe!DD1|QZ2IXB|SE<)N9gh&$9B9qQ{C; z0!Ajnj8qIr43U_9l8H@Xyv&8UW90h@KLc;4)}I*#99M*^oPZw9m!hvAB3|7Fjni zGbLpx4>zH4O=s08d-V63CCPRHqxaHl%rr7Nsx@3gM>9lSh5Je1;h%L?zj_A_cUCJC z2Q^F9fx92-OBwY0SxHRi;jg@WQZRVPlc+`rUOtHlb)??mw*o#BRYn|VxZu6q9J;F4 z@~H7ASUbbI_H-FMh4is$6jAz^Qt5-gTa|b7K)w6nLk?tsn8Rf%P@Nj*=e}SYkuPw? zUi2nr^loZAsHn|*xqqpjWh+=Cw*KA`ug(EU?DYd{hn4H_boAH=N);+5UcPuM8i3!j zCpx;bwk#pCv#4?b?XU!oS47ut6-+AJvk_OsP_F6sWJOm%Uq{RqUPM z#P&34RR2}2_tza{Kpfbe?Yo7~5NM&tCdoUht8Sh=+TSGe=o>aiRdG*lO5&@Cs@+z; z`y=@0b&+yThHkb8M(EMZKataSW&;2oXxOUhqFP~abA9mR&mrL(3d;+_xkS(fy-uhg z=Ey#JB&(-*G$+=k{N7%f*}9gBBacaC67t}v-v8b9;ZBlPYM;W&G}#I~b@wm8z8sqf z8B~Jyzc-O7)F(re&Is7mOwwFZ9+5K%=I6$+0@&tWXP^W0D8G93N`{_+;edZD7!L2+P3AM4PV{GH zGTi3@0jXY=cN1F=Wisq7`tZiA>Pxzj^TTC}oo|>FU2vgV{kU&8;DzCI5l@?Xd!(ub z=VPLnEM$_r49)POguo|gUHzC9cY`LwNcZW4 zQcfRN7dd}^E6#gp>*3)+47Z?bQs4^A{W$WKlG@hD)g6)3!t`%=abm zx?RF!t%c$-6A{GLGqD%?Aqq>Tp$S92jr+gXYQ0wmR}kWbLsB$k5FvK{dV(7SRQQ)7 z!ZG`&`)ht%l_Ta8ZrE@T!l^Wr$qyxa(T|TTd6DvI;o$KJKxGGyLppr za`kYdycjU1<)mRe#Q_W7>h4W#5|Ux=kb3j-IR zoCli2E`Mst?zFKzt9GS$Fw+!b!WOh%D#PkC^puV@X#GCHc$=C%z63#QNR0JgxZ`zZ zK$rgFOyvpm$KZ_H)J_AJFLUD3<-&6>3#~NhM%X)v%Iv zd1l{PWxnK@ojx8NgYQYXg167GQT)oIu=utr>m(IlWlpm|j85+&|tDPq0O4WMBm zfiIHlBU@S&}mI*IG8q`gXP(HmB#}VsDkl%v_lId6;ZcA}5$5@$>c_*l1Bv%8fMH`Oy`*>G&$?!SK8P>jiLB z`QdxWQGsaWNtByj2z!wqVIM9O(Vj=D?r2R@zi#$mndC$WmY$I(2}pLHP;IG~1D-Oa ztv1qD19KtRXqW1#gEYW|u@2-L7Qer`In?1y*kvmz9e2k1M$O1u%m?JwurhV@I$aZV ztma$6i{K^RLe;2tAtBoLL$9ejrZ0-5FUr-@AZM+(jvPSVRS^4f-SDT}xn%BJjPzIY zp>`+hdOyJi8KK);x^$cfoLs$VtX?peft!&=wY_^VlB5fZP$um{YI*wHG90Fl*(VJ- zB8F(;0~FOw-fnQxD4nCp7OV6@0@4%l(8;7OQEz!BHls%lJ{5kQ)a3E?g}GAfejXdM z=^}hp#nbMNkM`&xb^$pYB_TkUbvKhw83adRcuY7Ywh?ilnnRF3+c-h+GGZ%SB7#lF ziGN;i+$O{y}h2vCjd&E?ne(t4_njUvLm>@e#>CH#>2p!M#dz;>DYFQLp%jMiPW*n zZ!m@>({}63p(Z5Ky3@br&Gx1D8+1r={^+hTGhrAtI3Z*xCO4FO2=n$@hu#QTnHN30 zI=)>Z%A(VRc8NyXbsCjj!yCBu*ftaQK_@AtKK-ls?wnX5HCOe+ z0Yw%braFEl;@X+^4Re)luIed1MV$KkGq`gK<8YxsX+FNY*)Wj^CP8Qb`hk~2l$M!P z7SJY(+=@$~g*s76ljj~cvqR@xW<_Venex#8^g!l3O9e{wrSe^a-L{rmM+T>cL&gr@<=<(P;1~fQ} zZQtfV`?ug2Y&m_Gc%3rouEUA(!U$L)lq$G&l4@-y_nIqUnEjU`5;0WJe zif&Im!;3xddUhCY2TDxc^l((5x@K~ZMHA>XPa04N-QjQg`F$DzlF7CUyh83i0d|>mF{$?~ z?&e9&G5lbMbHWWcm-I{><+wMER^UgkM=}O#)`%>rW_4znX6KIpQoRPR2OQSaLbkQy z&wrL~nud0J5!p!F7JHW327T=@p42gG7!x@;^aiz0^1qQ(_dglv5F3P6yWE5fet+6n zBDNK4hCFRH^St%h>-e#b96S;p$mWku(BtQ*n4HGpG`BI@Had;KnabstMgws~Oy z!jq+J@n#x9Q^!9s_+`(Pi{l6Thzv**3T{35Mp zU?U8qk(Rt*S$>XSJd(TIg|Bk2sKT@G7g7XFej^ICJc}4qg6bU<3(Eaj{mpf@zC|WI zr3-h0y4WDt(#B-rr_=_|t`t#4Lu@07(#Oxi&5ij^^V%iN)URJ~$=hjhP8tMbanYXi zCK`;nd~B+ta@G3Xc>zFi`$kpK4Y%yGdpgd?V0XXV4|W`=Pha1+LCk#DAqjI)%CKMr zXUs9@b0AQ>Gnly@<$TA=r?po4p-vF|@(y`kU0Q-(gVqtp*f8#Opw5mHsw&C5786e@ z^RoyFrJtd@{bHXuP#j2n^%;aKrVMtrbq+;It}Bi2od}1t)^k(5$w~y~bdC8G`(yHZ zoz=U&iU=+?^v89|r76SGdo${A_P;r^|=AE|q0>S1ax+HQ4E9?E0r-`Xh3%?tskWJI@Lv zQ2bKm6`-v15_p%)eq}$3l)st@1)GjohpmRazT>D4Rg~`?a=OWsKiVblK-%#EOG!(Dne2Cb1$!B+CkTZh8|X1R7m@x8X;PTmSo z(hs_~=US_$fW?Un@}A$gY+)rgYr6XB=O@+0My2y4mbw1No~TFPoBH%|V(%~lAmNzg zW~6C}p#6J!BBfLG>|I~!ZQrJ%O*;wJSv_jSYQusGdGAZ7T$fodX|?H>-NR+Oj2G0> zSnaP4|63c0ubvLPZpq zEs&xH0*gl2psrw+|-Viqk~wqC*esX9|DjUkN<2C(EDR(#9mDNW^%oMLeFLjf*c1 z#e+Z?TKT!zXQ!GeG;P{>SerOd7wjZ7>M8aLgTQtn&H2*-Ax#SN*j$~c-rB#?XPP2e ze2sce_Saw@^KJAgX1-%>Bj!OH)Ueb0h8~8mF^asb-p>(LpJJC>o`|4F!6e^7b+s93 zacA_%YVrTRU^OEN5!}RA#W{QXG^Tj1DeCadGS5O4*%-q6!_&iQ@}}-j0A5h-^k5?% zFbK}F_I(+Q2wdvUbNON7O2=Wx<+(_<>HLPhtH>z>0@xN=^I0tv6*aU2TvNG#5$yS( zE@{}fdRCYa-KK?X4PRIr94yU8LpM}vraT~BT01roOc5#FsyF}Q(0kI`fxlniN`QZ( zux72OzKU<_3_$Y^)jB{c|AR|arivv-B@Z*@c?o`}i-~6WuPyIME?eaZr^mj;YIr!h zWmbY!J4I?Ui5GeYtgDek(k0JUx)`$5F@oB-@534%YhIs1KiSAOguAP4Qo>HJ)w(DSiQ z2>2R1YM+jebjrdF^im*;R>8-Kj_BNP3<$DTy?F6L>Rx=NSHP9su&f~CB#KStw-&Bf z-+2t`KsWnbQSqJh>oc!ej#&ku*G(S-D$xG@;q82bLf*SufSHm2;}KM|K5vu4Mim$< zc)+$T&Aw(O3?-GQdXW#XsX&SLNR(1JaqEq3`}=DnY`=0e(mi>K85kLb3Ywm0daY~| z8TaXzd#>`Ba}8-VXiu#1%nM}6fgbPT!GgczEvumAM@SYH`K;F3XIP-U<`do9r(1gG zJXt||MCJY&9g>cU09&n%36ONbnLVYx(_Gzr_=B;4qndd*iV?h}L^Ck=B zx+5YiD*p8444Fr*q2_rTBVc5R9lg$xnD@x{E)wt4rM?|Lq-UQ10z!MT~XJZe^ok-m?8QyjxTl>dw9NRw(;kNeoEb5IeP+2N9}(s zhjQz5LL%`57UpPY34vgc+v{u`*8;RPh?sn7LWO*G-24rgNz#J5slW*Ex@h>$gd9d{ z%4}3@ocvoUzsSuBeJ1L?JfJ1*v+BKi<-cN)B$SM?J#SM45#!}a@8^T6AndA(>ebO~ zR0aZu17gpUCf%#(Z{ANahSJ8Z&)5w>%idZ#eK}%OgG)OM3qKL4*z5*-nA3@iZLB)(iVQ$Q~OrQ+9I-+*hQC2DGYzn#eByu zA$;AWmQD!-NC<6MNPe+h7FUIOdJpFZ9d0hk?X=NJoPi$rTwkJ-OYQwYxxH47R+jt+ zZG|0EmwXU-H%H^$^B3ZwhN6r#Ig#?$8lFys&h*vdzLj1*&THD{I`8HcEfdfh(E=}o zIQaEt4DT_y)>v(ofmH-zbFkdL{}8;2vrl;FzsG3Qd#`w^rHi|S3a*_2L+WjfOlhCz z9v(YA9{ME;AY3dz8aFs|Z3E@ZzpwM1%+hcDw;KH6jHEN8zjGqc8u-HHV<_vO{DS!>=T=$%p3;4fPvWYA+%SKQp7exf12 zY7o&8v9Q6Q-2=`Rp8Pzl3~CxLjUe~0;NuivGkq{B7|33F*;Z!P(*dGrD!*zva4obk z=+HH_<^ZS?=5m1UCI!TEt+?`>K_nNJ0C@-J=gAW5Rdnzpw{8A8Ed5qkVPfH{JfcEkP$#576sZVge*Ypke2bGW$ zuYg5HKOn{EaW%myzC9!hj~I=H-zIY=Y_LWwEacX7MzjXkn@({!n6zxf0h=^amddii zj-Gsfal%ksiNHVVk8EA|>&e(K(#vTDm)`|r3&?4~t8{`j@1DTf&3yXSxh#L1> z9O1Rm~R{%%VU@lI{pLAkF%LbP}Juzmu&7B~3#c^~l&uzEec8wT6epOt@$L zD-d7B9u}(cLpP|rMap#-78=8YBAN+^WcgPlvy#%Xp!@8ABPLT(Crf|)HS4Aw;)@^o z@bl7I6Kgx``XpVoh$R3R_9{IF&|XEp-+ZD7vvb>TK~T@yEoLC=c&22*1g6Z*rmS!F z>B6AU8)0uE4GFYpPqZ4|<&O?>0BCA>h54T0%PQZ+26y4!FR{x4rvU0%3h*ubNQ#u9 z-F&2Q&*8Sa;n^xGan|%p+Xt>Nd?LK5D<(b!+lvsFGb{x;rU>~MOi_B0ZcKzd7|+d_ z#y=T7eqe&{+DT;>w`;@Fc~^84f%fdh^gjO$MjX3>9L@oy&bdW=AscaE1FYoaaFcic z(_APkQVh@`)3R<)3AIWs@qYfjNfx!l1SuxS<*Le1<-PU{Z%=KDA!=lcVx3T(d$K&s z&}^q(41OYDdoW^RgqP!eBQLZstD@CQ!7#mS}it`Ux8Wd|BUl?ni-ce)RYS~ z0e#{U(F~Cz*+}o~e9>nUp-W4D0A$`9J#xg86wc%sP6!@@rLFG~m?@HdIs(!OUJCz+ zfiP=RhK1(@dZIR;YrIdljv8E4iqyR|q{OnciFdCF3(kB2Sr@Kpy1ea?r` zB6vq|F|&E2YNCnz1|DY~Pgio(494_8PB;xduq8YA9wY+e1OBZrbu+(4qALSKM1(o=@$OxwZ)z{0cGmfRY z2y7|&jzhyP55fM4%q-7*Kw8NBC55_41d~r*JL6&VeZ+6x;13aIm(Ngo&UhiYjbMGN z=Le9DelA_iGWD#R9dk2Ljc`xtA1=565he4{Zu8~&mW#xgEgjw&Ah-$oBo|^sfwJ6S zz1W?sjCY#IoVstJco}tnu@Rx6r>$KQTVi%hI?Dney4U82Y-u);csq;)^Zjb4QL*r75!4bO=p~oZwo0;Qoz*F&O-AksNV`WNB4X4rf~!d zh8C!W&KS~4RxSK139BzthAQ*E&6Cx#DowZPJ<+y3P9y{`F*kRQ` zgL&sJNxetxpg9%DA z!fz8)VmpG=f%Uo1|E&@sZau=ZGeH0)&a?hP3QuKy*GT;)EX>cbIG(?A`1WXudyEYg zN>>XnhdMDTt?cbEKoZhg{Hwxnz(-4I5{GJecD9`YR$2L5z5J()nsK_SSF9xKin}u_ zjxF6?iP%KMflrmq)wYoP;4pSLOSo=$BB|M9j`dW3WQp{SIi>aZ3)>w#Hx#^26(u9} zLA*TUuoXCI4duc2-_&@`$Ahy+AO$}`vcT;;NgbOPHLqqJ@D@lBcx&RPrcliYj2`(z zYY~iB#cHJu*zm5puCI&03ap8*$yH0?MYw&}%Ewxfe&$mrupeHy0|$B!|8fS*UUT6c zr?NS|?5)J~P!J&y%U?-qjI>p+;)pJs5K8*7SH4V2FuiK+EU+-{GissO$XtR)5vMrk zhdI-0e-gD^y?|`!rv1D2o^Hck=ss70CNrgIT%OoX43;&TTV1Ge@HYq9bu?J+Dn z@*$~J#j)c@*tWaD=X?%mq1N;A5b5oDe}6G6;`S+|@y+~iQm=ina{#_Lng8?wP?7OU zyEo1(1v~rlZ#kM;TOmfi$iM%`II9B-5|@{!eeQy&<^f(bE}$$IXr4v=ag7ZCg1Pv_ z@c0BrpQhB^(0#%RNBzpbLRZ@iRNkubcb9O^=?1i@VSN@&(^H_8UoDzL<54J-R_}VG zNT0-=F@%gy!J!j!?zvW)ape?kH0%*=SDW}fup!D#3^YkpPBWgXK#ivS5!p6xKC3=E zesm z8O!Hpo6q@~aPb1rodmLWxnvjTh}WZra)7J1lm5nyH=g`vb>0kdh9{GT79s86=G%ZlIgI;8 z?z9Uc5ytX}Sq}J}elFxS-bGx6FFtqL*s6MSGjMm0=RTPxd-pHMl1s_(&wZD8^Z4Q=4x`_+P`|tXT(Mz(JTbuXmhs~B?|+SEixLNnxaCOf@q&Almx_4?SC5E2Yf(XuaPS1-I6R zv(~mKx|uLggtUxC0OWZOt$uZ&Dy9E;lv4V(e-&B&0}v0B(mlEKF>wfST^+9$!2}l) zg$5?N9AER4W$Ak>vWk!LWJszZM5$w?#&1el-0!%PWzXJd;ZOXDEJ|JI4loZ<4BEZ5 zHn^-hSOuuzng8%N+sqar%p~ovTRYezp{6zsW!UcFZSz9T*;G@%KVrljfGwL8bCD+w zh$?-DnP2~o~c|4?Kc3R(1Gw( z&&y??LA{H8S8*ReYuk^yvZmy+l;m8ZC|(JtHK5$T1OU}zX1C7`z>#>B@s}mM9*`0% zkXWJ0@y+H_tsPgV_enO4B7D%G@9wy6yu+v{p$d||pjEH*%f~^hi4h8V`;7}u=Mg2+ zrEFaa&BY{~-CMBot^5;t$aO|R*_)Cgivyzbnv^Z8Y8U)sSNlg`yP$6qF8_|Ycv2&_ z%{!NPo{2cn%~OjfnpW{%Q&*m>Lx0U2-9B-G1C5+zkyz721TmB*HLiM@vxu;S+*StV79XQ@> zevY<N#z2CSy;k}@-A&3#8-y1xT`YzY3AJWZ)cJXL@m~Sh z51nP~l@F?zRLY^FhBZx$bbLYuUiKsVQj7ui7M21DUAU6utY@v^F5wHL)iUDoLX~9x z??G*!uPf4Q6UYuBiE5Ka$}^GXM^uxV*k!@Wsj9~i>2v>Wi!XYg2i(Xn&;lv}HJsU? zrlNB2{Mw5*xZXln>`yP+e9Y zyiBN&>e7!gQ<)Zz&|caxJqw(|MfU_{W`$iG=X75nuHr0Buvpsd{d;L-LB<{h37wWb zwd38}9lBnm`E;!~XGGrGAvf+OnmiVt0skCmJb4R!Y9vvr^9-Ggw~pU}!14;<6$0Aq zhTn9+(u5446bWW0+?q3`ty+*Ux@uu)B~cvbkS3HCk6@axhzoj6nIJcHtba#}iP}Ku z0|6^nMZY}ZbJ7ZxfK#?`#swdnZ-Z>0ea*;s+1)fy0c3L>u;=b*P5F$NncWs6V-kpt zj+V{>ex4~N3D>j!PoF+1Kq5>2uC~eTI2p_zATh@OwTwCO@>IbjXEZf0{yf$RkB3js z`%joWmjT1I>#3)Ykvp99YPl}dFi;H4`)?NjUPb_U!*UP<2SCi68`L@*1lJb}Wt~SY zzXySE!FM}1!yGS`)7eCB3@2Y0HxqM}JtuAyoTJhn4Za4RALXS%IN^hb5AncmBU6e= zB4<}bm}vRWJU~mm<;sMvz*_{~zC#9Zz9ntXY$fe_vgY3qdM7Wz8-rO}sL}!B>PzOB zaeZ~R^HySdbUQaoHJ*S}{$!bxU>a6lJe$&C*r>u_?t1;MxhpmZX~r@F(ZckdzF8O% zifx|$Anffdy3Gb}9zpu(~Va+SQ4Qu&WO)YG2$oG9UrNpm$ZnvQ^!Ogupo=U>?>|D!>jqd zTU2}9*Uq#?E_vgg{SmwoHR)S-@mPYtLNDWlhu*@=9@mi7DEbBe^iC+YqBM(-i#Z-VNSl28+BoR$+wj#OYzDl%MHH=KY$5 zzSzUP9Z9Og;J&2~drgNme$$7+@=JSNA)X5?l#F6iHE%?}uRNOLo76(z@3?8x@COX< z(^tnE+Gb#PIxGD<6ZgM(S0AVodD`fzu*>2#{OMz%efP1GCeT*<>G`OI$1zggs5pKQd%q(U*Yz~&l@LuW@dN#( zYclU+xbD1*P<`{FtILqsHu>9$a*0i?(H$L@rHpHKMo8v~8+Yz};nn*p+#bT5_bu`T%dc18 zbaVT#2?+@!U~k#!AZV2>$b4lPRUb!#ZZp|QzY-)L!vE9Wdqy?YMbV-mp$MoD5D=t> zCPfjDUd13qnm}mM1O*kPO7B*hAfQqORHOuH7J5^WE}(#b^co2ekluMK-@W(!c;nq4 z_wO6eF&rAmIcJ|;)?RC_IoF(gkF zdwn?bLVaCbQ8XI;b8Y;~1BHz^PpHVD#3pXBJk`?Dl5(}|&bD*ORO?Z+$g$_EBAr*k zNo9|WjJy%WdS+)F2=^hIgWSdVs}fftQdn78eRy((eJQiRe_e-MxnhY$sl!ho9T!i; z+)Nh|6ufc4XE&Y?BSXh_HYikEJHn6UiD{wLdZw^JdcB>BOLB}HceEIBUef`3dXtakGFuWLSgV+1)CcO3G8hRWTpn+X#Xgi0CX z&1?%a$*sOL)$}wP1xYrC$_V9Soa^|H64m=3(DBNzU%wvFs1Z`iH+rp+_T>T1*kG}p zn*VHyGqvWWOTS0poys#7^Yiml6B4A_rPa-S_%Mg3ue@n|r7o&|`}XZofY0luxO|7N z_<;Cf0X*NkkxYWBZ0N3Tg6G=bpMtHet%F2jLc~K>QPZ2&FpGZGU59-OueLGZsDCMz zlU)k1cU8!sSF5V3hU7c%0x5v5si|qhyzlM7CI=_Rvt6d&TKW?ZENLhpK>6xgHJ9@e zXzPLbfB)W$mC(gQ12e$roTB0mAyL?{j(fPJ%dEnE;t~0~H=%oxoT@?c zZ$PPz6V^*+-1&7`!u!_XhZ+4F?JxD`jrMyC)m|vx`)eeIQ(>&h+ZX)<^-T^{4z{MQ zAz&OFk6G9th^57ckPYPeA3_G{@>#e0 z@O%jHk50i8XQCzQ?13ra{r1fpRT7Mk)jkckpZyeM#_Eq)HOvkDuJKq(0|rdj0_2i)!XTrx z45@|{@?QYYk}S(zM;w7z!FT@r^XzN^GIDe{RPF2b`_RU;kF%7VR`;N174HT;|&m!Jyw&N!iJ?r1MajG0i5_WZI54b+o3rb0OZnV7+^M*XP zqU*3c06eMO%6>-t7|cCj^6$(f*%1dy9m&7u;NmKTY*8l9Lh}9@_10$Yz&juDL({D%sTq;T~|6*T2(!AsP(r3)H}Q z!|Ow~&-7_@bPx2Li>c}J5b)!7fHY8mCxY+$3HYzf54gM(30PNP<-UWiEXDW#o&<|yeH0Y;wRk-6tNQ*;HM?kN+JOA)h3V*MYj?vN>iI5>7LuQM=_$u8 zUEL^EkU5b10g^od?Ptp0BQ)+q0}tz0K=k1A8BhHBh<^Qrx$V!!Mr@&JeuBX(MI3Z> z(YMFPOmKbqCb`^ID{W#+M|?Ww&fxH-x1>QLkqpBb3@h{=c?299j}%^c`xuX}+goX` za{9qR?j5jj!8{9o(pIVGZ>?-YtM36-lRV>Z-M)>t_4*-09=MTDw-U*%OHEIIFHyg@ zVh3i=+$Jj7Q;#PavWT4rfT561Njn{7P~GAMve`TJa3n%NK%o1r7W`x!Ma{si2Xm~> zqAtjPm-op+QpEFs@o<`#K#u#-XZiwqT=vd@I#9{BSG&|IH~zTfTUSbH#d2N)_GqYn z>iK+s4UMlw_RWiiU}Jad|23U@3-t$HEdfhn7G@kqTs#JN)96#D+EEP34Qq2fb6{PF z4dJLUtGb|V=`XQ^Jm`2OQibCeKv)N)R8=!z5te|IM%28hV`FhB-}oJ!_xx{I-e=xh zS9**!S0_(_Agcq8wm;LL+0uiYo5gRQvpVeUSzn%>kJ6b)Yb+h{uzT`P9sz;}bSV1D8@C zA3J51hbv%(+$b0D8Lz`Do{+Fj4hfOKK)U-G2GTJ2e7F}di6vrOSjnVB6 z>8|Nla&Fu}-8v5Y2qHT>`<&;rcGbPPuYeKwi;9Zgc7OIwKMBu`2YBfo?16aKKc94} zd=_=#5j|yxP{<;NM=b-CDj(og76)bW5fQPm8HxZf#lO{xn}w|16u6VT%ERnh;xaNX zBpsW&%kEwUzOmPBm^4e&3d8sE@n*%g!Czq8a2+mpv-=C|;3ob!<%F_eutqVb{-NX-q*a%Bca7nG2)y&JUq4^uIqrQZElRrrQwf_jJ&qBJOKg91-2h)Y-I-7UqzlV z`r7gFP8JDQ-I&A)xmqUdTGX^@s3!!qDaR!S|E`@E*cD-Z_Kndj`^sB7V18YP8Z|Xw zP)>-No?iSM1kE=sFne0RxgfHp7mwL2WZhPo>DbR+Y|kB5K#>wAaSWM+oSi{7-u#e_ z8IjHMV#4JYc>fO$-{3y0MiGWQ}|gm>0wO zn3IzCfg9KE_9{0cAPUWYsT;hC_0WUmZ)XxGN(d;bXU+S*a@w}VQcDc1VT5lpBJ}G! z&$u=N7PjRY=l{_bGu+>#XnUtcu@enx zuW1XePZnTZ(W{zx>~jdd#E0U#9Z`6!?&Y-_azJ&{afLN7}%osTa1iJdfiE zUR%;S+;WW0*j9byR~$I1l=*>i-Ji!}z9nUzkIk5H;$aO;<$vac&SQsAmhA`dBwL|y zk!A4>m|)7g3m|aBw)O7NX1rR(5XiBVpJsbbo#Hy}{WJ zHV%B4?|U!ec+?JBBAJC-5``H?xgOR$WtVJbktlz!|68m@_U?_aqoOHY1mZ)K8*!{$LO@21vO5RKCCK; z*yKQQocB7>edZ9q4^&+1nX}Q^;HWT@>06CB&ZTrNq~_2p7E1A?(gdjd^#*z1A&WRk zfdc$uc`@_CYzQ|(3d(McJpSzRJ16)=;_tGfeSg>9OBtu#csE+}p=|+TnUjO3Y$6S?^v@^<6M@$b_ z%rm&sGy=9oTsT=+zJpKj7l6DfL%_SwOFnV@AYP&_YF8Tcct{W{?|!=4+kI04yxfty zP=AW5R4eXTYHF(Ms|CztRK&eRy0GqUqvNyByo^C&bFcixS)0_Ue;xu(-|Xz`qF5w| zn`|K*e9b`yQUP4xzD-W&GdF&>={40#!hX@9`lY{y(9qEE>>vn;i|?z23+g`S6%mYl z@Z`Ad*NC%vgCA~)m~||lTdBmZN=E=Q1 zKZb5_685(tzhk-&+esztDf_CvpfZgKnK>p~IOh4cyKakto*+Ri551q0lauJUbNDtP z)iszAeK=&icgUv_?SQqa%w$7Aupw7_Tzq^=(_5v zTh&aP@RnAq?ZlZEgr8=GSF!I$pM}_c1P}R~!$AGOK{F{?C3H{av-Uv(MT*x2C_lUm^ss_EBr$;J0_+dAZFEFsS=6ucfI!M{yr)|2G=Z02xy4=!vRI4X3y6U}xwdOnH{=u$# zmvr{9XR>nccN*;auaxcy7oUjQcUxk0VFOQ99-vRj9|m15;bRx6 zBfRQzkQl7wyJ+O!xtW=B)eY*Q4G(`f_M+V`c%gj8rC!vsWO!v&!NBZr3>l$6F!biu zYLoAs;i{bFz3tWggJlDK{TWyTJE11cN&=u1;BsW7`1Os`)Lg3O2WA#IsOj>@hVU(hrO6z zMg|9NE*?k&1+uQgesa%*2ma-hBhcVtDyoJa1iga%oF!oz+`{f8+W?*2&819hShb^H zV&&exgCJ%JtgY&2fO$AhoeKQz;tyH&^YBhEq5+80j18M5Tt*UMyJCMJ9DPfUkq-9= zYR;C0SHy6IkH1iIDS#=EcEzJ7`Q4EcX~a-)9yHhk4NGD{2Fhx#hj@Em!lwB&D0;Udgz;gz7$e zq1!WTPh(?$`;G;h1F=X`#eXH6TP?&oO~z&8;(w2MI2JHpSO9M*BP4VQu<2Xmpq|`M zp*wTJT=MSrf8y%kYPs1qvEn@~L>yOlBSuPU=rV z;L$e+LCRl_M=d01QSkU~I)_KabRopW#pMD8 zM(xgU#lHoY*b71!9F)U*ZAXrWew)CwlZ3(*n#RUVzz7Bu?^DlraCsfceI@(v-#;0dNUlupSzqZu!-z#IZKNum% zRb@bkYn*GqwKCm`lFxiyWK-=L5fz0m#_O;J-a+4@SupC8p%^fKO)ee02sCYcKpTKx zUjTwt2--Ra;rF|s?VjLqs9xxI8_c#lK zqlLv%!c{6$KC4f7Lj2mnr!~^T8Q!>IJtzfmrd0zoekVCs+%Q9#0e|}p?k?xkhPt|cvhahqv)Dr~20);^@dad~wsIiKSSDlyp1slb zT%;bHBxk50G<8Qg+xOe@@^V$idUtpC2Qo|S6g#`6kdV;h>FMc3P|#|*G>iu5QBqc}DRov65XiQGC^i!hVyH&|Ixur{b2GEBtX}~4$SN}mqG>MtPUx3N z`CtHzM=ok;{Hj9(%0^o3e*Nu-v{Oe5r1g1#lGW4%UU&^Edp%!US9j+U?jz1n30*0x ztUO%(KzjmkYv&@c{&YWo{(LTOxzh6M-DNd0FXFZ#6>bFfa$H3q=fiuklv=Rk4r_Br@ zGc*S_4J|-Po4bIIkt!P#diyr<3v{6ydDzLQxSh7PwpHhp&~dQGsFQ%H|55QGi^TSwYd3NSOM~XTch4`6vsgK(rcP4#0^y$`eFOYOsD-GjYvy z(=7C%9CEJKA)tjq1AD`J7?#OFhim;q=>l-#C*t7`jM{55eBcGS1HK z#JRu>l<2caO~qY?La+#I&Atw=I&Y(e4WM`$7J}b-vRku{N%)6AL!u|9RSMP^!hJ|r z%kQ^lw!FJ3&O|d?YWc+SdE2}1F$qbl^(sT~HA#wu#DgQD$A+g>xsS&*iRHVmQ~gFp zXkSCm31FULKlJ#0C+Cw$FA|xeNqA!A8PaY0oXtyUkw-ma4xb{9QqH3M!~TRFQtUj1 z#1pg8V3|l`QrDuS77nL5Er&qoM@s7w-Zs#y3ywQ=ok_(QW3ff%eK(Ti?<9I3oLWHW z84dW?E1zkYf2osLJCiNOIvTtp^B`|Y|xSO%- zUbXVhbaD=(8;P-W$v-KwCAh(F38Zvf77jX(py`S0p4T1XWB)YFLk;F58F7emDnX1_ zYosa%6f1IMf5YnX7iupIywHn%^rPA7(>-F6yD0xMo}EyqC`4U z)Rb(ki=~Td;YItKU{h(7xTjj;gT?nCK_ef0#yI>d__% zVKx!*ctzQP(&Wn*u`3kjh#O%RxDn3jXL_ujyMOk1Ix8;ylt+oy<>KcbuqU-@Mm~C? zl=1yami#i+GlU+Z2$j)X$+C{daWQ@3{UOMQp~rp3l}w$pZ03shMYz+K9FafDi3-8> z^|7n;Pv60K^1GMgkNfmTBOP(;6XTbhJV)L+;8dm$JX5GU5DB>T%jm(!iS~L3JeBmN zM490OmhIs~lwjD!FR`uHxzLpy$*33_tGwH~&n`+OMMQj}Or>~HyO(z5)BoZEM7bc+ z?lV18xadlBoVbfQcYKTM=FxFm?m%uo`sA~*(o9Fuw{BOVJXTnj*_S1{ zsL||aF>#bNmJeiyt z*srECgSmI4mP_zC0WZA2&kdY<&{Mf;x$B+wu`=n))jZ;9-&!#vW89c`fAr*D#Oaux zF(Tc#BSv_OabDHotXa zn%hXCVmbu_g;AdcTH)_1*E!bYeEh2Bb&BQKi0LbRZW7)lNd?wDkZye%9*W!#l3k}@ zMY4qPAlBAyq$)R@Ot&*0t<(%CGUE)$6*GpJw_f zLXfk0c>RZoPb(G)wP9)DBMrPb72;YBD9 z%BqR;X?un^g3TXo{j3OWkxhdv0<0$;WqMw;CVrY4XJpSRE=L(ei#~ioav_9k~64}%8`FnquSVd zUpPuzY+NQivb_#W8h(e?ed-=GXUJaoUz8OAoCZ`#dF-1ap!%Nf4Ka%EuGR zCIjR{&oKqzm7`brzew|4c>%{({X>Y~qqDko(7}U*q)1mgjgjKco!Z!x&)m?;+gU-nX7Orx1ZZ zz+n2Y*Eu?0MEzLMQZc##^GZ(MM5ca`R#&ncL_M#qq$H138ee%Mmqk5`1(vckuqzQQ*zv3I@$(V;r@rAz8uR+{l=I6P0kl7p-$FD@Ky zC%bAs;-xJDn`J$}<$F9NaDh`~-pxk~hil}2!%9_Io079UpG=T=F^8=2t|WV>2<^-0 z{F4h?F_MI4CVEG`l3s4oLj9~%$TUq%tm)!_wq@4DLEMS-?f);n@IX_iQ&OZ zwcgZ4R4a(@H811UDAK4W~Rx;`$L?})^glT#mZ7#;Px^NE+Tsw3`w)j7w# zUdWGG58uJ>JiOY=aas_=rGg8yNy6AV>g|Y^o@=@;oH-%D>g-OF7l{5##06>Ko>=1> zVkA=>gT-ScFYsetV5fc1=<+<;l7`&aaXk+;ZJeRsT`N&cu%!I#a3s|_v<0cgwE)nM5fW6HZRI+@<1=gBT` zgM~>1jIJZH3A!9chB8KwmF#HKp1cgt2jBPHOAGiYDP&J>?SB{iuMun{PXI{@$4IiH z`TyVG|D%17Tw+i2EPVaT@dljI00nu(6&~f?E^*X0^r6+e&lLt^pJ?*`GKmJCN1R}b z*M(39u2J9_tX!R?Qt&38U>4GY$oO~|q)k=_9OL5U+(vn|d`7`_;^g94_#foFHeBR) zK;GCP7uTh_D-Pr(ls)8bkFrZW1h5qXW%TqB2+Wd)&zQ?Ris4dv38|tSP$0k;9j9C3 z;U^n0Rd`)bPbmc8%57_sWWP^i#0{YgMjW}%4qTgcH96sOg~el~DqRYde60}6-|2+S|KHgGM-rax<<898QI`~d-d1V<=7sZ1qMUcOPO&Zek_b3Y`6CKYFR{09$pgT zN#9MO%@TjV!4LOTu|HZ4rkqqZe$c!1MEbw8C%QrK09gnqyy4tCQWsn;d$U`8YI4#P zC!?xr8@NuK*<>80cbD$&cd6wpX$a<|cu$R~DO02V)baN-@^u4U)_rqJv2l;he|}jB z{bg<*J9f{h%#eb$WycVylLAkBf?`+C8vRlkHMgDl9^OZx=vFr15Phc1y6JLky~95c zSW-ND{=5-Thrh#>9|3{aW=ApUek6 z&?0Z~yVC!H$o8t3GtJlSd*`2i&0&QV zHuulFej`-MYH9`_#tqT-ukgqJjqqX^uDdG>?q9hmhGfRA&#xZqg~4ytE+W<_-0bFU zisfntG^(c!O1!oKXN>*)O(QezDpbkIWYlmlMVB4@usDV)NG^{^k@X?s#K!Z=R~pfX zkKuv)i$*w;FuX07!bSI;K!iBOpTK^$c;tbiF9)=nz;C|KCt{R^0BrY0XSxD82ZZR& zHzB-N(m-bA4q-j${yy&c=OGamu_uH{49g6=-JsI&agIc5)W?ijkuNdD)=|cepEnO$ zGV|{o*^ptRKTp$yCpw@lB{0k*Q<_!HtM|U{A-A-#Aq{gM(UaV6A0yr~#lL9SZIDr? z%3@>my|P5!h}-|%P@)}#V*v)s-FSe#r6V@%S)x9$Mql1s?~SQ*W8EUL&wZn^AXqE z@xaFD|D zIRXS?5f7^_ryM1|@DQe_U)Q62d11s|?Z!3LdCeYwS6f3)OajemiWBJgAX1~_s7KP~ z)9+q)(6qi!Fk~}u)`GkSfdz>y@m;b7p>p!I5hys42;GW2cfE!2|I|>qJDuR7ynf!i zr5dwx9}iWxWO3L7+F`0;+UyFi`!(}VN|54Bla?k6QB1bvu<1}X33+kS@=A9 zM3}vmA!rt7%WXkabv?S*-c{FzDh@0>L~Wfs;?=)8u2&xNwz>}C*B#7BeWD`5%Lz=@ zfJ6I@y6G)3R@jUXz=SzNc)#0gVu)sEPbnMC(LV+3WlDLIBFJrIZ2rS}7f0MV5l`Ll zxj_yhmug+1jZ!o0<4ElgoC?L-mlV<3GrSn7KLr615hoB;$dr^Lh0NzJjIitDWUgSF zP_M!T<(UigJ<0`9ttkV!F!)pEv4-Nx`g~*!k@E;}EOWd`!$3E(90G_p@b$GlD(gj6 zTi@{AWV$t`_$~@lnM+tv-h}P_^xX2OCH4&xpm#B2(z6GhEDww{Uqz{WV z?Dkw?-y1l`N%X_b*5k*=ucWJTjIXu-owm`z(p7VvQ==kXcD5URbuJVUuyrStaq9p% zMfL)Jy_hPt@B{QW6>=HpM#R`?X=&GpePTvW=I2H)fGMJmG4HEIU{=y1^pGJ)JjEuW zE5qdp9*c-*hJlf47S{5-(R6$`qZ2ZVv_UWtk8DvubCrgHtNB5xm2WAsR+i=f5 zA)Jq@$6IUUE=|~Gtm4C%u zfD}{Kd1U@7NZ!{4%nvHfROW59hH_Us0~SxT%3Q&#-yLTIln=*EZO!l;DT^mMmDebD zf_@550G&HCL{rPV{? z3vN3p8cdE7D`^R&XKPK7C*R=f?JOFhpY%4aMSic`u6FPkjns51`p+>|uqm2z^q{@V z@8#?0Cr;z=;WS{Xl0sKY#aIb1C;qcC5GA?F$&jya_`k!S|7mOzrSVO2)&c zw?e8;soG71^zI7C**|~*0LG*WnQwn@zH;~IZGt{J$ysI0~Yd4f+%YwZ$ym+7^*EJRKgudy?^sBK3-n<*k$|%OA8{3 z1~PLFn4`aPu0g7q%Px4G1@jA)ceJ-TC8UOOIT_E*6dxF-6h5Nvm`>Xm8{Hx%|MA5E za|P03;Aa?L&WS|~>a%K)7z%?fJ7)H~2=)P+1%tv!PXKQ1oSCT+;Sxvs<7k=CpRCH!I( z>1TiNPo}wP$3}jUeqbKScTqlI?Q~DBp>T299WsX<$nQ^p%(Ba!lYk$k;l-Ts$dTe< z*vrFv4X<1c-wmfFc?D1e<79NOQHbX76wJyad`?u$(}uQ~1Uhq-tb9DlH%|K4mKjzf zETo~9)RCtdu8A>bu)yQhD%R5w45*Aw0f_=4lkd>62KV$^y=2!o`sEaJv@Wwywh9TQ zEaxxv!?jAJkVg~Jywbvkvv&Mi8UJdg)M0FUpfD4pOr?Mg0^7#lz+{P9ZV9T4h7?hi z(Yup*G@lT${(XUVxI~2M`pK|}4$3N2kGqgy;Av(Fj}*X31*5b*(#1~uhnd$}Da9gZ zOugfjR&U)McgiZM=c+cBvpo_270;0rX+hp(kIrm0zIi@$Z{lCa54lyysY!#2g%}0) zX@>tgPS+-QoqauaX~5%m9i)6C;^MlN{YWekrrOoIKWUQb#Hon^IQ`|-VF~Q@mk|q; zW(7n`Zz;ax!msm==$Z9N1c_CcU(BFTr3|4awb_SC%Ik}#N$`@F)}2;4E;U zuYtXXbML6o6Sp(7F)C!@%dL^B^=(d9#Bv2b1ht@Mexv`yxQc;Xiglh{*lrCyR-itR z>IUy}Ha>)ELC1~8wfUE#eDGQF3qdy*TWs|}iRw?YF|gtGxV-}28B}uo3ao)HFzU&& zcR9Ee?`6SCBY5R`H;iE3sGDSciWv5fB{ZUV@@_XJUFy7mE02Vo)RL-(!TPBe%hUyX zLHD?b#wrgSI(~y>@+7jQU;Wm&YkF*6J{xm1c?*f3TB6hGg7hTC&CweFDsM6o4OqAe zJ_{#-!;uYK@>@f1-oAy>Ct=mT?zjd=V#C73W5IVBBYuaYYIeXYSp0E4&!# zFx3=&acp)K-gU*QzD>n8q1qOG6S0TK@754ysE+3mGcm?mxc*AtNAHma6yMzy{hOSG zj+4!tv?r)l)hSLvMyQC!3QxRQ{K3#;M{i478&^)byk&^Gl2NTe?kM&47y5jI1I!KV zwfeZvCeIw;EgX@ZOwpII*cDU{ZrzXZn+4^9lJgnza3L*CS}Li$nWV_i5N`D@PYcK+ zTCRqI>5vq1nQ3d(z=0#q2$Yx)(_|E)@}Z}VNd#WXZ`mH0+jI>v?9wMe6_ApS?d5Ty zBR@(?#N4LT2>19nmo5kbpp<|rkXmvf9}Gg4^X)~}5!(8`w#P$<+9F$6EIsWHn+sA$ zPY`XriOvpc=GJW$u%@QD0bz$*96NOh&KAo9cB+*>I4OUBy`zV9)Q+Ei!(+tz>h4pI z#~pR1R;U-9R|wzr7ILY&7bd?!6TB*0S<2J!qQEs%h9vxJDEsYvx7fUx8}k*I{9Qm5 zk;t)}4w_2!(m8%_$8YIX^-H)a(c5#6g&s#Hy#f(`(9L+_3goaAeMucai0vVr)G;ui z<~>X5VE+c15wcL+|2rS%HR;~$=ncqAOsXFDJv@_op+|?-*WujQ{^N?nmurKwfi*_| z+ETFs#SteIirGA84;nXS9-HZYq;^nR?FP?;5x{;0x^UZbFLL zt6UzU6yZgMZ%-HqP%!Luz&i20b!7r1@1r5yiUC^96QI~Uhcx-e;9Vc!PE>b1{Ka#c zBHjHkudWDxH9T}u&+9<&oDH@Nl7WKQX&T%s1TO{$fiA!LHM9bSavuJPd(I6B3R9Y| z!?a!02*+?!ve1jL&tk~i=m=;P6s!#By<)P=JKjr zkoIH_UQ2UYVRQX^q_!k3`0Gf25PFb`6ZI#eC607p+$k*tvuMyd)<7I$I^FG+8R;71 zi2@jo=Mr`qa5@0+{4rI&OP%2FcfbnXf|U&X3kG1@DvZr0jG3;7hB^QGU>^1)h-gY} zi|dndt&P*XF7@oF9!&tADC>Jw%$~`;cz4(s|L5C?EJrfkC-Xi^bS2kKhP{4*UzeYd zB6Iv8hAAK;w56c3*{J-Rvm9j1>)8Bp>uBFGt}wQ+-0zTTox3>SDj0anhLw|>88hfvxc3LT|{bONcL97+O_NB1fM1R`Hy`u`oN-h8z7W$XK@ zI&KrC31e;eYB3}G>u2g*FK3qVXJENEOBwTcF&PH0$NW^5LL0j9spCb5M?b9{)5c9{ zW`BzK^j+t6=caXNer{lO5rwNek1thQM9WRN)>}tS*A<=6=t`;x%Ff%5J#ue`p8D&Z z@edYaD~0Dh2a0o`Q3J+93h+J@=7A{n0GLg%^5{UF<2>3?3N#u}OtD0i6m?)3m(oRqaV!_^!t+^(^=ldYuN{^KGzuF10xaO<|4 z75wfbMIA~r=aTjZq!6$$(^3kmr3j!T(EuBQU5E|HC%hsekw87qzDi!_L2x<&8%uP= zc_fqRx~Wj+2iluN1LN62EzPWKe3P~P$*1A`_?^f2qK55@Jf| z!r4G9G-#z{Z;5b(@G?<<`mZYMXu#UvFR&QkEie7aOXE(_5k**)-Dw52p~1a-=Rr*% z26UF19b&;FoXpt=xq`^9h?Yy~At)ISMHQzgpgU;WjXR@L09bLSU$%GJoM;vT2w^y? zNB9l(IScG)T|{s|4XT4Ro+Ph-z8o=Rx=w{w5W@H(KSL>3PmCw$X;I7)vOPS_qsZ*u zQFU?hdQGvG%ie@W(K0ZoIcmFw>U<}M_Aq-v{ zhY{NV{d?0sf$}{%UQHZBr1mk~$lvw!4-K@qr{p~Gnxi)5OaC3Ct$cGv!tEx5;^01` zzNZ*tT7s@-dZ5^CetSMf3V|w*UgN&MUNsp<2!-7j>zbFX+@?vs;rNVu?JE;Ui$0$q z?7g_sr-q#t8>dJY5T=gs+_fT4nH!!q4iveG^t>kKqEZ-4a9DNE;9esBVE4W+w*cnX zNx!qNe$e3hHe+8#1NemhbN1OT1TBdwuni#7r;!zT*NOXgS}w7s}Y;Fo${N!z44YdPVTLD z+7IEjQW(Y6A3OaFA$wtAt)KPzEH!bvP9=-x>(L_es5B**Ew| z;%_taiT$qiF(D0h>KD=M#Li6*hGp>*?$cA9-oH$6=1%Tp7;kpiRHphY;nUqA*)!a> zqe}@A*(I~|BI%@!NAzq&V3q#bU^#WF064C1f!eH#!%a<1siYz5RvKsgkFFu>kWrQM zn(he?4@f)Z>Mq5EeVWrVst4T#H4NS3)=M-cba`{1573O0ss|@dkE@TL4-w0t1n3dV!Ig3qIv0^2IOOYcH!l#^Q;R@zT_D%0+lJzd{M5D>}X_ zT-kPJC@e=l^5UhkJpATNN};+6TH(I*v2A+W=EGAJX1JtC6AP{iZsBc(XuK<1JPPCa z0`ID%#R)S}uZnC}jS6fo)X%)@f9PBh+#LJB`30G4d1tgH1(cbvV;KN`K;eTN>QM;# z>i;m{M1=+}QB%MQn}G;vzJ+i3Ymm6ciCO`AgamHgdyEd_d1hItv+pUD`ux$2a^?yS z;h!*x9M87g81nDQ1paRiu#Lf$)qtLu>o4XZt|@8LEx&f6kO|k$O2czkMFba8xo*s* zvkPIU!i2+;aNaNR2Pvb+hYL7-QCAMfM)zsVaijj6p`o;tZAFb?XX(D&){Ei&o^u+z zS1R61QBJ@3fhf@PLp%$oSg3ivy~5_?h>h%@bEh@i23%2MbZzf3f>Ty)_b$bY7RamX zl~R2*J#sZ-PxoQM!p%xy@Oc%7=SfHBOzwUY)Dygdnf&sSy88uZ&!jM?^%# zy+iKkSU*sCX&V|k!i!q8QAg|-sX;wBj@K?D%3-%YUuCy zZ1!;7Ivqs0Ds7*eQb_$PtQZl8T0-^wxFhebw9MutdrF={`Hs`YuTCrBp}w0_T#=es zY__>DD`=z`pd1#QB4=b}rR(G*gdodPfb{MFG)06Vg___=>7Vva^k3UUbyhQCUQs&o zAP!`57EoDs10UUwZ@JjxQ}z{>W2+@x1cwJUY-vb@SXgi(JUPn#73`bG<{|31Y=-Y< z)bgtPg3N?^XVaJTYR9%%IB#H#LU^RMq_m^MR{GjZh8<8!;225c!(bAQ*2)CJa3AI0y+5L8mHMTc}j&6Qh@8i?nY$t%hsZpK^baa^~J< z|JNZXh#QKaMmqjjpt+_bhe~lO`#oZJlsUn>;i&X3_41kVtdysyxK;+FhK(IC;Wut_?QJV%#IAkln#f%TrCL6}{HmljvuZc=@r`~a@fO*4T;zd}__fF!En;$itO6z#y7Y#5pESRgdi zQXaNT_-;P9HYh1w;J&#&QJQA?F2#mn!R?On-p{4W-35~9h)=6xgQui%n@h9-e5(8w zt@p0=GN^q~re%097&>yDg0hKcyJ^j`6p-DJ2aU7~9x^@+Y9@`7w?wg-o zZEd-4+_+(CZVoZ;S779eoH_HZtn4LdgCYX~o~x;;*%&?$Zs3r79sD=?WxsPmNP@#+I%T#PJLX%SLy@B+{f-t2c)VDi@{yz0@ z>G<^x?0fErN?Fn+VEzB4C`fzx;zcRADFDd!2i&;duf4jmLdJL?HlBov0B@ifU;(7= z43y*qu&}Vi0KI&aSGS z!_(R29-Ea(iqv3dvCl2EFZ-ZSXT2HWm%)FpXwO&mzGZ~p6usA~aTSG2Y#uPtL(*M` zLy&Bs6VB_3zX5Ps>{?37j8FDm>1safY(1EF%|wp}a)2zi0-j+Q9IS!>%zyx8G$x<| zshim*z@VTP=*~5KW;a71tb(e&$xIp{eU(HStACdKbv~4GuW^LI`sOL}6K&!GM%F;f z1ZSc=Bulc_*6dk{;3Y4Es(%IQl|zAu{&e&D?Cgg$JVDPu3t9HZM=OC2T0QzkONGv| z><&99yi&oDiG;aQ0!{MZ4cf^{(SU1`@PNztLz@=U1Of^)80xOBXQA@U z4`OysPQuHVAf=Gj22~$KV8fp6XUI|?al5+on3$upov$tnFul&pi}>@$DwbQN4TAO* z(ET_{A5sO;`-R!>$6O6_yq2*1th)ab-*7#Z5F+=%BMtxV5&mnZ;wa3Ks2>Z6MXf$B&--_<&R=aK|MxrS@1a3J<t(I_G+7yP-F(r-S%4PXZMo)wl+f>V5s|DFg zhI#);Fvt@_07lAD1i9EhvdV0(qNJpI+kvy~@$xF)_;!{s1YNHAx5#D@5=#Vygs}@>EDi$QU-*i!CxL)Lh8NsFr8wUr^Bg6?dHWQ%XLung- zZ#*7fvGAe&G#q7OJ_KkW^6!{2m#>E)`FMM@u}FUk$!hCICKWD=$n#woqaw=Dk5#i@(&y?OwT z`@l$={#S5+ex(EqQ(7*fBe4S?ZqUbTKZK-nG-zGUL53`61&pt*WvC)uoES8@>PTQig7t`NlmY(4g#4qtr#ngK1Lp zk2|R4;Bhni;%ak&ITu*xmG-rYr8nQoo=J0c+Ex#_KY5pQptqudlpY!Y@(Q= ze}5J!{d-4O9M-)U@yY|az?8luMFcDl3u5U_o1}$Oupo0$y^jC+a6K>V%-;%OqndjE`d!9c&=Q-y&zjL1R+~;uL@9TPBulMWqdSC7t_l-3+)L~=hX9j^l zY1yZ>d7P$0zx7|NE`@B0U@a;xi|<2hXmnpARGmRqn<3KKtL2Eh=K!AC?E#et|45ETdjYycX-0u}?=)RQ_V2ND9oK_C%DK5(hz2AV}&73t$q5 zgy3)x90h`-o{$1^DM$zf2cb|P6e_?GSPG#cAygcMN`X*;ssL*M3?L1#1ZV+sKw$tI zfCjLD#ncl)Coyo~kVpy=Nj=dAlm#Lj4vC{6anuvJ01IG}fGozyN?3kPa9Ps0FM9`~YYIs{uOzPJm!QA;1~{ z14sia0a^eLpfG?9KvPdzbdn8B12J$=fsO%20{VcmKt!QZPa62Q{UaXu7?fq-z3CF+goOJuI;1kM!HJmj6FRc>=e=7mdz;*z-1egbC`djMnPW=D=%P}ZK z5GcyzscYc_0lEp+RK zob>gZnSR-PAP|4Eo~F84z{~aQo)KaRpLTbbSs9e=Zt1Xm6c461D{gs8>Z*+T1B*8; z9*GYYzjE*@P&738F!UfA&2=77C=Ch3#L1Ej`hR(ba5tMHy5RGvUQMxL45;aFmtImCvBwtj;J{aL?SWRq|vwKF7NUZqr4 zJ&tkHW9`7FbCBz9vmkjBp%7=M`0z}xLe=4qx~Mk|`w)=KJ*M|OtHyJ#9>j?y^Siwo zlnsU;8L9~*$x?fi)j~RY43U7pl}2c6^7w=eFgL)ANcU+i`pzBc6KeDvJ$y?@MLOLy z?u;p;1>It!IRk{$?X0!qV{A7KY|2TrnWsl~@aX9;g<;Mq)f*Nq7^~e!o8%W}#ckEt zYAc6uNKf21S4*3^RC?F?Km)2Fc$iIMlM#g%Eo?pyD`co9O)U5s4O)|4c8&-i=tHeV z4oI%SzZCLs-PwtN-`~oktu$e}ONa^hRKZ4Sxn`7`p$7JB+kWQB$)Xv!?Rpjw!MGX2 zss`r#o(4rh?7+;lG}puKo>(Qo#;tV48({+e4mpg9EX_^r#j?Aq%(nR z-Cvwh_bk=HLW4IH#%GI#_;eW;f;=g%I?k6ZI9uNSaRl>WetXrzMzpSvMa?ZJo6&aD za1@7MwxM;2fai7&OKg&=E+zz5w#?4Ic^(&fc~l|rOIMihB_`5)-54DOPL@3fK|Wg2 z6X9pD(LO!I{W&G`uh$vGd3%}3Wtxd`c~!xY@U--$Gvl|p%dN4oB1JHGuzLP zoliCQZBt0@(~TcgmBK(HgDeI01165QO|Mf|q&lj5of=sqHq21z*-VIZte#C&GJG(ePH$~4e)aJ@R<0y&!p^I;rO;UZ#V^;*)zv*q zrDmfC_PpfS`7(!**>un9tT4Cy#`|CrF&pB+R+3hOjv1_27vj5?0q5}RLtE={8PpD< zP-Q#o(nepTaw-ZT7_xmi{kGF+=V?*b6A-)WO>R^6X$s9Clp|Q@JgX_-PBYWI&*-@dH z=WS~Pl@nKg&9X;%EN~o{M!_XqjwXGWTuf{Y7b%u*Joojeh zZKR%3a)>u%%|%(ps_}6L=A4az&ZeJ&g=dtxWr`7Vw(?m<)#698j^96ToE2rKbMrpGywSjl%3kc3y;mVGF%i*yI+`<192<)fitc-m`*a&=GG`^kr;{qEmav-ZIiy*Ix=h5M?Q2ocQ%{Vsi}(0HUE)MzUCh` zGU9`j(JjjwHE_(YJYF)QOYp(xlL-0iH7|LVENB{F1w?nyh3PhJ&)tgnIEb@ZNsn5} zT3jJ=OZdvv`qndpg*K`E3`QaW`-S=%d8ojsPj6?+Q0nVVf-BiLm%#D0_P{-Wbxbsy7K0IgYPEKT3WW ztc*y>g~<=aEaGuf{w@UpCc=b5pWNVe(JFNVm{cjETfTm`=OGp?Zzq-Q^GU{N_~Up1 z39Rgw%n-KmEw)fPeL-q;NKczX*083GgA{{-|Ex7q$Xjr`R&3X5spL-*xK}(WSdpIK zh?`8}&1!Z!YNOMws1htK^nH`jr@}38FAPE;9;kP`iju`F7o;|OWX+u{tkcDZ@n>{* zzB@CjwH&pP!~Ts$TR}ojzwC*^f9PTGl!1xi;~LPpTwJlMdIr%Q`&l z)xk6-AeXM+chVl@$v>DwACk{F2Ub~`|0vvS;uCe%=PwQp>g*H`J!fnZ|wY= z4iEW0&bacOClQLz-?_+nAt~BmhSsF| zPXS!Z<4I%B=WU8|$oQ8{Rn9XknQg%ZP#Alm5$RR{;}P?+ZY8X+zg(Eo{D1@< zIjD6>J5li%>3z)KG5>rk04CRz%O-o4}u+nYC%tl@6~Ws$9`kGpLoCP{tH(KqYXZ7GcNZ6Wa`-f zX}SJ!n%h%Jx4iUTJ9HG|y{`K&U0EJNVf73_^_guS&{O2@pQqDD+?qOr1C-on9dJAq z1agZ0;s*{H@wQh-a@jHG(`K0Ycws6k6hTrnrS zMs?e(KB#glyQ0wNOJ$`zIN;I!Z@=x=_cGhZ!y;8Tt5V!A`8H(qK^+~#r(623 zC8mj{-RN;?xs=&%Arn2RBUoPO<2*7WxzSw2P!6AD-Pks|Q9Of&v+LB1D_a{ZR#!5I zcK;bOn;qDGU!tRADE`<<@xlmZ#aT*l{v#IJhN3q8!pXP1S`4MSgmPK1ccti}d>dVs zOMGITdEcxQu#Gy%m~dfr6L4t+M=490upvD7Q7ZSH7a=L6{cNsEL8*U@{LY!(>xjhtC-_ktnJ>J zu447a;ly8U>AZi=R?gLuRz$24;g0lKmD{4EJg9n;JgijfRnOVNIWB^57m*Y@@4Gw{ z4}(Sb&nbs!fX!g@`vA;6d}Q$t^`Nr`j=O%m?S>uLvW!#93sI0|?R!LRvj#cK{i2in@Yvwop-E(;fIE2MMd= z_33C}SA3F9#In}kJX^g;DAP0&EO^DhTV3{4S+>Ej632etwX_|tU+*9NTC?Kd@;LZ( z{1lA_K|f%Qq=~)0bhol1iEq>D2|WD=Bf?V{QCp{- ztKqWTQU)6ky+Y(K@=P%*_xwW?9ep$)>#|Jee#(y5g&?8rYa6XE8F2pLjr-`K8gw2s zSOhz7_3G;jULW1DA;ow|40LT!R5oeQU}nwFY~15FGznnDYU{yKymco=U^5MxQ#s+MhbxKdnTLb|og?^edA6J*}e)_~M@1aq>hp}R}6HRbT+VS)M5NRm94S5IprTFY|23G)$FSowgXnoU;L@;E0vOGdh%Ob0gsPany3O$pI#71k8B;@zh6y_)pHsYJ!_8bk_ z`rl!=EESWUhhnMj*a^q`B7sR-YuK0H4fV*d>189dS^2a?5)ridPaeFyQlj1m%pOX=JOBp`|DUugS=aHjijBP3CoMv=b9$Fdw3qb z>3n11o;1yk5mgUvEbj!gG>CWxncTanv?##WSIUi@ z8ZYe8%)vNTVCR|=!1<7iVk@H+O{TAp#&@Y_9dZ~^B#p0+u#V-(X{%M1;PZlbFP|w- z<&;#!WvW$le))4QF~Lh3PL6ABfCu{H)x{5z45F@AFNlp@ye;&V5_=c1b$j zh|c`*<@ozc>~~Isv7!U~jiwpDr+4W?0+}mz)P$kj4N8U@b6*sH9*cecSZ5@;d`KK_ zYVKKA$$5E}8ygx(s;U!93>2`?Mj1&|&m=fhJ<*g9^A41)3*PqRec0rPei>I3uF{m^ z%ATy-p;?|(G)8{l{an;LvS;aB6pg^No;@N@mpi&!veO z!ONO$&{~=Yi+-W2PFl!%*Qi@CugM%MhtW&8n$7->L${z22t^}hQgm~%YG4tKR7UA& z-KQd4vePNLs|mZEo4F|;q$GTkBc~(aPv{;p1EZO3omTm}-}#o@)r3W`c~NKnch&kc z!d$7E0|7e1M1^UA=5TG{I+o=01l$>W6`S39Z=7C`I9v$`~8ZX5<_ExL+`D(oQAoAL@ zX+gvAg@R$v?FGX!hts9>*1~@-&AMwrFZWer<3Bl<4%<*SpHHj{S;v%FjGBf?{kYNMxEqMP;j zgy?;8Q$eH3g|OY4O1TMd0X%Cyw~Nrb!WYF}$yL2vVkQL+pWdx&dfr$zBqWsTQiUCb z9hG#)rf;P(lgvqKjzWBZ_*2~f!_#2itiYK0Kcr{z`wJCC$c!69&W9>?OP5hXeDqNt zVM8~zC=u{8YnjbSqcBO%IGSLIr_h@`MFuMAi~>MP*>d@7o1F=l47b1=#LMQFuCpLg z^2AP?NQ|#bDKed&FL>?x1a5XO|E3F%LCqqR_3POnp*uf#B;Q!CXpg+Nv|(TQsiSHw zb@uPr>9Z~*?HT#{KZ_96>Z`$5oR1pc%C4JUDT#H_5Ma5Dm|l2oA;;b3Ozcr^YoM&X z_Kkqc-s)%WB09=>9KkRB03JB-{}1K=U;TO&O6uGR*GQ_ik>HFIUC(4DBlJd0x^J4F z0WNw?xcYMK;Osojmbu;gTTT1nqx~_h*$|jValD|aTt4`U1lDm3I_aXQ*s}z)9eQSQ z-$u+P;H%+kyy+?`s1IJ1Ejo%q{^Lj|PAcli{b?8~kM){*^!aNdQo~3EMX1T|>y2$*rfYvo zHNuBS=?lf8eVfyBOM~wKEXJjONnK^QMAFzJ=6@RHwuFw%SkrLgE%wq|?p*ux$7$he z#*y3MIZnJ%lL1H$R+UHhe|U^HfQK)6mfWk@=O9U#`rhW7VZ4ojo@byvs%@^zN7vR@ z{2ojcDA*2`!>GvLRoS=Tc)A4_wYx4G7 z?Pc)I4dhW5%aBEkUdP5-@aAcn`EMc_LF?{C3h>0QiQecXH0zMX+Jns<1LOFN4$Ej0 za}60?R0MovW;h^RXtY8_dU7EwxsR1p)^1HmyDGTf!53Qgp^tr6fmkO&~?VkFb>znqGdwT@u#LG584wnZUj0LAf=}9l5 zZS>|bL#IYȗO2}pIle{Zxs%zWa#fO^SqG`Yez{H88yvXb^55Otrn|NO{~=|~FF z5^l=m#7j!>VLfe1y5!pBb^8K5Bs08dvBpCxj9yhE@K47hSiE_|8E566Vp?61k?0T-=YZ)`eMCZ|ko4Bpt#HC5I{DPCYbrSjbjPnw#&C_c%a`N1~8K9nTgujIDkD74J1A92~?(6$Hxa>5yB2rj9Dr{D1qh2^h|_Qm8Twgb!AySfE)|i``0(NPOxt&{4RyrAMN`eZJL`O z;U8IPZEE-4=41iJfqOz-l-HWq2P5*$+{?#B+%L(MQC@}}vDKuVaIWxnkRf87>!$nD z`)Y*sa?UM<_!*Im#AGjFR}DmIq6GQt^_Vocj9=edsSlvs!}o>Vcc`r0gX#=>-*>ZL zUmA7)Wg{TCrQkY~_O&kd_|~RPUw+iCQ1hvOz48blzvW5c`MkC!c$FiU=DM_P_e*xC z{S?DB-AxXLN3_7Z5nmQHxcC!MpSQ15;c1#|=m!}f1$w&>*&~AngwbFwJ)NdJvb7V{W+eZ~muA zF#_O5fuWOzqxKFfLao5$ubweRT=BCGGcvTZ9urTJ;1+7u9npQvGzhO(*hsa*`@v`! pCubbXRYo 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 literal 6105 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 Ms-seT_i@mF0DLxMhX4Qo diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_pop_mem_usage_test_local.png index c1413fc93d6a18ea72d0b3a10f0a6e03614f0d0f..d1966e33d98b017d60a9e69bf8d7111697046aae 100644 GIT binary patch literal 31248 zcma&Nby!qi)CM|3hlmo=AkvKtAPpilga{JSpfX5zNTVnc5(5ZBmvnbCqJY2vQX-8Y z(p}Pb&+q%bd;h&YkB@RVXP>>--fOLQz3V;UPadn1krD*rH>t+VWjZWjDy)=$E_KE=nYZlt3WK^6DOZBBlh zOCpq*J)Q?Hk-3p#FEVuSa{H@rZ`#cAj0h~veNb{`goAGsDzTF0?zFVn8}{FozIbx* z^Wf)1E*5Y@ng*Y?9QM{EgA9M{je=!%p8KptEqU9h=&#`S?ukk9Ymnk1+k9LXaKGvJ z*m}l)1B}c4-vctI|NX}J_5N=#Qd8~zpZ^}TUHUqPwt@ z8;=K*>x&n?H~8B$i_9f2k77Z7cuySN=<#hCJC{GPC~K+rym20UF7c>=1U({4M7#)n z0@e_`Wd=7|5)P;<&GO&=H~;6w>HccEA~;1aO+JQv4enjD8^yk&SASWO1z8;uf@W4Q z2^^CDgqsPa#B3hCB%rJFyWt`zJcEfqUS9lX%NSk`7UUG}*N}pc`-tO?WOuS)rjR9$ zOOhz@nnk5I$Xe=3${*CLnyc9;D5C?Sf6251wws75Q_qtHZyNlp{h2FGU5f4(-M<=? zz%;t9EyO+eV89_T5eM0fBLo$~je$C+PF7Hxny9I1dO^ML+r?|-4L|?S!-o2Q{WV2u zBE=JYAjy*^XgUSBKCVd3Q1EQH*W5-x|d*@h<_OR!${ER|fF6VRY$6!C=aTP;V z4Hv^am#$u7#4&Gh9wR(G1 zj}uK9Dr?4xdk``-uo><)A#0Ba>yl|_`d5MqNa}V;2Y1q_c2Ym)*kWC?hCfh_If?U7 zAGsIFW_;>)C;M+tI@%uH>gKu(L~E6B$Y2FrhNTMBa4i?I(C3l3+*T!w^K^*iU<<(IIFX{o>5 zxP27Ns9hN7`zlRCg|fIo?h*GhFT>&&ZvXR=X8xZ<2ZBFi$B0&~5gH{7dY^HG`4UAx z{rk$(HS7p=i9=~=scM3I)21tx;$yBMHgI~Jv7|8)TBvDeDZ1DaU!gYVGpp6xmP9oF z!k_9(Yxbji7k=}VQ=(ga@nNa88TL~U!`qzc z^gr+=eqxGE&u0JgwxlQfx3{EB>=5q#Oe}VY+<0nJjz#X!hp1dPK`h1*p8J0?&g z;1Eo1rn{)G#0;}(2tNw`i>Q~tzt8azB@kU)KF4Xx>{5XWpiUP=dPoV28&~^rx`c2s zV>iW)LuzHo0)p(;P=BpIx-MMfjd8f;BE4(hH1% zmz~?yG0Btey(Fc`Et<}=q$z_%$@e%lA^uqcE={P!?z9~|5B#eah=WD>NbE`B14TgJI%%;N_XX+FaW?GfUvV z->a*8LCs!UQny!6PCBkHXGjGb7m{x>NtIrmZB#hVT7@xnYc!vtY%**O#=S;7JKUE0 z!sta`xm@%m^06HGbyQ#i%+2S5srd{pU_wGWv>hksyfZ9K&$}XQ_V@SCPA|Lt<~xF} z_fs1Uj6EZwmZ6V=(}PVgn~&gFBrw>?dA1qw%-&eOIzM!PFMrf<{ zD6P&)woBcY2A<8(q7)hBNl=dG1gqh39kiho5A^H7w3jTp)9C%)pF>x#-)Q+}D^Hk= zmv$Q_S+_Zp`#*_hJbtyZUlb;7t{a^f5X^zLu@-~nj4YFL{F^CoSnwxYU{EYN+#;5x z>h)mVHBbBYLden+IgNECaj9`SFUia&4-Xx)XsoLLRw2Y?U;i!}{R^>lhA~jc3Wlz0 zNqijbmPThI>MLjVdeKJ9@f6sItgodg%YsayI96R_VLD6AGb7S4AXhhVS)Q69lYmO_ zQV+4z#gXxUi1)ccXdXSvpbOa~5*4jUdP z=sZ2oF_BU``$?YyL za+fMpK=S)Wu#hIH?2+EEyqgNC$&U!tjUkvA$$GfRiFaIr^6G2argnXp&XAgchwfi)&)VulN^tzp&yf#CTZ=IZHIVW6|S z=x!Zq*6_=zVrQl5on6XG0hhUknar^o-mdCG z9KX010+%Am%K64tE%sy{6CK@NKxXCiojAPK2!2Fd(WMTbPM+MPs>eo&aY_BjXXUqd zpBzFv%#j4RG`Qoa+`W4)lLX~!IR2)`Xbb|{H2%uHjop#p;_Z{JBT@8&oc|(kAy_)9 zjU=%@Q|NGqwf@9kPu4irrR_&0jx1i%WnExbe6qNq-Lj| zi7%?%L5aIxt`pPF@2$nM5Q8p4)N_+%OM%xp$=Ye{>u{!g_Z9qc>z7RPwUA4IavKFw z3L3<51LdDu{tTPQ8p?rRS&ztcMtpjQo~yiSGh-jeJ&t1D#`F0Pm{~t5(~!$q&#|Uf z;cI=Y%j_ccBdqf4HtVoc3)t4Q{w$>jpQdr1F_}PX^JB;GXcdz~eaWrDrl!Q||6t8; z6@KhbL@Qt`=;F?6(4Z%Iw}{R~?gw?_EXL`(iyC%_$XsK}#~hw`f{;7VAXv@o|BZMl zm(QGVGDK<`mP{ukB4C7#T*JjB*!xS`i}fVT!cYO$2%FoSuI+rb9-{2=UI;HZez>Z| zg7t!9r(kP?2Ctg8KlXOg;zWP7Ddmwz3UWV)8yRQ?*Er!O9BkJUZ7;DHs~^r#$|N3q9_p>s zuq8r^b+ZN?4Y04ImWe2Ro25p($n*o9FQ=EmOPI~WRaf`U>gnkan_$NQ2VcyQDy{`; za%@ax8<@tim4eC3NQt(uaBU9HE1{NBL6r6Q3CxeaP<1tZjqq-fv`g0irH>T+Na zjDqeLi~;UtFdK&~M^UB2TS=G+ej34HtSAnx%Cq7PtjAKR*ADhDpo!o{Rnv15N;=Lx zMDN@RC6@R zw9j*8KPxedA&&lm%{Gs&r<}&08?mm-J~|2oKqkds6t5kpTfZQkXOJ7nT zLiP>^djoXkwt1u~d-@B6yz0sWe1cmfNo@o&Oh@?=E6+W4<}RmFotka0BL*|w`gl%m z`_hjV>*T8Rd}NUi^jPZtxRlXx^wXrnZ@s9%3xDJ?Wc=T1ZcO|6jQh~XR9XR(`lt|G z!kZkpU#H7V8romZG`bcTcw8Yh1Yc82-2KR!IC<(EbUwWyy~8Mf{qIk_cH?SJrVg?T% zei`ZP>?9dl`TMtA(?ZmKW47f1KK@>iR@-hTY5!t|+FQqlSuZ2yipj+;)cKO^g9qNr zXIDa`BqX2mg;MIaS`P+Gg~Sd00P0JgWVAFL^K4|=HQ{U~j9*~6-yeFvW-|0!?yY~M zF2SgQh{y80Yw-W6Xo@+0n>pr^uU3WjWt*tk5izoGa1!&G$eF;UaWmPc3>+43j|RdP z5Lw=vui-`t#y#)SOZYzV8;K~5#CkNOrlz*c9US}}n5KJH+s;(|)OxP zsZzj`CMG`be{htMDIavDgY>U?Y$ym4D4$sEJOne9haSUENQmM1 z1E~*!(vM2#3JojfevFqG76f#z-IU&RVR&LCH2yc$`AP^TE%lKVYVX@+q3zuwC`O?r z7ZGyi8a;ulTYYFSVjHT=ck+4hv_FNFpV+j9m(zIe=#~qBXA#lFuSh+@o!kdDGpM@% zOAB=4MF*~ld43oNx!}CE5M@ODJ=nJ>)Q{Sh(u(0sqS&q@PiF2E>vWBA#Ci(WY5H{h@8!zWlj(8}STP-l|1l>BL3-hDzRLq)fi~ z^NtW%A2YRP7${-$$ghR{mpPx}14qH^s0%X0v7>0g^1TH`P;1dgycYMpP_CZxE*D37 zP_gO=r6%bI1}4zZMgCUqE*^}G8W$kuVzJLqm`dA4X!>OI_-3>~k|AkSJ7L1qy*&hr zlN61&Y2mA6ufJh3v{k1E$6xAHeOV%kuN%U6$P6~6lo^BUPoUt}X(0`erS4gKPRETa zP_R701WwDyfN4eB{YEtu_do&n0FncD&$_vOxJlwn|!N<|GYI^a}=i2GHW@ z2?dAVy_aOIOt>SDF?W2 zAFE8(J18f+50+^gyqTZ4@lOU7;_xAFd-#HaUF;q^vk7zu`t)hKk5V)N!Ry7}GxWJR z=L|A?E`$08IkGI0p%zl)iH?1r?2zV!g3%GE^oPH)k5#jzcL`zA>`bl_D>!h~Tb!Xo zte7LUGZDWP)7ga8ZnrLEJFa>BA;EojIgEp4^&37Lc^Ds`r5D5sacPbY3eknDCQp9z zndjzV_|=IC)YNeRI6o(|$UZlWO&0rZ1uXwxInQwWG%(DM=y}4^o zWkMQQAv5)+k`Pmcp5J4#P1pGJP=RZ~q%-3&KzO#{H(MC-|D;SV^^zCqZm|$D-fSgu zc=*eG`R;;}=$|@X&)7qR2eJ}Qw^Sepi#9N`yN3~9Rb%&r~?V(D@4Uh z3HB9Jfdo+BX%|gS_jf=|A3r0DPyhWatwckRgPr+$@7q_&q(Y@Iv)J0Oyd;iUD%m;J z5gvFX|HEOglM`qVbTBe{>z-{+o(%_6$}l9o$eQ2$H*!KNvJ>_2SA2ydPz z2F|z(TAlSLC~+L00gO4U<`j)W&kkR@Dp_O_>lf^vJ0oI1Hv1sW~cG%@wu9!PAw;zdU!z65RR0!vvHNAP&v$ zO;a)t*}DrY?aCqUf^-zc2Rcvn^j30b#BfMLD1*5$o6Bx1D!1NSNl|!}nk7~Tr zUqX{_@DtP@q(}}ny(~OTBZpsxT#9?7qtf-uJ|HoQUPrzjCM#)JU_s=kC$aL=Ks-Te zijsWAv|7))bL|A}6nb?!#~v@E7;>JSEy-@tQ=RSlsltLJX~V3^zjCDA+7Gz!*}0$ELY^swJ-YE2Z|%5`!Ss zkk1ZA(;kf+#m zD*Ig?+&hU`bcMr5+O5q-V623ZgTjxc_i`NRtUR@h-&3z-YS2 z6x{#UIh)IPWm%Sp{hIR<^WKIyA-vpDQd)0G#P9Z>;AXX;s5Q={vwwa$Kpbb}{X}~z z$Y;i`tbZs8?nZZDHrq4_m(ogF>^xq3!liK@;Dq%s{N*vRBc*}{giH@OJSJJ{B~XDr z4T&fAly4O&E;(YagSJDfLzo6OH=+nYm>Z>-9T#8D5nM1S`WDEC5XbjnY^=F>T-W;& z!GRW5R34+t@M)BK$!=BC<(lCmv7%eneeADPV)r+Bl4heR|5l)o2xk$8OAYEs+sZVT z*j@ID(EkO(GiR)I+6TUlN-JSiQ9jA-k2nF0 zQ}OsONfzqx`qMx;-hcYEOw16|=UC=ANKAOhd)dRu5qT3g1Ns+dy6gND?6h8?mMn|) zCtSAY%#lwVJv>iIImjUOyWhSx)xrDjVU8e;-B`Dl8c&gAvBqrb!?)OFq5Ke%kdl6y zGh{7;mG@Nc2+L=8u{mONG}>cf8=D}ezmGLrC5a&EAuBl7d=_4^Q$*Vj7rsY`7rQ&X z;3#6w&U(hM-~;pHuel8f0`a=?mE0&)S;FDN(-T-kgVW?Ru2m);DdPAyd-*N>iWnI{_4fBXyls&*A+^K)iCO^5d0bPZWqVgmE zgb7@qX$%714520Shy0Uhm@ZVadzAdj7{?SfYzauLHmUK0+dVfFkDdYsae+~h?zls} zFES#wjCJjr-Scr!^5EwgwJhe{EL1?^8uoz(sdNy$ehkEUgybO*26l)?1DozJ6R3lr zZ9*PDoa=U9Wf1CjWx570+>A)M%K-Wn#uyFC?yWy;ZX&yM!p0*ZRUo(s*20NrS^G`QLS@OvR(-(kiwJ5S>*gjNy_E_O;`k7I`tws0ROQ~(h^5~sQLZ#f0K$XyjazT1@~eS>%Ce}8UFe+5}P6r@~M*(XnZtX(JM7w@ya4p z+q3O|;%Js&lc&Sw?r^U=*@nAM7pgGt!4_^5yUMb-UZ||@B~#1J-S{U*O@=ZG&-+}} z!@h+Rh5tBWa0QwkQjV@yps|cVeSEB}IjH|GuRB!M6e1Wi`W6(7bcPJbm|^r1a+@%N z@G7SALQMa!n$*qY8;p->_azBv?-nsx-MA!O5K#OWn@-g4nO;IH2o)!s=u!SA;4i7fbmvjr%;m3N2R&wn=^+?5SHEIuIHQpK_e1$KA zcZffCza~MeIz9p4AL9QUQIKEEv{J07Yu_nsdGiN{IT8>)U?rMzynO0%+jvq*9Gu8* z+@8;NIq7-Bp%(ksxb5J1%|Op`UUpf?jeBElbZKiofWr&0`%|f5tQ3KklGF3UOQCdIUd;1FiY8or|ziNna zUq^KQ+2aba7{PWvIkJATvnY5kOs;P51wSG>633fSTfOw@!eoS(^Ki0rov8WVrR%>r zuo<^57iN;%dv(5Zy}DMA+5WmUzT@&Zbx`(XMkn-ox^~KUqpYHRubbgq-{UI9zWkI{ zLKw^2EcfwMr2YD=kt9Z~p`otsmLz16A=HZ)Oq<-9vae{PNlpm)1;~dHz-d|`R-kId z+O%iMEO)vrLwTcjP?HSzCm42};T2GA4d1Vrzb)f(Gccf{L7REc9@$GRh1XqQov+Z`xzjEE8C3LQZO2pgql|HY#y9&|ai9Z8 zcAN-yvB;a@l~mrw_!BggeVX3t8o^j@(WJt7^gw5jyE853o~8Xl1wy=G^JQ(-PhvEl zVq2^^IumxQpyWMZGGY=utedAD=UQLSoec^-t6UIkprdNbCiv>(+C`Pj5Lsz7lRqSGf95q${9<3#H-!+vNeL3=ZR%C38^y6<1%8 z$G9NVIVXI?5nzchd?`HhF(a=mgy!#1X68vRSLV02zY`X)`m9hS66s6bg}*!P+##m^ zLc;!ZyJd%)o4arqOCu9_X17X#5b4{BpFNTr+>$e}ka4$ky{QwE4?klQp2e6CXpS*F zfKTIA;FNI;VEX##iTT659pUg^8_>5YgW@2)dItyR@^cP2I5;#0HtRgP@$TBzY;JD0 z{q)uXx25vT9ZiCUYuRHC7T3WONHl@UErahegsr49FA=H*9BK{k^90fT=sW0XG;2Fw zB_MG9?ab0+c&G0C>%|zPPIjRmhw6^OmdyBhNmLjZsK6Daj5Pj38CB~2b zEXgj!AgdvmO=mO=O@`cOpQX~*6qvUEbF(unSK}W1oZ`K)IP?mi5rOE3F(d*$SF>mo zv>`6Z8>t($b>%@XXj2lF>WttE-V22nr&7MR?oKh9F~6Ne3%?Ae0a#gL;Tg;%eK-pk z%~~)0u^a^B!0#exCFwNewlYU3c+X$r>Q2jps1i9i7epI0j5=@&e5)RSKPgv1@NMK&@}$79Ox$k;a!X@TQCK%duHW=q-P^qWkPV`WwXR`P2JoJnzrM$lcg_jf zq#D^C`ZVSVurE_w*=6D~S|Pds?0bM?W6k~3_~8h*CG8WEG+V?80#F7ZdSX=4!O42- z8a&+jTl^RZ`8$k(&k$E=} z$DYMYC2)2zTyu8KsmqWjf&sa{WMJz#@;N6?8;SlACqpkDjR@M>ok+r8a4-q2=~&V% zSi($d4vO>YhXcf|=6V}!Bg#}hyiet%q=?xGp2OBYX(grflLy&9E-PuQQ1(T6`JuY2 zgcU1(&8W$qamQ)Q6>AY60K(R%ZW~B(T)A+Hc&1>#2l>V6!{4S2L$-p4LU0EhoH((9 z1jClG?|*PtZ(LNAUcE;NB#K&$h$F;XF1nBeKzDFPL~A_z@-8p?vC-j-B*K8v-6nj;U%aw$V;37yDJ;65GL%&x^Z4pWmN@WBIZ zpe@NE?|e_NY%?*>K~Q{u0hN5LDI zO;apwI>_;;3@(S++$(Ik{vcsJ?gz2w%vGPFS+zw>Bu}b!_9do{-fqBUh0P=H&Ha6*I||ikb}YPb||anM49g zJvIZ(Zhz`BX{2(U-1dW-+)?Id0+fm29g(q^GQ4P>X{8}B8;yG7i36RG8V)Ao?O(iE zaLzYHTI}O&n*6fV{}L-rA zPpdYC_e$r>8UcEq_E_k5Bx+NlV?|e2$1`-@-FhcxFERrgHXNB8%FEdY8>o zfo9>?M{8K)dol)dDZ8;kQU)=*T7yn~W8;)Mhso*z=GTAX&amnUQ%iYRYD%^+=%qR; zt*Z|a4s$vesN3OCp(fRVyk!cJYImXhSE2hn3iIOb#$&(d`dJ*47n%x|f*-g;|(HsBXRMK}tQyr>%8_?GxOhA&? z^iefkL$1#jM-*SUhA@~Xv^O!{Y9K?vUTvMd$g}w^CJ$t`9L*lUZ8|OKPQ=IbhWfH- zfy5)QAi5w9e+}UHRA&m=W;yiEOWt34!Zp6A=r6$Hk@_}&{lC3HL~^8Ss)_%Fo^)@k z@U3}RmgZFf{uCc^Z1TQStC$-lCI8^T$%rPX^4$l!ibs11gHdgyt$em7iuz-}+#}i3 z)qb5@=YURPIBh%+y?ArzkFTS`Uw?zx;=WOM(5p%ZOV#;O6d4?+&<^Os{udj;YU}^2 zXVGP`ea^l`bOV=w;>v<7IW|82;A_Ktpr3g>=iWxyK&E^LXt(^QDaiT5#tc`5fF}F1 z!+&=b@44xVI_zmHR(vl3{ZAp(B#e$!BD&CL${NiYOmtp7Lkl=PyC>=|0jSQ#D^W-MgY66w$RqXh{S!r5lpx+*B*;>Y$M;ey=>H$F^BlQmLtmps~+bz!r@AKKT$?(86kMj3-woQLFY6H3-_)+&i4qTP$Q zDq{4*BA-R>qGz|b_GoXmn*L;Xj^G&nHcA=NpX<05Pp7H@e{kFPK{+csvoq*H3nGqV z|MNe)65}|3H7TW$XyiKOdlqvIW$EF^4M+V*V)#eE5>Y`Wx|#y9IyY?yTaN68q!%lgOlZ)|caE#EX)?B9#FG72M#w z_vot7abXh(6J~RIU6i)0nT~+*p&F4!uxbbcX0v8prU5(5=-79lyqrpz#3c7fhBi^J zd}=9=eKMUxYK2^Ff!lR3|B#qlkK;c5cf;q?518wV96lFzCbegRE!rNhI9x0a(_nlT zD!?e^cS?$Sd)UzW)+}hGIM<;9quzG2qT+rPau?c8>Z0lJZiM~Y2;;LmEjdaf3YJcr zN)xZ%HlJ<0F8+)VSJk~^^%*0a<>%pa-$mL*L#sSz{lB2B#pESP?xQyH6fL^o)>%E` zgTc%}=i)s0T_|=H@FzH*lXgbL%Xc$wC^QvkZB5m+xUc@mX5#fl0utm*9%yW?@Ell} zu899J2m{_*>p2FLA*LVo+5F@n?8`V|6uvOf*JkO)5|$Qrd__#4lqJ(}<1c{t-F~m+ z#aSvPDUp&zf(|_2IvE3Hm6x9K5J2^j%b*R*H@&)LVtE5_Pi5+eQtY@|hEM(Eglq0~ zR!HW~58?(c71#r{Kgy<7BA+{Sk}Zh19W# z&-HOO!2wI@v15r(jy$AxojmwWbc5isiJ{G_h~u}Yk0LdxlttVrNl7QAs3YMTE^I4I zvf+M76(AhaED`e>eO#qZlf>{->losEi)@?C#89PY$B?G2dJ*jk=l4Xx=ZR^ERfcGk_L$A5jU zPh?#qvDAP`YmY#((3tJ0L9-i-_%b)6G(4F;rlqAl3eKla7vkYTQIE3$GL~Ko>3g_( zzuNC)JFLNR+G~_0=)$#^ki~!ZD(L!rz6N$_)iEGGeYp9vY+B2#*<+G^0pyYE-%By_ z?JtivC$9%ynwHzynGLB*I`{Yo2wQEOio`$w6V9?ml-Jn!@6@9f&;>>H=i4pvJ`-l% zM>`{*HH^mpmIYp&uG|Fj3I{&hdCjfjHt-Uv4A*Wt^6S%~ASa{x55pK^3-fQV2FLi$KM3m{|FWHV4 zkB88h`~1$nA5I7nFs}UpO7^;y@|JBWnWt5r8$TT}ZbsOnw~&v;Yr5zn$Hsk-DcgY9J24NsJZd=s z>|=>g$A#Nf`}y|yfb>o)%%>}Y8YV(#Qt&u^kWR*DS5lSv^-I2BVoFZ``J$%<)A^6n zeN8x*`uh8)y<%jK8?U3Kw_nXSxvvZqXre@HhGb9tPtv{TBnL2`5WIr$$=Mcf7WZC` zB*x(a?aWWW-%PH)QEFqRfGY}NOWmvZqDDyleBgNix%|a$YP9U}FL5A2bvHTMK`?GX&0|+%4{r<$M-uZSu$K>^kwFQ8SBy}ks>MBQt z!Q}fd>I+w2&bJ4c!0oIN^93;Oq`R<^x(8XexcR+H@Ba`vYo^;}bYXXqjU}taSNSYa zP7r!&QVqMLPn_L9IB4MG=l9^RlKY!U|2Jl|Y>CJC9tz?ia`5q3d(%?!X)~`pM^;@iEg6;5GxK6pf zubwFG-6wk2yN%Nf)z0V6&;lBoqr*z8ule%3Xk60wH|RvlRAZREU!FZ`2aIxxpSAhcnPG2~^4j!K%U_&wYT0@m zxb*RX!81nEJN%WvspeFl4W@5TbM^qgPug1)fk|KeTk60Q?^SXDYi)J@@&?~^DMjY> zexJDGR9brWghRpo7u^?(Lgh##h4ex&E~gE5`5WAu5|(ZtEX_aedc9lY8(VbGFnW8+tzEH&%b+(U-up!ETR0Xe0^N&3eyYx@Kt+ zI8A5x@AuB@9bT~jPoPowWWDQMHqRT>?*kbp3H;jI6Nr|*ACroEO>i@Yc_pExo$`m& zmuKroThk|(92%c~0nyLq*i-E~Fu&CMFI0NX{kFtd-&W}4g2Ni%6vtQI*f|$??g)dW z%KCZr0*e?FbyVuQPJ2$6?WBQA;iyT#3OO2@x+)tbi@*AjH58&keUVCk%eT&$!Z*1Y zM>ZsYh%zRIbJNM6(*~TeFY=2FMHO z%cj7zett7}_AI%oHyYl<;J- ziRDLRC4;xS_-@aw*gD|jZA~6)BXx7v*qMyLxwP<8tk=D}K?L!+;;U$_F1tA;xufo}FI^S!R}s3NoHAehY5}Z5S$Q>fr|G`O;ah=`!cQz$*d3%ud?`tE;P< z-@O4{hBVzjX-bqaKy7%(juo1>`I zO?7oMPV%G>x?0I%Q{9fghz<>6^VCsU!(89l=}P7)(31~boE{hf_SJ8zjs{5fw$oBm zrGYr6IKAg3a}+<{_xu`BZRW>wGkzP`mS8jC;RVH$+54x63m-2iL&hMQreLJh`tON|* z2UfTw#C>J3Og`}9-zJc#Cj?zTH8$=;a%eoasL7$~!H;Ewml#$IqJ*s!+sf*vc<0VD z*G3Cc^Qd)9IYLjL7bS4;Fj$@)uDxFBi7{+Fx!#A|IQWo<0C_88gVvCZqKreV+jVqZ?u%MPJHhFwF>NGuSF5Eq$JqmbN>r zqpQ2WvwEV^r#8hQE$tV!`ul=XTV`)^tA4uN*~`mI4t;qt-|-T>UP$m+rDfpb$Ahjq zrt>M2ghf&P`r3|wo+h%~_+%Ky&V0~$p$A#1T;5(1RAUirq46T z2l~gPr7?aIFzMcEm>>L+{fLL3|Ig8c#R@oc3#B!K_xSiCGlQ;BAYj9St}c|Wn)FAq z9^yK+pCXRu{G1`c|KXr_*9Yb^l=bkf&qi6p>SzIZnejViMjBHWC^mQYE#XLjz}U3> z$s~C9%PGiP!!6#<%>KI%3CNi-Am*xEUja#p%xe*l(^>fp%k{IoIDQMYFAoPOTNtiA zD={c5f4%#KklblF2mkZu&rwX$pK6BWQUi`B!vHaV-}mqph`EYDBnox_v49R?2|Qg+ zYB7pk`4) z`TS?){1)?K_ZPTd1((aIV;NR_1hZQ%&y=16YI{}O?ay~fY@h{@x#y0c=_~om!}z*a z!<`sR``J2Q%VGpyX@6 z&`g75wh1C@-Gh05cm0i@Wjpu;`Aa{WJvaP-NOV9SM5;2dGE78dq+@3&vDd%fVX3G| z_aRvuP>{D!Q&Ss(Y(Gy}&x-lxtVY5mh=UK%<3&E0a(Uw-$@zLo1qM^99C_z>R9k+s z^BpN@G7MIM9?#VGIJOlkDk=|+3BNXwLYMvyrrQHMSAV1ftTE<2Ig8WRF!Bem8j#n1 z^$T@402i)fmi3L&Ff`SFeNE0NvCE*yimv@ue=_ISp@aHw4?cNsO?j#{FRoA3ZN&0C z&F8PcoCoc+odmL(xt^ZSJFm6=m)b4f{dplfbe~Ehy7FL)?3?DZ2)W%p^~Mvz^)A0? zL9^y4>7^)`!|%>_2!#FRz8EZ3%Ck5fNR>IZrW@p?(<`)V5Cc+Vw8EC~Ng?x^`JmGj z6xNc!rOLc_=63SWugkIj0<ofa&l%Ni#`%{Q<5z9{c6(dHX$Cv)D6NYlxKhnwu~1Rt845 z@2svvHa0fyvz`;K>%CmguRTWd+XT;#Cf3$I*z3h}PCHIl%zpx91k>c?q-%xbpV&vw zn%u14N+=!PwGSKkuUePo&NpkbPp&zVOp&se zkwO=jF&)>GI+G{YAcdq}9FA%eLax5rY;gyqyd>&u@n&fI&Ad%B|<3&y`wf1UHSI(8s&duqb(?y7U!#HohNFs3o2 zYd%T$Sn_aVh@;fpyxG9?-R$`|pKQSw<&#;z9c3n6#v~|9Qi3qzk6Qh!#;?Y%37^n8 zJCWbbbi7K5y)TZ!(^XAqB+VK#CYc2XH=TqYCr3x(rJoa%lZ`q2b}+V>v@0B_t0RXg(HXJr zlcT9aJ>!)lH6znZ{?{o*9o?BO=gSpBqvd;Ze~Pc9R#GPBLoOe52wS@f2wb67{zgan zIc*m^Lw@B1o;R+L&o0`f{H;|pa;O;WK)o($H(T+ED|axyR?E*!jz}7zzja9#1uI^J6$gJb zJ_%+UUH(lFH);jCI@^TQo}2ZAsZ>;@Msm&hmvr-^PNU4Vy%y&jCT+fAe4i@RZA~H5 zP9twy-yiX0Rt^~N^Nijp&tIvx??52BbGjmJ$3$aB2#O-h=myq)WYL^z9ZX0**gEL- zaBdSKbDxkqnckoOE?}E5GQnTa_+iWNDDQ5EWxC)Qc_2xU*iQBGRD}^7P8^xU&shM! z{aF$Ww7kyrDx;11BYk-rQ}2Eb2j=3;Ea!Wevtf0+<5P-Io9s6gup~b z&aqoR(-2#!(qx{g!-HDe(Z5wyFM6(?-|y3I&NQQ_YxT+PbD;mrz9zALExtv zmCHQYy)0S|?Sw9FdXD#n5=7jMkJJuzD3wjo>08P(w~X*6sczBIC7)mB7Wd?@q1GmS z=>ju1)+5WG78Gxn7p*l(dakEQ%6qPl*(%Zv8lo0=#)?KmCEfpCP%%An2$S|c0qNiz zd=%M~<+U{>z_-NM)r}SSPy#I4UGXBwX_#sIUUv*j2UuS8grSP5>mo+(cPQoDvv&Ve zr~BW$8r{7u+Wng{T{?-KZyj0}AO6A?gl*+PX4i?Q>MI)^_lAP<+xi%SrUvco5n{wD z8!caESw0%qg<2~0t7njSh=Ia^L`i97SUdI zG!*>IuEYBeH-Z3$Z@&6GGa`O^H#z)Rf8ITz85WG6=&C?Y&|mfaa1G&w_vOblqU*{OpcAW#+$u9U#NL&VN4pN+LotP_aw}C6uzxp>Q#1vbF7Ft_n-rr>E1EsK8 z8DQjaF{Obbi*`RtC-46^JZw$BLfXd#(QX{pF<=-8?7~>{X%}n>xy`zgeFhS>&panO*BT zt^HcTh4tT~HOzI_eC_$>apsEQ;_nK=ZQ>XIm?frXN&Uv(eXX3=__6cn1L#uKXG*v( z`UeA2Ol-c{(>@ZQSL%!jP+wmjE+<(89s%yfi3g}Duu$wH_yAwlp`n-`Wb7cL7B9yu zfL`XY2V$T-;GFpwtYkdA6pNimoIr_q1bBgK-`#~TrN(u|Ehwg~?E_wzAWRy-#GkW- z^0%9>G=$75f_O4(HRXbHLuh6L>@`mX(DB<>p4LpiW|JtRz8Q_39U*=q zEfs4903G)z9vtgyDkCiOx6$AMn>_$;=oMP65ycU?zOXvt_NVa=fl}Ov6@Y}fU{Qr8P}e4 zydMA>8ts5j&enRJ>~3DKGE$i3Z*=(le+%^+yMxBugkCLdPrUCp!u$HchSEb$fT&*^ zXNr=Y?}(^-t8sqTP|uQ|DP-qzWl!$j+xXwxu9Ye4*PMGx&OmvU3%=ERxxBnwhCPkC1lj8BSAgkG z0fI~W86d+Hu<+kgb`VJuK_JBJe_k-5qnV@;dR`iewyS4CvS!zx;|C{#a*zR+hPC_M znV$q$wy!>;#)WI-DcGqxxK{mK4Kd1IBwr5Ku9vng{-5@~G#u)`eS6GUBSIyzWJ}3D zwz8L!64@%r5*d*-%h+eeuR=tWGAWcwBHP%#mHcuYwr7gb3gy* zcwRp*o)?ZInwjr+KFjqvuk$+3>q~TtNRB-gQcelGh04lv^TKA;hTXLb8&R#8yR9Fb zUZ%9Z&E?8m*7O~hF7X~34SWMF4pF9WBiC*hRB+zePBXkDZrp-WCfQ3G zb7B$S#%xoJYb7qKo!{B=oYuaf!Oa(=scxLP5o0J5^O5>R`MjUoFXkOxM{DbcA`q+a zwEPHaxnxxbZRm1w(K=5fwB&Ft*_u1Yn?=SUK+57lz@3aP(H9rbeyVX#q3&9g!hl`^ z$0k|&JoeRKlW3mU^Gl(aXaZ5r*)hwbiG4;@UP(!5>W1wb8!>Dab^P7dJegL#1m2}H z-nGPyNKd{%36XZsa~u(IadF#<+Jw)KR4|6`Y4LFJ{ns<>cq@>7Jfgf6k*wgeYugDd zn%T3R(pO*nVjeUXzuvbQ7r1+U&}p^w(Xw+{%X~>xVU~}EE~y8s90f5=m%SI7eDR-| zU$h@5$y@C?eEQ8`y4L>rl3NoFnlB4aU$v-%lj(7N!Z{w4(5vM{+*9@#+%8j zL;8mrBr~_qN*D;jFf^I;KtQofg^iNR8zy0v*e(Ljhs2O9OxUUs@}J(>78e00dCW(R z54tx~CLErLT(fxJZo#^`T;{YeZ&cJkY~`aWfA@|<4hZKR7*P0njD8kelK#~AZ2t&2SS&AKEd)-9%}U<7hiu^+3_vJ5hW`|RXQ&eyJ6YnxwEc7iOTDmA69eHdN21ERS@O2 z?+#-HR7d=m<6g=+`aY~fPuk$sVptbXmV3+7i9c^QzwUl0 zV3m%2ypO0ZgUhuw$A`}jS4Wx*D8zKpq^>Y*P|g}v?h-zj={v*YZv^XAFiXPdc>X-8 z*yJv14Og;eqW*Gx%NyElo|6ddiwhOKm&}bYA74`sZ8GgJ>!GkFpF6z2th4~M<(c>#w z+j0CJoVWA+SywGCt|@Gk-q&ZNfi}5LzdbdZx1cPz5*L|8edB|1V-_f2SU7>lWVVH7 zUL*4ewq0*{J|+Bv>b8cjPv)X@!j9(YAAGeZ78xVcxGkoe=KoOX<9W;p0b{K=2};%K zFN)V_VnAbpYS`Afz0aRjNsX?J*@`xt8t2UL^917sXlp;8L=~qB38}pV^0^t)w7(nb7UWzezTtJ|H@Fa zZlgLaeG((+zTTX?g*&C@th2KB2tO#5c&|;SUlLp! znTB-SWYBNk=f{_SY~obnJJa11_HqOsPW~11-Me*J?YQz|)1Upg@Oddm)((1`OV{1= ztHgx0&Ccy=RlMJC@mCk_A5bd`zZ(^RTa%K)i7&pNS<&9Tu2ji!5%46a6}d0>{PxKs z7##E7j=Crm5)sK?fLcmFJ;vL}zfJ6}7tw30rRbbq*eP+wcF8}Z75Os}9@YuR2t9;q z%d)C+vpJ#TW{*QW=78>zM+jfs%hgSs zO>MuB3068sLlTp96++6t#@xB|=Kb61cAfDR65)bRcc$95feXe1S|6tMch=(&{x5g8 zqqg1cn?E`Ko6`l`Dcq-m?~L_a<7%4Y)FPgveEzRS&7%6Xioy%%sg<;=)iMLymyN>A z95wlWM6MUNTXarkG_U(kX1U#78p0*x+BZ~kZt~p`)%Gq_>UL0yF?|wc_m^awx;xz) zUz=w6J1?r8|Ij5^T%+o71$23DVQ-m$KNfrF7UA6&1y}wVw3}X*H05MHy09u#z^To! z$oLtV%<-_;vi`P5^}Jj9dgsY|MJRW*B5|wtzXD1#+c$VvxKZ$Pt6oR!dP4UVaCE+% z9%pBe*E^RPx$`SHbB{ip_z=gI?7=A&(U zj`R>29TiOedjg@J6b>lH`V_ zle<$(GS>O+3`o<0SDHhQ&GCha&rgos)=z8Cn6?O>5WA)v(a&kcEJ^FUqH6s%^Dnzn zlr`jsSyI4`eP@~wY;v{-BnX|c5PrY9T4_M?lwY6Pwf}Pg=lGvRoT-(t&DRyLo8P9} z^@lhYenhVyZCn>Xr8^ZUK6;;Cbl?N|h3S?9*Xt532Wq1>JYTEBZ88lxQMzW?F=><@ z*RD{t`H7@+$v&&cEna?I&fTAIRs(Jg2X?+{Zz#YeV}4-XWYncDXNlm(L}ByV&UJb}W$9;F9C~$+vn#&muUD@9e991~SS4xwz54n#i$acz(VK@O={tPy z9vX;P)=kcKVn~WSd2edJHY8Yxb#O{hL$V|z@y`zF>|^9xuDKMFFTV1ceUkKJ;c3Ub zkxIp6Y6Ed8wZhrbJ%^NiIJ!*#EN zeeEIS7h$X^-u_xCJyH*0dNlEv-QOP+e(YGzi)Bo{n|rdzkWk#F!db_LtM7<_jUG%0 zRPdT(SwqE)e7BQ3g1=o4W3j2TI&>BI;rLn6aMlM$ziW7DN^Ak)Jto~6O}fm>xo~>B^E$uIYnnw`yIdXlvFdqrtMRzRJ=dasIErqY_=#v^k&|4!{C$2tTc0M{^a^mr; z$`P%!Cb1a(AfA9@I;HRYnCp&5iX}?7<>M2TgvSSIIArFIZRgZ!|Hinv+4GG0qsbjM zA@RsD)VwRK}y_J=r;8;ye^;v$*L7 zR#GJAvEBXuT>53@*8|p0-PAyF5%WR0JXFg!CWBgTQZ-0B`B2|dyfkbkOkJsT33*&# zS@?NIUTeof(4h9Qhew=xQc@qsyYxwMwob;%6__$0R)8ZF{n` zE(4C5tfe|KZma0-wF}9Lj~4$B4__GwmJ+v>7Tehphl)|0)sgy%ERuUJa&Kd?Czi(z zQ*ZHHGyeo7ZG7{WYd5yGq~0WkkW&wL6NkqsVaaU@Mvd$Z=X)&hhP3+G3MvZmj|iQA@N5jjEwB zgQQ+9^`(pn?!=DD*UfmK$y&1ZGUzgezKPvR0rr{-N;yZ|@sfmmYLIeOZqa4s&&L2J z)fYx=_T+mdk+HF6fci}$p>S%a@_F&y3Q@*eAa{EB4n_kq9_X3~2}X{~5p!#6Yn9TQ z38|^6hn;r+-Nb#3(*h(IO16(+uB@$dj=&wKrmEz^oc{ke{y#oAfe-iLeKZ`R5cg5e za(I|hS084<%(kmJS_HSJD45*RBatHq|L3eejbw(MRtIjx57Z9&p-f~49!A9i|)!dhn zhQ36HW22d)LX?$7hUAw%>QkcI;@p;YqUw{OQRIi-@=t0Qs>U9Bw`)&W@LRa}$j7TM z&SDG*uPhVMJ%*$}$3=KY`lnM$U4|qLbdQ#nJ*>{F*XK1A*4Qk8-7O03$vdQz~ny6qX4yWG8eD{FN03<5eGIr-2)$&+*AhI3;=_wJIaesebB zc!|9n$njI06vk-n2Bepmk3z3`FwN}d@9ILczHLMr22)2%GzpW|ku{doL2s9HZM{SM zz_Wswln|Up(tk1A(54?n(ec}s&E^cR3w*u8h(?-7eky?lNc2ls5O4aa2i02%MnUxF zfXi}Dz^>PKt$@lV*B~PlUq8;~^Be6_DQYL03DB9_spVVdPGWI;>T8H{h=f8)5(CNb z>Hc_S3SrR{-<+{?kCIY6p|!p+9mM(QJ*yTM6L@oUM=bua%+jtoFS<7!OVL#QIRK2;`o=%uEQ=IBg}mV(m?il+W2>?27~Y06 z>wK$)L^%N}GL!!ba*QXqw_KrWV;<5J`d{L45-J*AWcK?l5$dq(j`&yJJEf(qodvE& zpe6G=YF?&GMZmy!ow$~$Unda8Yh}~>4_-_u&Bo7vu1u}tS^>sNUayu%fr zla=%G!rxs{3)zR^@J)UFrKtPQ-@^~I3GYmAm`Hs(Zp+=|=Va>=ZkB(#{}y7(!^l5R zp8X$Big!1O26`ljNbos_50+hYAP3Q!b3v1P9YjsY;|(DmA&ukwGr-?=+zKc$drt8Y zE7`|AiLSal%HfU`h$dKJBf$-C%iYijcv%-$hjU%=z$YAM%~|$7T-2p>M2j_svnW1v zP2J8E@t+!bBbZaMWen!*s5Di+J!vgY!VmL-S{}C?=xNvbZR-*f z+^uEd^?V0TILja7rW+ObLgOTw^f>L+P9WmM_1dPC_1s2*Xnpzc`gdA^~@u z_D?o~2e_PAr$iA=rPMAmgJco06pi)6Zd2c$z5cI~2~N>_ms;kgKRuGJV^B-y&N`R4{}x1il!e)$*|4 z;?V5t-g?bRjw!LAgpOow#6-)_33#^=Kd9!({%XxJZ-D`Bf?d)kv0rB!5oI3yxmJk* zY<_SXkH)Fib@hW~f`xvyXR zSYUL`9qk^3xhIIZcJBw1@t{nlDu0RhcYAq;`Uu};^w((qinQi<(iUThCqgZB=G)E& zwTmtCmK(W23GCPgSeAiMkTy&iM!GP;I)sc^1^G1wO7-!P8Xiy{hN{gOP(EGu12TQY z*Q+k@<p zyN5Jg7Lbp@LoF^BdL&d|7}D}gTy&L>q4R`*gsa>1Pb|fqB2sixy1r2Cj}B>H^`6m0 z&4JI!E>^ zho@s&`l++NXtrP;LYBXlcLn9%9fje>t*W8E!2H{{yP%K+Wu#+gp=)3I-qpEI-!f)2 zqk|f^$<%RyKWx*SmCAhT(;FLC`Ikk$+YS^Ke=70l_$kBFh3diQTGF08e4Nx6a*f=d zK3owU)8Zg>+Ve{Ut7*LX8>O0ZrbuzFj{HkxNKP16CrkKC~69eBYe=QCjYoiug6pAY!QgOiz6j^~@<#PF% zrW~lVbz~p+J(j0K2%nUY=`OC>h+28LPmmiAbLJa7YHDhXIjg^8L4TR}*&R zUDurXVEm;Gf*Tzjh|^l`NO~PV-nQPiy8x6G@L%k0;SC( z#lz-NxD=Iiku|NPOB{BlJYu%BKI!+zyeHIAwCD)BBbIZrks0Kz^SrzONU%QCDPUy)_rx{6X^A_xx)5>m!R)6pP@#j6Z49%FjJ&aw6TxjRCg*|!uO8HP#!26w#?TGuIovuSP&O9wURTsDg zME9v?R0170$X zw~#LPoXg8_Fi*DFA=ZPGX-tq!+sO^reurM$7z=F1o z8Bv}1#-wp&sM4k}ItVfI%S^4EvZPS4JF+{!@i3i{b7 zlE>S^C%eTp%KdJzmkz0$pb`y>_=O??~ll=SN$uf7+Ww3=p z<-1ES?vh#-uox@YU53R+JP@XqM}Lw)3pReCm7vP5ezy7~y>vL)d$p-Qa^iXBLZ>$fRJ%r+%GnNngM|Hqd{bvo3}XgTQr)geVQ*8>I@6vyWmI;TzmNsx&3l5?%x zQ}vN{`_6DSvu#Jh=P6&hT9Kkv*Pwz#8sz;CAGi#EEk>&9i`wir(PQvOVp(q;{rWfk z8Bg_3CF48^UG35_+6%Smu%Xml-i&Ak%$}w{{f@-8?>NXsh7T|0WU1(qK2tVhIl7n6 zQu$BZK6Mm6R^mtf(KqU|_3*w_m*+OY0320X|99R&xf_J<>1X^gay_I_w8D;+Dp6hxFwO;06eYez=0u@YPoxZt%xaP$m^n*X&gwt6!diGOC zO>#04q*td%n2oWqv9ln}Xjn_&tg&X{P8({%It;1h%|usWuWLuQ7Zd%6ZvQBKG%zHY zN$f}Wh^i6Nr5qyAWuBjn;SQZtC*93gSii)$<$XY%_fI@K9Y0v=TDBFM(ig$$F<9<) z12QR)p9q*Q(^0RkZMOkX(*#K-XjQyHa>8Ati;SU&Z$$sCOof=O#=?!8&m(0~L4uNL zfJdB>;{_XK#exjb_@2>L3RMP~g&H9wpxs4Be=tKZS%~cfXyZK2WL;*jyrW{osqZg7 zCDIs7vD}3}X>d9hl1mtS6nPU5$j*VXW2;-}%wQ?`Llm|h?jR8~D3_x$O&1PxKvgPy zo4v@GULDoO#4Z2YLOGCaOn8syQB9Qh77246T$lp-jh&CbQT*{5|H`Fb4C`D6?TJLg zIf*Kq1kU{5IqVPD$0s3g`}*x0vMOTQ9vYxHfP8xLW4;B>9QMa9gTT#e*&}rqZ0zmr z$1g%aKzv3C`#x>kw77mOdH2rHr~88IeN zEK~G$1!kxVGMu}7?cfY`Y&f_L)KDO{e+Y1q{J{;>SAZlZYkIWyd}xEUB33n>cy|}G zjYjQ$hs8t;w*4MWJO#mu({+O)OAn@(`7E(EJ`YxerCWRA(Z0K)@}_xkBF+OshJL;d zNlE5_lqI-}8D=ZI;Z0A^(Tg|3*Ss+)2c<40+GYxzXlA3B>x$RCsOBp?l_z{MAVO?W zf_3rW15EzgVw>MUCPa)STD4Qb?UD(9=z2B=2Q3(KjzUAO?+~%{4qP*kjrl_T#`7Cr z07k=hf;)BAg?^iI78AW)XY2R#m}0_9%3q2McFgy>1l(z)^Ax}Io@=m)se2F+Xza_(FCNm$OuHb}bbxi6`2YidsTc(HLBC ztf>v+(wA>s0{@G}boIND^?G?8u8`yTG-x3^Ki}Q>*HKe&Bu#_yQ~Tl?=+&I0&u)1` z-FK_1?Ge%7sJDfU>lqjBNLL=&sc>PaVha4j6Y%2$M!axF0_db(?o^Z9Y4@aj?y6qZ zrNt7SF4d|+_dWkQ3XeFe-pGn)Hl-*YxT16J^(L-OPVc8LG~3=H>pDNWw(?N^INbli zr)L)Cp*d4HD3IQQSp*&mK?(1Y>jEXyiCIH{XrGF4hm(?Yz%$^Q9%qo*&`NYQBB7{M zpKekIF5kL8;Q}VAb9|8XWP9D23C&v*d2XFyCq`o!OPUW_s)?>yrz^H5)yrV&y<#UI zWTm}cPMh+KoyzTCnMBXhFH3oT`WfBLCv}Db+WOZ3+AzI^oG%K|pUx(LE#wTm@PEKI z3r+&SHqkJ}0h#ZD<-(HJ%V>#ac;ZIIJjZCQxuaa>%R)*X^OUHGnnB#_o#jt7)7Q4QEr1QH*#cKhos;w!9bK#;?H(&By8~s^cPLm>a*G`8QosUI~uNNuUkm%ID$- zn_v$#f(G*kPy}a(xzFAJjwMgeZ$n++2PFMzS%uGsr>@YjPAOVSpqafFN+oiQh?q~* zKE5O#*(oL;=GI2&N6E4~V9?g?>x{>U$0&U}1!b$T@oIY{KSJ#0 z#7$Y`>R!FKcZp_aFZ$Ow-n9&8LLCTd2qq&obJ zNR`ytP4u$YeVs3g_`^1bNgO}k?JQx^`O}~GnKT1`f}&8&6ipO>TngK9ZdZyohPE;v zJY^$7$*4#h^~3jALP{#D0{+ZcFu@V>X_>e-cfs(BrovH<>!e$GN6`=S{?24 zV6NAaajt`+9UrsNLMsgr;&0l%8jA)2rzUuarXV6~R)-8#co6qS?1U}<2<)mYu$1f| z3j^qdj$JqhxWE+H@Y8oXIU8f%Q49Dz`Bo6W$no=8Lz_d*!yXgYpa;k4yy0Kn)fR}+ z#B|~{fp5g&bII;|KobL!kU2iAsIL4c2Ym1KF|`|h;lp{JbgQ20>AmvE$L=hjuzp)1}uh$kbUG( zj#T8BVwO%Os|8IojnT%+DZXo>=QqcG=8}L)=T?Jnw_YQU<;`pZ5Yv6&P0D6}-Rt*e zcEEoIax?2kAGjr`Y`c@H@^#nzVaNd*?fGyP2H|jqdhE!fq9QyH)X3)|4X|5>WdSs* zOu96UXl1`p)?;>E5|Z48#@NM5Y=V*-)H5typV}6|TR`m^4rDj*+6N%z2hw{t6bFin zifWx7s=T6R?!wHhpmO$ZX(h^?!)!eA`@u2m&UrtcZfYUCdb@2qhsO(_? z5NBiIGr*1Y^`m>}vvS_A{6+TSj7-%$ZB@582@(DicY)mQPooG;iE%fxgR9bCFr?Az zM?!odoRU@L#rN*rE3!=oKN3QI_U^RhL^w-&N;a^ywu_xY*0%dN&m9=0$s63Oaydfq z3Qg|(*PH(Q8Y>*{OmRMb98V?z%t6#czZ`cOr0Q+37@c08#e69KW|?*qM1Fze?DDxW z{+FYV1A;J%6SEDcmqTylMZx0)fjL7LP7kMUNG}lt%}8$e~Akm%iwH{A8?L z*jh>q7~LeE-FoJb#ZRZ>$GJzqHp8G()oC`?@Vz0Z>Z15X=v*9pKSiF~12h3l-e74n zGG)(_Oqc2ZnEs}s;b|22rh0Cp6IcFN?{5-6FA^linft4QnD-qOKq-d4OIY>+~Jc zA=NR>_uap-LQ?Kr9=cNaBM$2&xzk7t8H^9@)lg{cr5O>2=jMI~>yoZ8lY$#7Pxc1! zRY@Daq^?Uc9s2jDr_Ns1+xIum1gixpJNH`%g}$%wFafsaB^>!3;6-hMXHhhPO%N>B z=&?kW9C#>wpv$1O!48#)16Z7Ns+~22AJfk9}o1&=ky|dTn(7{))w#&>(0bB9N>4h?IIM#>8qW41h3m9$G1r}8( z6np_k0V)0%Z9;d+Mu>2K5CHD|0d$`Mi2Uf7DdJ07OE}8_if3h8oTnLwC&cgA3@FxZ ztTK-?JcBLdtJNnRw)seO9BCDSdiF@ilo5eh&C|p_fgTy6_Ng3BIKn0+y~QPo#>AgOPzeQG}@QkCg&}UAsAoaf){PqkC?3 zBuP0S*YF=GQbI4BAL$LsKZ7Gb^{bDPnz2IUCPU6VJ& z@Sx$oo}23$gwzXorvk(n5FQTMQJ|pjLHCm5GC z`kM*{LIuDRufVa&eK1P2yOCe_X7DoDLLQP%vtco5O+XVsLtOEaf;e?Z(S5)sxHy`4 zR5$-8fe&#T`KvPK8b-h>Ya^EcHg3gLP^qWWDAkcdS_jd&1F(h(50Ag zaTYycMUO?3uhXLk-cW8clTwJmhNLm%Pl6XplR9ftL?B*6eM6cFo;K^N#Gis7iE?ck z{{Rr;5Tq4wPNKXQzP>r<=l3%^23+9PVCEHtERiNQ18^w<8Yvh6n4L^j&V2Gs^{xuq zWSjAZ<*m!FX}>!c*6<$8wl7psEbFD?$gEfpmZi`!#Sh}JXheik;=YN&vZDj)HKu`H zDP*<}=tPTN`W{{0#?+-~6iHVpXB4-RwbjRe>kHdouFNt!G`OHUo-`K5YN^u5_r}*? zg_4qbX={7X`Jy5_4qq}v{JNZI0YOyTWhzHZP~y6rNwUetwAz@>T~sYp+?MKiwia`Q-+velha6?eIEhQqb$ z`3WvNR28PqVWu0|!ljwOYP|ag%3A+o8{puWaCCl9=c}(=UE8mLkDZI16KxR^1QgHVzq1O!zZJF7f4ZcNF^HRlNxP(jWyz07G7mH zKA0#6@qdRR9nRdGoyG3vz&$+oJ((zrr3n<4^U}wsA|@+-#a@sE9P<(oQ-6gAInONK z5ONm!irK$G{6`u` zdP%a0XPN(d5T@bEZ_=u0Bi|`OeX;4sO)qE`>fe^RDV9>PfHWJD*dICX(ah#&WJ9P2 z#!WUd3ONp1+AVWPZcz^b>HI_nx{nS|*yGmP&Vj80Oh5w37Au!K|FQX!?}kfOdDu?o zY_i`yCS=@A;{;+j$n_a!<>isJjg9ELqrnfzEU_MKlzB93+0ErO)trB&iOmtdU5Mas zj3*GyBwtl)293uQde;vZKG^wWM5?ieR;fcG5#pHUyUz^qFO$iIC(ej)Z&(oq`*UqT zXTG*pDw!GT@MR;VPU=;m#k1(LIM?VCzjB(*cVXzO$u97|x?=JmlOuP1 zk{O|~D@Y&`HPbaxO~wUdF7(cB!g6XZae1O{)nZux(Hv*Bkl6Pu(p8W4py2|)_T`t_ z%d@2Z*Zut^z!j~|oNPy)5>4=UG2W1?Gt4g-FBH(MuXKS_j)3VNx0g-#U{MgNFST-hG7 zV^$#B>v>9?j4{%9^LGZ5(NkUd*D~ur_#2WH*u}MEZOuS|vy8*q^wx_nxE6-%8KHl7 zWr4wp2t-;qg-3vECR@lKTfG8J=5E2^_M3tdn*)@&15bRd*3Gw-ga-W3 zXyS#~=*?f4vAlWym>YP0=w*rV76lw$hpmR<1}G%JJdcv~# zLT!)l*_LN`G;NJ6k;$!0DlW}@MHPVsuofCzWG(DGc4wg2Mr<@utxCy>$xQFSvGPoJ z&L+tGz&9IXXonDJ6RG9rH1@%dL~v$A@3P`ti(y8v8hn--)G@J|I%s>lbf2*lIcIDW zTaBW2P}Uh{$_d!pNf=H0D8Yk&5%BEQHAFdRkg>Vsv74W(U?6goi@RX(A>*8f7K-nn zMN-bw)3#fV?2(oH8k6iUAA#pg+pbz&dZuAe><&T3I)|$vIC8(^2A7C!CCbCFh+gZ9=H`@NI@7e7t^9smFU literal 7424 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 Ox}#;JS)p++=Dz?xapyY# diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_pop_timing_test_local.png index a7c5f8987aee65d16149c328ed0f80f32c0c52bb..fd52d5a16c5f1a2ca83f4560ee7c8bfa7ad72f63 100644 GIT binary patch literal 46440 zcmcG$1zS|#8!o(u?k;I*0RidG0i=m7?J*T{qiTzArp&AYWf!9tT$^FRK^s zHau>gc3FQVsUe6FQi03q`DOpf@iioSPC2kF@Hrn5iSiQmnTZ2OhnvGO`X^Ok4GUWh zTVG<|e6`v)YOAQ9mfSmyudE`1RsK*bR@2~e8YDBR+WC&3500(Ya$`N6T))k=%l(>Bhmd=E1h9P4FCHkRwVgD>HqKNT=GHx_g6U# z{=4|!@5yR^!a98Tzo+?z#H$Mb`)j!xroM3SdRS<0Un(LA?_U}Vtv~Yr_ZK|)Aq!9J z?7V9}-kJ#Uy1lt{yZQHTkT{_^RmzS?Agvz%{)YUN9x{p8b{J0iKoGIR&CN~6-O(uT zXMaCGd)Ug&q#&_*0VVt9P+EMp^SB*?dn?t-;2*3UQK_y8`ZGnPm z>f-wP&XQ9S>gw%PxZX&!@Hsv|zk7oeWOXQH-2cDh^47Vu$7*RSFU0(GEl!4h_4jX+ zmneN4k{uVTQI*9#y~yzJ@Utl1j%`k~p<{(cnS%Slx?S}1_s6H=w;pOEl)lL4hhFW@ zeB?$v?C9vArJxXQ6?J)X>eu}F^A-npG=2R21r2%A6mS4g=_jsG{Z;Z;JX08c1 zbyUw1#*#`~&Y^lE?haRI~OB>rmqE5D>9n2_6&TWvJO9)Y|)c{rLS zDq0~JEXi1SNrd9v9K;uGUy_PV2IEiFG%Uh3w_z7L|C7Bo8L3X>Ef7Ua4DY# zq9256NnfHFyL`L0Z8wiwS+V3cuE%=+{{0iK=at#S#Kbk95L@JAs1w;+y(s%ANUP0% zP}i6Qa+@EKoG7FQraw0qfk4=(rE)*m-P?1SuCnMfgU@_yMn{&HJ1rB++_>M)*I4Cf z%#GGYmp`v6Fm7_5Cid~tnDodlzvGPzeZ_xf3>*A_4YN+lLd+j;K>VAC`;JIu>dE2 zd@QJnZ=z^=ryeRpEqy%dNyk(MKDscKt!-?~=Bp&J6-8T}21rrxm?Fao84AqX1DZY7 zFm!Zuh-hh}k2Xe8AxSAIF*df%Ozu&W2o4O{Y^A~o0V=$j-D5+@0Q_% zeRT@o>ABI=#{$w#Edi&T@(K!vUqqJIFK)AQa{R~ApE!Xb81>GuM4OmS?tWvK?dA)|$Wc=jEWq-WbN$-pz`T_iE{r-cTmk_>(u91H?l zED@2WvAx5?Lo96U?ziZ;?$>87y)!__xZqVI(DE`qZP z^MJiFFo2OI;^sQlWW{G#V*ZXc^2Y$grXA(y9vB z4J=Te3Aac)lK~2WDAWCo<;EX@s``^Cp&~15@f=>i))R)SrZz$l5^}epmc~Oj z1LpekkAb4%;#IJ4+VopIH+~Wj5TxkuD{4UBTK=37b&*2}yPoK>;I^Mb@UZ{>+y3Iq zSa1ZH#;6r4#cci;7N%ccTT9En(CY2wGLV0}0DM2(v zGbe`FjI>?&5HG4>-x%hXfd+JXtEm$Z7Ex2-oCQ7hAKa@aHYy5t zB>5342j#iRSde1kho`o&)|*_^F>L&gAMcH1i+R1&SgLzc*)!X-`tnFJ3aiYbQ+hl{ z0#l{d6#8s67+dq%cYg_Iw1BBq6b+G+lM|97?rjTorEonjW@lxkY;xhbiNCKs3A~NZEzPCQH=VOg`n=Sn_#&KFj=|uOpaq?C8`Sqj8O;nW-YaeidSH2 z`gqLSnuq?^KPu*aJ2^Bgh=YpP$fDv+LPGL`nVEU<_Mn&W8+8muL_|coq(6VLdd6GT z6iyhF{s5HVQsV~BR^NRBXdX<{!dQmDT*uAPs2V8=N#$d+RzZ!uRpSR@xHxN0QHR8~ zEOHs&I)GsqudHlCgkZ`=wNF zIHM1d*rdY~Z0()FI0g%|#73e77f`l* zU4OO;edUmh4g#gNCW?|bmlAaOPR7A+JFmvI1(fsqOw*+e-h|DEUtIXHu(H1Rk|~rf z=EbHION-6UUgA8MEAGu{+~gV~6?pdHlSSvPy}G)(Xe~|@=a9*mIg0v!VMSpX4C#Mm z;WLdci$7&<4#wcWm5j)GBcRP)$;LB>r8uR0=YlP`CV|&MLGG)45hTQn zE!c#R-|-g_x(xrfRaLy)*hD#+cK0(z)lO-f!Q22#9^N?l2vz>_xakKwYhyGm?gni0 za-ZMdTwK6XEHfgZhrSjn6V|)_r2hEvqcF5k7A5v%$Vl(UTPAK2ubN4wu`&2exzk*w zlST05#wH8~uhqEE)F4Jkd`#WB9wcf%?LJ>F!Uq+^27Hlp0TzXu6INTc7z)YkClnb_O=@NhXf042q3$a9N#4m6u#cU!EnuN z(V8+*mxoM?1{KD83$-?CT!jbCuXaelyWz33v)4O+CpkMi^ZQ-VM4RF72r5@wrm#!E zH}1d>nJg+g1R2bbJ3|*aQzY0@W3(B`$*_-6;VPV*j#QpI#cLt`&F{qRAe*9zX*%! zFIDPJLnG|diY}r{Kp97tawEQIGj*KHUvAxHWQb(pha_ZtE}yt#EJ%UtrDfC=?ckuj zEg3ZRqw?R%@#W;N8y_9TW!K8(_JkEo?|iBg?1kdfFiHmPuJxfSP5Q38H1TD}1{&bj}oUBk4cYT*(1-mg% z6vn#EA=3+LMyb}jVWX2p=V0~1rLzr&!+Z0sdx9{!mV%;pQ=ag)2je1QE)Czv9-OSR zNJgWfqwAx^^WNXZ2+W<23Xfd<>YX0665sn9NBasn-{03~2@o}3faKj3B3cGSNjh^IyrxVz~^rpLqF# zh$;=qhbY~hDEjuH8ET&BMMOv#S9E_{i^V<6fQWqd*^}4PBm435=Onm>`FY82tbm*J zfVZ|ZmzqXV(WZ%g;w70pVC4a=S{ucNFDS!PH!c98DOQBT4J}$<4WCUGDsQ~kldm+c zG;PTha-1n`e0}ZX>FwR%mk9dt%b%^@#pQn=`c^5b2TK>W$-+|{zkRxN-I*#fQB+ja zAQs}vRbLy3@um@WPDg`4b;=9`t0z9OQ6*jm+;PuXIdWS7s(?wp+*Ap(Gsqq1C7pCM z%+;JMSHnY00#+pILW&hh!c^-35Wv1kqq74x^!n=LG6yM6Q3Oryyt09sM{EDc!SV4h z6i_KC(g@c-77~f%M+&gd9PJ21Ubp#&A^*haDo&s@Ha1qeb^be(Wnf_7g6tO? z_hd~>7KMg~hegyDgyoj}sV9`tAqJ?q1Sg>wQWZGv=n*`?7OqE67H5E;Jc3L(T%TEG zE^ZAl*}-SCG^EUVKA?Q1HbsOf*c)-k`B?hG69PIy}(+7WSa%5#-wg!Ixu&HD5c z$9bX1Kc=RpJyTOt<{cq-xBZEYcAzU~f~Iu0-?SX;RA>;S`0^!_xbNS#>#jGbba~aE zS01c7^bKlhzvOJo5KBk?fpObxz6oQxAWS*`GN+AG_N*LbJ;HZiJZD@#)rQdajIjU%lAI}eN$~jttobQ?E8|iUah%AK zLx_v}ISACneH2vG&mlL5gVrAzhQO5_j&M~C-Q65(wV7AVK^%E5@itQlb)`e5Rhpyg z$hf$PYH;P()5Oe5)&|!>2P?3pfZr9r7aLuUg?VdP{i4DCUI2|B?}4EG*N)EHt8$HJ z*$O4o4s>*MIT=>DvuD zh}GEt8RHNkT(1={`OhM*KjufK$ljKhbAdM?yI63l+G8sq7|UL0aB^6(;)2FHf$ z&-)#99FpoSVDH?oY$^tZywAoJjr5*>_lUoYZRu+bh!qY2#@Uh+MMt3RctiF1>9s-z zy&Pa=?(0LuQP-?&Yz6+uo1HmQfj*pMFFdOF;EKTynaT_*7Cf1*4#9@}&dG{PuK=F{ z;*{S7;1zC;&U_+%2P&3n+q zhZk7LAIE4D!kbL3OW)dAt1KLRs`ER1i5a7`wgg^f#i-8qGSjEgtl9lVyYKSrbFzbZ ztJJ7>f)Mh>rae<629XAQvX~hCwKL^!3C`J6?nq(*B`<%*#zw zxFA{Ns0a<*8ovn7lM?y`b=cXe_0IrFwR>cw>=~$azc&^As64#A!?LnW#>(`|0|xs0 z>HMbrP6PMDKFRl@BK);Zts(Y&bt`(^v{5BqC0W@nHVKK(e*rff$_~B+!)YY~=J9N) zJ&=`CG8YqBYU**K0s2v5U7eSPQR+`vvp}5$CXQ%&9F@d^h;7$buU@G?efsqM%#yZKz$YpJ+vww@f!GHE1OA}u zav`72-1-eXs;_Khm7_=1G=ZoHSVKZ80w_g^5CQ@dA`iCE`k8C-RVAO2Lk#@K@l1iJ zC~^ebuUZ#sxqV-5jstZ3*AP(dDKG+~KRWCt=xL>csGzTa!PmPjOM5K>R_6xx*>9$oi8-|H|z6Tt**E$s4mYk2`&*VDoS#)8%%>cU^4f4raILE{h0mDlt<%uFM3 znG%f~o&5!wnXP^U2(^_`FQtSW66WC8wqNde?G${_jafLJE0t9hwF%_9a;EZTKA!JW zh5A&gUah#huYRD1cDu`^Zs2kme6kk-2s8!2j>dT}3x=9jL@OSW;j0_3VXNWjwviMydu|F|LqXr@ zsM9XM{xl)idrjm>`+s%(ML_ELUF5Ynb_f>yz1%fGGHGzULkWoP-pYzLr7em=B8%_3 zDIqIum9x9lP%n% zT=chZBjd6l$B*r-S18+smAv>xB0U1^(%ju+*Ad$`5Qf(;Id}skD17#uktsyT(tD(C zvzDBU4nXNOc8yH3n?<+IJ*I-D+)cMCK!Z^2C&qI0x_{wVW9&bGXi=(l6F-2NoSf9>3cDER z0JWzA_Ohzg+W-$1AM1`(kzprIG! z!%9jbN(GYZXT!#_D+4ff(#0yYA9Du;pr$*&_~#6*#qg#ZDZ{H^7n#VVOWq%kZs!h9 zPx0wRTul!^bN@RJyoV)#nTO);p*9J`5Ze9K=wFCK>?g{26L@`8hHr66$$m}pn*vRz zZ|GmqWVZm6*wRD8+gohf5_0-Ri*_JW`f|;v7hw%j0;J?qDH-oh6~Hq~s%v%Wuon$~Jn04pFkGh!d{7RVr-Z z0}Ht1mWDLp!=!y|qr)`Y#GCGbc5^l+&;tn4F z8#*iqtfnG>ngctp|9*zU-8NZdfuN?NQaFv6Z)U_bkb)qunF z>siCHciR6ckwQz_wc7l=nn3DO&Xay^88Mp1yNq^ll*AcKAq4+WQ&aOGCp)_>zj=a= zn%dEZkE+bZ+IohufI5*yUncm*@AJyaN@_9w-&UVJV^;uNEr9X`S|5&a#gXpNScb!g zP4p`DrmVZmFS=S9aSGpYTi#@NT%9z74I1%6@z*%XACq%{Fc~tQCnJLmAxm#Svs#oVrc!!838mh#yP+T< zq7I;;rcF;xwW+3z7;7>=evA+5c&qjlaAiQPlHQ%KSqlWnTPy@9y7Cntj{zl0Zm6p( zC&C#LN;u;0YZFdr1h`5he8R4Q#=aHQ_rDzqQf0>EPH7KsRgPI&I4JKGx3k_7>I_ zoqq%srTuV#W}&*eIwtJ$5*uv-=W@j7VZkP}gh_){#1{#N?SD9RobMl}p^AU~^hHwI>FuUUFA@DG$a5o0`bZsdVopG>%eqn=4!AIewue+;IUL;=U$?F}bf{_Os%CsQimMD%o&w^Q)Tgx(*}0&;AODj$w|dNYkM@#SL? z97D!lQ!x0GV{etjO1I^X_F>Q#GWE*zhF4brPg^#twv=lEJwIotJSI#I7@&>!ezVz_ z;)h4N#p*4M_LBvTz+;+=niPDKZ#d*zRzYnojv}ke@pmO$Tj!jGqx)7U$R?1u$8 z7@;rDL2KWa@;k_f)oSL58jG5dAg2Ae1$*9~Fa#7>vKQ0>GnrwoOn;OVssu=I6Ihd^ zd0~&nySlo50$3CnNJB$o+8&_)_vh#HGO%3Ep`thGNl8h#>TMK|BhfQ&rn2s_S(xD; zLMwSD#BXg!Z__lEoz_EdC8dD|V0IqxBuCRXx3)H75fI$|3MG`T-Zq1hcjCb7F#MBH&$`IpTY_paH;}47xjGOL+K;HT79i-~lerA_{baSsukU-`gElMFK<4#g1c<29nE2F!%-r10KIXCi1c8YFnnrIL zx6x{9+99xDH0cFw$0W}8m+u-&@0F*dkk?_;DD=K45G6+ea~WUUW9@^}Q?nYd^xkat z^gadJM!?x0e@CF>(PfBTsSMHp%pOxwQBjwYqOS;zV}y1;KnM_vDUd&4Q&UXWKLI`` zcfiT^o2I1zT$3i(Fu>e1Mci`tB!SJj{q;R+Pj7D>8cP{pGF2S6d}zkLudo2xU>UbkoyT2;FQ2+Wia>qg-%4Q;Nap;*CpiTAqSsRj;4CX zL8k)rZg#C4as4>}SS9-#z!1s=T%YYNjoqwEPM08%yWi*MUyV#i@9gX}odo=gQ?yBv z)h59@d~w;#;^za(ILNIVU+F%D{|mYnrCKa7!K#NJjz5% zq-Vys$u@lTOQuycH8s66T8JSnj-?zW?Wqufz|KF5O@#NhTMDOsEu9spV>{j5-BA+0 ze z>q9WG;NruI)w=Yv6&`D<ve0a)R$e}gU~UkPvs7`Q>oLlZ2y zx*u(TMX@`8pC)PLNw?R3a3)=kdz<1Ca>aslZR6?TkyuU+HWYP2FRYV2ZB& z=Br<*fl)T&;YC>o%A8s@VBW2O{yb}m$r7;B-1PDm@4*LjV`(TDGcR_~W-z8*bDWih zWeAkl5-ISwmr}$;#l@+CJ{2PseABF@qBSbywiL7n1QthBS&-f^hRnVU{`c;kaZyRh zXMs9);s=UK%%GQ1i={J!4>GMqKeKNGX1Z8w{qMP|yGh`I(@5>O8NHWB$D(3Ui5^bjttXmqQ1VJG7FnaxhK>!Fhfn*aQQ^CevqwL=hE_4b8cs+(H!i*mw^S=4T zp!`QvCL(Kon~`Kr;|d=L(H$Hdd}?K7^(5%R{gZJ6P9n?0M~|?T~w!D{OpAg_U-(rw29U9jHqYyKNH zPR>Z*y#?=opv#zx?dh7%0HClB<^y#kRsSj?hF(gX5!m4CU_H>Ysw9>~h!jdE>nv@C zKMkAeKf}|jfvubb?zj6&$oLQ?B!z}541yTS-q>$x0LrY8_TkO4Se~KC5va77XLeS( z3iPlmvAyZ{3Yc?%K8kd$6_>oVOGk+yY)GG{v(431UG(QW7GkPpXNoa)G&^9}1Pi&L z%(Uf5ZA=mlFmm@A*=QgzzbxoLGD%xo`zt#D6Qy1k2QOajEs*Et=7QV6{QIK?m6x}w z?}31A5IsG8Zqd{yYU^FMM#EiS&j&_fN`AqrP34q>jrYXP#wZuKPq#V0e*F?l)#v58 z$HtR@nu4wLT40Uq>TJ*H4%|D>#Ly6;!8?_O{=vwWduE0fs_5g7c!jXfhV4H;j5j9xYZajNzfe_4X7eINFU=p)HFp7crnS?bt_3Y#9Gq&1B zq>QYfQKda=+Ta7*2!1SN5IGu4jj)G>kT;F-LN$E z1*Wy_e*1YY1LC>Yf>zGaE2Y0Z1^nv#MV^dwBX{0p2%24zQ-BVm@d*ej?Hs~^_63ia z!kQpNCuayjHB^UZv}`##nm7jkT~37o z2>cBqfSh8-B@S{XHek$3mO#N;gQZ*8Tg5jh-qaLSeu+;=@W|(g1I+ycz+ZFI_JT`L zTgLY+WZV0jr*@uO<8*$3fp(f|89MC&-hwU*dYK>!CjzuF0xs1+^e|;$QZ1bCOxwKx zh1k)c()7D6C|$lFpLIB$z^pt#R)T3nj-LW`EiH9Sf<+jPfrcjfqy75AqTF$|Oc)TF zZDU}vX;qnhJ`+hU@QB?ld}i2;GSp(*_7-nNSWgZ{>ha=8av^cP3JAtB0B&3aEYv&j z6o0v~9nbdXl9UW;yY%a>Q+rcqhAhQR_Bp|SKgJ*dQFV`9W{Lz;!yDCx<=`ii$_(v{ zqenzg`+;cs@k4}0B1;7>Hnv#e=K9*(9i@@vBBQ65`Q%X zPM%mCy%f%i&FB)TZ>#-LF7?JP%qodskPL&{iMi)K_+hQEB;WE719Ri|HkdF!N5Ryn z|ETdWfTQ_qU*_(nE)4l`2#5F?;8CAjTU$G_b8~~YKuNNAa-5P_KRi1-8wd>CMZ2-| zgd))q0ADu1>aPM&*iu{bdXrpVZ(jB?_&cmx$UoPnrm2ZR#CnKGqQbzW7^rJSUN}s# z(a~^KRUBd0AIS7{Dm8^wOCxQnyycOJI}+lCn!38t>?JU-vu0*y7M||zr4Z!d;c*Ds z!VgF-F1p@P&G6BF%fjTv~9T=Yd90!a?f5kInl%?CVEC@;OeR9 zluYZ3P~n9ZgNF1pb;Eeq(RQur%x?uXtLgq z-Dt@D;pX0*t6FwDS|8pA@uU{AWW=sy9Y|SjMMvWmQufjyno?3yXrLJM$&e&uPlnjr z3}!ISeFwjKtK|1|?`2H~z-_!oRs0}?QeijPi)|nmBaYrRb~AtF_72I3fq`*LL_)I4 zKt*N9`S2kOtg3*)xjEn0K!%%1tR0=6_BvE%c%59qnFSsvz|}foD^P$);zJE(dE|Sn zvmVz55(dDDaZ$6k#g7Dxyguh_@^x5Nei#TM$iN0fIS{ea6nj z4oT(vjhLfZqC=pp{Q{R!U@CUpN48R4)zKPoy!plKGAJqxhxq#$*pLeVagDOEv!6FK zHCg1u$GZ5@mX3fJAjb9e zwaJ#?0J5{Q)7#Q=#gggjX4&vtJ0r;RZDzSFHa756d@MJtVFC-mya6EV{n;vuySxx! z-j%n}D*sCmFrOJ+uU>C_JbLy96|;47-OO(zjoD5G%e6B{2U3fFbX)pH9+`kAm0y|AsR`hM^jOQ5oQ!Nszts&|(4^v20*Go--@Q z(mn$$a*Xg3_&F5sKnaIvRbX7?T(YV#{|1jFpHJNCg3DXzbrHz zFMp%c`JNbIrX9S3?w>Cgic!^e`psk%1WeWwrk?QbAUo)b{wc0diGfx5u{Hv@L-XWQO)_&KDcq*56z*u)R|m8?_}N1&0L zI_wBYlUfl&Ksou5?&cV{NS$M=aHYb-pS3ol6MzeS(Zz!VoCK+3co8m_ViTRjPEJnC zZXK7!VMV*m;O)!)fs~0I=`)3O4cYmJapwQE#pm8$*a?831HhkQB_-^@DV*!I;zfQfMeF~UO~5*^ zPA}jVtkb0WMjmvIfDSP1YCuF@$ALipXujFQO13ljpHC)kJP>*%jE#)iv044+<9K=(gZ9zC|*ni^->M zAVD5}g@48&sYI@7&MlOPL<>$n$uyKL&(~)8Egl za)khHceXk0jbpGYX9$+1I{1RkB!$33Ir-#w!k;f`TZtL}5H*1RyKC!G5M9O}-mFi! zs3+wF3`;j(C@p3JtX8`IRO&z$uTS-VfGt+c=VeSBB=}aoIDeIy8lm-q`Xww7nuen7 zHklz=c(8UG-Tp>n;mQ*L1KUA#xY-)ulFH)Wz^JMLu{H!)uYb8MI&SV0r;g)e3c&X; zA6Sd6s)3)xaF71B9ZUC^nmUXqWh1MZq=_^X$*nAD1=0*1 zx4~NFBzcD0ZoXU#%-P<-=m)yrUR?vDm&4_IEjoaKl%vUyNHG+h{{wN7Ly*gh%4Hoo zi42$ly5S^9na5JtBB}$NDNB1$*q9W|YG>a8ssIB4{bvBs9BV*`zP>(tNG%?-24dWC z5YR@JrYaRW5I~?cTzv%2f%$&Nb)^>^js|?$uoxPV`xuggMaaL?We}^*F(?n~wge{Y zPc1KVT>{eYhN#}GT`_O2K1jC0+^11u_m@A1Pf$FTkL!5-Yb8Fz0oN$C#<~wHV1JyB zk|P8Y5-WFF3ph6E%l?+dFdB4yaD7fJZbx7qut7e*Xy?M593PJW6!LGo=SE~{?sYcE z2zHOLN0dGwjzJ@`ZG1e47ao+$9Eog2F)X;<{sC1J$!ghtqZ|;s-7D=`)AjoGqHk%5 z9^{J%?hk1EtgjdR4bBh10IekOHr}9AGkZF#bEVY%%c=I!gDwIN`dF9CorALCS@Nud zum7`F>q^Y4+~nXe2nAWn17%CUrUqez|B6<|L8B@JC8Q*lRxGjoa5RJ#cqbSDxtNOB ze`Sorz^6`@0N_L2($aDsRPU=TAx1Nov*)-*ieb;}XXO7nWJf?uFwnwc2diT#SsL=P_#yk_@@M;l7;0#>NI56anPEw)S>4d|J^1eW;3F z)Sb}<*Z`MR)EX>wn2u#Ay)iRkZ?1}xlMVUJx4-oDqC$5kAo+Mz4`Klx{UXcOXV*rx z?k}8o)Y1mjy8I0)=?n&x@$-eG!-s{3ooUqvGF zSW7W}d|nNVB@0Q<^&wq5OzgBkqft7Pc7I!)!4PQSPpm7Vj0|HSiO(;iuTU+*h#72|1^X5pH2}dvh zA2~#vDn;p?KNCIVB7I7r_X0+m09%P%=$^ONGKo>rg(2!+U!O5to$LsloX%PJ@-O)8 zFG-oVzS@zY;eh&?=;SNmvI`8`uO<7i$P$_Lz z3NV`I`#$_WXvV--0u0}c2g=&swhwBu8Ex!bTbq;Fk=n%~p!0V8-AlfI@fzq^~wy%d+ox$F$S?|E+v4koA^EZYx3+8Dbv}G)8=Q zP^!^Ysh_h5@QQr@Mxko@rlw>N-8R=?Mp)|i{Nkc-4$vBQ*|7oHavW{JJOEh;?nxLSLcpypEK! zuLgR-`33EupqmyzMeiCxc^WT*pNX}_J=L`y2 zA`n{X=_x6dwb9UeE++Px4`9JdjV$5UFW(VC|NZyhj~lR3 zKv-<>Q(?~sFz+GYSkXUpE3q38-h8Ash6#-U<~@+eswRF*OcSVpu{$jLT7dT*4dO^F zTmIcq)+J#%6Y5vp>oviEb$(5TXQ64Ss5E zdy57k?F$0J8#>dS1KD0|Vm7({94X)gv66_dU%!sc0TE6ScyZCbZ$VoD3@aCwPfXm7 zr|3Q-BnIb3 z^toeZxy@kB05lzvs{tPk@Zg7H5)#(~{Wju{*Aha{QM$hLaKrU|JGFRKo&ml`xg}eb|+>}DzNOSNdo6HaQ)|t7TU`*GP zY0(jD)KER@T5D9)@3N_?y|Ti5_9Mj~oapFno{}dD)NkmX>KV9wO%~c7Rzi8^z~)C% z_$XQ4Dx&~lNN5jXlQ5!Qzm%^L@o7*r!Owovz^;_S{xxfJ(eb-*@1js`%IdRXZR}x7 zRaSulWqIwVO5@S*G zQW3xKxdJ(@`4G>CLXcE&2aHw$7z^w%QZ}B|Z$?rdUney+`Q}RTg3y9jY)s6a*$?!y zvgcJxtw5(e4hjk~g;oH|YSPS;mU_s^>9{;i`}_-^myl6eM!Sz9fqB$@u=_4}G*d=O ziVi51fq*qjQAD2C8va$Hqot+B#Kd&V6ZI%i)3n0FKm~4IqZ@c9mm_a?rX3FL0St~3 z%n^QVO&x{@99)m$iYG=~|SHUQ^t{_jGKFKx}Pe@W;c7IH^zmZhk)FguiflmH7YAxt( zPf`AAFK!o$+G6@;Lx~WWL9~7)BaK2ezILu!M(MZE51UO3oY8k%_&J(ec6?N9#FJbg za-V2WuK2yyrfz+Qrp0HE8r<|dudUjdwHE9ZOaNg}`=1p{@bS4{0!3d*uhKLFNbe!L zAcW}j;#Jk}SK>}!%otP>QPkV0^}i4#5U`S8@Ch(56)0S~5Z<+EgE@``2@INI&791l zg*AX8{{oqsATl!Y>gQB2d>!#ezQ@#ZJw4G;o*H4IjncLMePQ8SLqo%B?PB!@bAXP` zdAqw0QB-+=L%sDt0C%z5{0-ES2f#QbjVxEm1GIDGp631p>XiyaL`L=>$g~xLQVt=) zyf*u`?Zz%jt&A6#8yT6fI52GeMp~j)>k-%e^??-J)C)DS!d=} zk}Ib-@T9)#SXf6VNmPi32Nq9HB^x)@HT>6R(cJgZ>^418qwh^Jo)QkJ4vP}M+S3FZ zO0KYI0A&m! z%N!cokc=Mm(CLJ}!iFf;mEnz0v3v&VYc(@Fe9I?@n7c3ssvONZgVc>-NW63!|059T zjqiZWECtT{65p~x?TWNK8I5_o1n!4O$Ho*nj>v zCPRt`jsBuR{2(Su8rj_J&{3@-%LIX}l=F}FKwlYN&c{J;eiGa$uO)NOJUm+*cJkTdM1=s!R`9GP5%yfW^6q>0PW)6;&BQhH zHp7Io6dQx1`&%59-_x$%b)AN(HRmi7*7=JCmb5dDG;95zDpkXoq-7YIJFJ?YIcgrR zQtodGtul1UvsMQHIonS@4HrM&3vN*8@I$t6(Q{ec9skXe2kttL9 z^_3dLhH76~2~MAsBket&J{|fAj)eukY!9H2&_;#8((|T~-Aid^1?FI-ra0A&uUKo*S9}i` zJ1jcss|e_`Z5G>znG=_rga1*X5>n6Ne9ybLr;8KTy&*{*0@IgcWvnYAHd?Mn<5np9<#f>Q6!ZS{XhYv%2A5 z0)iFP;9SVuy~0V1sKN8Z6W|3$Pe*~k$=Pb@3VeNp!X9_IyNZZo6GrZep(73txF9onbT3AZv!t=bpVP;HfXak{HQ7kC~#De4CfBOC@+n(lOF``fwh^Um;&aXxJD zRIqKq4$UGO!bGHDcs{^@#*f$|Z5XqWz1U=xX?VYON}SB`UaVi;d9QT6`StDFw+dZd z-SQhC3~@zDynD*XfsI3b{ES>Rb=a)#bS-M3R~9Y=efp38%S%GZ*vlcCydo&|NnKH~ zmCzG`yW{^AYiDr*^>UAnos6a(U~}Z0#lw@ z=HE$DS_>Zz0YOJ2(9tQu;i;;O=%((Zez*-sZnR`ku)Io28{rB8aZO=iVTDqm$|v*o z)K;PPOu(b`jh-F-nSl;QZeBkvu^6aKyXcfM@$Kv!9#1tihs7aH3o zR*yE&IP#+UkLD@jVSQb2^_7~^W+&}DJIL2q@}XiDlC$G{DG(FnHGiD}@$vrLrOEAi z=bcT)g5e6ei(R~KdzTI=O7s$*mf>yIPc(OwGG){c_<8Qds&Cv}!6Ba1lH%esHFfn* zhF`77$S2&#lpP?BPkJG8hdSDali0GEmx_7FZ!jv8naMw8nAZ4+I_S)#x|bkQ_7WqK z>lKlJFSlw|WFpA!B!ly*Cwv?)dqfpI5;C?Fm6bzIzuV>6s06YyS#acOkwRbX1!Wq6 z7=H!YYumq@8$l3hHUwz=-#rQO2BbKsA!35}K8wpX>S@8Wi^|$e47r0U)CWS2$-{e^ z!GGp!o>M$Fo+%RzK0zV{slQ|;vKXcCT67$zKd}m+S<_aZ{Cx@zp4$EZF_(SR>NK10 z1gbtOm9}4I=pCKdbkpc_k&d+P7%eu z%H^Sf0MIih=W)n6gLFU&Q3C7OWqSPZ?$1wOKRxenU5EP_D)Njc<|yw-&_CdEa&qBR zmX=3Fx|q%BKev(7MuRE-H;<0Xg+y%V&%H&o?s6JZk{4ldsHS`kR8}QP9LqkB3&ecK zw=+D(l09*}K0Ma$YpW?glzlTI)+BPewu80s3@*+Yz$vC=>`s!e_h0{RS{~Y+mbt|r ztv2|a z2ZhC(j&>{%O&&@zwp*eh^A*ZpaqM`Sd>sb$sDH4z`3?>aF89}Tkjucd{3LVFJ$;hB zlPbgCeD-J^s>Hm_$jOmXgSUa{ZvO~SFXaaiVFl9BPa1&BjZLXNfW38W=hwdU8{woU z^r&=cfZFo@xU=sMk3qUe{;c#+oaE8dV+N1~XI(j(LJFjpf&ailgZDK!yjtlt&$nfp zxpoRRsx5eY8RhvLJu{={PHnlz_=?2iM@@kqLVxxrIJ%xC2zcJ$xb*cO(-L6_#Aef^ z0Y_3nSCxdXQ>S0)q4qk`f{*A&mp0B11EPbV)Om(jhQPiV7knJ#;rn&%BF$-_QFU-}lG& z{IQQ?@69z=thKIlo#*+B%M|YVbR|7+?DLbjv5tRFQk%VVTD=y;9WxVuOMAWU)b5h+ zzl-ek@e(PjX2Epf}KoJGQDLqjnCjrjFjo-B5B4h zLqU?Nx?A0tVLPwRJbY;3{*n+R&OlgOl%@oeeakp^a6F|->+MTmQ-dD`W<3cZ&8|i$AMcwKI(=>8Pw0bzljJu7&02a zKJN#>={6G3ogs{aTtHFayDwk>_IB$OX2sf*uf8Ds;jHF+=s^# zPOg3gOhtq&5D&PDihd+K@9ym_0Nx1Gua6g!f{rZm9+SOT{x16X%&Q(=Ew6lV?#wZ z>Nx!?0|nu7WrzvFrpokYiU*?9plBJLJlE1hXB*QcPHo@hW|etN7t^(O1iWex-3wl;vz#|1>qD=T z)Rj0EM>>+Gi9CB?3T-fiS9FXn-ulFxECk!SaGO9xhf16t&BfS*9^F!V>h}h~vlmu7 z4~w0!TrKnn%;`s8W6?p%1A6IS1wbXyuW0@^W;UGw#<2_lRjK|U3KHhMpP<9K%}^E8 zJ1N&Hbo!}w5GX|s1;nm+jN+8z--k3IWALx_y1CI4(gEJH)@Tw2PffCgL}to$_!6Pd z@D1(dmpX6Imu1U&m5|b8pv52>2vnk5kRh;remwv>frc_2%OF-gA@+jV+Ol6eM^A5$ zUEZmt9ZC$ZB`uz1w3l{VS{?b*aMHhUD^$g}7{jk?vSYB?5L8a9zjcr{fbbP<4auIF z7dnYf^^N3pQF*!t6?_vB*$~y2+3vUJ5-lzhNY_i>|5mD1t;$`-X3FB}kPOjStxG@< z=xMwJ8}r6R-+Qqkm6e@~EB`HKssi)cZ87~dOw3$4lL<(vgd60wlwFB3J4cz(@2eJk z%^VOepf&BhaClnL#ymr@d02U+P^-JiXVPngW*(17;)m|g+b=~m$=679@!VjMy5~>t ze6zQ&r#}YkS_FFgucg7VWu>INJ>unYz?D?G0hV$0QyfE~t(S^od%%S4{o4v|W*Kv; zF)N?NMt0t{WEhPY7Tj~yY#psqcN|`?pIaL#x3fOnG;4Lx$LX;1P7^zS$ZjY8yBaDO zYUOmOXIwf0OnL~ee?QGsg4ZU-qS99V@iVrpKhKR8F1PFtw9h$^jXh3Cq$qRiIbVvS z@6l2=$}YV&^ugCI#L~v_s_C#5o&UPMt}>qFO96%}OX`Nr<oY0v3SZ_v8ly#LGc1V&`9~zD7 zUQ@_=`I93?u9CZMftA8>*QTBCy!u+kmOGvAC~dFYeAHE~m-b69o%a_t zdz)ZD#>|wqB5{f^VJ9ZT;&{CZgXFda`PX9S525i_1BF@tTp%~;YhR&oMR}-ddNdd2 zsc41m?oRF6YRB`gT7#HcVuyT;V28RGEoF0cJ5A|B+x(((oev*Y56X1V3~fOUdf7G4 z69bv(SbEHN(Q{`ZQl{;h4CplXTGYM|f%5G;rKLr6hI zpVT;{Mj}snl_*}GwXX_bT|G4d^=X=uA`|}Z8MmWQJ%whZt5#+3?`BNH% z!lD~D1J-HA0KLl|ELg9Qk+sR>#Kh}|z^tqMiMDo7=p0>?VY-w{kyP0?PwpE5(4DjS z^;-3RvJp^I)Sfi6{rIl?IIm)nWmbv82`bvW@s@los6;k5hFzv7f#RY6)_0`R`|0M5 zOj&=^iE+eXExB0W<_1%D_Zw>Aysgm4O}BS}czvL!JiDO09Q_(9F&crWX=zOz{(eYv z?gdiLtm})@In^k&*EoB4Sr*KfuX-|>bF}v^zx6Ha&s7i)jl+5_ceH+6 z+bNX`ymMNoyA~HNp=a|wRJ8wNk+};|;cX@zeRy4%8k}82qln9&l5+o<65Nszy%$`J z<>5Mi0Fb6zfU&n7@Rp7ySe4Z;k5Z)AYi;Ok^;?>f5A18)k@Jt1D;;q(+lZRK7Hf0~KV zf&PD!K(QP6!RT%6SoW=tGpftNnC+2sBI-?aO;5b~OcHl30_r~=8xl5bV#K2kA2T{SJ91Fxfn|K&vV!=droTYKd1MHq&f`;ez|OUg|Pf&F9L9ur1&E z8#Z^Hcf1^<`oN4WRR12HHeIsj(7?+c;r?p2QZ|={3KfGGB8Y-pFXBi1(s_nHz;c6QIQS2p*wBm;ZD%P$G7-Ioi z(F?qN#NBD5IzDgf3;z{^R65?bLE3t$in$G+%-1}(=Ku8c_Rw6Q#g#n1yiBMyAD^h` z=QZ5dw~Dv!zR<}4qz7&rU|qlg>{*iRBk&)RZb6GDTV9{SA%F`lU6$wQPkJ*e{i%e! zLM>E5U6~VlTQ}hmUmVJDc06s%u|dLSlydr|;^_L1u?J;;^&uUh!apiZQWSpu{5f3u zvymareqwZcF5%Q@WSU{tPUAz=MX(8fYFjF{E%2Ms*9;!o)HUrj-Tn>MI^Wh@z~5{6 zOBQKl;1wcErY~84qXaeB$qYRf7NNAiIV+Fxcd`%#E_*9qfplkU>I-d5FgaVGNC4=G z#sluANIm<@MVJTKHgWGQ-|M}ze?lYl`YV8QRK-P;yRPwE?+6T?mlYt{t=$AWX`;b49kp$xPVnB6;Oio+z9^Sm7DmFzriRY~sP=k4s{d zQBsW$@e4zfPH8jFG*jzStt?U`OsFbTTbb=54C4BJG7pj$bE6V%0$LWK(KjSk@i$%T zKlpCS%_AXV_4kZ=cJwHAioVkvMTIj;A?_&M)_%K!W;u%cKaV>|Sfqh=Q4YyyvCv)Gqqxn3+L*&v%{ z^ZikP$627n`*ZuRjh-_)H`V?Uen|@QM6#N%Y^t(KZ#L9APyKxPvSme9l7EeSg0pQ- zQ?g7bij+ebwsL?_6yNdMSJyyrQzHrx4njO)KsFRIMsUkJ9eEzABp0ut_#qC8nJE;dY~jxwGT zCQKrsJpU3Kh0Wl)Va}^Rv^7zD#j>}(tt@y{=tY?tqtDk>3a=xT`Mwb|&tLWfh1!b3 zA{pqU5Guy!6Ts|1ycX!ZMV6$Y4rH1{y`D6$N%v_Y2kAQjBg_W6j+rS9eQGZY2v%f(W(h+920`a5!oZ!qK$tG(!p zF07Y?xOmE8uWU-1YpZ;@dpx&l7GV=fLi450+huPDYVntuvowNDe@q}IV$Z;F@q6N8 z$<^1dHwi9{2ly}LgyX}*zRO-`<#{polI4Sl{5z)GpG?jgrTIHsN7GFFeth~+)Als# zFO$t12EV!pOtg3CuyDum&9xJ^eJ@_J*TLiuZUs@>oAN_2sk8qo{q&VxjfU>RpU|Nr zsN#a_!@BlWBCekc9@RH>A0Q;(OQrLMATdvIm$QjLmah>W71eAGzex67&cPlVo0(Y- znvgc&9|4ofcc6*~fcf&@&m0GY9zBZB-qOZPx6+Su3TJmbMVW~G2=&b5= zD7!%uRvdra7o(Wf5cl9@QTmhu*vbdMT>yuYoAV3Kj4aus^$JCokw}M!^ z0rHaypH61`cYMRI-T5w0Wr9sLvbfe@q*qbN^BPp99 zulQZ#hy?VEU%g+g)v1^SE?PhI_4M$scRCo2n&#s)6pq0*bGbRV@~%46G(1LIt1K0I zbNrj|pKougf7{4Le?<%2U+l*0I_{ZEpaYQb1ok>URSt5oE_D2%UUJ2^>8yDK-3z!(rmFMOE_CnY(~m3G?;wx6$K>zXz~_PE%Gm{=~unVf@@=k zp?|cIe4l%lBa^Znu6y}6kb+zSVLX_B?d2fYJJ0KZB7~3z`iWiAo{ML>*)b89w5!MT z_=j@^&$J%&KiHP#V0z#=%Qr~0#CG(KewsJ0#&DvnMG2!SAz^x6{L6^jrSZ}Cd|y** zUW5eK;t5VlW=^!LG>GdgXaCcCsbm#Y>yky-4hJ`1AC>GGZ?=rqul2)8qddNWue%tgWrfpQx!x0eJjl zT@;fj>{UE%y1DRDW`I!B;;-Bfdr!7~f~%kF+`jjUEh>uiNrvw;-6rC}2j62*gXK?a zR`Y>=^7LlM>+-lo=vHs51Y(7)(5Shnfc1%(+as|AM?bm!Yo8wV8|Z3dlrVi7m@bau zhd~b2T=h$8y2@+ap`!n@IQFDkB35pvLu1BnopJ~ZExpY_W1i1(GTd&U(%x!g-tc<_ z_jK7`j1Hb~TggxA1$q?EstcBpDPSUHZ0>Q+4z5#Z?)>~Zs?a3X$^>YkgWXGelLZ(8 zmKSWN{g>BGcxW)z)sIqgE8wLL1by#D2xX7sAva(owUm2 zhKI58jqq-(bit3~?)W%GV$S;fVbjFLB2@=EbRzazdd5}llGT^T^5EsX_u94jU|1C} zLKD*y651~~T%q7i-#-P!oj$jMYz*WS`3$R(+Vx5Q@#FA9Kp_O>Q{h9{Jbns{j$W1khE3W;FIXvCr&n3!j@+bdJZb`fO7Xe(>LBm@cc5Ds zXbmDz1&=<9>Y-P6_il=$M-L$X;zIIae<*z~+3(nSx~3hR8GvrR3Xmvv z$$^0Igrp0gm+Qv>IO|;=ty*FRBuxn^!6ov=4+$5Mp`~xBsRr1Tf%aTnQzD0kvcmT1 zc|18a(>B9#bqOQd6NAM?;QHi&nw?=9krvY{pTzI_Wv6~ElSMj?17>*(xz_aPsDjMr z_EreyMA@Oa^JsqXvZ^(o_paZ$xk`RXxHm&Sn!UP=_Ju$s+l-OHV)(MzuYbMgR^ueo zXD<)mRb6hv-K9=^Bm>dM14*R!Qy_n%>!d3M^=mqi6i$Lcu24mj94az0H`2gRDaJ@`JUOehy+_Ue8}V_QzsK8|jzu}|G1%;tiKgjhz!f$nFE5Yo#1`1g6_ShN1qC~8?_bM2`}XcJ&_IBCCDR0mlG5+l zolo zqCy_fnKM6XZBDmdAcw>N(-S)M@wa0KN!Rx&REHl8CH~f`vBlD5a2ojx zO=kT;bc`qRA;v!i6{$P)5k?!Me_mzwC52%a;8HPovOSPoSH4=&18_wb$fJJ&2S8vA zK~>s!VTNvoD_>at^*N*=O?lo9%GavFZnv} zo9tb?I*hgP{@Mv%0{LA4uErn$gmMqK;xsv#;OlM-c<4V2LziR57(SFUJNxrb8rZuuyIvMidzclK8J4r3~&|O`gpTM zj3+mTn~lM3)f`evi!Q)4YALsJJ@EQJT!2cIyqrf}A_!v_;CwVdINu6d0%%aO3&Z2=f0WF*2_=PP7;?xQ87I z$bRYaV&LnB@*0UDw)f%oBO|79{umb^hCf-;2knS+Pea4uyMhlR)C*r(&^Jlux{}9W z#4#V!-zIUZk{3<*(T6O+es&0ZHnS2YzWzup{iGWeZwlIO2cQHysTx_kavbCYmN6XI z$NJ}DSV49(QM}?PrE(f4CMLE!R`3Lz9|CO%nWGE&Gp3RpRpqo3J6+Fn7K$^7l{2(E}`qS(F8ZG(}qMnbcJO)`# ztjD+%G!qkBbGc=VqHWqpP^S(KheI0*?wnhHb8t>OIOt#-7}}yN9Vr?gCD~!`N*ue~ zT9S1PlQB|RG(;WzYF#SKJBMDGP|g6nna&HY(gE;SM+k!!S%DhaOcdy=K^5_@?B z_HG!vyg@9nN?r44=+ecENwq&?bB%-C66)NT+aw=heypX1AnNw|>Hsv*L54$3d(|qn_i?Fn62!z<8itvYm9`6NV_M7^Uezv z;aa-zwIsdhhFn^SJ7!|;-(<>(rGQA}Uq?p=7YW?6NrapGc_5f@+c&iDCAbkuiH1nI*nMTkks{r>e9-&f(uKbS3k#o~ zntDSKm=olV_{y;YY{%;kAbJj5Xp+nT)bjzv4ZIr&WvUe>oPW&HZF6a~>Ws0xsk`#q z49hgz$3%tQqm0i^i8Z=}l_X+(ZRFb9eYv<7_cmhuU)#=&2xOjY+=3j;?Hvy-?alo# zJUFIj`G|pz&iYgmz6k@JUvh~Yt9JRr15D#Retsu!riTxd9Sus2Kf79t06evjYx|~7 zyiLuk%Y0OS-wwDw^Fj6T+@gvUL8*a?tb{+7*3k*ddmExyqkIY$}9+)!-!x4Xdt8VEqh z2!OFXyo2$F*hBs%kbss`3o$D#+8^VumlSJJ>pUud0X2nyL`=8pOS!DaJcYKx{_oY8 zTIb?cHQVAY2i$u|O04wFd2v(*RVK%$OUaNgtN2iUPrcOgm>BKtOyS=e2L66>Q;FA% zD{r%(@hxk1$ns}Qw+01`f6_p<(wL%;oH*yApTj&HfzKqlfAdsqQ$nDEA~fJx5YEI0}*bs@YKNcaB;_!w;Q% zj1R{^<#`6MLLwszKf7{9d5Kqddsdrmix1PA#@6_8ez;c5(?$F) z+knTK!|eCXd{{Fdw{M?nF$L+p^mX#%2fs~3M|VfF;bHg3!)}VoJf`wfNqG;N-dY5J zJ%`FkgYOgw)#KhUOAS!ya>>g#SB(dY**`!pMaSHtw@ zl7|G{1vv%UUFo0+34m*t#E-1mJ%665zFc56Dy7fdz(xP{(5E4aJxbKhOxLH$7P6)? zABfGx5a`gh>6V-wah3sY&<3_6IGn%_n~XU12aQ_5h$%g;1JGixx`sxHh;4Ulc|4D{ z!n6LdBEc0wy%pG+<(9b^LOk6u zG&1kZix5{cQ(Ar|_ib64w;IUcQsoZl&^Nmk9g1St#Od!NRFJ?cfpO-QU~h`fy5M7# znKwP%-D(>^fI#q*%Z%j+ll5L#!wlmcQY&v2e7gkBK z6}8Z5C=XM~Ix=9+ckTjE?v=_H{je=&`*ipHRLLpdw~wEs`Qzp7wdAw<$hS$fys(Eq zzFE3!*Nz)M3^e0Ji8m5m;nZ<`xcxCuxJTeX%xU>gXGCd{(N4oSTAOmG|6WB`Lpd+* z$C1?M&4(6jeio)+FIBH^nto7hQ2Zwl{<rFIggui@j+$=W7&q~_!NF~) zAFUF6BtlIBx`S~HyIK*^ZHK*-zVW4QrZfu0SD5b6^TDPwvKV|QMhWbO!C?M?6Ae)M z$6drO00Mar0nH=?$92qD1$Ahp8}Dbt9D67iur-nfd*l ztiOph*fpNzl6NK(^J~3KVz?bG`E|55(Z@6Rn-f(e7}xeJO4TaD%Ni*1|Mi>m#!{XL zuBH_Cl>Qlu%F+5TObmAvbOCN&Gk}}6g&sft@-)1uS@OmlC-ft2Waqr%!e=&~(cWWS zs^o+|o5JGN^}upocOb^C5Cf#N!HHgA%K1C>4YN%&pX2Ulh_9A%^i}(CHAeP_@Q4gw zQvVK87XKS+218BZrxW>hfFx&nj!*v zWtM=G0$0Q`S2vev`zswvj0|5XU2?t%f5uUTs$iM^>TBViI3Pa6z&vSgm+y2+Dw%Htnv%pF0(6fH^WvM=^St#a^)Ek%zX>z3VnT9D7J|)?`yq@x*qN z0X>%amBMnBzr~K38Oc$i+{yHI9~)42FU`WeYET1fKg|P8#O{X;lH#v?3DvK{A*{@L z|I8v=N#S0#;G-_wBtchILwj^&yjJ(?6whX8ILK*OCt#wYXkdFR3T((N0if?a4q|NE zy#*Ld9;r%lXp?Upcu;>SYE~ZZwAE{-`ljx>d*)Fj2fpoe;EepAy)Bzm(a{<9KD_yk zrl{csmSp-Q^{zD2MH#pUd^L~Sz#CZ1weLUV?tMb4a3iGNk|f%USuEn4~wE|RE=Xl^|6TmScTD+QsP3o(i9FrPPlBX@)v7~-* zvgaf;Im`8Y{r!Gc!8`GSYu2Fl@8kyWI_2oNHRv&bihWTQz957v)!3v|!FlHswb|{vPa0ZG zbjF&qTgX_5z>2^p4QMOOZ($m*_{znJ%1wEjH!}sTlVtnMp53$~rX!uUF%?VH`d0i| z=eqBNZtVnZ_@hl#3#Ti@f7~2PoZS_dzBDucEyko;YPf^;bBF%C44Yf^_|h6|m%BIT zcL?ASB-{{sO_~R>T$ECP_-eozN!ebd>6nLz6I!zGQZcJUER8vrr!3gNh-{~Zl#$wU ze938-lXG@>8wGioTNvpV=Bq93TQ0`+r~A5N`sJ{#MN|o8@7nQGD;x!$QYjY#QLgt|d)h)zle^nRJ>{o;QP^w^Ywj7ygF?6drHJ)n9H?a=M)T zjod$IGS~#C(Yle}uc6@Iy7R zYfhJ4sE%rOc9s=%IRv`9Rl^S3Q~b8@hU2QTF|hi zzc<1s;=(VH!exK8-H(paBn`USl3@bEK?O3FO3Qp0)yrhl^D#$AYVumWAZ#Nzz@0Dc zeSTsH#`QY7Bv|Oad;6Sb4XKQaf*>pgH^|mt4DWi+QTr#sgGh9z>E1NVo#D}JqzrO9 zDu?E(>6opSZl)*L>JGC0hdASKof2GGp%j`}k=%F6?FVu`olwt`Zfb&iwps zTjD*uKwVdu+7PHahyCR1`j$#i;!olzow@c=D!4sEAMnw?ZvVL`Nkas%uDq@4c!p@@ z0Uy#SRn+ffviX*)^F35{DM(O@Yrqeifo+@7lJjuq6%kp+n=0|cS=c`MhHJ-uE_~U- z*HWV(@Ow=DA3uWiM&p;AAgy{c&a2De`md{aes?VGEl5An16&@s)TEkzTLVY8U|Z0` zdW$|L8_oSYZo4yDo^rueZ}WVzLp7rNL)B8l#7}nK2N1+29@%Y{r{l4FxQMuAMg6hP z+Nr?e+F?~4nTF|^X=SF@)0Lh2Bra={#HJh4iO#R)j;x=Wz$($%WChY-(HD?3X}vG& z22Yan@Yy4UMG``rU%V+lEbGze&EY02ecgN`TcP;!+s*Q1w3N9!gRiNwtKm?bBbjAR zXZ5HD5#lv{zh^o}CDGmdmEF#lX1PbodAuHXN9(T@vFy8bI27W!wi&jcI6FHlT4@@$ zQh*8LrXkZ(nCR3!Y-m#7B)t^YZE(5v^y6Sd*zb+aJE{@@lyarqq=_WMQ^=tPf^6zf zp%R_dQy%wnV&437JN@CR;^+MBJwLvRccXAGm~k?XW9d%krD(33mc^^?LmG3lv)%`Q zDaKJTa^kpyeAgWzLKYQl7l&A9VQHsUpDzao+C$-uv#5`&GsnlM0;A%c1DUzjT)>q;e&n(1zE7F%MV>Sp`My+d==3q{6LE{TPq+B-GSNgf zhTyg}(y@{#s|yD_S7Sio--?cjd5Pg?Ut=2CoRoal>ld3u5pQRZ=xXTKZL{8nElr z(6PFrz)g&~>M$o;_Y^eUnPU59S6mc9WzE_cJVpU$!i!yK)C4-Be{)|aGGN^c+F-8C zJu`Tzm{OCRRc}bCzuX*Fsjr+`ygD}9>3(PK(9?&-JJG&908>zWV$ah5kZn$YcG6&C zNfIpZo^X$>K+^gF0h9ZOmbB;(Qm-8?F1-(ZA!l@xhjM2&;RT_(sKSz?7Aoj;U=f?x z{Br)=`GBJE>fV1tI;kEX_$~)C-7p~50%AJqF4-8_NdiiZ5h_i?1T_|h!5E3Xh=AW% zYVwHFv9(wW!F5f8E;tqTM++Xr8zTH2oF&Yk$7^?H^{sw`L}6EOuB?xNgo<)G`4l~R z94>K1il%Pe5Aey`zF5q=E#m!^ULKa?=t;!Et!v371}b^M&9B$bm0w}LvaU1q@{O>; zP%*6XDq#5f6s@))J%MwYFHPY=pc>$?;?3ZvNxu8wmzvBr-^m58p%pMPZDms@FRcVc z?j)^^5H|$_gp-6kNzl~rydcdrl?HcsYIC?TK2i&?n+TF6(DX9@JlH~fF%8tb{W5Gb ziIy2L#0sj^+w{Hr>X)|PU=Yl+jgPPZKB}KH@ItWmnXnz1z}FZhgf4#bMP@}+!9e0B zPcg-Jb6J zVH!pM>|6}{LKqj@$0*97)BJ1yh$RyYL@pl5&-%M6MTe%G&X6W9h>QNe^;hl-V+jTe z(MC%MkSf71xl08A_zR9UHrai4@lt-OoNv4M!!tX;_yd3V))Pkq{}2NY08G{S6PVlwSB#_W{!ddh*=kGGHaq(H$3OSJ8hSM+03U`AM2- zI8>_Eb#V*HIbn@tg@6%r?FCIWiB^|-+%R#o!GRm6&Bf$v?kJn@-UeH#33dr9i&cip z8)Lh?iH3_;H}$CdFV5L<&1*mib3*0Dt#k9QDXKk}Y@0JyH++Wq;%Sm|gpMIPL%*;! zSb3O-IRey~UN|n?7RJA*dhWmT_p8|L5@ll?u$D+~m`5UN@ETfY#~&#f{0!5`>!zce zxcqJQb9g3&x-!Z+!7M^lB-^ZhWvO z23|JNHgiZ)c(X)ImpO5@{!rm#*+&;g%nM^w72brX$q5l@b)F?;1V#c?WiV zsPs%diWA}z%!=*6vct`9EpA^-Lwtl-749xQbY*i&lURs^7U_aL#QI=i@BCF)(Yg; z0q9vb8D0c#ATli20}V#U@jV95qDG7E>d>XLZ?_THR!uKX4hWt>M+}04q#Hh@&2uQh z*)Ay<+Kc{>-rS%Gu0t{+SC#fC-oF6%kv<5>z+fsoC(~Ax7!UteVBbn*yqu2Ic>%8R zQ@z5Bo9%uJ$rws400N&3tGZ`vQN-;9qve4ag?H0Kj|)Mh_55!}xZQ-$jXTLw$2W8@!trl53_>gJkLsS$<>!iI8rSTtMT{s~7JDFQdRQ#eL=XL{Y(^a4(y@xr-IqL#Lte;AXC!pD4Hi zCb|yiIt_|MUvRW&e%JrToex}W;J`>qehr2Hjxqed1uh0Jl}=^OmTO5}L@D_U5f_(v zY%$2ihLt}~S7b20a_2X-Z_^-$82JC1VdzSOpZdz>B)vvMh|Tj&2u4Qs&9nak!nGXt zc@9pfG+jNkp6}1+i+d_q?okFICJI>?%nz54{h!!du$+Uai$ED%vLFErt8?hpu8TuE z=!d?CqI`o1B&>!*gZ~@9W+VPNB=I0qFegt~N2;M{@CmkHL98bT9|HaVUGsO&JrD;= zAO;6RazdvZZW3wK13SdnExj@^Q0DCcQgTKA9{4E15V=f&C%=n~U*jY_evBqBRV>o-4nV08{$Yy=S#s^-d58H&MOm zD>m{=%6DP^a|3c*Y^H#=K*~w-1M8s018Y;xt3z=rbIM%&8M45C>`Nx4qTGqqVU?>Dn z;aSNaPo=e&gSi=e1p@Q9y8Ri0V22fBBQ{n4Khf(~x2n(|q!0vi!oSVF&AI)Y^X8V^noT70X1c;m_*%kN7}M1e8lkF76eiq>FrIBD$xFeMN2zUJycp634j&?a1x0sp{eC=h@iM4* z=mGMLf>hM1hd=fI-`E9Jz5MARyp^&=2VO|rM>3$2r<*)?7u-+}nTCQD617is4ef{x zRg%C>nUz~ot$%Ycy9iy$4`|_0uc%eHVUu9syhSrPF8N-5am5z$|5CFq-GE%AU%Hn6 zO=QZ4)3VxQ-67}nJQ%0X%*tye;_XNbp0@n&#mRP;^RyK_IADUv+rezUPvJokZfX}} z(qIJ=Dwr7c3sSjK%uNoK7%<)XnZ~=&F($zu5&vaRcb+$yKls#su^sZt|K9@D|8Iu% ze3L;&yM}RvKDWdFSsivPZ)esXRzy$xe-vV@wCqfVOOwFE4FQEt-cS7 zN&!~de~AT5kjhR$%DH!BA`~kH@ZFV196x4bN>{P3F^!+@&_p-Rb0mY9^j(Py=Y7Eh zRr<@u-36#*D+i^xS7 zi%+Ud2%IRwSYCurpEuh76FjxUyPKuB{>}y0V%KJ@kmR>IoQBk#A4`mb!39euN&X8jxth^|MUL0C>c(@G=lQIx-N4gAlWoE-Y676e z`txSsteQ-LLV+FTf|Ny)bI|HS!%(WqGO9Asv)9nZb(#pk2CGOo2qLl3dSrKgxb&Si z$nUX&9?~1+@0!X5#FlfBu_zQZ9eN5DckMenRS}U}8A_88y#`~^gv!&%nZKWFy~zZF zy@s)u)7TRBhTQZr7p= zVvG~WvN5IxUPTxS5)dHaFc$r1^`;p~BuTi0?`#Y+v6p|DYaTG-1fYKGe|G3YWOonW zqY}OomM$(a^goy2!iya|{J;p(!xkcM5_OFKhkz!rPc(%zKYg(B*lo2A6H+9Lyxkj= z+0|-;p`BGGBEYD5ijFS(WH7Xqc%XO(_7Z%gY$LfR3N=X9Ng@e0WN@jA3AB^Pv)ip6 z+EZld{+nwR84UA?4@7k{V}~&QA(%@tvza76JDDl{ZURurNOKQGYI0ZJJq}YjYXrhU zBPr0_7{Dj#z9xsam&M7_*E9LDb%(pDk6UD8$B0y4chQj`DrM} z-!oJD&~xB-aFIqJZ-el3!8AE5ONy;WlTJDRmRcdx1Udv>cSwvtlui`c<1WB_#A?54 zcXylhw|tibabEq>G#Q^V`#*1~2=OIiZAcRF&;zq1;bTUaO=(tGOW^ z9mFDaNp2BAC?S14ZAmVNj-HMx6a|8Exs*u1Z$mrKYGp`jh||APbWGf zUw%JeZ!h+HME(%6?S|_560Lt(@y6`dKf=bOUoyi`&Ed{g4zno{k=-LA9;`QUvtZ{P zsBQza5Jk~Rs!MPGR!yfoJe9v&<*h~f?V=(a1?P<=BT{-E;s=(bIXT2)YU0}W+WZMc ztN+}j3Qu1Rq=!u}`K`_vY?wC<^M-GBl$+Nez4H?ovj_z%zW6p{EzacQ2FJmF)ry4t z4z@y9C)`(quJjjYDS_t+daYDIOP7447W%|AU>B$i@#H0?|$81Hly8zosiTGNNs z)~L--2k_1HwXg9!Vj<}z!{6U-w{q8hAd^m*L?9A9&X)>i4lGyu2q^y*|MR5NL!%yT z|8VWUE=qMpt?h~-S$oJJx}R~Tp|}hh$&Cfy8`r+%AJi`gi99{WDeRSQMo+`5^74trE3#>{vU9xR^nE~4*QDyxMrsDv1^g!#hJZ3 zJid6szOhR>}Vq_WrS3E0UotW&k!*v6|r5(|h!0m3I zS>87Q?oF8lk;NM`OOZ|Zwj-w`Fj|Qoc*`eAdu&T5Th%`fvU-#T+;1ObzbOgp^)X)88nHxfq`)}p)zWRZ5Bx;Ebt@w#z>Yi-873Ztcqdu*qBYt1} z05@Jhia_!$D75Txu{dqLlyx(o8ysV!y?w%*wYb!J`>Wu3X8Vz)GZ;*f%;hygI%-W3 zj7!c)Pz>szTAC1MMqrjM*|6}I+)f~`7>V8|w^H8;Pmv%pJhJdV&1&kqS2gm>`PQc! zFD}dBHurw58(Kv-(Zq~xuv>LZp$gxy5^*PwPE%g0W_hqpf;()FZoTb58${L@G}g{` zLuE0O0DWEysh|E?zCUSS^4=AkTJm z?UJIw*nwp%xOce`Leq*j{zpBY974w17yHKnsC^Gab+tRL*}7!Wy>iJ=cMIB}eAD&o z->OvX_7S;Cpet#hhVr3ly?iLUzH4>e9IyR)=r!tLc^SI7X`?>H`*r*Gzeh@Foprq< zOg-)5Rb*viwh4IJ&Ng@AkgUF>h}=pXUQ+Bl$kJU>Osfbw2wd+8{;+AWdt<|mw$UBi zOd8ge6|5oW8_)CnUv`Rw$6<4#Xw#`Sv}7_Ey4fO)8T&vg9Q`=rXLE8>5KSQ4XWrb| z&{A2#lFs8Ztc-X7lN8fY=g%7?b&aPn>XcI9O?{$OKaj4^4XOSboV^ql$g+EW$XJnP z^2ACCj3H=uj?g%G<2gcvU49nrSx#js=8Yc5)Z_bp)vhU~SyZ%i$<>EgKli3cII~I9 z67elSvA^AR1gZ)&dv(q zXSxV!Lh)vtdR+*+O<))fF~;;pGJp8C??qfRKx85h!>I46H2Q2#FFfXu@Ea6xyxi8y4l<#yQ46N#!e zN}=ivQu7dd-}bVcR|QA<{1#`}A?yPmLJ<1k*E%P=%VMnCA^FdBwQTaQ0&UF`uOm{- zwVz*HFG#TxaibIbi}vA>7hb=6vM_{huK5E4-H#2I8Pp_lvqiw#RNhL=4Q-FB9)+QQ zItzUzq#8bQAwZV5Hmj_+QdsGO9C`7BJ?%#liyWd(lon^i!6__HwsTTt6MWSQsO&@V za-B5gKako3JLE>39a&Gq6>G#K5R=~OKS{7J#M2;m$z@248c%-?zUR{89VR+utazvI zGkxWj%644wtHL9Fjh#ZnN1YYpLX?-;8a9Z}C<51I+~ZV!Iy2qZUM9xLS=|=te#^+1 zFaN*i7DWKe9o&Q$r!W0xRrk)5lm|P7iL=^enh}pV|}4{oiK;*4sJW53oEJp^U);4Z(%x3MkUwbyv;3w z*RRbH=#zWl<%(x=I61P7oHNx!Liq3B&^eUbgE}g?21*AKe)F)7nqYK3zP9l`BX1_2 z;kk-*Lld`Qjbz^nIEy}HRh7P+hNkaRgL`dVdnf}uXNBIR(x#c2-Lt*qi_F#iwoTf2 zMds>rf+)gDgE_B9%uKhywV?U@cGK(0$Q}A?S~F*e9Dqp2&K~5B=cd$J=5RG8T+)t5zc%OM#Mhywlhjs z_Zg$+(g)KzT@nNmt}*DFW4mXi&XgVx%#(PYF)J@>A|oM@bMIrg95}=5*MbM6qLS<8 zU}bA-tNQqQGRRi%bJhH_p8FbCsO_n!?7t6VwYAN4fG3ubp?U+3A^!gx{~y0O74h&$jr4H`<3#4~Ibv?kAmC}%?C&3nmp2F!1f#M2agbK3NUCY)WpCMY z;eG8%4>*o2=jBd_?jWB9m*Rx+sj0lu(v~k$>(S=#C;?YX^ob9!{U@F(CbP$CjfgLT zKbu;m$8S_aM@UFe>w}IgNDvaF9d{#RwqD!xaMqSl&=kkm@B$%_?=n@zJ76la)OYLR zRuz>RQssWD05zr8xgSuHnWTg9Y+PQ#OLdy1&n-zw35iRZ+PT>uC9?xQ2xX9nDV%r& zI4V^;a^)H4K}O`JHb1&cpLp73u)M(Q1}nCf)%)T;?ZM+nY;E9kZ?$FOE;p}V^Dz{P zO8?0MuacOQ9G^krbfBH$$(9X+73~?sC6e+9>`v{C*%=u@7f+@3+V2LRCr7ZraB#A? zJTWyzjGc0ZpLBupLgMu8izf!_b^z~Yob#iF>s~hr)S$`x`M#qdP_Pp`4!N#z`&6@v z@PElSS#m!Facjn`Bn(PVBB6)U%)gNb!oLqLO@vH2%9DobN7QzQ3BT{4d+>N%2(RZW zFC?IhQERAKL*ic>Kirzo5}KvMY9v_7Dv`V&`m=N0^bw0U$xZShT&ZGz(h$WCHJCny2T_49{$A<~O~#q1VHABu+@Gq)@M7SY%~Z+@WD80u z+iVDd8xZLo(56_xvI6O(cDm`vIVlHOJhTAnfv0U%!|3G& z;G-zZq(!kOY!uNI5=V}^M2|`oI_Yh$m8mWVNu0p~q@gi!G`(^y`XQltU#0ybV}*XZG)mhYEVyEaW@QR){*Hy|b}Y7@b%5`PR9cLgYMi)w>b zGu3pn@A!@6RPsUncOE>o0bzcd8YQ=FAq6>(G-OVtcj1G{Em9fkReC~Hr79!T>NxXk z>qIXzbyot7BzWtACK7w&YU~+OGGB2JR_)RSLM>urLy|vVn~8+y7*o7~GsW9!6HIW9 zDtc&Zl2IoXRZbcnWgbqya{qa>mEK*+KuL)lk=ze~Rw_PmeMcI zNlLvYX2PKgdO%zUP3E3|+Mpi*=6`&}as6J>($ae13N^rNzI~m38P9_?%El+$U2VR)F==xo3tUJkD{a2pm>U( zRZAKU!G7)1eA$KcdwR@1{bTM&81Cb zmm~_lF$Y`cuE0*;{Ejlv$a$HOQi$-TrGz*5=3|cSmC(DJaKJw6G)Lms<>mDs+|6;N z$FTxZzY@X(mD?l|wSzY; z?FxNm6S|1^nDaG38D!~&KxMA z`bwHME#Yzj^%9w3^4hvFX*ubzjQNl%&bq~5P+B5~a^ps)0I!f>wf!agN3`tbw^iJ2 zec!!GCo8R-+-%DrtlSIE$;Ve=SO0i6H@oJa-Ttwy*ZiX=u)zn3{clKM%hk9WyLmpZ z;z$8O@%FcIxY0FHS-|`Z=?q%9Kf+blEFrWORU2U zC8~>VGNRpIh0f&0g?HMHzWdw@E%#f%JICd`;sz(6r5FPeb843aY=Bw10s1M$Em$_4 zbwJ6hiTmyjs?0t8PrNm?2I7WlfqGC4d@!Fnf*0%*#ZmoVwXp6jFZB!I+aoj2-o z)t`G$2`%)RGnqFuA{H;a0rZorB|rT0!&5(N1c+*zj9=RmFy!0W-K}P9oDagqAiy05 zAJCCwuha=W^*zA$Ix+Op)R=xs3fkg>K%b`4ujLjHiKBrl_z?tDN3p)!3a?4oM*#z!I8OnQ?^=HCIz z1B5l|IDwjRAi0l}kuiG~_R9Qo>$60o$?69R*4Gc66OxL5{GFNl$;tQ+D9bv|D8y3q zS3#`kMx|doHMmE2EMVLDG+(~u$mn7+l{^ugqRdETOlJIU<~{r#MH4BOa4`~@mQU@u z^3_VSXR45FoxW}VGUvk`5XabYRO@+Aa&Jdqwk1FBS$kknIfCwNK!1@rP6sRk^`Ngf zbI=_mF@Tuj)Oi|M44Vs-QX|~@-g=x*6U^dyvu%CEcm2tdZv z`aE=2#BaRc7tP**bsta?#HaK~hmaphX9jlzyb0M+!CwsW zk=KB%iUwjpZdD1;=?#Dh2Zlf!VoM=1Y%_gV&|gT+$=TEzy;&XQNK3g#O5+LBzJH|) zk6R4Lg5PpOWh}``WnyyDAfR2)H*F=3*~IomfO=goxQGSx_xAQqy%JEq2P@#z_x>G( z+jg5oUWQ_c=~Npzj0%fCs)A6$SBz8$!PcY1ksU=;J&e+OMNcM^)O3#vx9CB1$2ac+ z;m(3g_zjrFF*A=J)(_ zQSK@%Pci$m@0yxh=d2_n*W`6+1E>0(un;9Imvk}Y43XK-MX z|Lb6EN50DtjUwhyRuZVKs|9JtyZjrS9iS$rp`lS$R)&Xl+g?cwc)jk;)hpI=G>}AD zbWfQ7rFnNbjA1Q#Vyf<+z#sIq^WAtLkoZJ4=z;t(e|t*pX)h3rKGNxOqleyQ{JjJQ zcH!NN@j#Gz8lRYOdFpEkJ)ZWyzDh7zwc|=#TX)}4HXW+lQP9>+DYxDJJ8&)%Yl`g$ z|KZRi2pIf1=;1=Ih$XY%^clO#{KU-rhS+!;6YYq~nitV^UyO;x8Nanga2280D~qa1 za2Wye*3W1lo#S8yB+(ME;`tHNbq}~8z&nDxarCx5%XfGw07m-_GFm$DPIf2RPF zsaac>0)>|6JxIWVLmO|D=6gvKr6tV+HdWE=BM7X~HH;ngApS6ARt%S>W7bqIxq|-8`cd zqWBKIrpzFoHgJN_=KKxvOSdqsFV@ygUH--|f}BK(cF#sJvPVQnF!5z_=R56pz0&>p znCoIpi~Hh3>T8^<8*Bhgsm|VBU1~oNV7Z|%w%5`gRKF2i*J;oqxeti*gOkE6Qw~`` z4T0{eyVyl@#(IV)4)*e$>7Cd*GJOg;hqrFzjOv9DP>^YVIVaR%%OE@obc$vhw+6-` zbp-5gj$K#ar+Hg^C?;42V$)*Tio9dH{x)zPRI5*-(M9~pbIg?1zXHfT>COI02OBt_ z{Jk6*LX66oc5a%HnRU<#fFds$q7)gJ+a|NsZSfVcU;QuUS{~a^xM7i-fdf8b0h-G)M2K>)zkAW4Bo-= z7AbNp|6G~up$$iZ)vEo9>0j)gJVo88lUA_j6#?Saaau$4 zu~Q%R7N7dKf5LQmEBPmOQH3S;UTTR#AAa&aUnp6q_$1aErOwk$nSE(_LL9OR3~&#K zP#AvoI)OlhGjZ`tg3-U2fQaLT>xtXq%H~^p*VbU3E{dtY@g>hQqM-jhwafgK2!*quD>YXE)$V z1F=r{(ye0|YH#!lc{b5fQW{d%?{Y=!*5tQQ7VrwVwU3mm$Vt@HdW)Subr~4OVVqwM zIYbr`VC}KIY}M+T3e{|ar7i26)AqDDwz&4Z=M>NH%cb#9hIuR^pEelmH^wx+Z^jQn z$MW|09tX7eBf`vP*iJ~(b&k}JGj-fY@u2IneK-I&)mV-HRovO?MDVgin>WlB!a66Y zeZLh?eI6nOl!7~t9tq+hNXCLJ5pg(m{(<*???m3n%_)X`=@94L9#lG5aUoW2@~fWX<<;G_TJo~GFg4FYz5U_X;)lRaF{Nqth-DcPr%Ar1~MZ$9}xPS z42`(E#kF}$We`~9FMIST1B77>CKYr+@$?R`%|wXWJE0eVD!{u*VT{Jm%eD)(jWi z+Ve_XX!EY=_!q0a%%bp=g4{CgG`InOz0U+>^%B^E&HiotINb2_kUW@-=961gJPdz~}6c4W#v{p{9vzUmvqKk^m`8D?mZ z2$<1^a&p6?u`HDW4IP03>1Rz!dKI~=L(fleLEKH({Hz~;Hkik6M{xDafWQfU>szr+ zAQZ(K&pYV)WIz|E(qr-Sz~XRP8X_h(7AQL5joCk#)`e6H^hxpOJgXy2>%H##%Lo<> zZJeLvvv2`Cp^w)L@x_kTMCDaLxe56G^m*8Da6F+Ty&P+_Jz&rdeR7uBCH2+M*7jcO ze`C5RARg9)Q4Ij^*Ep5{Z4Zo1ouJs_T{8#nH-k@}Y}^?jR=cmAO&%GUGL`w-BD-t1 zgrg$&+~=~69+Afjj{jn8v7y99-y zmKyQj9jy4by*9dMUKLuyo+pQ0lxA5)X+$X<3Y{EddQ)bPG6K;>f|Xkub}qzw21j`= z;xIc{CmCt9ltM!HPNI6-n4*Nz(*(wJ1^E+pQRmf$T&EFMgxh z4+L0Qnr&9*6~Jfq_JS-HBDfY6^lmKxEXw)B<$KFv`w5Iox#IYK^3>}~_O>O3&>@8^ z6MmI&)wMKUh+QF2ERrm+oo6v~U+B!a;4XSf{O8o#*0Gem?|&{lCZ$Q7vaqkJMArgPW2vtU*>ngAdcP9d(CNTO8ebI|0|3w7K5bm8kDKab^M#dB~& zf;*Q6bs+z_3(U=ztXARR{uEG(njUI0KT>hCB=-LPQEo072frS{RSD$YIpE1ee+Q3^ zLNL+&1dMq4yLH0Cmr}Sa4|dUikU*8-O(gB(PSHMYmE`5zkc%P!sB9R#8_-PYsAa z@xzjowiuQ7pXkPg)Fwy?hf!DXy=`XJB#!oLeF9aOEW>P88)Bo0`^gR%f%no0@92Kw zUCsh8E>4A7GlXz!UnwsTmUv}+GDDmj9qSRtdDgZSjMT}#@1o18#Z7-jJH}lMK4^Dq=b8&NP*Y36IqKjKKbfs>>gJ<`3RV4&S zM*bgAd6BST{!bvo47P@0=^#eMkLmvmD)mYp0L_xrF zW^x0k8H?5BRv@7APf-Na7 zRsg@E9!Leb^=gnh8oQIJGkP!2S*!Q64s7OA|;-E_wv0h(t?Y2nyX z2%>m>@(6F!mJ~dJ{0CdNEvw=NVMT}bJ08t3f4_d(PA?&T>Q*}h7*{3vwdal&peKyT z_;Vus8R%^rfL~GnQ@?}2_C5hwfxgR{&!D*fJ37T@Zq+d1NzFK60|=~5MCy^r++bdb_X^-Su+?8Gp;qA zq6KzUaRc+}_2lcrGWV}5@)y_TUrieH4fOz^`M74Wu4`zN`6b_VQJ&=`*~W!}CY-R| zi~oQ=8h6*1_?|NcB?0M!&F(724Wiuh9IcV5fsxW9lyiz-IXqPI^aqH3DbXaSKoB%+GVfBKb08rx4YKKlEjx? z;iBL;fTWf{AO>ed;A}mDh}?w}5(<+1z~n=}Bz7^&#;S7;NMV z&U7^+;f&A(oJlD%f^lm}CeGt_jHI%&1iEa`{#d0bZ9TaYVc3hvv{P)teFZKiat-?B z_y($Lwy8xr`dvnIf|Kckx(`z+3m(Ipx=ucAdgHhD*8{;#u1%+k+W=)8guR3MG7;U_ z*tmZAW9c|^>Y{cYZ6z7~-Rau7U-9hP5#5zV@-yb@HA0h^#W?fF1&$?>Ho>f*%!c58 zC`PnMF6EOtdhYBVnXS#|W-H%&5&0xePgH8b5VVlYjx33opq8jmnESm6nHJ54_aV#b zNYq79Ws_xSGxU}ERS7WcW7$>=L_$r zq5Q&Rgm9)*_WPFfF-n-|dyxk8=#n*vR=3+z#7o zjlF@{AH)exX`_BUPzq~ZyIMFA?C^^UF@oSvf`M(7n-IXg{DQDXWR5DN#+vT-5ipEl z&tZ+eP^wUqQZ!l3IibRYekoP`?(|DcE0q^#2(>&)ytjC)5CJ$TzEp&m`o0U?idkVw zJUL`L)T|XCL-vPY@H~QExGC~wPLx7>orBfqOtK4E!bTV8S1S;nB6RBN#zRN@C^16V z4^16(zfjfd}n<)C5sz;&)b3s|U^NFB7ufq<$X zGrn&ql@rd@>~2BW7gFcQ5lzA}zcyhuvZ_dt19=x(2Q3dGiQThaWjaxYQNnsClP{D) zo)+ZBLN8^EXjCm>r(h8fI3jU=P3q6MQ8l2{*$R$%9e^aSsiA?P6zIbxY{bJc)inSk z1|VdF-$IsxICGgY+tNxO4qz+gPkVtap(sZ(i)D@DCS|H+l-Ke1mG)J+zpRTK|gC=@VW(Cj8 zZ+ZspV4v;`cyFw2mRz#WDp+^N`XcHuu7R^1<6ayHh-g;Et0);1C^h@GwEr|^T_Zf< zOI4kI;yD8ev(a{lkK=Er*~zn)xR3&hKJfWdHRVUWWZr2ftH15!t+&7;)~5C^X9^~H zmD?}EFU(NwvMNfxzURI=w{L=DU>T|nU;lH9M0sW6=S4WEp8WQ(^a0ew^}E0p%KkK) z+1;sLT0H(Xx0e$7g46#G^ptc2F7w{Kdtr)dGdY%E!?oMR#U_}RYIR3QA^@C1SR6M=jH5hY#*f(8xqaMj29puYyjnCglA)n8g9tzZ`$II#wjJG zwB=|7=(fHAE29obW zJEeF#PcW61OG5rV3JKPMb0K{=dFHxvdDuBMj9oQ90XjgPe?gwJ6EtJRZ6YFcz(#Bb zd!D{xk1m25eYz3Znzr)rt(MU9`TGQV1h$rzA{?crx4}eC54}m&r3uO(NXv8=p>qlP ztO5b4@sU@Qm)S^5{5P^YCd{)=@#`&{BA9J5H=!0gAD*vy_`!8A_ODL|b>*-9h12Fa zcVDR5T)r@GdB|cXvv^(I{Py>Q6knbw_HOh^9*c1o^Z*>>AI3N#=a>S^(zW5i4T_B8 zxP$o~)Xa>xR+v)7sH2@a|D7L)jg^wqkSl_3vTXF6$4B2fVBO6X4F5{9NG9QX#S~KH zmiD+MDl_KRz0v$9^fpi3^@JOr2-V@SMZC0(%m;V`@62e*ZR&ec`A_p?L%$&cyLg^p z$@fxRVO_BR?Wp@%?)er!q!m9z>r*1IKHad%M)C&k5mRZHSTJMVB&-O$viUTIw?=8> z+q!2BFld$n>pH=Sf7SU~_4XLHoc5F(EXnJ={~-&0>GS5?xjV{Eb0P|R^$rntvJ#;i zz~$k#SBEu(@j7G=rtiQfo!6W`>`s1VVs7NDv4Q0ue4OFc<_zfWSx)7!LvyE+!FR z5CQ>0AVCN`2tl~;MS?*{1PF-)A@Lw2;UW|d2H_DPJQ9S*gYX0Z2}A&c2nY}X2_oP@ z1i%2W0cZdV2nM_f7kMro1Q?72gYjT6;UX=67Wa@pd+9(AOOG%a0i42ss*G3^Z;lA(SRHPC!k=ULVz^@29O3K0a^eL zATfXqKoc%nbm0w512*swfQ|t|0`&oD0SiwcTr}`+`!87h?dU~6|2FA@)L-2%+WS|^ z3yy!)x#;%af-fllt>L2ie`#G*@HZ0x4J-$sOMrMlO@CAUU5Wqizij*iS%9RZZfZuJ zAP_mt#m}XIso+1rAe)y8%uC-D;pGeWumP#)>#{$#bM^G{wDz!f^J140l@JmU%kar% z06dG;l^+@Sb-&>h~!O~3&@X~nt}Qf_VQf?n8Fnj^4B2vr5o%5?3cr?D!-_BLGr(t96o$2 zK9JU6Ek&V0Q5`JZlqKbU;2BC$clkpam+bo*2Kg%y^Y>C7Iojy%idB~w5jgSrD%00) zYq@jkP3V5mI=NYSZNO4uEx*-qWx)RyQnBW!a7fIRh*I^q8F6^I^&rp9Bn#ax>Qwfi zwY2=oJj`uvP_i7pCZSF7l45u9>)Vf;Jmp2K;VJ}5@s#8BOf+Hda*7W@a{KK&*$UzKdJShgY{w`si)J1G0 zc-=8Y=BF0-q)51=tHG(8@in9Z<2K29@;0V{3q2NZ81talIaHtS8bwd!@KT(^_LD-B zY+~dY;+w`fIl~w~dSsq1kczEwpckvzynkq8luR;G=CB=WJbC!XK(rn&G?Kbhpz8H& zO2xg=6#A;seS{PJO{mywb*WDgcDIH~EPKYBRQIzKv~gOSQZUS0cKCbTWn}$Q^SfouTMoJ-VqG`F@T%D6r07 zn&%;^7@Vb&S6b4?l2kWK$C8@2_JUj(=45QW%6QsaG;EhqHt$ z;GiIjblQNts94#sU_l8gZAjr7Myfc?P4r#@I^@Zwr1W6+9$EX_>~4+*p|LpTtgLeQ!qB2>&PGev~4B7lkm(& z#UN8y>c~jcn5-#9EGI2ghJQVC=sh4!S3!? zf2o`@>`N7ejYk%|GF0x;MHgUyQ!+)fqm}p#Feak+maVx|k|JLVx+n|x7x*Oy#fD*; z%#SYDM-*(lacoL-U>cX3(+sn@hJ011NV+Jo8112RRQXX*SK zh!UPgjH;U;lT|aGrVAH1UX-BVNxQ}~s&RS;4MxdWzRX|Q7SPvv##f(sHh|ceYtmgqyXLib_LwwhuSmI7IitA_N4Yz(#UW3UTuQscn*sV zMMLTKp6K`f(wc89(lz`XJvcY58@u}n1wFWJD=w~$pI^mhz2ep=zv&-eF?Y`I;NWOD zP}N{ze()(2SHM6fsL7@8a5{YC^;&}%4K62JZlQ$iO1n`UC)_qJwWPNvHdxkG!PN)0 z`F>X~>+aM<2%Jp_1+Poml4&Nj1hU$saS5R{2x-PP!Pkt*mcUn?g#*J`l8ur@1qEK8 zs9-AX1|Qlo1mT8}2W&fP%Z*YZKbYHa#CK)n+99de2RWBrBR{+k?x#_U*w5a3$Bz#w z^RROu{!Ns}gANpy%xloI5lwf0YMK^h^6fs9uotQy%xl~UZO{PYK05s7`@=RZF~s`R z#V1gNU>miC^|PU0<2AfxTG007Wv{hrZPoU|8T~2K>6DgZdT0OH@#!`dcHGd;92%|$ zW_&CH>;ppvs6oX%W1;@q6w|TT*bm|5u1sxNXMfJmS3`ce-+1?Vqc2h5LptBvhK!z< z7V3~tgW9H#dTUBaz7v;8k>lJnGd}Y@ba6^czA_shwyR5v%|yeZk4gqv>0yB+Y4-5s;zlEE892=M5g7As=t1!1AhGbbU- z7WCQ^%_Ltk;%9hx{H=dFjW&A4(+(f#>OyYncTBw$?X;3f;7=n%tuPi_ZFGD>pQ!LN z_&+>(9;YThF=}w)dr)($G4KE%7;Y!b^67`qPJ2(I*OEPQ>3Dy;8dp$(HoM74F|T*t zKkgjfy&$A~58Z9+cq@811>SV_ZKh|ezjOXDZhP;P8S`tTiB<002MLw;w~z){>(PX63%3M%Dal<636bByDZ#Ph zE9Qh##&^b{G;D9{EHb4Xv0p5Ob1Uvwl^E|S{NP1qL8O>$+WD7G(^73pcI9^wTN^fK z?`OWdo=i0q?c3fhOjNPi#;|>Vij@u$&b7PV@!es!Q=Xn-nXx#kIl|gFgFw@sF2kNg zXAbqA>4;Tv=uq#ZFe)PN%IR404YQ$|;|o~**2uuiUs1JOA5r-|DBb*7m31=xaB_WY z4FA2Lq&Bjyz0WcCxd`UApEd$~!p4CertBQD<-|f%tYFdUJQ7gJvfaQ_26gcKV=n!q zoF0Nvf(?rbAL(c@dNi24C#{E_KJpj1drlJ+%XF)$H%=wHESgw%vNf9jJ0U7u_$0{V z4|CDx2c+SHbKkX zErD;69YC+yYusd?V$~Vf;9cG2l&*_`)+R=UA^AIXrAe2UH1afUT*0RJh zpn`RO2}e^UYCy9^pBfpCHNNrKX|u08emebCRlT}jg(bkak!PFdjPY3OpjlOLQcKLa zPygqaECm`*n)2FbShcq1)X#<~eA<;n5b?J?rdCzaR#rMrlYDk|6P12V6-%3814`WD zX-|$KMyP;~Dfei+1XbB-tyD_3Zb9wL=KArd{;Z+9x1646oXDjCsU+h&T#6C6-! zZ6J5P_ax+0*PoFggyBg~;NnVAvkw~2YZMO2*JgN47cRtxNSk&MmgRM>(H>giBzS%+~DpeB<9?s|tr*qdU*H%O|rMHwn^K@Kxq; zS(2DE9Wg!8Z&|;wdT-w_$Oq&gCeMOSroNKV57(&V^_JG!wY)BIE0mOj&_x=vafl+8 zWZ?qR*FA1~(>Z4EKDWZC#Hbl?TJtk~%S`IbKWL~pdj7QRdu!9YFRdAU+0#S6+M+-V zSB%?xjU~14rXX&)#c2!Y<2pLN8(8UUOHz5%elx=8D3hXlyb*D_H}u=uiUw%zpsiOV z6qwq791r!{J=i*DeaF|xZ6ICLU@CkRYpF>4{A^A_t#zVHv&$Ir{OO14t>EKXIw_iw z)@qB{vlB=P#IIb$^;DQNsGZ?S*xD3#sM!_V1AN98zuZH&c#9rC{bXbwE-Jdc*j#RS zx%*moqV~G2Em_)gmtXEBf?EvCT!$wj2DzG_dIDO+DNA^;(enmhZj!7U_|roXa>F!T z4wcF7KJGc4=|u2cjZavOqHeTuC}blIw_AjrV@K<+8p7=FGC|Vnn<|p|aK-Fs&s7*q zd?4}ZP?b7&&#FxAXUqG!Wc<=Nm6GU@)z@2uC=650AgThp%mrEf?*D6xt?tTr>ls>- zHjMezbBI2CI2H>VqJ1AJW9%HEj*iMGi4OM;tWR-X}n zx}zOw*VPLrMzOnu_u1wv_XGf3W=(6gUsl}pA9Fce^9Wc~W%qB%--b;yU&MK`ZT8Z!8{y-a)S(@$&b6KC@MO=mNt2q{hS;sR>FVx0@m(d&M z(&WBVqYN%@1{oxi_vzTttoEC!;+h7J8PU;|fK|7)CJywRfBqYAGKjBB8B$aFi@M2RRMXZ9%jimi zvhVilBi}Rd)4~YW9YbkKFX5E@{iL;wWWx7}x7S?6rMC-)5OIy|OK2(?n zzp;z?TB!@q74c0imUOH!ZaaQC%euGG&>XfnQcdGREp?OWxja1Fw{RStbg$gzs&t|2 za%0V~^h%aoc({1fgy++uM=+ft9k{cqFq>xWErsjyVAmCi_^Vqaz!%h&Qv=?q>+ILM zW#d?NN+cbxz^52}HSxT5Cv zCsWMq%Zs(}z@^2Zg(%8js`~aPGkdRAR|b*N-ccjT{H+f}TUz>5IPDCRYaXUWE^!-w zN)rwTE`2I2j^uGzJnVQoab-u+gtY!*EJCL;K|7LTf9XtbqFNG+nqY0rpsbVV*GpU`hdbjBaa2#o+bnn{aw-9m zw0J=l?)a_yy`skMrwd0W3UdLgFHBkvL=g91=)iTtGZU`Lad}Kv@{&khV{*ydtKH*y zzp4P!;h{`idvPgHV27`=0>P>Og5%8~0>R>y#SV-l?aHl_D*>%5Qub8Z-^-+BI0&uC zqhz>x>8>u@dKMt~OW=4SDZzWVu#b9p@MpDGPbtGgYTyLp1xoSn@x>e2SP8Y3N6K9{ z;S_pq*OPYR0aKLod3dHIQ9OG`SbPdZ=OYl}fA1U9`&st8%PfwGudFR;phyWdp!Eqv zm-N^#=Vk?J0d4L>DSE5^kS%6-m}nitzAaU|#oeO2nMy1Z&F%tD=fu#>rZzz18Ft$VlPBhg|m z&Cb3CZ`7g+X&=J4>sORNg%S(Vv4mZ4ig?q}_R-X>=xH8hZn<-1*(_b9x zR9a0+9^}W?`g#7V*}>Z9jnO`B-^`_74BU312855Vi8ORJ(-rh%aH0bE?(lsd zxb%O2r1amNR4HO2-^E?}Q{K;f-0L0zG^6;yt%irv?8fJcWat<*)?XUK8h`NZSF@_? zf;^5%5%@S6Ztc&LIv<&h+cCW#Z=`g!DYB$uWtgj@qg%jFhD+wnPQ<3a+;qtdHgD{l zC`_fc|7FFN?xO5}ywVD@(LrsEk-+!OY>2TAZqreS4PkUf$dia|Z5wzbU%V{SUP zf1?PGYWpj(bJwXHeg{C$7!L3UhVmv^qLH3_;G@IqdL-Okf-$du!non$h zN=lnQiv20772Nyp>Dwc2Q%Elj+`EIGN1q68AU7i`goOX|k30l6|AqPPl+dm-Dwtg9 z)KHsl`1a)K`41qvFSs=d%k<+JB2^o|H7`?oB6xlCeh#ldn_SQZc;ER+Bvs*r^_UIL z6f#N?KD4MWPwQzJght8*HzIyUNK#ui)K)NGQ=3r0nVO7RhllHTV8Ue&3`mv_Z*6XC!|F_% zzf?pgiMFxYMbTZTA}0V1V?+5HiTZ`SFBYr|Ge>{!F|UE>Tk}v+2rWw z>DOGL4U-h#O|+K$%2O#nOWtxs1msxMG|Rv#LgjSVEg;3t*7`U!&WLbJN9otNk#O2c zRkkJ~E@R!U+1~$WYsMR9aU>V7rjK=(8%wHQ+`+2+!Eq*tV|=E#!aT&xy3{#EE;%h8 z>Ff2R+ev4E>4Iyh8Kr$0#qYdaJ?tdBj@>u(O#yYIlFcu<^*D-t_UQ z#2IOq=!na`hRl190}X?e1SxB(8_HcmaM;Vf*RUt7<5p{NNrzdt!uBO<+I}!|Y(u~# z>yCCY#rIXGQ3z@%*!k1pI9iC$>FjCTzs6*g^o2hend!nzo-~U7HkSyk@JXCH*rh=2 zk~{t@aG27;y;Byt%s9-T?;6`+*v*dKek)iwee-!a@)68JP4h|P&^_C0|7CmppPvqQ zh@8~aZ$JDtb6olX*)1069~VDo9N2pmn`|i(=`G~4wd2GtK)SKIt@#*5PojC5{yGHp zJy2}b)WYQSmI93C=E&5NSJud0XLL-~@VU6q6 zyVMUGV#Mn@jSssFmD!tS`OUxjlrYDIVC1HtMb1V)=WhkJ7&d?~HpDXUxM*q9-et$8 zm0}o=Ly##(d~C=P|5c&|ci9#Ga9_P^g-c+&be$h-gei@7b7U8|^}SKC{#}1VTV<1i zAvHtd|GfIY2j|$caLD9)GSjxRfUDTG%os#Y%;&?)fcY3x0qc~%xs zuK=@18JWHzOX_Gm_f2MZ{C&H708Nw3NsU#;XV%f@@E{%YfX92B0=wiAo(!75T@vfJ zI2rymK4}4aXTi`V5X}WYmeF_Ub zDQq~1Us+B-GNyn2UR}HzyRql}zRNVf6@_(A89iLU_$qH>vudeR)wPPY*GBLX`CX=m zK9lvc;wLv49&fN<{55w@7!PBb+*R&$GFozDy0@7j0Y9xs~> zpDr{KjgpzZ`=t9;t;xelp0D&?k`hL)T5FQsot#^vBc{K*KO*ke_ZIHIa9q`fNkVXc zy12Fyf8^Lq*E*3G=HwmQfRuc(#_77Su4J+V zqFizgeZv+lm{%RChZntWx!BRB>ok$dUu8p4og5EN3ku{1g6mXnn;KKqWd?t-6n97O z+hg|V_7dJ;(ZHES4_%CT+0p8<6KgY)?v;>cI$*G6A_P}iXuGipGiR1~@ z1vu zH@UY2)B(R6%T+gGd_J*OGE86ny*t{m&}`{1!-3|~p1c!&r{i%>m#TpOy`1*Y@HEb? zL~P;$hqioA05AIc^G{SVVSmR~)&Z0^`EH?~(-1!aEn)ZlT=kG-gL7fdE-R3S=?n*W zbhL%!hjtZg&xBmrE5Q|X4mdOVhw&ckN@${=2oi{eIR8ru9b)z%-ST2 z|9Ka#LhhbTab+~lbJ9TIj5E-8p!#=BgDEyHy9d+#p7gh$2;-80KMmAnK1V&y=L>I; z?`Uvc7<2x@yInWzgTkLV2JAXISh3z>Bp5c}`&gFB%Qz6LC6$niw~Xxamh@#9zQ^my zUBh^Z8hU?kzM=UJIzwK&dL<~CD$HB7k=$`N`C1Roc&1PIFKEgU?9~jB$Q~_jE*xVv z(v63_4Yt5h1BmA(J7L>ImrowdB5ydx=ps|IU~H{EmCLj)P74n2-33V2olfLtS4q6J zWWKtbZ1It-*Y1tz!?m^Up_K-GU)(+;<-fu)?EFaQpBIO3+2H+1(t0`FQ;HlNd6rqs z3qeoTuWc;UB(q9_3b3F{z)n-P38EJVnJhhwjtP^n$1C63o$PMJrawrS)qn$E!HVpE zU;&G2P6O`j%`anxoT;$s;i%Jq%`beiH%^mi;t_B{4)QaynyBPAaQ%Hf!eT-%+Xf&M z@WA0+ImGT`Es(IQK!(`zKd3esSFa(f6^UjZF^d%tNo(=^^&NrdZm(bd- z@Ziinsp7nG2WuSSneu*4AXnrwVu~8K{bpW4TRX&*R{$kYiVD%>*5pwyyHykX-5Ig4 zu!l>-R;^k-1oV?_xwybC|tHx1FjWm50a4{P??4 zMMgOeH0S4~4<#!#5f^?(cEpXj9RunRYu~;o%}3hWI>1ICr^%!BZOrFi1D5P8?~`VX)#JGyMe1ja~zRgM_AQr_bb5E8~MtzTDP>glq~ zDhOIkEE&APNVF`~zc)kG9d>?7 z%I!Zu;SortUDd43De!*H>l=h)n2mmTn=Lnsm2*@iC3Vbb<01m3iYA-~4~MM7Z1RZB zbZDKXsTuUV%Zk{RW$^=~JiN^u0t6;KZy{h&gd0h#z-WPchK(u>?}a-~Z>O`Z?7L*+sa|NArtIe~`M0wsM)G<*R=Kck213 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_push_timing_test_local.png index da7297bffa9cc9ab60cbb60c0310cf457410c012..18cca76c2944f349116169318174bf14e71260a1 100644 GIT binary patch literal 43334 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 literal 8477 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/random_int_find_find_timing_test_tree_local.png index 83105202a4835efb176b993ef0c430d8b8f09c2a..dd7c184dd435a19272e88fad490ddb76c8999d57 100644 GIT binary patch literal 30133 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 literal 7377 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 literal 9361 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

p6T*Gs*qb5OL1T#+S_h1s>$>neOj=@xrpL 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 ZU3N>VCldy4`-G=s8Y;TVm5NUz{{zqPRO0{u diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_order_statistics_timing_test_local.png index 2b921743f7c2c05b8f40ff4df168cde83ae4309f..9f46319f8081010d6b1bc88819ed44ed937c956a 100644 GIT binary patch literal 29805 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 literal 6734 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 CeU&l* diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_node_tree_local.png index bb100084b3fc7feb4ed638f60e6ff5dffe048d29..c98488c041a8fcb2c7a7f5d2adb37cd533a7e05f 100644 GIT binary patch literal 28340 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 W*Wa6?UkDKJgEzQ@D?aaf=f40|Z%`)y literal 6690 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 F{|3=6n;ZZD diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_pat_trie_local.png index 228de144222a65b8dcbae8bfacd189f3ce2c8bee..eff7eefb09d89c0099eabda19010d4832f37b291 100644 GIT binary patch literal 22337 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 literal 6011 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

dDYiT>18&8rmn!;b+?QX`eN0JF1f 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_insert_timing_test_vector_tree_local.png index cecb8a10750c9c499c9b56a76874f0a8619810cd..f67156d452ee6e0f7cb39df697dcd288533ba525 100644 GIT binary patch literal 22889 zcmb@ucQ~7G{6CtAJ!@07_oyPMt*T0FYPCkAh}wHpjnG!DR>h26v-aLps9CX9sTHI4 zR=e~(KHuwme&^qFu9NE`R~~on=Y7BD>pdQk`nu{Aq_;^yAP@yiViMn~(r|l}-27x$0utzFJ{^{FueksO3j{hB;+LMaaevS;&ctFF# zMNCX05M~Gw;OKCZta@w{NzxN;8TmMdb2S-mB-Vps5{aPBXQWr-h|0-fA^;oYY1j)q zncR!@BD|L@FXpwDgtl(WTvNi%*=KqEB!4nFXTMixhmcuI_ZrIAeB2CiACg_0{oEZ- z_1~2QeskxG`-F?4-&6uFq&sOLIW_-d2e+wQ;HH<1ovO~BE} z4FeM5TRdzSZ@9tKPh+*-(j5pFN2g|7VX- z>;E{~UD(OXj@peHO{b_OW`7r$e85JiV2fZcRpp3eUpo*7iuASWK(^@EAXjrpT!Oecmt3Qw-9(cL_LDWWXj9oQ|2i2R9QqSs$D>w{^O|_ppY# zyJ3BB8vz4Bd5{0#=Xna49(jSx

    hSJzmW(}UlB4nAkO;(Sb@_yOsIblT+;3O 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�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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_text_lor_find_timing_test_local.png index 26f71510ff0ce46890171c6b9163ff74f3da79ef..960803b05f5ae58fcc6f52291ae337558bc7f94a 100644 GIT binary patch literal 28354 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 literal 7796 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/string_trie_e_access_traits.html b/libstdc++-v3/doc/html/ext/pb_ds/trie_string_access_traits.html similarity index 100% rename from libstdc++-v3/doc/html/ext/pb_ds/string_trie_e_access_traits.html rename to libstdc++-v3/doc/html/ext/pb_ds/trie_string_access_traits.html diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 27aff0d2ddd..73b858993d0 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -201,7 +201,7 @@ pb_subdirs = \ ${pb_builddir}/detail/pairing_heap_ \ ${pb_builddir}/detail/splay_tree_ \ ${pb_builddir}/detail/list_update_map_ \ - ${pb_builddir}/detail/basic_tree_policy \ + ${pb_builddir}/detail/branch_policy \ ${pb_builddir}/detail/trie_policy \ ${pb_builddir}/detail/gp_hash_table_map_ \ ${pb_builddir}/detail/tree_policy \ @@ -236,13 +236,12 @@ pb_headers1 = \ ${pb_srcdir}/tag_and_trait.hpp \ ${pb_srcdir}/tree_policy.hpp \ ${pb_srcdir}/trie_policy.hpp \ - ${pb_srcdir}/detail/basic_tree_policy/basic_tree_policy_base.hpp \ - ${pb_srcdir}/detail/basic_tree_policy/null_node_metadata.hpp \ - ${pb_srcdir}/detail/basic_tree_policy/traits.hpp \ - ${pb_srcdir}/detail/basic_types.hpp \ + ${pb_srcdir}/detail/branch_policy/branch_policy.hpp \ + ${pb_srcdir}/detail/branch_policy/null_node_metadata.hpp \ + ${pb_srcdir}/detail/branch_policy/traits.hpp \ ${pb_srcdir}/detail/binary_heap_/binary_heap_.hpp \ ${pb_srcdir}/detail/binary_heap_/const_iterator.hpp \ - ${pb_srcdir}/detail/binary_heap_/const_point_iterator.hpp \ + ${pb_srcdir}/detail/binary_heap_/point_const_iterator.hpp \ ${pb_srcdir}/detail/binary_heap_/constructors_destructor_fn_imps.hpp \ ${pb_srcdir}/detail/binary_heap_/debug_fn_imps.hpp \ ${pb_srcdir}/detail/binary_heap_/entry_cmp.hpp \ @@ -266,9 +265,7 @@ pb_headers1 = \ ${pb_srcdir}/detail/binomial_heap_/binomial_heap_.hpp \ ${pb_srcdir}/detail/binomial_heap_/constructors_destructor_fn_imps.hpp \ ${pb_srcdir}/detail/binomial_heap_/debug_fn_imps.hpp \ - ${pb_srcdir}/detail/bin_search_tree_/bin_search_tree_.hpp \ - ${pb_srcdir}/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp \ - ${pb_srcdir}/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp + ${pb_srcdir}/detail/bin_search_tree_/bin_search_tree_.hpp pb_headers2 = \ ${pb_srcdir}/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp \ @@ -359,7 +356,7 @@ pb_headers4 = \ ${pb_srcdir}/detail/hash_fn/sample_ranged_probe_fn.hpp \ ${pb_srcdir}/detail/hash_fn/sample_range_hashing.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/const_iterator.hpp \ - ${pb_srcdir}/detail/left_child_next_sibling_heap_/const_point_iterator.hpp \ + ${pb_srcdir}/detail/left_child_next_sibling_heap_/point_const_iterator.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp \ @@ -368,7 +365,6 @@ pb_headers4 = \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/node.hpp \ - ${pb_srcdir}/detail/left_child_next_sibling_heap_/null_metadata.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp \ ${pb_srcdir}/detail/list_update_map_/constructor_destructor_fn_imps.hpp \ @@ -381,12 +377,9 @@ pb_headers4 = \ ${pb_srcdir}/detail/list_update_map_/iterators_fn_imps.hpp \ ${pb_srcdir}/detail/list_update_map_/lu_map_.hpp \ ${pb_srcdir}/detail/list_update_map_/trace_fn_imps.hpp \ - ${pb_srcdir}/detail/list_update_policy/counter_lu_metadata.hpp \ - ${pb_srcdir}/detail/list_update_policy/counter_lu_policy_imp.hpp \ - ${pb_srcdir}/detail/list_update_policy/mtf_lu_policy_imp.hpp \ + ${pb_srcdir}/detail/list_update_policy/lu_counter_metadata.hpp \ ${pb_srcdir}/detail/list_update_policy/sample_update_policy.hpp \ ${pb_srcdir}/detail/debug_map_base.hpp \ - ${pb_srcdir}/detail/ov_tree_map_/cond_dtor.hpp \ ${pb_srcdir}/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp \ ${pb_srcdir}/detail/ov_tree_map_/debug_fn_imps.hpp \ ${pb_srcdir}/detail/ov_tree_map_/erase_fn_imps.hpp \ @@ -407,30 +400,20 @@ pb_headers5 = \ ${pb_srcdir}/detail/pairing_heap_/insert_fn_imps.hpp \ ${pb_srcdir}/detail/pairing_heap_/pairing_heap_.hpp \ ${pb_srcdir}/detail/pairing_heap_/split_join_fn_imps.hpp \ - ${pb_srcdir}/detail/pat_trie_/child_iterator.hpp \ - ${pb_srcdir}/detail/pat_trie_/cond_dtor_entry_dealtor.hpp \ - ${pb_srcdir}/detail/pat_trie_/const_child_iterator.hpp \ ${pb_srcdir}/detail/pat_trie_/constructors_destructor_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/debug_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/erase_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/find_fn_imps.hpp \ - ${pb_srcdir}/detail/pat_trie_/head.hpp \ ${pb_srcdir}/detail/pat_trie_/info_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/insert_join_fn_imps.hpp \ - ${pb_srcdir}/detail/pat_trie_/internal_node.hpp \ ${pb_srcdir}/detail/pat_trie_/iterators_fn_imps.hpp \ - ${pb_srcdir}/detail/pat_trie_/leaf.hpp \ - ${pb_srcdir}/detail/pat_trie_/node_base.hpp \ - ${pb_srcdir}/detail/pat_trie_/node_iterators.hpp \ - ${pb_srcdir}/detail/pat_trie_/node_metadata_base.hpp \ ${pb_srcdir}/detail/pat_trie_/pat_trie_.hpp \ - ${pb_srcdir}/detail/pat_trie_/point_iterators.hpp \ + ${pb_srcdir}/detail/pat_trie_/pat_trie_base.hpp \ ${pb_srcdir}/detail/pat_trie_/policy_access_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/r_erase_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/rotate_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/split_fn_imps.hpp \ - ${pb_srcdir}/detail/pat_trie_/split_join_branch_bag.hpp \ - ${pb_srcdir}/detail/pat_trie_/synth_e_access_traits.hpp \ + ${pb_srcdir}/detail/pat_trie_/synth_access_traits.hpp \ ${pb_srcdir}/detail/pat_trie_/trace_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/traits.hpp \ ${pb_srcdir}/detail/pat_trie_/update_fn_imps.hpp \ @@ -487,22 +470,20 @@ pb_headers7 = \ ${pb_srcdir}/detail/thin_heap_/thin_heap_.hpp \ ${pb_srcdir}/detail/thin_heap_/trace_fn_imps.hpp \ ${pb_srcdir}/detail/tree_policy/node_metadata_selector.hpp \ - ${pb_srcdir}/detail/tree_policy/null_node_update_imp.hpp \ ${pb_srcdir}/detail/tree_policy/order_statistics_imp.hpp \ ${pb_srcdir}/detail/tree_policy/sample_tree_node_update.hpp \ ${pb_srcdir}/detail/tree_trace_base.hpp \ ${pb_srcdir}/detail/trie_policy/node_metadata_selector.hpp \ - ${pb_srcdir}/detail/trie_policy/null_node_update_imp.hpp \ ${pb_srcdir}/detail/trie_policy/order_statistics_imp.hpp \ ${pb_srcdir}/detail/trie_policy/prefix_search_node_update_imp.hpp \ - ${pb_srcdir}/detail/trie_policy/sample_trie_e_access_traits.hpp \ + ${pb_srcdir}/detail/trie_policy/sample_trie_access_traits.hpp \ ${pb_srcdir}/detail/trie_policy/sample_trie_node_update.hpp \ - ${pb_srcdir}/detail/trie_policy/string_trie_e_access_traits_imp.hpp \ + ${pb_srcdir}/detail/trie_policy/trie_string_access_traits_imp.hpp \ ${pb_srcdir}/detail/trie_policy/trie_policy_base.hpp \ ${pb_srcdir}/detail/types_traits.hpp \ ${pb_srcdir}/detail/type_utils.hpp \ ${pb_srcdir}/detail/unordered_iterator/const_iterator.hpp \ - ${pb_srcdir}/detail/unordered_iterator/const_point_iterator.hpp \ + ${pb_srcdir}/detail/unordered_iterator/point_const_iterator.hpp \ ${pb_srcdir}/detail/unordered_iterator/iterator.hpp \ ${pb_srcdir}/detail/unordered_iterator/point_iterator.hpp diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index e7f7951d427..aa908133092 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -451,7 +451,7 @@ pb_subdirs = \ ${pb_builddir}/detail/pairing_heap_ \ ${pb_builddir}/detail/splay_tree_ \ ${pb_builddir}/detail/list_update_map_ \ - ${pb_builddir}/detail/basic_tree_policy \ + ${pb_builddir}/detail/branch_policy \ ${pb_builddir}/detail/trie_policy \ ${pb_builddir}/detail/gp_hash_table_map_ \ ${pb_builddir}/detail/tree_policy \ @@ -486,13 +486,12 @@ pb_headers1 = \ ${pb_srcdir}/tag_and_trait.hpp \ ${pb_srcdir}/tree_policy.hpp \ ${pb_srcdir}/trie_policy.hpp \ - ${pb_srcdir}/detail/basic_tree_policy/basic_tree_policy_base.hpp \ - ${pb_srcdir}/detail/basic_tree_policy/null_node_metadata.hpp \ - ${pb_srcdir}/detail/basic_tree_policy/traits.hpp \ - ${pb_srcdir}/detail/basic_types.hpp \ + ${pb_srcdir}/detail/branch_policy/branch_policy.hpp \ + ${pb_srcdir}/detail/branch_policy/null_node_metadata.hpp \ + ${pb_srcdir}/detail/branch_policy/traits.hpp \ ${pb_srcdir}/detail/binary_heap_/binary_heap_.hpp \ ${pb_srcdir}/detail/binary_heap_/const_iterator.hpp \ - ${pb_srcdir}/detail/binary_heap_/const_point_iterator.hpp \ + ${pb_srcdir}/detail/binary_heap_/point_const_iterator.hpp \ ${pb_srcdir}/detail/binary_heap_/constructors_destructor_fn_imps.hpp \ ${pb_srcdir}/detail/binary_heap_/debug_fn_imps.hpp \ ${pb_srcdir}/detail/binary_heap_/entry_cmp.hpp \ @@ -516,9 +515,7 @@ pb_headers1 = \ ${pb_srcdir}/detail/binomial_heap_/binomial_heap_.hpp \ ${pb_srcdir}/detail/binomial_heap_/constructors_destructor_fn_imps.hpp \ ${pb_srcdir}/detail/binomial_heap_/debug_fn_imps.hpp \ - ${pb_srcdir}/detail/bin_search_tree_/bin_search_tree_.hpp \ - ${pb_srcdir}/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp \ - ${pb_srcdir}/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp + ${pb_srcdir}/detail/bin_search_tree_/bin_search_tree_.hpp pb_headers2 = \ ${pb_srcdir}/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp \ @@ -609,7 +606,7 @@ pb_headers4 = \ ${pb_srcdir}/detail/hash_fn/sample_ranged_probe_fn.hpp \ ${pb_srcdir}/detail/hash_fn/sample_range_hashing.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/const_iterator.hpp \ - ${pb_srcdir}/detail/left_child_next_sibling_heap_/const_point_iterator.hpp \ + ${pb_srcdir}/detail/left_child_next_sibling_heap_/point_const_iterator.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp \ @@ -618,7 +615,6 @@ pb_headers4 = \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/node.hpp \ - ${pb_srcdir}/detail/left_child_next_sibling_heap_/null_metadata.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp \ ${pb_srcdir}/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp \ ${pb_srcdir}/detail/list_update_map_/constructor_destructor_fn_imps.hpp \ @@ -631,12 +627,9 @@ pb_headers4 = \ ${pb_srcdir}/detail/list_update_map_/iterators_fn_imps.hpp \ ${pb_srcdir}/detail/list_update_map_/lu_map_.hpp \ ${pb_srcdir}/detail/list_update_map_/trace_fn_imps.hpp \ - ${pb_srcdir}/detail/list_update_policy/counter_lu_metadata.hpp \ - ${pb_srcdir}/detail/list_update_policy/counter_lu_policy_imp.hpp \ - ${pb_srcdir}/detail/list_update_policy/mtf_lu_policy_imp.hpp \ + ${pb_srcdir}/detail/list_update_policy/lu_counter_metadata.hpp \ ${pb_srcdir}/detail/list_update_policy/sample_update_policy.hpp \ ${pb_srcdir}/detail/debug_map_base.hpp \ - ${pb_srcdir}/detail/ov_tree_map_/cond_dtor.hpp \ ${pb_srcdir}/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp \ ${pb_srcdir}/detail/ov_tree_map_/debug_fn_imps.hpp \ ${pb_srcdir}/detail/ov_tree_map_/erase_fn_imps.hpp \ @@ -657,30 +650,20 @@ pb_headers5 = \ ${pb_srcdir}/detail/pairing_heap_/insert_fn_imps.hpp \ ${pb_srcdir}/detail/pairing_heap_/pairing_heap_.hpp \ ${pb_srcdir}/detail/pairing_heap_/split_join_fn_imps.hpp \ - ${pb_srcdir}/detail/pat_trie_/child_iterator.hpp \ - ${pb_srcdir}/detail/pat_trie_/cond_dtor_entry_dealtor.hpp \ - ${pb_srcdir}/detail/pat_trie_/const_child_iterator.hpp \ ${pb_srcdir}/detail/pat_trie_/constructors_destructor_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/debug_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/erase_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/find_fn_imps.hpp \ - ${pb_srcdir}/detail/pat_trie_/head.hpp \ ${pb_srcdir}/detail/pat_trie_/info_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/insert_join_fn_imps.hpp \ - ${pb_srcdir}/detail/pat_trie_/internal_node.hpp \ ${pb_srcdir}/detail/pat_trie_/iterators_fn_imps.hpp \ - ${pb_srcdir}/detail/pat_trie_/leaf.hpp \ - ${pb_srcdir}/detail/pat_trie_/node_base.hpp \ - ${pb_srcdir}/detail/pat_trie_/node_iterators.hpp \ - ${pb_srcdir}/detail/pat_trie_/node_metadata_base.hpp \ ${pb_srcdir}/detail/pat_trie_/pat_trie_.hpp \ - ${pb_srcdir}/detail/pat_trie_/point_iterators.hpp \ + ${pb_srcdir}/detail/pat_trie_/pat_trie_base.hpp \ ${pb_srcdir}/detail/pat_trie_/policy_access_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/r_erase_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/rotate_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/split_fn_imps.hpp \ - ${pb_srcdir}/detail/pat_trie_/split_join_branch_bag.hpp \ - ${pb_srcdir}/detail/pat_trie_/synth_e_access_traits.hpp \ + ${pb_srcdir}/detail/pat_trie_/synth_access_traits.hpp \ ${pb_srcdir}/detail/pat_trie_/trace_fn_imps.hpp \ ${pb_srcdir}/detail/pat_trie_/traits.hpp \ ${pb_srcdir}/detail/pat_trie_/update_fn_imps.hpp \ @@ -737,22 +720,20 @@ pb_headers7 = \ ${pb_srcdir}/detail/thin_heap_/thin_heap_.hpp \ ${pb_srcdir}/detail/thin_heap_/trace_fn_imps.hpp \ ${pb_srcdir}/detail/tree_policy/node_metadata_selector.hpp \ - ${pb_srcdir}/detail/tree_policy/null_node_update_imp.hpp \ ${pb_srcdir}/detail/tree_policy/order_statistics_imp.hpp \ ${pb_srcdir}/detail/tree_policy/sample_tree_node_update.hpp \ ${pb_srcdir}/detail/tree_trace_base.hpp \ ${pb_srcdir}/detail/trie_policy/node_metadata_selector.hpp \ - ${pb_srcdir}/detail/trie_policy/null_node_update_imp.hpp \ ${pb_srcdir}/detail/trie_policy/order_statistics_imp.hpp \ ${pb_srcdir}/detail/trie_policy/prefix_search_node_update_imp.hpp \ - ${pb_srcdir}/detail/trie_policy/sample_trie_e_access_traits.hpp \ + ${pb_srcdir}/detail/trie_policy/sample_trie_access_traits.hpp \ ${pb_srcdir}/detail/trie_policy/sample_trie_node_update.hpp \ - ${pb_srcdir}/detail/trie_policy/string_trie_e_access_traits_imp.hpp \ + ${pb_srcdir}/detail/trie_policy/trie_string_access_traits_imp.hpp \ ${pb_srcdir}/detail/trie_policy/trie_policy_base.hpp \ ${pb_srcdir}/detail/types_traits.hpp \ ${pb_srcdir}/detail/type_utils.hpp \ ${pb_srcdir}/detail/unordered_iterator/const_iterator.hpp \ - ${pb_srcdir}/detail/unordered_iterator/const_point_iterator.hpp \ + ${pb_srcdir}/detail/unordered_iterator/point_const_iterator.hpp \ ${pb_srcdir}/detail/unordered_iterator/iterator.hpp \ ${pb_srcdir}/detail/unordered_iterator/point_iterator.hpp diff --git a/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp b/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp index 12a3fc501c9..d366f431ccf 100644 --- a/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp +++ b/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -46,90 +46,20 @@ #include #include #include -#include +#include namespace __gnu_pbds { - /** @defgroup pbds Policy-Based Data Structures - * @ingroup extensions - * - * This is a library of policy-based elementary data structures: - * associative containers and priority queues. It is designed for - * high-performance, flexibility, semantic safety, and conformance - * to the corresponding containers in std (except for some points - * where it differs by design). - * - * For details, see: - * http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html - * + /** + * @addtogroup pbds * @{ */ - -#define PB_DS_BASE_C_DEC \ - detail::container_base_dispatch::type - /// An abstract basic associative container. - template - class container_base : public PB_DS_BASE_C_DEC - { - private: - typedef typename PB_DS_BASE_C_DEC base_type; - - public: - typedef Tag container_category; - typedef Allocator allocator_type; - typedef typename allocator_type::size_type size_type; - typedef typename allocator_type::difference_type difference_type; - - // key_type - typedef typename allocator_type::template rebind::other::value_type key_type; - typedef typename allocator_type::template rebind::other key_rebind; - typedef typename key_rebind::reference key_reference; - typedef typename key_rebind::const_reference const_key_reference; - typedef typename key_rebind::pointer key_pointer; - typedef typename key_rebind::const_pointer const_key_pointer; - - // mapped_type - typedef Mapped mapped_type; - typedef typename allocator_type::template rebind::other mapped_rebind; - typedef typename mapped_rebind::reference mapped_reference; - typedef typename mapped_rebind::const_reference const_mapped_reference; - typedef typename mapped_rebind::pointer mapped_pointer; - typedef typename mapped_rebind::const_pointer const_mapped_pointer; - - // value_type - typedef typename base_type::value_type value_type; - typedef typename allocator_type::template rebind::other value_rebind; - typedef typename value_rebind::reference reference; - typedef typename value_rebind::const_reference const_reference; - typedef typename value_rebind::pointer pointer; - typedef typename value_rebind::const_pointer const_pointer; - - // iterators - typedef typename base_type::iterator iterator; - typedef typename base_type::const_iterator const_iterator; - typedef typename base_type::point_iterator point_iterator; - typedef typename base_type::const_point_iterator const_point_iterator; - - virtual - ~container_base() { } - - protected: -#define PB_DS_CLASS_NAME container_base -#include -#undef PB_DS_CLASS_NAME - }; - -#undef PB_DS_BASE_C_DEC - - -#define PB_DS_BASE_C_DEC \ - container_base >::type, Policy_TL>::type, Allocator> +#define PB_DS_HASH_BASE \ + detail::container_base_dispatch >::type, Policy_Tl>::type>::type /// An abstract basic hash-based associative container. template - class basic_hash_table : public PB_DS_BASE_C_DEC + typename Policy_Tl, + typename _Alloc> + class basic_hash_table : public PB_DS_HASH_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; + typedef typename PB_DS_HASH_BASE base_type; public: virtual @@ -156,17 +86,17 @@ namespace __gnu_pbds #undef PB_DS_CLASS_NAME private: - basic_hash_table& + basic_hash_table& operator=(const base_type&); }; -#undef PB_DS_BASE_C_DEC +#undef PB_DS_HASH_BASE -#define PB_DS_BASE_C_DEC \ +#define PB_DS_CC_HASH_BASE \ basic_hash_table::type, Allocator> + typename __gnu_cxx::typelist::create1::type, _Alloc> /// A concrete collision-chaining hash-based associative container. template::type, bool Store_Hash = detail::default_store_hash, - typename Allocator = std::allocator > - class cc_hash_table : public PB_DS_BASE_C_DEC + typename _Alloc = std::allocator > + class cc_hash_table : public PB_DS_CC_HASH_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_CC_HASH_BASE base_type; public: - typedef Hash_Fn hash_fn; - typedef Eq_Fn eq_fn; - typedef Resize_Policy resize_policy; - typedef Comb_Hash_Fn comb_hash_fn; + typedef cc_hash_tag container_category; + typedef Hash_Fn hash_fn; + typedef Eq_Fn eq_fn; + typedef Resize_Policy resize_policy; + typedef Comb_Hash_Fn comb_hash_fn; // Default constructor. cc_hash_table() { } // Constructor taking some policy objects. r_hash_fn will be // copied by the Hash_Fn object of the container object. - cc_hash_table(const hash_fn& h) + cc_hash_table(const hash_fn& h) : base_type(h) { } // Constructor taking some policy objects. r_hash_fn will be @@ -217,8 +148,8 @@ namespace __gnu_pbds // r_comb_hash_fn will be copied by the comb_hash_fn object of the // container object, and r_resize_policy will be copied by the // resize_policy object of the container object. - cc_hash_table(const hash_fn& h, const eq_fn& e, const comb_hash_fn& ch, - const resize_policy& rp) + cc_hash_table(const hash_fn& h, const eq_fn& e, const comb_hash_fn& ch, + const resize_policy& rp) : base_type(h, e, ch, rp) { } // Constructor taking __iterators to a range of value_types. The @@ -269,7 +200,7 @@ namespace __gnu_pbds // object of the container object, and r_resize_policy will be // copied by the resize_policy object of the container object. template - cc_hash_table(It first, It last, const hash_fn& h, const eq_fn& e, + cc_hash_table(It first, It last, const hash_fn& h, const eq_fn& e, const comb_hash_fn& ch, const resize_policy& rp) : base_type(h, e, ch, rp) { this->copy_from_range(first, last); } @@ -281,7 +212,7 @@ namespace __gnu_pbds virtual ~cc_hash_table() { } - cc_hash_table& + cc_hash_table& operator=(const cc_hash_table& other) { if (this != &other) @@ -297,13 +228,13 @@ namespace __gnu_pbds { base_type::swap(other); } }; -#undef PB_DS_BASE_C_DEC +#undef PB_DS_CC_HASH_BASE -#define PB_DS_BASE_C_DEC \ +#define PB_DS_GP_HASH_BASE \ basic_hash_table::type, Allocator> + typename __gnu_cxx::typelist::create2::type, _Alloc> /// A concrete general-probing hash-based associative container. template::type, typename Resize_Policy = typename detail::default_resize_policy::type, bool Store_Hash = detail::default_store_hash, - typename Allocator = std::allocator > - class gp_hash_table : public PB_DS_BASE_C_DEC + typename _Alloc = std::allocator > + class gp_hash_table : public PB_DS_GP_HASH_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_GP_HASH_BASE base_type; public: - typedef Hash_Fn hash_fn; - typedef Eq_Fn eq_fn; - typedef Comb_Probe_Fn comb_probe_fn; - typedef Probe_Fn probe_fn; - typedef Resize_Policy resize_policy; + typedef gp_hash_tag container_category; + typedef Hash_Fn hash_fn; + typedef Eq_Fn eq_fn; + typedef Comb_Probe_Fn comb_probe_fn; + typedef Probe_Fn probe_fn; + typedef Resize_Policy resize_policy; // Default constructor. gp_hash_table() { } @@ -356,7 +288,7 @@ namespace __gnu_pbds // r_comb_probe_fn will be copied by the comb_probe_fn object of // the container object, and r_probe_fn will be copied by the // probe_fn object of the container object. - gp_hash_table(const hash_fn& h, const eq_fn& e, const comb_probe_fn& cp, + gp_hash_table(const hash_fn& h, const eq_fn& e, const comb_probe_fn& cp, const probe_fn& p) : base_type(h, e, cp, p) { } @@ -367,7 +299,7 @@ namespace __gnu_pbds // the container object, r_probe_fn will be copied by the probe_fn // object of the container object, and r_resize_policy will be // copied by the Resize_Policy object of the container object. - gp_hash_table(const hash_fn& h, const eq_fn& e, const comb_probe_fn& cp, + gp_hash_table(const hash_fn& h, const eq_fn& e, const comb_probe_fn& cp, const probe_fn& p, const resize_policy& rp) : base_type(h, e, cp, p, rp) { } @@ -406,7 +338,7 @@ namespace __gnu_pbds // object, and r_comb_probe_fn will be copied by the comb_probe_fn // object of the container object. template - gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e, + gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e, const comb_probe_fn& cp) : base_type(h, e, cp) { base_type::copy_from_range(first, last); } @@ -420,7 +352,7 @@ namespace __gnu_pbds // object of the container object, and r_probe_fn will be copied // by the probe_fn object of the container object. template - gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e, + gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e, const comb_probe_fn& cp, const probe_fn& p) : base_type(h, e, cp, p) { base_type::copy_from_range(first, last); } @@ -436,8 +368,8 @@ namespace __gnu_pbds // r_resize_policy will be copied by the resize_policy object of // the container object. template - gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e, - const comb_probe_fn& cp, const probe_fn& p, + gp_hash_table(It first, It last, const hash_fn& h, const eq_fn& e, + const comb_probe_fn& cp, const probe_fn& p, const resize_policy& rp) : base_type(h, e, cp, p, rp) { base_type::copy_from_range(first, last); } @@ -449,7 +381,7 @@ namespace __gnu_pbds virtual ~gp_hash_table() { } - gp_hash_table& + gp_hash_table& operator=(const gp_hash_table& other) { if (this != &other) @@ -465,56 +397,58 @@ namespace __gnu_pbds { base_type::swap(other); } }; -#undef PB_DS_BASE_C_DEC +#undef PB_DS_GP_HASH_BASE - -#define PB_DS_BASE_C_DEC \ - container_base +#define PB_DS_BRANCH_BASE \ + detail::container_base_dispatch::type /// An abstract basic tree-like (tree, trie) associative container. - template - class basic_tree : public PB_DS_BASE_C_DEC + template + class basic_branch : public PB_DS_BRANCH_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; + typedef typename PB_DS_BRANCH_BASE base_type; public: - typedef Node_Update node_update; + typedef Node_Update node_update; virtual - ~basic_tree() { } + ~basic_branch() { } protected: -#define PB_DS_CLASS_NAME basic_tree +#define PB_DS_CLASS_NAME basic_branch #include #undef PB_DS_CLASS_NAME }; -#undef PB_DS_BASE_C_DEC +#undef PB_DS_BRANCH_BASE -#define PB_DS_TREE_NODE_AND_IT_TRAITS_C_DEC \ - detail::tree_traits +#define PB_DS_TREE_NODE_AND_IT_TRAITS \ + detail::tree_traits -#define PB_DS_BASE_C_DEC \ - basic_tree::type, Allocator> +#define PB_DS_TREE_BASE \ + basic_branch::type, _Alloc> - /// A concrete basic tree-based associative container. + /// A basic tree-based associative container. template, typename Tag = rb_tree_tag, - template - class Node_Update = __gnu_pbds::null_tree_node_update, - typename Allocator = std::allocator > - class tree : public PB_DS_BASE_C_DEC + template + class Node_Update = null_node_update, + typename _Alloc = std::allocator > + class tree : public PB_DS_TREE_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_TREE_BASE base_type; public: // Comparison functor type. - typedef Cmp_Fn cmp_fn; + typedef Cmp_Fn cmp_fn; tree() { } @@ -545,7 +479,7 @@ namespace __gnu_pbds virtual ~tree() { } - tree& + tree& operator=(const tree& other) { if (this != &other) @@ -561,43 +495,46 @@ namespace __gnu_pbds { base_type::swap(other); } }; -#undef PB_DS_BASE_C_DEC -#undef PB_DS_TREE_NODE_AND_IT_TRAITS_C_DEC +#undef PB_DS_TREE_BASE +#undef PB_DS_TREE_NODE_AND_IT_TRAITS -#define PB_DS_TRIE_NODE_AND_ITS_TRAITS \ - detail::trie_traits +#define PB_DS_TRIE_NODE_AND_IT_TRAITS \ + detail::trie_traits -#define PB_DS_BASE_C_DEC \ - basic_tree::type, Allocator> +#define PB_DS_TRIE_BASE \ + basic_branch::type, _Alloc> - /// A concrete basic trie-based associative container. + /// A basic trie-based associative container. template::type, + typename _ATraits = \ + typename detail::default_trie_access_traits::type, typename Tag = pat_trie_tag, - template - class Node_Update = null_trie_node_update, - typename Allocator = std::allocator > - class trie : public PB_DS_BASE_C_DEC + template + class Node_Update = null_node_update, + typename _Alloc = std::allocator > + class trie : public PB_DS_TRIE_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_TRIE_BASE base_type; public: // Element access traits type. - typedef E_Access_Traits e_access_traits; + typedef _ATraits access_traits; trie() { } - // Constructor taking some policy objects. r_e_access_traits will - // be copied by the E_Access_Traits object of the container + // Constructor taking some policy objects. r_access_traits will + // be copied by the _ATraits object of the container // object. - trie(const e_access_traits& t) + trie(const access_traits& t) : base_type(t) { } // Constructor taking __iterators to a range of value_types. The @@ -611,7 +548,7 @@ namespace __gnu_pbds // some policy objects. The value_types between first_it and // last_it will be inserted into the container object. template - trie(It first, It last, const e_access_traits& t) + trie(It first, It last, const access_traits& t) : base_type(t) { base_type::copy_from_range(first, last); } @@ -621,7 +558,7 @@ namespace __gnu_pbds virtual ~trie() { } - trie& + trie& operator=(const trie& other) { if (this != &other) @@ -637,29 +574,29 @@ namespace __gnu_pbds { base_type::swap(other); } }; -#undef PB_DS_BASE_C_DEC -#undef PB_DS_TRIE_NODE_AND_ITS_TRAITS +#undef PB_DS_TRIE_BASE +#undef PB_DS_TRIE_NODE_AND_IT_TRAITS -#define PB_DS_BASE_C_DEC \ - container_base::type, Allocator> +#define PB_DS_LU_BASE \ + detail::container_base_dispatch::type>::type /// A list-update based associative container. template::type, class Update_Policy = detail::default_update_policy::type, - class Allocator = std::allocator > - class list_update : public PB_DS_BASE_C_DEC + class _Alloc = std::allocator > + class list_update : public PB_DS_LU_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; + typedef typename PB_DS_LU_BASE base_type; public: - typedef Eq_Fn eq_fn; - typedef Update_Policy update_policy; - typedef Allocator allocator; + typedef list_update_tag container_category; + typedef Eq_Fn eq_fn; + typedef Update_Policy update_policy; list_update() { } @@ -676,7 +613,7 @@ namespace __gnu_pbds virtual ~list_update() { } - list_update& + list_update& operator=(const list_update& other) { if (this !=& other) @@ -692,9 +629,9 @@ namespace __gnu_pbds { base_type::swap(other); } }; -#undef PB_DS_BASE_C_DEC +#undef PB_DS_LU_BASE // @} group pbds } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/basic_types.hpp b/libstdc++-v3/include/ext/pb_ds/detail/basic_types.hpp deleted file mode 100644 index aac1397ddfb..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/basic_types.hpp +++ /dev/null @@ -1,211 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file basic_types.hpp - * Contains basic types used by containers. - */ - -#ifndef PB_DS_BASIC_TYPES_HPP -#define PB_DS_BASIC_TYPES_HPP - -#include -#include -#include -#include - -namespace __gnu_pbds -{ - namespace detail - { - template - struct value_type_base; - - /** - * Specialization of value_type_base for the case where the hash value - * is not stored alongside each value. - **/ - template - struct value_type_base - { - typedef typename Allocator::template rebind::other mapped_type_allocator; - typedef typename mapped_type_allocator::value_type mapped_type; - typedef typename mapped_type_allocator::pointer mapped_pointer; - typedef typename mapped_type_allocator::const_pointer const_mapped_pointer; - typedef typename mapped_type_allocator::reference mapped_reference; - typedef typename mapped_type_allocator::const_reference const_mapped_reference; - - typedef typename Allocator::template rebind >::other value_type_allocator; - typedef typename value_type_allocator::value_type value_type; - typedef typename value_type_allocator::pointer pointer; - typedef typename value_type_allocator::const_pointer const_pointer; - typedef typename value_type_allocator::reference reference; - typedef typename value_type_allocator::const_reference const_reference; - - struct stored_value_type - { - value_type m_value; - }; - }; - - /** - * Specialization of value_type_base for the case where the hash value - * is stored alongside each value. - **/ - template - struct value_type_base - { - typedef typename Allocator::template rebind::other mapped_type_allocator; - typedef typename mapped_type_allocator::value_type mapped_type; - typedef typename mapped_type_allocator::pointer mapped_pointer; - typedef typename mapped_type_allocator::const_pointer const_mapped_pointer; - typedef typename mapped_type_allocator::reference mapped_reference; - typedef typename mapped_type_allocator::const_reference const_mapped_reference; - - typedef typename Allocator::template rebind >::other value_type_allocator; - typedef typename value_type_allocator::value_type value_type; - typedef typename value_type_allocator::pointer pointer; - typedef typename value_type_allocator::const_pointer const_pointer; - typedef typename value_type_allocator::reference reference; - typedef typename value_type_allocator::const_reference const_reference; - - struct stored_value_type - { - value_type m_value; - typename Allocator::size_type m_hash; - }; - }; - -#define PB_DS_CLASS_T_DEC \ - template - -#define PB_DS_CLASS_C_DEC \ - value_type_base - - /** - * Specialization of value_type_base for the case where the hash value - * is not stored alongside each value. - **/ - template - struct value_type_base - { - typedef typename Allocator::template rebind::other mapped_type_allocator; - typedef typename mapped_type_allocator::value_type mapped_type; - typedef typename mapped_type_allocator::pointer mapped_pointer; - typedef typename mapped_type_allocator::const_pointer const_mapped_pointer; - typedef typename mapped_type_allocator::reference mapped_reference; - typedef typename mapped_type_allocator::const_reference const_mapped_reference; - - typedef Key value_type; - - typedef typename Allocator::template rebind::other value_type_allocator; - typedef typename value_type_allocator::pointer pointer; - typedef typename value_type_allocator::const_pointer const_pointer; - typedef typename value_type_allocator::reference reference; - typedef typename value_type_allocator::const_reference const_reference; - - struct stored_value_type - { - value_type m_value; - }; - - static null_mapped_type s_null_mapped; - }; - - PB_DS_CLASS_T_DEC - null_mapped_type PB_DS_CLASS_C_DEC::s_null_mapped; - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC - -#define PB_DS_CLASS_T_DEC \ - template - -#define PB_DS_CLASS_C_DEC \ - value_type_base - - /** - * Specialization of value_type_base for the case where the hash value - * is stored alongside each value. - **/ - template - struct value_type_base - { - typedef typename Allocator::template rebind::other mapped_type_allocator; - typedef typename mapped_type_allocator::value_type mapped_type; - typedef typename mapped_type_allocator::pointer mapped_pointer; - typedef typename mapped_type_allocator::const_pointer const_mapped_pointer; - typedef typename mapped_type_allocator::reference mapped_reference; - typedef typename mapped_type_allocator::const_reference const_mapped_reference; - - typedef Key value_type; - - typedef typename Allocator::template rebind::other value_type_allocator; - typedef typename value_type_allocator::pointer pointer; - typedef typename value_type_allocator::const_pointer const_pointer; - typedef typename value_type_allocator::reference reference; - typedef typename value_type_allocator::const_reference const_reference; - - struct stored_value_type - { - value_type m_value; - typename Allocator::size_type m_hash; - }; - - static null_mapped_type s_null_mapped; - }; - - PB_DS_CLASS_T_DEC - null_mapped_type PB_DS_CLASS_C_DEC::s_null_mapped; - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC - - template - struct no_throw_copies - { - typedef integral_constant::value && is_simple::value> indicator; - }; - - template - struct no_throw_copies - { - typedef integral_constant::value> indicator; - }; - } // namespace detail -} // namespace __gnu_pbds - -#endif - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp index a73414a0fcc..a875e300d4d 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp @@ -34,22 +34,20 @@ // warranty. /** - * @file bin_search_tree_.hpp - * Contains an implementation class for bin_search_tree_. - */ -/* - * This implementation uses an idea from the SGI STL (using a @a header node - * which is needed for efficient iteration). + * @file bin_search_tree_/bin_search_tree_.hpp + * Contains an implementation class for binary search tree. */ #include +#include #include #include -#include -#include #include #include #include +#ifdef _GLIBCXX_DEBUG +#include +#endif #include #include #include @@ -58,201 +56,129 @@ namespace __gnu_pbds { namespace detail { - -#define PB_DS_CLASS_T_DEC \ - template - #ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_CLASS_NAME \ - bin_search_tree_data_ -#endif +#define PB_DS_BIN_TREE_NAME bin_search_tree_map +#endif #ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_CLASS_NAME \ - bin_search_tree_no_data_ -#endif +#define PB_DS_BIN_TREE_NAME bin_search_tree_set +#endif -#define PB_DS_CLASS_C_DEC \ - PB_DS_CLASS_NAME< \ - Key, \ - Mapped, \ - Cmp_Fn, \ - Node_And_It_Traits, \ - Allocator> +#define PB_DS_CLASS_T_DEC \ + template -#define PB_DS_TYPES_TRAITS_C_DEC \ - types_traits< \ - Key, \ - Mapped, \ - Allocator, \ - false> +#define PB_DS_CLASS_C_DEC \ + PB_DS_BIN_TREE_NAME + +#define PB_DS_BIN_TREE_TRAITS_BASE \ + types_traits #ifdef _GLIBCXX_DEBUG -#define PB_DS_DEBUG_MAP_BASE_C_DEC \ +#define PB_DS_DEBUG_MAP_BASE_C_DEC \ debug_map_base, \ - typename Allocator::template rebind::other::const_reference> -#endif - -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_V2F(X) (X).first -#define PB_DS_V2S(X) (X).second -#define PB_DS_EP2VP(X)& ((X)->m_value) -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_V2F(X) (X) -#define PB_DS_V2S(X) Mapped_Data() -#define PB_DS_EP2VP(X)& ((X)->m_value.first) -#endif + typename _Alloc::template rebind::other::const_reference> +#endif #ifdef PB_DS_TREE_TRACE -#define PB_DS_TREE_TRACE_BASE_C_DEC \ - tree_trace_base< \ - typename Node_And_It_Traits::const_node_iterator, \ - typename Node_And_It_Traits::node_iterator, \ - Cmp_Fn, \ - true, \ - Allocator> -#endif +#define PB_DS_TREE_TRACE_BASE_C_DEC \ + tree_trace_base +#endif - /** - * class description = "8i|\|4ree $34rc|-| 7r33 74813."> - **/ - template - class PB_DS_CLASS_NAME : + + /* + * @brief Binary search tree (BST). + * + * This implementation uses an idea from the SGI STL (using a @a + * header node which is needed for efficient iteration). + */ + template + class PB_DS_BIN_TREE_NAME : #ifdef _GLIBCXX_DEBUG public PB_DS_DEBUG_MAP_BASE_C_DEC, -#endif +#endif #ifdef PB_DS_TREE_TRACE public PB_DS_TREE_TRACE_BASE_C_DEC, -#endif +#endif public Cmp_Fn, - public PB_DS_TYPES_TRAITS_C_DEC, + public PB_DS_BIN_TREE_TRAITS_BASE, public Node_And_It_Traits::node_update { + typedef Node_And_It_Traits traits_type; protected: + typedef PB_DS_BIN_TREE_TRAITS_BASE traits_base; + typedef - typename Allocator::template rebind< - typename Node_And_It_Traits::node>::other + typename _Alloc::template rebind::other node_allocator; - typedef typename node_allocator::value_type node; + typedef typename node_allocator::value_type node; + typedef typename node_allocator::pointer node_pointer; - typedef typename node_allocator::pointer node_pointer; - - typedef PB_DS_TYPES_TRAITS_C_DEC traits_base; - - typedef - typename Node_And_It_Traits::null_node_update_pointer + typedef typename traits_type::null_node_update_pointer null_node_update_pointer; private: - typedef cond_dealtor< node, Allocator> cond_dealtor_t; + typedef cond_dealtor cond_dealtor_t; #ifdef _GLIBCXX_DEBUG - typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; -#endif + typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; +#endif public: - - typedef typename Allocator::size_type size_type; - - typedef typename Allocator::difference_type difference_type; - - typedef typename PB_DS_TYPES_TRAITS_C_DEC::key_type key_type; - - typedef typename PB_DS_TYPES_TRAITS_C_DEC::key_pointer key_pointer; - - typedef - typename PB_DS_TYPES_TRAITS_C_DEC::const_key_pointer - const_key_pointer; - - typedef typename PB_DS_TYPES_TRAITS_C_DEC::key_reference key_reference; - - typedef - typename PB_DS_TYPES_TRAITS_C_DEC::const_key_reference - const_key_reference; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; + typedef typename traits_base::key_type key_type; + typedef typename traits_base::key_pointer key_pointer; + typedef typename traits_base::key_const_pointer key_const_pointer; + typedef typename traits_base::key_reference key_reference; + typedef typename traits_base::key_const_reference key_const_reference; #ifdef PB_DS_DATA_TRUE_INDICATOR - typedef typename PB_DS_TYPES_TRAITS_C_DEC::mapped_type mapped_type; + typedef typename traits_base::mapped_type mapped_type; + typedef typename traits_base::mapped_pointer mapped_pointer; + typedef typename traits_base::mapped_const_pointer mapped_const_pointer; + typedef typename traits_base::mapped_reference mapped_reference; + typedef typename traits_base::mapped_const_reference mapped_const_reference; +#endif - typedef - typename PB_DS_TYPES_TRAITS_C_DEC::mapped_pointer - mapped_pointer; + typedef typename traits_base::value_type value_type; + typedef typename traits_base::pointer pointer; + typedef typename traits_base::const_pointer const_pointer; + typedef typename traits_base::reference reference; + typedef typename traits_base::const_reference const_reference; + typedef typename traits_type::point_const_iterator point_const_iterator; - typedef - typename PB_DS_TYPES_TRAITS_C_DEC::const_mapped_pointer - const_mapped_pointer; + typedef point_const_iterator const_iterator; + typedef typename traits_type::point_iterator point_iterator; + typedef point_iterator iterator; - typedef - typename PB_DS_TYPES_TRAITS_C_DEC::mapped_reference - mapped_reference; + typedef typename traits_type::const_reverse_iterator const_reverse_iterator; - typedef - typename PB_DS_TYPES_TRAITS_C_DEC::const_mapped_reference - const_mapped_reference; -#endif + typedef typename traits_type::reverse_iterator reverse_iterator; + typedef typename traits_type::node_const_iterator node_const_iterator; + typedef typename traits_type::node_iterator node_iterator; + typedef typename traits_type::node_update node_update; - typedef typename PB_DS_TYPES_TRAITS_C_DEC::value_type value_type; + typedef Cmp_Fn cmp_fn; + typedef _Alloc allocator_type; - typedef typename PB_DS_TYPES_TRAITS_C_DEC::pointer pointer; + PB_DS_BIN_TREE_NAME(); - typedef typename PB_DS_TYPES_TRAITS_C_DEC::const_pointer const_pointer; + PB_DS_BIN_TREE_NAME(const Cmp_Fn&); - typedef typename PB_DS_TYPES_TRAITS_C_DEC::reference reference; + PB_DS_BIN_TREE_NAME(const Cmp_Fn&, const node_update&); - typedef - typename PB_DS_TYPES_TRAITS_C_DEC::const_reference - const_reference; - - typedef - typename Node_And_It_Traits::const_point_iterator - const_point_iterator; - - typedef const_point_iterator const_iterator; - - typedef typename Node_And_It_Traits::point_iterator point_iterator; - - typedef point_iterator iterator; - - typedef - typename Node_And_It_Traits::const_reverse_iterator - const_reverse_iterator; - - typedef typename Node_And_It_Traits::reverse_iterator reverse_iterator; - - typedef - typename Node_And_It_Traits::const_node_iterator - const_node_iterator; - - typedef typename Node_And_It_Traits::node_iterator node_iterator; - - typedef Cmp_Fn cmp_fn; - - typedef Allocator allocator_type; - - typedef typename Node_And_It_Traits::node_update node_update; - - public: - - PB_DS_CLASS_NAME(); - - PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn); - - PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_update); - - PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other); + PB_DS_BIN_TREE_NAME(const PB_DS_CLASS_C_DEC&); void - swap(PB_DS_CLASS_C_DEC& other); + swap(PB_DS_CLASS_C_DEC&); - ~PB_DS_CLASS_NAME(); + ~PB_DS_BIN_TREE_NAME(); inline bool empty() const; @@ -263,29 +189,29 @@ namespace __gnu_pbds inline size_type max_size() const; - Cmp_Fn& + Cmp_Fn& get_cmp_fn(); - const Cmp_Fn& + const Cmp_Fn& get_cmp_fn() const; inline point_iterator - lower_bound(const_key_reference r_key); + lower_bound(key_const_reference); - inline const_point_iterator - lower_bound(const_key_reference r_key) const; + inline point_const_iterator + lower_bound(key_const_reference) const; inline point_iterator - upper_bound(const_key_reference r_key); + upper_bound(key_const_reference); - inline const_point_iterator - upper_bound(const_key_reference r_key) const; + inline point_const_iterator + upper_bound(key_const_reference) const; inline point_iterator - find(const_key_reference r_key); + find(key_const_reference); - inline const_point_iterator - find(const_key_reference r_key) const; + inline point_const_iterator + find(key_const_reference) const; inline iterator begin(); @@ -311,13 +237,13 @@ namespace __gnu_pbds inline const_reverse_iterator rend() const; - inline const_node_iterator + inline node_const_iterator node_begin() const; inline node_iterator node_begin(); - inline const_node_iterator + inline node_const_iterator node_end() const; inline node_iterator @@ -327,148 +253,139 @@ namespace __gnu_pbds clear(); protected: - void - value_swap(PB_DS_CLASS_C_DEC& other); + value_swap(PB_DS_CLASS_C_DEC&); void initialize_min_max(); inline iterator - insert_imp_empty(const_reference r_value); + insert_imp_empty(const_reference); inline iterator - insert_leaf_new(const_reference r_value, node_pointer p_nd, bool left_nd); + insert_leaf_new(const_reference, node_pointer, bool); inline node_pointer - get_new_node_for_leaf_insert(const_reference r_val, false_type); + get_new_node_for_leaf_insert(const_reference, false_type); inline node_pointer - get_new_node_for_leaf_insert(const_reference r_val, true_type); + get_new_node_for_leaf_insert(const_reference, true_type); inline void - actual_erase_node(node_pointer p_nd); + actual_erase_node(node_pointer); inline std::pair - erase(node_pointer p_nd); + erase(node_pointer); inline void - update_min_max_for_erased_node(node_pointer p_nd); + update_min_max_for_erased_node(node_pointer); static void - clear_imp(node_pointer p_nd); + clear_imp(node_pointer); - inline std::pair< - point_iterator, - bool> - insert_leaf(const_reference r_value); + inline std::pair + insert_leaf(const_reference); inline void - rotate_left(node_pointer p_x); + rotate_left(node_pointer); inline void - rotate_right(node_pointer p_y); + rotate_right(node_pointer); inline void - rotate_parent(node_pointer p_nd); + rotate_parent(node_pointer); inline void - apply_update(node_pointer p_nd, null_node_update_pointer); + apply_update(node_pointer, null_node_update_pointer); template - inline void - apply_update(node_pointer p_nd, Node_Update_* p_update); + inline void + apply_update(node_pointer, Node_Update_*); inline void - update_to_top(node_pointer p_nd, null_node_update_pointer); + update_to_top(node_pointer, null_node_update_pointer); template - inline void - update_to_top(node_pointer p_nd, Node_Update_* p_update); + inline void + update_to_top(node_pointer, Node_Update_*); bool - join_prep(PB_DS_CLASS_C_DEC& other); + join_prep(PB_DS_CLASS_C_DEC&); void - join_finish(PB_DS_CLASS_C_DEC& other); + join_finish(PB_DS_CLASS_C_DEC&); bool - split_prep(const_key_reference r_key, PB_DS_CLASS_C_DEC& other); + split_prep(key_const_reference, PB_DS_CLASS_C_DEC&); void - split_finish(PB_DS_CLASS_C_DEC& other); + split_finish(PB_DS_CLASS_C_DEC&); size_type - recursive_count(node_pointer p_nd) const; + recursive_count(node_pointer) const; #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; + assert_valid(const char*, int) const; void - structure_only_assert_valid(const char* file, int line) const; + structure_only_assert_valid(const char*, int) const; void - assert_node_consistent(const node_pointer p_nd, - const char* file, int line) const; -#endif + assert_node_consistent(const node_pointer, const char*, int) const; +#endif private: #ifdef _GLIBCXX_DEBUG void - assert_iterators(const char* file, int line) const; + assert_iterators(const char*, int) const; void - assert_consistent_with_debug_base(const char* file, int line) const; + assert_consistent_with_debug_base(const char*, int) const; void - assert_node_consistent_with_left(const node_pointer p_nd, - const char* file, int line) const; + assert_node_consistent_with_left(const node_pointer, + const char*, int) const; void - assert_node_consistent_with_right(const node_pointer p_nd, - const char* file, int line) const; + assert_node_consistent_with_right(const node_pointer, + const char*, int) const; void - assert_consistent_with_debug_base(const node_pointer p_nd, - const char* file, int line) const; + assert_consistent_with_debug_base(const node_pointer, + const char*, int) const; void - assert_min(const char* file, int line) const; + assert_min(const char*, int) const; void - assert_min_imp(const node_pointer p_nd, - const char* file, int line) const; + assert_min_imp(const node_pointer, const char*, int) const; void - assert_max(const char* file, int line) const; + assert_max(const char*, int) const; void - assert_max_imp(const node_pointer p_nd, - const char* file, int line) const; + assert_max_imp(const node_pointer, const char*, int) const; void - assert_size(const char* file, int line) const; + assert_size(const char*, int) const; - typedef std::pair< const_pointer, const_pointer> node_consistent_t; + typedef std::pair node_consistent_t; node_consistent_t - assert_node_consistent_(const node_pointer p_nd, - const char* file, int line) const; -#endif + assert_node_consistent_(const node_pointer, const char*, int) const; +#endif void initialize(); node_pointer - recursive_copy_node(const node_pointer p_nd); + recursive_copy_node(const node_pointer); protected: - node_pointer m_p_head; - - size_type m_size; - - static node_allocator s_node_allocator; + node_pointer m_p_head; + size_type m_size; + static node_allocator s_node_allocator; }; #define PB_DS_STRUCT_ONLY_ASSERT_VALID(X) \ @@ -492,17 +409,12 @@ namespace __gnu_pbds #undef PB_DS_STRUCT_ONLY_ASSERT_VALID #undef PB_DS_CLASS_C_DEC #undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_NAME -#undef PB_DS_TYPES_TRAITS_C_DEC +#undef PB_DS_BIN_TREE_NAME +#undef PB_DS_BIN_TREE_TRAITS_BASE #undef PB_DS_DEBUG_MAP_BASE_C_DEC #ifdef PB_DS_TREE_TRACE #undef PB_DS_TREE_TRACE_BASE_C_DEC -#endif - -#undef PB_DS_V2F -#undef PB_DS_EP2VP -#undef PB_DS_V2S - +#endif } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp deleted file mode 100644 index 370574c9087..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp +++ /dev/null @@ -1,70 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file cond_dtor_entry_dealtor.hpp - * Contains a binary tree container conditional deallocator - */ - -class bin_search_tree_cond_dtor_entry_dealtor_ -{ -public: - inline - bin_search_tree_cond_dtor_entry_dealtor_(node_pointer p_nd) : m_p_nd(p_nd), - m_no_action_dtor(false) - { } - - inline void - set_no_action_dtor() - { - m_no_action_dtor = true; - } - - inline - ~bin_search_tree_cond_dtor_entry_dealtor_() - { - if (m_no_action_dtor) - return; - - typename Allocator::template rebind::other(). - deallocate(m_p_nd, 1); - } - -protected: - node_pointer m_p_nd; - - bool m_no_action_dtor; -}; - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp deleted file mode 100644 index 612ecebbe94..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp +++ /dev/null @@ -1,81 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file cond_key_dtor_entry_dealtor.hpp - * Contains a binary tree container conditional deallocator - */ - -class bin_seach_tree_cond_key_dtor_entry_dealtor_ -{ -public: - inline - bin_seach_tree_cond_key_dtor_entry_dealtor_(node_pointer p_nd) : m_p_nd(p_nd), - m_no_action_dtor(false), - m_key_destruct(false) - { } - - inline void - set_no_action_dtor() - { - m_no_action_dtor = true; - } - - inline void - set_key_destruct() - { - m_key_destruct = true; - } - - inline - ~bin_seach_tree_cond_key_dtor_entry_dealtor_() - { - if (m_no_action_dtor) - return; - - if (m_key_destruct) - m_p_nd->m_value.first.~Key(); - - bin_tree_base::s_alloc.deallocate(m_p_nd, 1); - } - -protected: - node_pointer m_p_nd; - - bool m_no_action_dtor; - - bool m_key_destruct; -}; - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp index d7b5985cc6d..2815b4274a9 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp @@ -35,7 +35,7 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file bin_search_tree_/constructors_destructor_fn_imps.hpp * Contains an implementation class for bin_search_tree_. */ @@ -45,7 +45,7 @@ PB_DS_CLASS_C_DEC::s_node_allocator; PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME() : m_p_head(s_node_allocator.allocate(1)), m_size(0) +PB_DS_BIN_TREE_NAME() : m_p_head(s_node_allocator.allocate(1)), m_size(0) { initialize(); PB_DS_STRUCT_ONLY_ASSERT_VALID((*this)) @@ -53,7 +53,7 @@ PB_DS_CLASS_NAME() : m_p_head(s_node_allocator.allocate(1)), m_size(0) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn) : +PB_DS_BIN_TREE_NAME(const Cmp_Fn& r_cmp_fn) : Cmp_Fn(r_cmp_fn), m_p_head(s_node_allocator.allocate(1)), m_size(0) { initialize(); @@ -62,7 +62,7 @@ PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) : +PB_DS_BIN_TREE_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) : Cmp_Fn(r_cmp_fn), node_update(r_node_update), m_p_head(s_node_allocator.allocate(1)), @@ -74,7 +74,7 @@ PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) : +PB_DS_BIN_TREE_NAME(const PB_DS_CLASS_C_DEC& other) : #ifdef _GLIBCXX_DEBUG debug_base(other), #endif @@ -132,7 +132,7 @@ value_swap(PB_DS_CLASS_C_DEC& other) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~PB_DS_CLASS_NAME() +~PB_DS_BIN_TREE_NAME() { clear(); s_node_allocator.deallocate(m_p_head, 1); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp index 86d5c2e87f7..1f77e31cf39 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file bin_search_tree_/debug_fn_imps.hpp * Contains an implementation class for bin_search_tree_. */ @@ -272,8 +272,6 @@ PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: assert_size(const char* __file, int __line) const -{ - PB_DS_DEBUG_VERIFY(recursive_count(m_p_head->m_p_parent) == m_size); -} +{ PB_DS_DEBUG_VERIFY(recursive_count(m_p_head->m_p_parent) == m_size); } #endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp index 60a54903458..1d1b17040d0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file bin_search_tree_/erase_fn_imps.hpp * Contains an implementation class for bin_search_tree_. */ @@ -45,11 +45,8 @@ actual_erase_node(node_pointer p_z) { _GLIBCXX_DEBUG_ASSERT(m_size > 0); --m_size; - - _GLIBCXX_DEBUG_ONLY(erase_existing(PB_DS_V2F(p_z->m_value));) - + _GLIBCXX_DEBUG_ONLY(debug_base::erase_existing(PB_DS_V2F(p_z->m_value));) p_z->~node(); - s_node_allocator.deallocate(p_z, 1); } @@ -61,24 +58,19 @@ update_min_max_for_erased_node(node_pointer p_z) if (m_size == 1) { m_p_head->m_p_left = m_p_head->m_p_right = m_p_head; - return; } if (m_p_head->m_p_left == p_z) { iterator it(p_z); - ++it; - m_p_head->m_p_left = it.m_p_nd; } else if (m_p_head->m_p_right == p_z) { iterator it(p_z); - --it; - m_p_head->m_p_right = it.m_p_nd; } } @@ -89,15 +81,10 @@ PB_DS_CLASS_C_DEC:: clear() { PB_DS_STRUCT_ONLY_ASSERT_VALID((*this)) - clear_imp(m_p_head->m_p_parent); - m_size = 0; - initialize(); - _GLIBCXX_DEBUG_ONLY(debug_base::clear();) - PB_DS_STRUCT_ONLY_ASSERT_VALID((*this)) } @@ -110,11 +97,7 @@ clear_imp(node_pointer p_nd) return; clear_imp(p_nd->m_p_left); - clear_imp(p_nd->m_p_right); - p_nd->~node(); - s_node_allocator.deallocate(p_nd, 1); } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp index 6b50dc8c594..03b7fe89416 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp @@ -34,107 +34,92 @@ // warranty. /** - * @file find_fn_imps.hpp + * @file bin_search_tree_/find_fn_imps.hpp * Contains an implementation class for bin_search_tree_. */ PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_point_iterator +inline typename PB_DS_CLASS_C_DEC::point_const_iterator PB_DS_CLASS_C_DEC:: -lower_bound(const_key_reference r_key) const +lower_bound(key_const_reference r_key) const { node_pointer p_pot = m_p_head; node_pointer p_nd = m_p_head->m_p_parent; while (p_nd != 0) - if (Cmp_Fn::operator()( - PB_DS_V2F(p_nd->m_value), - r_key)) + if (Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key)) p_nd = p_nd->m_p_right; else { p_pot = p_nd; - p_nd = p_nd->m_p_left; } - - return (iterator(p_pot)); + return iterator(p_pot); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::point_iterator PB_DS_CLASS_C_DEC:: -lower_bound(const_key_reference r_key) +lower_bound(key_const_reference r_key) { node_pointer p_pot = m_p_head; node_pointer p_nd = m_p_head->m_p_parent; while (p_nd != 0) - if (Cmp_Fn::operator()( - PB_DS_V2F(p_nd->m_value), - r_key)) + if (Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key)) p_nd = p_nd->m_p_right; else { p_pot = p_nd; - p_nd = p_nd->m_p_left; } - - return (iterator(p_pot)); + return iterator(p_pot); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_point_iterator +inline typename PB_DS_CLASS_C_DEC::point_const_iterator PB_DS_CLASS_C_DEC:: -upper_bound(const_key_reference r_key) const +upper_bound(key_const_reference r_key) const { node_pointer p_pot = m_p_head; node_pointer p_nd = m_p_head->m_p_parent; while (p_nd != 0) - if (Cmp_Fn::operator()(r_key, - PB_DS_V2F(p_nd->m_value))) + if (Cmp_Fn::operator()(r_key, PB_DS_V2F(p_nd->m_value))) { - p_pot = p_nd, - - p_nd = p_nd->m_p_left; + p_pot = p_nd; + p_nd = p_nd->m_p_left; } else p_nd = p_nd->m_p_right; - - return (const_iterator(p_pot)); + return const_iterator(p_pot); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::point_iterator PB_DS_CLASS_C_DEC:: -upper_bound(const_key_reference r_key) +upper_bound(key_const_reference r_key) { node_pointer p_pot = m_p_head; node_pointer p_nd = m_p_head->m_p_parent; while (p_nd != 0) - if (Cmp_Fn::operator()(r_key, - PB_DS_V2F(p_nd->m_value))) + if (Cmp_Fn::operator()(r_key, PB_DS_V2F(p_nd->m_value))) { - p_pot = p_nd, - - p_nd = p_nd->m_p_left; + p_pot = p_nd; + p_nd = p_nd->m_p_left; } else p_nd = p_nd->m_p_right; - - return (point_iterator(p_pot)); + return point_iterator(p_pot); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::point_iterator PB_DS_CLASS_C_DEC:: -find(const_key_reference r_key) +find(key_const_reference r_key) { PB_DS_STRUCT_ONLY_ASSERT_VALID((*this)) - node_pointer p_pot = m_p_head; node_pointer p_nd = m_p_head->m_p_parent; @@ -142,25 +127,27 @@ find(const_key_reference r_key) if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key)) { p_pot = p_nd; - p_nd = p_nd->m_p_left; } else p_nd = p_nd->m_p_right; - return point_iterator((p_pot != m_p_head - && Cmp_Fn::operator()(r_key, - PB_DS_V2F(p_pot->m_value))) - ? m_p_head : p_pot); + node_pointer ret = p_pot; + if (p_pot != m_p_head) + { + const bool __cmp = Cmp_Fn::operator()(r_key, PB_DS_V2F(p_pot->m_value)); + if (__cmp) + ret = m_p_head; + } + return point_iterator(ret); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_point_iterator +inline typename PB_DS_CLASS_C_DEC::point_const_iterator PB_DS_CLASS_C_DEC:: -find(const_key_reference r_key) const +find(key_const_reference r_key) const { PB_DS_STRUCT_ONLY_ASSERT_VALID((*this)) - node_pointer p_pot = m_p_head; node_pointer p_nd = m_p_head->m_p_parent; @@ -168,15 +155,17 @@ find(const_key_reference r_key) const if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), r_key)) { p_pot = p_nd; - p_nd = p_nd->m_p_left; } else p_nd = p_nd->m_p_right; - return const_point_iterator((p_pot != m_p_head - && Cmp_Fn::operator()(r_key, - PB_DS_V2F(p_pot->m_value))) - ? m_p_head : p_pot); + node_pointer ret = p_pot; + if (p_pot != m_p_head) + { + const bool __cmp = Cmp_Fn::operator()(r_key, PB_DS_V2F(p_pot->m_value)); + if (__cmp) + ret = m_p_head; + } + return point_const_iterator(ret); } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp index b3e46112fb6..54cd52e04ba 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file info_fn_imps.hpp + * @file bin_search_tree_/info_fn_imps.hpp * Contains an implementation class for bin_search_tree_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp index eb0f76d0ea2..5a9a03e867e 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file bin_search_tree_/insert_fn_imps.hpp * Contains an implementation class for bin_search_tree_. */ @@ -101,38 +101,30 @@ insert_leaf_new(const_reference r_value, node_pointer p_nd, bool left_nd) if (left_nd) { _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_left == 0); - _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()( - PB_DS_V2F(r_value), - PB_DS_V2F(p_nd->m_value))); + _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(PB_DS_V2F(r_value), + PB_DS_V2F(p_nd->m_value))); p_nd->m_p_left = p_new_nd; - if (m_p_head->m_p_left == p_nd) m_p_head->m_p_left = p_new_nd; } else { _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_right == 0); - _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()( - PB_DS_V2F(p_nd->m_value), - PB_DS_V2F(r_value))); + _GLIBCXX_DEBUG_ASSERT(Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), + PB_DS_V2F(r_value))); p_nd->m_p_right = p_new_nd; - if (m_p_head->m_p_right == p_nd) m_p_head->m_p_right = p_new_nd; } p_new_nd->m_p_parent = p_nd; - p_new_nd->m_p_left = p_new_nd->m_p_right = 0; - PB_DS_ASSERT_NODE_CONSISTENT(p_nd) update_to_top(p_new_nd, (node_update* )this); - _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(r_value));) - return iterator(p_new_nd); } @@ -148,13 +140,10 @@ insert_imp_empty(const_reference r_value) m_p_head->m_p_parent = p_new_node; p_new_node->m_p_parent = m_p_head; - p_new_node->m_p_left = p_new_node->m_p_right = 0; - _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(r_value));) update_to_top(m_p_head->m_p_parent, (node_update*)this); - return iterator(p_new_node); } @@ -164,18 +153,14 @@ PB_DS_CLASS_C_DEC:: get_new_node_for_leaf_insert(const_reference r_val, false_type) { node_pointer p_new_nd = s_node_allocator.allocate(1); - cond_dealtor_t cond(p_new_nd); new (const_cast(static_cast(&p_new_nd->m_value))) typename node::value_type(r_val); cond.set_no_action(); - p_new_nd->m_p_left = p_new_nd->m_p_right = 0; - ++m_size; - return p_new_nd; } @@ -190,9 +175,6 @@ get_new_node_for_leaf_insert(const_reference r_val, true_type) typename node::value_type(r_val); p_new_nd->m_p_left = p_new_nd->m_p_right = 0; - ++m_size; - return p_new_nd; } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp index e5f6a4d7361..8076084aefd 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file iterators_fn_imps.hpp + * @file bin_search_tree_/iterators_fn_imps.hpp * Contains an implementation class for bin_search_tree_. */ @@ -103,11 +103,11 @@ rend() const } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_node_iterator +inline typename PB_DS_CLASS_C_DEC::node_const_iterator PB_DS_CLASS_C_DEC:: node_begin() const { - return (const_node_iterator(m_p_head->m_p_parent)); + return (node_const_iterator(m_p_head->m_p_parent)); } PB_DS_CLASS_T_DEC @@ -119,11 +119,11 @@ node_begin() } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_node_iterator +inline typename PB_DS_CLASS_C_DEC::node_const_iterator PB_DS_CLASS_C_DEC:: node_end() const { - return (const_node_iterator(0)); + return (node_const_iterator(0)); } PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp index b4ea45376a8..d64bdf75d9c 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file node_iterators.hpp + * @file bin_search_tree_/node_iterators.hpp * Contains an implementation class for bin_search_tree_. */ @@ -47,31 +47,27 @@ namespace __gnu_pbds { namespace detail { - #define PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC \ bin_search_tree_const_node_it_< \ Node, \ Const_Iterator, \ Iterator, \ - Allocator> + _Alloc> - // Const node iterator. + /// Const node iterator. template + typename _Alloc> class bin_search_tree_const_node_it_ { - private: - private: typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< Node>::other::pointer node_pointer; public: - // Category. typedef trivial_iterator_tag iterator_category; @@ -92,11 +88,9 @@ namespace __gnu_pbds // Const metadata reference type. typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< metadata_type>::other::const_reference - const_metadata_reference; - - public: + metadata_const_reference; // Default constructor. /* @@ -105,7 +99,8 @@ namespace __gnu_pbds */ inline - bin_search_tree_const_node_it_(const node_pointer p_nd = 0) : m_p_nd(const_cast(p_nd)) + bin_search_tree_const_node_it_(const node_pointer p_nd = 0) + : m_p_nd(const_cast(p_nd)) { } // Access. @@ -116,7 +111,7 @@ namespace __gnu_pbds } // Metadata access. - inline const_metadata_reference + inline metadata_const_reference get_metadata() const { return (m_p_nd->get_metadata()); @@ -150,7 +145,6 @@ namespace __gnu_pbds return (m_p_nd != other.m_p_nd); } - public: node_pointer m_p_nd; }; @@ -159,26 +153,23 @@ namespace __gnu_pbds Node, \ Const_Iterator, \ Iterator, \ - Allocator> + _Alloc> - // Node iterator. + /// Node iterator. template - class bin_search_tree_node_it_ : - public PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC - + typename _Alloc> + class bin_search_tree_node_it_ + : public PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC { - private: typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< Node>::other::pointer node_pointer; public: - // __Iterator's value type. typedef Iterator value_type; @@ -188,8 +179,6 @@ namespace __gnu_pbds // __Iterator's __const reference type. typedef Iterator const_reference; - public: - // Default constructor. /* inline @@ -197,8 +186,8 @@ namespace __gnu_pbds */ inline - bin_search_tree_node_it_(const node_pointer p_nd = 0) : PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC( - const_cast(p_nd)) + bin_search_tree_node_it_(const node_pointer p_nd = 0) + : PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC(const_cast(p_nd)) { } // Access. @@ -227,7 +216,6 @@ namespace __gnu_pbds }; #undef PB_DS_TREE_CONST_NODE_ITERATOR_CLASS_C_DEC - #undef PB_DS_TREE_NODE_ITERATOR_CLASS_C_DEC } // namespace detail diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp index 959df68a168..d99924878c3 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file point_iterators.hpp + * @file bin_search_tree_/point_iterators.hpp * Contains an implementation class for bin_search_tree_. */ @@ -58,7 +58,7 @@ namespace __gnu_pbds Reference, \ Const_Reference, \ Is_Forward_Iterator, \ - Allocator> + _Alloc> #define PB_DS_TREE_CONST_ODIR_IT_C_DEC \ bin_search_tree_const_it_< \ @@ -69,7 +69,7 @@ namespace __gnu_pbds Reference, \ Const_Reference, \ !Is_Forward_Iterator, \ - Allocator> + _Alloc> #define PB_DS_TREE_IT_C_DEC \ bin_search_tree_it_< \ @@ -80,7 +80,7 @@ namespace __gnu_pbds Reference, \ Const_Reference, \ Is_Forward_Iterator, \ - Allocator> + _Alloc> #define PB_DS_TREE_ODIR_IT_C_DEC \ bin_search_tree_it_< \ @@ -91,9 +91,9 @@ namespace __gnu_pbds Reference, \ Const_Reference, \ !Is_Forward_Iterator, \ - Allocator> + _Alloc> - // Const iterator. + /// Const iterator. template + typename _Alloc> class bin_search_tree_const_it_ { - - public: - - typedef std::bidirectional_iterator_tag iterator_category; - - typedef typename Allocator::difference_type difference_type; - - typedef Value_Type value_type; - - typedef Pointer pointer; - - typedef Const_Pointer const_pointer; - - typedef Reference reference; - - typedef Const_Reference const_reference; - public: + typedef std::bidirectional_iterator_tag iterator_category; + typedef typename _Alloc::difference_type difference_type; + typedef Value_Type value_type; + typedef Pointer pointer; + typedef Const_Pointer const_pointer; + typedef Reference reference; + typedef Const_Reference const_reference; inline bin_search_tree_const_it_(const Node_Pointer p_nd = 0) @@ -280,7 +270,7 @@ namespace __gnu_pbds Node_Pointer m_p_nd; }; - // Iterator. + /// Iterator. template - class bin_search_tree_it_ : - public PB_DS_TREE_CONST_IT_C_DEC - + typename _Alloc> + class bin_search_tree_it_ : public PB_DS_TREE_CONST_IT_C_DEC { - public: - inline bin_search_tree_it_(const Node_Pointer p_nd = 0) : PB_DS_TREE_CONST_IT_C_DEC((Node_Pointer)p_nd) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp index 63f307d39d9..5b71c407f7f 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file policy_access_fn_imps.hpp + * @file bin_search_tree_/policy_access_fn_imps.hpp * Contains an implementation class for bin_search_tree_. */ @@ -42,15 +42,11 @@ PB_DS_CLASS_T_DEC Cmp_Fn& PB_DS_CLASS_C_DEC:: get_cmp_fn() -{ - return (*this); -} +{ return (*this); } PB_DS_CLASS_T_DEC const Cmp_Fn& PB_DS_CLASS_C_DEC:: get_cmp_fn() const -{ - return (*this); -} +{ return (*this); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp index bcf3ce6321f..cfcccadb182 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file r_erase_fn_imps.hpp + * @file bin_search_tree_/r_erase_fn_imps.hpp * Contains an implementation class for bin_search_tree_. */ @@ -45,11 +45,8 @@ actual_erase_node(node_pointer p_z) { _GLIBCXX_DEBUG_ASSERT(m_size > 0); --m_size; - _GLIBCXX_DEBUG_ONLY(erase_existing(PB_DS_V2F(p_z->m_value));) - p_z->~node(); - s_node_allocator.deallocate(p_z, 1); } @@ -61,24 +58,19 @@ update_min_max_for_erased_node(node_pointer p_z) if (m_size == 1) { m_p_head->m_p_left = m_p_head->m_p_right = m_p_head; - return; } if (m_p_head->m_p_left == p_z) { iterator it(p_z); - ++it; - m_p_head->m_p_left = it.m_p_nd; } else if (m_p_head->m_p_right == p_z) { iterator it(p_z); - --it; - m_p_head->m_p_right = it.m_p_nd; } } @@ -89,15 +81,10 @@ PB_DS_CLASS_C_DEC:: clear() { PB_DS_STRUCT_ONLY_ASSERT_VALID((*this)) - - clear_imp(m_p_head->m_p_parent); - + clear_imp(m_p_head->m_p_parent); m_size = 0; - initialize(); - _GLIBCXX_DEBUG_ONLY(debug_base::clear();) - PB_DS_STRUCT_ONLY_ASSERT_VALID((*this)) } @@ -110,11 +97,7 @@ clear_imp(node_pointer p_nd) return; clear_imp(p_nd->m_p_left); - clear_imp(p_nd->m_p_right); - p_nd->~Node(); - s_node_allocator.deallocate(p_nd, 1); } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp index c2090a17842..63c757cc136 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file rotate_fn_imps.hpp + * @file bin_search_tree_/rotate_fn_imps.hpp * Contains imps for rotating nodes. */ @@ -130,7 +130,7 @@ PB_DS_CLASS_C_DEC:: apply_update(node_pointer p_nd, Node_Update_* /*p_update*/) { node_update::operator()(node_iterator(p_nd), - const_node_iterator(static_cast(0))); + node_const_iterator(static_cast(0))); } PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp index 00fbdf42612..be2fd344ccf 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file split_join_fn_imps.hpp + * @file bin_search_tree_/split_join_fn_imps.hpp * Contains an implementation class for bin_search_tree_. */ @@ -85,7 +85,7 @@ join_finish(PB_DS_CLASS_C_DEC& other) PB_DS_CLASS_T_DEC bool PB_DS_CLASS_C_DEC:: -split_prep(const_key_reference r_key, PB_DS_CLASS_C_DEC& other) +split_prep(key_const_reference r_key, PB_DS_CLASS_C_DEC& other) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp index 58c30c3fe52..3066c381f42 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file traits.hpp + * @file bin_search_tree_/traits.hpp * Contains an implementation for bin_search_tree_. */ @@ -48,34 +48,28 @@ namespace __gnu_pbds { namespace detail { - + /// Binary search tree traits, primary template. template + typename _Alloc> class Node_Update, class Node, - class Allocator> + typename _Alloc> struct bin_search_tree_traits { private: - typedef - types_traits< - Key, - Mapped, - Allocator, - false> - type_traits; + typedef types_traits type_traits; public: typedef Node node; typedef bin_search_tree_const_it_< - typename Allocator::template rebind< + typename _Alloc::template rebind< node>::other::pointer, typename type_traits::value_type, typename type_traits::pointer, @@ -83,12 +77,12 @@ namespace __gnu_pbds typename type_traits::reference, typename type_traits::const_reference, true, - Allocator> - const_point_iterator; + _Alloc> + point_const_iterator; typedef bin_search_tree_it_< - typename Allocator::template rebind< + typename _Alloc::template rebind< node>::other::pointer, typename type_traits::value_type, typename type_traits::pointer, @@ -96,12 +90,12 @@ namespace __gnu_pbds typename type_traits::reference, typename type_traits::const_reference, true, - Allocator> + _Alloc> point_iterator; typedef bin_search_tree_const_it_< - typename Allocator::template rebind< + typename _Alloc::template rebind< node>::other::pointer, typename type_traits::value_type, typename type_traits::pointer, @@ -109,12 +103,12 @@ namespace __gnu_pbds typename type_traits::reference, typename type_traits::const_reference, false, - Allocator> + _Alloc> const_reverse_iterator; typedef bin_search_tree_it_< - typename Allocator::template rebind< + typename _Alloc::template rebind< node>::other::pointer, typename type_traits::value_type, typename type_traits::pointer, @@ -122,74 +116,69 @@ namespace __gnu_pbds typename type_traits::reference, typename type_traits::const_reference, false, - Allocator> + _Alloc> reverse_iterator; typedef bin_search_tree_const_node_it_< Node, - const_point_iterator, + point_const_iterator, point_iterator, - Allocator> - const_node_iterator; + _Alloc> + node_const_iterator; typedef bin_search_tree_node_it_< Node, - const_point_iterator, + point_const_iterator, point_iterator, - Allocator> + _Alloc> node_iterator; typedef Node_Update< - const_node_iterator, + node_const_iterator, node_iterator, Cmp_Fn, - Allocator> + _Alloc> node_update; typedef - __gnu_pbds::null_tree_node_update< - const_node_iterator, + __gnu_pbds::null_node_update< + node_const_iterator, node_iterator, Cmp_Fn, - Allocator>* + _Alloc>* null_node_update_pointer; }; + /// Specialization. template + typename _Alloc> class Node_Update, class Node, - class Allocator> + typename _Alloc> struct bin_search_tree_traits< Key, - null_mapped_type, + null_type, Cmp_Fn, Node_Update, Node, - Allocator> + _Alloc> { private: - typedef - types_traits< - Key, - null_mapped_type, - Allocator, - false> - type_traits; + typedef types_traits type_traits; public: typedef Node node; typedef bin_search_tree_const_it_< - typename Allocator::template rebind< + typename _Alloc::template rebind< node>::other::pointer, typename type_traits::value_type, typename type_traits::pointer, @@ -197,14 +186,14 @@ namespace __gnu_pbds typename type_traits::reference, typename type_traits::const_reference, true, - Allocator> - const_point_iterator; + _Alloc> + point_const_iterator; - typedef const_point_iterator point_iterator; + typedef point_const_iterator point_iterator; typedef bin_search_tree_const_it_< - typename Allocator::template rebind< + typename _Alloc::template rebind< node>::other::pointer, typename type_traits::value_type, typename type_traits::pointer, @@ -212,7 +201,7 @@ namespace __gnu_pbds typename type_traits::reference, typename type_traits::const_reference, false, - Allocator> + _Alloc> const_reverse_iterator; typedef const_reverse_iterator reverse_iterator; @@ -220,27 +209,23 @@ namespace __gnu_pbds typedef bin_search_tree_const_node_it_< Node, - const_point_iterator, + point_const_iterator, point_iterator, - Allocator> - const_node_iterator; + _Alloc> + node_const_iterator; - typedef const_node_iterator node_iterator; + typedef node_const_iterator node_iterator; typedef - Node_Update< - const_node_iterator, - node_iterator, - Cmp_Fn, - Allocator> + Node_Update node_update; typedef - __gnu_pbds::null_tree_node_update< - const_node_iterator, + __gnu_pbds::null_node_update< + node_const_iterator, node_iterator, Cmp_Fn, - Allocator>* + _Alloc>* null_node_update_pointer; }; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp index 4d65d2b6826..ee408e8ea02 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp @@ -34,17 +34,13 @@ // warranty. /** - * @file binary_heap_.hpp + * @file binary_heap_/binary_heap_.hpp * Contains an implementation class for a binary heap. */ #ifndef PB_DS_BINARY_HEAP_HPP #define PB_DS_BINARY_HEAP_HPP -/* - * Based on CLRS. - */ - #include #include #include @@ -53,7 +49,7 @@ #include #include #include -#include +#include #include #ifdef PB_DS_BINARY_HEAP_TRACE_ #include @@ -66,126 +62,85 @@ namespace __gnu_pbds namespace detail { #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ - binary_heap_ + binary_heap #define PB_DS_ENTRY_CMP_DEC \ - entry_cmp::value, Allocator>::type + entry_cmp::value>::type #define PB_DS_RESIZE_POLICY_DEC \ - __gnu_pbds::detail::resize_policy + __gnu_pbds::detail::resize_policy /** - * class description = "Base class for some types of h3ap$"> - **/ - template - class binary_heap_ : public PB_DS_ENTRY_CMP_DEC, - public PB_DS_RESIZE_POLICY_DEC + * @brief Binary heaps composed of resize and compare policies. + * + * Based on CLRS. + */ + template + class binary_heap + : public PB_DS_ENTRY_CMP_DEC, public PB_DS_RESIZE_POLICY_DEC { + public: + typedef Value_Type value_type; + typedef Cmp_Fn cmp_fn; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; + typedef typename PB_DS_ENTRY_CMP_DEC entry_cmp; + typedef PB_DS_RESIZE_POLICY_DEC resize_policy; + typedef cond_dealtor cond_dealtor_t; private: enum { - simple_value = is_simple::value + simple_value = is_simple::value }; - typedef integral_constant no_throw_copies_t; + typedef integral_constant no_throw_copies_t; - typedef - typename Allocator::template rebind< - Value_Type>::other - value_allocator; - - typedef - typename __conditional_type< - simple_value, - Value_Type, - typename value_allocator::pointer>::__type - entry; - - typedef - typename Allocator::template rebind< - entry>::other - entry_allocator; - - typedef typename entry_allocator::pointer entry_pointer; - - typedef typename PB_DS_ENTRY_CMP_DEC entry_cmp; - - typedef PB_DS_RESIZE_POLICY_DEC resize_policy; - - typedef - cond_dealtor< - Value_Type, - Allocator> - cond_dealtor_t; + typedef typename _Alloc::template rebind __rebind_v; + typedef typename __rebind_v::other value_allocator; public: + typedef typename value_allocator::pointer pointer; + typedef typename value_allocator::const_pointer const_pointer; + typedef typename value_allocator::reference reference; + typedef typename value_allocator::const_reference const_reference; - typedef typename Allocator::size_type size_type; + typedef typename __conditional_type::__type + entry; - typedef typename Allocator::difference_type difference_type; + typedef typename _Alloc::template rebind::other + entry_allocator; - typedef Value_Type value_type; + typedef typename entry_allocator::pointer entry_pointer; - typedef - typename Allocator::template rebind< - value_type>::other::pointer - pointer; + typedef binary_heap_point_const_iterator_ + point_const_iterator; - typedef - typename Allocator::template rebind< - value_type>::other::const_pointer - const_pointer; + typedef point_const_iterator point_iterator; - typedef - typename Allocator::template rebind< - value_type>::other::reference - reference; + typedef binary_heap_const_iterator_ + const_iterator; - typedef - typename Allocator::template rebind< - value_type>::other::const_reference - const_reference; + typedef const_iterator iterator; - typedef - binary_heap_const_point_iterator_< - value_type, - entry, - simple_value, - Allocator> - const_point_iterator; - typedef const_point_iterator point_iterator; + binary_heap(); - typedef - binary_heap_const_iterator_< - value_type, - entry, - simple_value, - Allocator> - const_iterator; + binary_heap(const cmp_fn&); - typedef const_iterator iterator; - - typedef Cmp_Fn cmp_fn; - - typedef Allocator allocator_type; - - public: - - binary_heap_(); - - binary_heap_(const Cmp_Fn& r_cmp_fn); - - binary_heap_(const PB_DS_CLASS_C_DEC& other); + binary_heap(const binary_heap&); void - swap(PB_DS_CLASS_C_DEC& other); + swap(binary_heap&); - ~binary_heap_(); + ~binary_heap(); inline bool empty() const; @@ -196,17 +151,17 @@ namespace __gnu_pbds inline size_type max_size() const; - Cmp_Fn& + Cmp_Fn& get_cmp_fn(); - const Cmp_Fn& + const Cmp_Fn& get_cmp_fn() const; inline point_iterator - push(const_reference r_val); + push(const_reference); void - modify(point_iterator it, const_reference r_new_val); + modify(point_iterator, const_reference); inline const_reference top() const; @@ -215,17 +170,17 @@ namespace __gnu_pbds pop(); inline void - erase(point_iterator it); + erase(point_iterator); template - typename PB_DS_CLASS_C_DEC::size_type - erase_if(Pred pred); + size_type + erase_if(Pred); - inline static void - erase_at(entry_pointer a_entries, size_type size, false_type); + inline void + erase_at(entry_pointer, size_type, false_type); - inline static void - erase_at(entry_pointer a_entries, size_type size, true_type); + inline void + erase_at(entry_pointer, size_type, true_type); inline iterator begin(); @@ -243,48 +198,43 @@ namespace __gnu_pbds clear(); template - void - split(Pred pred, PB_DS_CLASS_C_DEC& other); + void + split(Pred, binary_heap&); void - join(PB_DS_CLASS_C_DEC& other); + join(binary_heap&); #ifdef PB_DS_BINARY_HEAP_TRACE_ void trace() const; -#endif +#endif protected: - template - void - copy_from_range(It first_it, It last_it); + void + copy_from_range(It, It); private: - void - value_swap(PB_DS_CLASS_C_DEC& other); + value_swap(binary_heap&); inline void - insert_value(const_reference r_val, false_type); + insert_value(const_reference, false_type); inline void - insert_value(value_type val, true_type); - - inline void - insert_entry(entry e); + insert_value(value_type, true_type); inline void resize_for_insert_if_needed(); inline void - swap_value_imp(entry_pointer p_e, value_type new_val, true_type); + swap_value_imp(entry_pointer, value_type, true_type); inline void - swap_value_imp(entry_pointer p_e, const_reference r_new_val, false_type); + swap_value_imp(entry_pointer, const_reference, false_type); void - fix(entry_pointer p_e); + fix(entry_pointer); inline const_reference top_imp(true_type) const; @@ -293,48 +243,91 @@ namespace __gnu_pbds top_imp(false_type) const; inline static size_type - left_child(size_type i); + left_child(size_type); inline static size_type - right_child(size_type i); + right_child(size_type); inline static size_type - parent(size_type i); + parent(size_type); inline void resize_for_erase_if_needed(); template size_type - partition(Pred pred); + partition(Pred); + + void + make_heap() + { + const entry_cmp& m_cmp = static_cast(*this); + entry_pointer end = m_a_entries + m_size; + std::make_heap(m_a_entries, end, m_cmp); + _GLIBCXX_DEBUG_ASSERT(is_heap()); + } + + void + push_heap() + { + if (!is_heap()) + make_heap(); + else + { + const entry_cmp& m_cmp = static_cast(*this); + entry_pointer end = m_a_entries + m_size; + std::push_heap(m_a_entries, end, m_cmp); + } + } + + void + pop_heap() + { + const entry_cmp& m_cmp = static_cast(*this); + entry_pointer end = m_a_entries + m_size; + std::pop_heap(m_a_entries, end, m_cmp); + } + + bool + is_heap() + { + const entry_cmp& m_cmp = static_cast(*this); + entry_pointer end = m_a_entries + m_size; + bool p = std::__is_heap(m_a_entries, end, m_cmp); + return p; + } #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; -#endif + assert_valid(const char*, int) const; +#endif #ifdef PB_DS_BINARY_HEAP_TRACE_ void - trace_entry(const entry& r_e, false_type) const; + trace_entry(const entry&, false_type) const; void - trace_entry(const entry& r_e, true_type) const; -#endif + trace_entry(const entry&, true_type) const; +#endif - private: - static entry_allocator s_entry_allocator; + static entry_allocator s_entry_allocator; + static value_allocator s_value_allocator; + static no_throw_copies_t s_no_throw_copies_ind; - static value_allocator s_value_allocator; - - static no_throw_copies_t s_no_throw_copies_ind; - - size_type m_size; - - size_type m_actual_size; - - entry_pointer m_a_entries; + size_type m_size; + size_type m_actual_size; + entry_pointer m_a_entries; }; +#define PB_DS_ASSERT_VALID(X) \ + _GLIBCXX_DEBUG_ONLY(X.assert_valid(__FILE__, __LINE__);) + +#define PB_DS_DEBUG_VERIFY(_Cond) \ + _GLIBCXX_DEBUG_VERIFY_AT(_Cond, \ + _M_message(#_Cond" assertion from %1;:%2;") \ + ._M_string(__FILE__)._M_integer(__LINE__) \ + ,__file,__line) + #include #include #include @@ -354,4 +347,4 @@ namespace __gnu_pbds } // namespace detail } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp index aa86f5ea4f5..a6ac261b9ba 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file const_iterator.hpp + * @file binary_heap_/const_iterator.hpp * Contains an iterator class returned by the table's const find and insert * methods. */ @@ -42,57 +42,48 @@ #ifndef PB_DS_BINARY_HEAP_CONST_ITERATOR_HPP #define PB_DS_BINARY_HEAP_CONST_ITERATOR_HPP -#include +#include #include namespace __gnu_pbds { namespace detail { +#define PB_DS_BIN_HEAP_CIT_BASE \ + binary_heap_point_const_iterator_ -#define PB_DS_CLASS_C_DEC \ - binary_heap_const_iterator_ - -#define PB_DS_BASE_C_DEC \ - binary_heap_const_point_iterator_ - - // Const point-type iterator. + /// Const point-type iterator. template - class binary_heap_const_iterator_ : public PB_DS_BASE_C_DEC + typename _Alloc> + class binary_heap_const_iterator_ : public PB_DS_BIN_HEAP_CIT_BASE { - private: - typedef typename PB_DS_BASE_C_DEC::entry_pointer entry_pointer; - - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_BIN_HEAP_CIT_BASE base_type; + typedef typename base_type::entry_pointer entry_pointer; public: - // Category. - typedef std::forward_iterator_tag iterator_category; + typedef std::forward_iterator_tag iterator_category; // Difference type. - typedef typename Allocator::difference_type difference_type; + typedef typename _Alloc::difference_type difference_type; // Iterator's value type. - typedef typename base_type::value_type value_type; + typedef typename base_type::value_type value_type; // Iterator's pointer type. - typedef typename base_type::pointer pointer; + typedef typename base_type::pointer pointer; // Iterator's const pointer type. - typedef typename base_type::const_pointer const_pointer; + typedef typename base_type::const_pointer const_pointer; // Iterator's reference type. - typedef typename base_type::reference reference; + typedef typename base_type::reference reference; // Iterator's const reference type. - typedef typename base_type::const_reference const_reference; - - public: + typedef typename base_type::const_reference const_reference; inline binary_heap_const_iterator_(entry_pointer p_e) : base_type(p_e) @@ -105,24 +96,21 @@ namespace __gnu_pbds // Copy constructor. inline - binary_heap_const_iterator_(const PB_DS_CLASS_C_DEC& other) : base_type(other) + binary_heap_const_iterator_(const binary_heap_const_iterator_& other) + : base_type(other) { } // Compares content to a different iterator object. inline bool - operator==(const PB_DS_CLASS_C_DEC& other) const - { - return base_type::m_p_e == other.m_p_e; - } + operator==(const binary_heap_const_iterator_& other) const + { return base_type::m_p_e == other.m_p_e; } // Compares content (negatively) to a different iterator object. inline bool - operator!=(const PB_DS_CLASS_C_DEC& other) const - { - return base_type::m_p_e != other.m_p_e; - } + operator!=(const binary_heap_const_iterator_& other) const + { return base_type::m_p_e != other.m_p_e; } - inline PB_DS_CLASS_C_DEC& + inline binary_heap_const_iterator_& operator++() { _GLIBCXX_DEBUG_ASSERT(base_type::m_p_e != 0); @@ -130,10 +118,10 @@ namespace __gnu_pbds return *this; } - inline PB_DS_CLASS_C_DEC + inline binary_heap_const_iterator_ operator++(int) { - PB_DS_CLASS_C_DEC ret_it(base_type::m_p_e); + binary_heap_const_iterator_ ret_it(base_type::m_p_e); operator++(); return ret_it; } @@ -144,8 +132,7 @@ namespace __gnu_pbds { ++base_type::m_p_e; } }; -#undef PB_DS_CLASS_C_DEC -#undef PB_DS_BASE_C_DEC +#undef PB_DS_BIN_HEAP_CIT_BASE } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp index bdaa7ff7806..9602385fbb1 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp @@ -35,7 +35,7 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file binary_heap_/constructors_destructor_fn_imps.hpp * Contains an implementation class for binary_heap_. */ @@ -62,55 +62,37 @@ copy_from_range(It first_it, It last_it) insert_value(*first_it, s_no_throw_copies_ind); ++first_it; } - - std::make_heap(m_a_entries, m_a_entries + m_size, static_cast(*this)); - - PB_DS_ASSERT_VALID((*this)) + make_heap(); + PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -binary_heap_() : - m_size(0), - m_actual_size(resize_policy::min_size), +binary_heap() +: m_size(0), m_actual_size(resize_policy::min_size), m_a_entries(s_entry_allocator.allocate(m_actual_size)) -{ - PB_DS_ASSERT_VALID((*this)) -} +{ PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -binary_heap_(const Cmp_Fn& r_cmp_fn) : - entry_cmp(r_cmp_fn), - m_size(0), - m_actual_size(resize_policy::min_size), +binary_heap(const Cmp_Fn& r_cmp_fn) +: entry_cmp(r_cmp_fn), m_size(0), m_actual_size(resize_policy::min_size), m_a_entries(s_entry_allocator.allocate(m_actual_size)) -{ - PB_DS_ASSERT_VALID((*this)) -} +{ PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -binary_heap_(const PB_DS_CLASS_C_DEC& other) : - entry_cmp(other), - resize_policy(other), - m_size(0), +binary_heap(const PB_DS_CLASS_C_DEC& other) +: entry_cmp(other), resize_policy(other), m_size(0), m_actual_size(other.m_actual_size), m_a_entries(s_entry_allocator.allocate(m_actual_size)) { PB_DS_ASSERT_VALID(other) _GLIBCXX_DEBUG_ASSERT(m_a_entries != other.m_a_entries); - const_iterator first_it = other.begin(); - const_iterator last_it = other.end(); - __try { - while (first_it != last_it) - { - insert_value(*first_it, s_no_throw_copies_ind); - ++first_it; - } + copy_from_range(other.begin(), other.end()); } __catch(...) { @@ -131,9 +113,8 @@ swap(PB_DS_CLASS_C_DEC& other) PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) _GLIBCXX_DEBUG_ASSERT(m_a_entries != other.m_a_entries); - value_swap(other); - std::swap((entry_cmp& )(*this), (entry_cmp& )other); + std::swap((entry_cmp&)(*this), (entry_cmp&)other); PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) } @@ -151,10 +132,9 @@ value_swap(PB_DS_CLASS_C_DEC& other) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~binary_heap_() +~binary_heap() { for (size_type i = 0; i < m_size; ++i) erase_at(m_a_entries, i, s_no_throw_copies_ind); s_entry_allocator.deallocate(m_a_entries, m_actual_size); } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp index a2c6f307f17..b1b0f5ba1b9 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file binary_heap_/debug_fn_imps.hpp * Contains an implementation class for a binary_heap. */ @@ -47,7 +47,7 @@ assert_valid(const char* __file, int __line) const { #ifdef PB_DS_REGRESSION s_entry_allocator.check_allocated(m_a_entries, m_actual_size); -#endif +#endif resize_policy::assert_valid(__file, __line); PB_DS_DEBUG_VERIFY(m_size <= m_actual_size); @@ -55,7 +55,7 @@ assert_valid(const char* __file, int __line) const { #ifdef PB_DS_REGRESSION s_value_allocator.check_allocated(m_a_entries[i], 1); -#endif +#endif if (left_child(i) < m_size) PB_DS_DEBUG_VERIFY(!entry_cmp::operator()(m_a_entries[i], m_a_entries[left_child(i)])); @@ -69,4 +69,4 @@ assert_valid(const char* __file, int __line) const } } -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp index b0a9b5b0d92..42e799fc8bd 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,7 +34,7 @@ // warranty. /** - * @file entry_cmp.hpp + * @file binary_heap_/entry_cmp.hpp * Contains an implementation class for a binary_heap. */ @@ -45,48 +45,40 @@ namespace __gnu_pbds { namespace detail { + /// Entry compare, primary template. + template + struct entry_cmp; - template - struct entry_cmp - { - typedef Cmp_Fn type; - }; - - template - struct entry_cmp< - Value_Type, - Cmp_Fn, - false, - Allocator> - { - public: - typedef - typename Allocator::template rebind< - Value_Type>::other::const_pointer - entry; - - struct type : public Cmp_Fn + /// Specialization, true. + template + struct entry_cmp<_VTp, Cmp_Fn, _Alloc, true> { - public: - inline - type() - { } - - inline - type(const Cmp_Fn& other) : Cmp_Fn(other) - { } - - inline bool - operator()(entry p_lhs, entry p_rhs) const - { - return Cmp_Fn::operator()(*p_lhs, * p_rhs); - } + /// Compare. + typedef Cmp_Fn type; }; - }; + /// Specialization, false. + template + struct entry_cmp<_VTp, Cmp_Fn, _Alloc, false> + { + private: + typedef typename _Alloc::template rebind<_VTp> __rebind_v; + + public: + typedef typename __rebind_v::other::const_pointer entry; + + /// Compare plus entry. + struct type : public Cmp_Fn + { + type() { } + + type(const Cmp_Fn& other) : Cmp_Fn(other) { } + + bool + operator()(entry lhs, entry rhs) const + { return Cmp_Fn::operator()(*lhs, *rhs); } + }; + }; } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp index 185529e15e3..001876ef1f0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,7 +34,7 @@ // warranty. /** - * @file entry_pred.hpp + * @file binary_heap_/entry_pred.hpp * Contains an implementation class for a binary_heap. */ @@ -45,48 +45,40 @@ namespace __gnu_pbds { namespace detail { + /// Entry predicate primary class template. + template + struct entry_pred; - template - struct entry_pred - { - typedef Pred type; - }; - - template - struct entry_pred< - Value_Type, - Pred, - false, - Allocator> - { - public: - typedef - typename Allocator::template rebind< - Value_Type>::other::const_pointer - entry; - - struct type : public Pred + /// Specialization, true. + template + struct entry_pred<_VTp, Pred, _Alloc, true> { - public: - inline - type() - { } - - inline - type(const Pred& other) : Pred(other) - { } - - inline bool - operator()(entry p_v) const - { - return Pred::operator()(*p_v); - } + typedef Pred type; }; - }; + /// Specialization, false. + template + struct entry_pred<_VTp, Pred, _Alloc, false> + { + private: + typedef typename _Alloc::template rebind<_VTp> __rebind_v; + + public: + typedef typename __rebind_v::other::const_pointer entry; + + struct type : public Pred + { + inline + type() { } + + inline + type(const Pred& other) : Pred(other) { } + + inline bool + operator()(entry p_v) const + { return Pred::operator()(*p_v); } + }; + }; } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp index 2b6c9b79849..f204d81f603 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp @@ -35,7 +35,7 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file binary_heap_/erase_fn_imps.hpp * Contains an implementation class for a binary_heap. */ @@ -49,23 +49,17 @@ clear() __try { - const size_type actual_size = resize_policy::get_new_size_for_arbitrary(0); - - entry_pointer a_entries = s_entry_allocator.allocate(actual_size); - - resize_policy::notify_arbitrary(actual_size); - + const size_type new_size = resize_policy::get_new_size_for_arbitrary(0); + entry_pointer new_entries = s_entry_allocator.allocate(new_size); + resize_policy::notify_arbitrary(new_size); s_entry_allocator.deallocate(m_a_entries, m_actual_size); - - m_actual_size = actual_size; - - m_a_entries = a_entries; + m_actual_size = new_size; + m_a_entries = new_entries; } __catch(...) { } m_size = 0; - PB_DS_ASSERT_VALID((*this)) } @@ -92,13 +86,9 @@ pop() PB_DS_ASSERT_VALID((*this)) _GLIBCXX_DEBUG_ASSERT(!empty()); - erase_at(m_a_entries, 0, s_no_throw_copies_ind); - - std::pop_heap(m_a_entries, m_a_entries + m_size, - static_cast(*this)); - + pop_heap(); + erase_at(m_a_entries, m_size - 1, s_no_throw_copies_ind); resize_for_erase_if_needed(); - _GLIBCXX_DEBUG_ASSERT(m_size > 0); --m_size; @@ -113,43 +103,32 @@ erase_if(Pred pred) { PB_DS_ASSERT_VALID((*this)) - typedef typename entry_pred::type + typedef typename entry_pred::type pred_t; const size_type left = partition(pred_t(pred)); - _GLIBCXX_DEBUG_ASSERT(m_size >= left); - const size_type ersd = m_size - left; - for (size_type i = left; i < m_size; ++i) erase_at(m_a_entries, i, s_no_throw_copies_ind); __try { - const size_type actual_size = + const size_type new_size = resize_policy::get_new_size_for_arbitrary(left); - entry_pointer a_entries = s_entry_allocator.allocate(actual_size); - - std::copy(m_a_entries, m_a_entries + left, a_entries); - + entry_pointer new_entries = s_entry_allocator.allocate(new_size); + std::copy(m_a_entries, m_a_entries + left, new_entries); s_entry_allocator.deallocate(m_a_entries, m_actual_size); - - m_actual_size = actual_size; - + m_actual_size = new_size; resize_policy::notify_arbitrary(m_actual_size); } __catch(...) { }; m_size = left; - - std::make_heap(m_a_entries, m_a_entries + m_size, - static_cast(*this)); - + make_heap(); PB_DS_ASSERT_VALID((*this)) - return ersd; } @@ -162,16 +141,12 @@ erase(point_iterator it) _GLIBCXX_DEBUG_ASSERT(!empty()); const size_type fix_pos = it.m_p_e - m_a_entries; - std::swap(*it.m_p_e, m_a_entries[m_size - 1]); - erase_at(m_a_entries, m_size - 1, s_no_throw_copies_ind); - resize_for_erase_if_needed(); _GLIBCXX_DEBUG_ASSERT(m_size > 0); --m_size; - _GLIBCXX_DEBUG_ASSERT(fix_pos <= m_size); if (fix_pos != m_size) @@ -190,21 +165,15 @@ resize_for_erase_if_needed() __try { - const size_type new_actual_size = - resize_policy::get_new_size_for_shrink(); - - entry_pointer a_new_entries = s_entry_allocator.allocate(new_actual_size); - + const size_type new_size = resize_policy::get_new_size_for_shrink(); + entry_pointer new_entries = s_entry_allocator.allocate(new_size); resize_policy::notify_shrink_resize(); _GLIBCXX_DEBUG_ASSERT(m_size > 0); - std::copy(m_a_entries, m_a_entries + m_size - 1, a_new_entries); - + std::copy(m_a_entries, m_a_entries + m_size - 1, new_entries); s_entry_allocator.deallocate(m_a_entries, m_actual_size); - - m_actual_size = new_actual_size; - - m_a_entries = a_new_entries; + m_actual_size = new_size; + m_a_entries = new_entries; } __catch(...) { } @@ -230,9 +199,7 @@ partition(Pred pred) else { _GLIBCXX_DEBUG_ASSERT(left < right); - std::swap(m_a_entries[left], m_a_entries[right]); - ++left; --right; } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp index 116e9bcddaa..c445dc0c31f 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file find_fn_imps.hpp + * @file binary_heap_/find_fn_imps.hpp * Contains an implementation class for a binary_heap. */ @@ -45,7 +45,6 @@ top() const { PB_DS_ASSERT_VALID((*this)) _GLIBCXX_DEBUG_ASSERT(!empty()); - return top_imp(s_no_throw_copies_ind); } @@ -53,39 +52,28 @@ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_reference PB_DS_CLASS_C_DEC:: top_imp(true_type) const -{ - return* m_a_entries; -} +{ return *m_a_entries; } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_reference PB_DS_CLASS_C_DEC:: top_imp(false_type) const -{ - return** m_a_entries; -} +{ return **m_a_entries; } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: left_child(size_type i) -{ - return i* 2 + 1; -} +{ return i * 2 + 1; } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: right_child(size_type i) -{ - return i* 2 + 2; -} +{ return i * 2 + 2; } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: parent(size_type i) -{ - return (i - 1) / 2; -} - +{ return (i - 1) / 2; } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp index d29279318fc..ae36d3181a1 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file info_fn_imps.hpp + * @file binary_heap_/info_fn_imps.hpp * Contains an implementation class for a binary_heap. */ @@ -42,23 +42,17 @@ PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: empty() const -{ - return (m_size == 0); -} +{ return m_size == 0; } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: size() const -{ - return (m_size); -} +{ return m_size; } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: max_size() const -{ - return (s_entry_allocator.max_size()); -} +{ return s_entry_allocator.max_size(); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp index c6c41e57264..1e1ed969e72 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file binary_heap_/insert_fn_imps.hpp * Contains an implementation class for a binary_heap. */ @@ -45,8 +45,7 @@ push(const_reference r_val) { PB_DS_ASSERT_VALID((*this)) insert_value(r_val, s_no_throw_copies_ind); - std::push_heap(m_a_entries, m_a_entries + m_size, - static_cast(*this)); + push_heap(); PB_DS_ASSERT_VALID((*this)) return point_iterator(m_a_entries); } @@ -57,7 +56,6 @@ PB_DS_CLASS_C_DEC:: insert_value(value_type val, true_type) { resize_for_insert_if_needed(); - m_a_entries[m_size++] = val; } @@ -74,15 +72,6 @@ insert_value(const_reference r_val, false_type) m_a_entries[m_size++] = p_new; } -PB_DS_CLASS_T_DEC -inline void -PB_DS_CLASS_C_DEC:: -insert_entry(entry e) -{ - resize_for_insert_if_needed(); - m_a_entries[m_size++] = e; -} - PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: @@ -94,13 +83,15 @@ resize_for_insert_if_needed() return; } - const size_type new_actual_size = resize_policy::get_new_size_for_grow(); - entry_pointer a_new_entries = s_entry_allocator.allocate(new_actual_size); + const size_type new_size = resize_policy::get_new_size_for_grow(); + entry_pointer new_entries = s_entry_allocator.allocate(new_size); resize_policy::notify_grow_resize(); - std::copy(m_a_entries, m_a_entries + m_size, a_new_entries); + + std::copy(m_a_entries, m_a_entries + m_size, new_entries); s_entry_allocator.deallocate(m_a_entries, m_actual_size); - m_actual_size = new_actual_size; - m_a_entries = a_new_entries; + m_actual_size = new_size; + m_a_entries = new_entries; + make_heap(); } PB_DS_CLASS_T_DEC @@ -112,6 +103,7 @@ modify(point_iterator it, const_reference r_new_val) swap_value_imp(it.m_p_e, r_new_val, s_no_throw_copies_ind); fix(it.m_p_e); PB_DS_ASSERT_VALID((*this)) + _GLIBCXX_DEBUG_ASSERT(is_heap()); } PB_DS_CLASS_T_DEC @@ -123,13 +115,13 @@ fix(entry_pointer p_e) if (i > 0 && entry_cmp::operator()(m_a_entries[parent(i)], m_a_entries[i])) { size_type parent_i = parent(i); - while (i > 0 + while (i > 0 && entry_cmp::operator()(m_a_entries[parent_i], m_a_entries[i])) - { + { std::swap(m_a_entries[i], m_a_entries[parent_i]); i = parent_i; parent_i = parent(i); - } + } PB_DS_ASSERT_VALID((*this)) return; @@ -137,29 +129,30 @@ fix(entry_pointer p_e) while (i < m_size) { - const size_type left_child_i = left_child(i); - const size_type right_child_i = right_child(i); - _GLIBCXX_DEBUG_ASSERT(right_child_i > left_child_i); - const bool smaller_than_left_child = left_child_i < m_size && - entry_cmp::operator()(m_a_entries[i], m_a_entries[left_child_i]); + const size_type lchild_i = left_child(i); + const size_type rchild_i = right_child(i); + _GLIBCXX_DEBUG_ASSERT(rchild_i > lchild_i); - const bool smaller_than_right_child = right_child_i < m_size && - entry_cmp::operator()(m_a_entries[i], m_a_entries[right_child_i]); + const bool smaller_than_lchild = lchild_i < m_size && + entry_cmp::operator()(m_a_entries[i], m_a_entries[lchild_i]); - const bool swap_with_r_child = smaller_than_right_child && (!smaller_than_left_child || entry_cmp::operator()(m_a_entries[left_child_i], m_a_entries[right_child_i])); + const bool smaller_than_rchild = rchild_i < m_size && + entry_cmp::operator()(m_a_entries[i], m_a_entries[rchild_i]); - const bool swap_with_l_child = !swap_with_r_child && smaller_than_left_child; + const bool swap_with_rchild = smaller_than_rchild && (!smaller_than_lchild || entry_cmp::operator()(m_a_entries[lchild_i], m_a_entries[rchild_i])); - if (swap_with_l_child) - { - std::swap(m_a_entries[i], m_a_entries[left_child_i]); - i = left_child_i; - } - else if (swap_with_r_child) - { - std::swap(m_a_entries[i], m_a_entries[right_child_i]); - i = right_child_i; - } + const bool swap_with_lchild = !swap_with_rchild && smaller_than_lchild; + + if (swap_with_lchild) + { + std::swap(m_a_entries[i], m_a_entries[lchild_i]); + i = lchild_i; + } + else if (swap_with_rchild) + { + std::swap(m_a_entries[i], m_a_entries[rchild_i]); + i = rchild_i; + } else i = m_size; } @@ -169,9 +162,7 @@ PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: swap_value_imp(entry_pointer p_e, value_type new_val, true_type) -{ - * p_e = new_val; -} +{ *p_e = new_val; } PB_DS_CLASS_T_DEC inline void diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp index db0a64ea899..daaf2e4a7f8 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file iterators_fn_imps.hpp + * @file binary_heap_/iterators_fn_imps.hpp * Contains an implementation class for a binary_heap. */ @@ -42,31 +42,23 @@ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::iterator PB_DS_CLASS_C_DEC:: begin() -{ - return (iterator(m_a_entries)); -} +{ return iterator(m_a_entries); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_iterator PB_DS_CLASS_C_DEC:: begin() const -{ - return (const_iterator(m_a_entries)); -} +{ return const_iterator(m_a_entries); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::iterator PB_DS_CLASS_C_DEC:: end() -{ - return (iterator(m_a_entries + m_size)); -} +{ return iterator(m_a_entries + m_size); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_iterator PB_DS_CLASS_C_DEC:: end() const -{ - return (const_iterator(m_a_entries + m_size)); -} +{ return const_iterator(m_a_entries + m_size); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp similarity index 80% rename from libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp rename to libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp index 3d75e86d45a..87362607387 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp @@ -34,9 +34,9 @@ // warranty. /** - * @file const_point_iterator.hpp + * @file binary_heap_/point_const_iterator.hpp * Contains an iterator class returned by the table's const find and insert - * methods. + * methods. */ #ifndef PB_DS_BINARY_HEAP_CONST_FIND_ITERATOR_HPP @@ -51,11 +51,11 @@ namespace __gnu_pbds { // Const point-type iterator. template - class binary_heap_const_point_iterator_ + typename _Alloc> + class binary_heap_point_const_iterator_ { protected: - typedef typename Allocator::template rebind::other::pointer entry_pointer; + typedef typename _Alloc::template rebind::other::pointer entry_pointer; public: // Category. @@ -68,35 +68,35 @@ namespace __gnu_pbds typedef Value_Type value_type; // Iterator's pointer type. - typedef typename Allocator::template rebind::other::pointer + typedef typename _Alloc::template rebind::other::pointer pointer; // Iterator's const pointer type. typedef - typename Allocator::template rebind::other::const_pointer + typename _Alloc::template rebind::other::const_pointer const_pointer; // Iterator's reference type. typedef - typename Allocator::template rebind::other::reference + typename _Alloc::template rebind::other::reference reference; // Iterator's const reference type. typedef - typename Allocator::template rebind::other::const_reference + typename _Alloc::template rebind::other::const_reference const_reference; inline - binary_heap_const_point_iterator_(entry_pointer p_e) : m_p_e(p_e) + binary_heap_point_const_iterator_(entry_pointer p_e) : m_p_e(p_e) { } // Default constructor. inline - binary_heap_const_point_iterator_() : m_p_e(0) { } + binary_heap_point_const_iterator_() : m_p_e(0) { } // Copy constructor. inline - binary_heap_const_point_iterator_(const binary_heap_const_point_iterator_& other) + binary_heap_point_const_iterator_(const binary_heap_point_const_iterator_& other) : m_p_e(other.m_p_e) { } @@ -118,12 +118,12 @@ namespace __gnu_pbds // Compares content to a different iterator object. inline bool - operator==(const binary_heap_const_point_iterator_& other) const + operator==(const binary_heap_point_const_iterator_& other) const { return m_p_e == other.m_p_e; } // Compares content (negatively) to a different iterator object. inline bool - operator!=(const binary_heap_const_point_iterator_& other) const + operator!=(const binary_heap_point_const_iterator_& other) const { return m_p_e != other.m_p_e; } private: diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp index 11a7b89158a..f3782221b49 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file policy_access_fn_imps.hpp + * @file binary_heap_/policy_access_fn_imps.hpp * Contains an implementation class for a binary_heap. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp index c5893872e5c..e3d74bffd69 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file resize_policy.hpp + * @file binary_heap_/resize_policy.hpp * Contains an implementation class for a binary_heap. */ @@ -47,40 +47,49 @@ namespace __gnu_pbds { namespace detail { - -#define PB_DS_CLASS_T_DEC template - -#define PB_DS_CLASS_C_DEC resize_policy - - template + /// Resize policy for binary heap. + template class resize_policy { - public: - typedef Size_Type size_type; - + private: enum { - min_size = 16 + ratio = 8, + factor = 2 }; + // Next shrink size. + _Tp m_shrink_size; + + // Next grow size. + _Tp m_grow_size; + public: - inline - resize_policy(); + typedef _Tp size_type; + + static const _Tp min_size = 16; + + resize_policy() : m_shrink_size(0), m_grow_size(min_size) + { PB_DS_ASSERT_VALID((*this)) } + + resize_policy(const resize_policy& other) + : m_shrink_size(other.m_shrink_size), m_grow_size(other.m_grow_size) + { PB_DS_ASSERT_VALID((*this)) } inline void - swap(PB_DS_CLASS_C_DEC& other); + swap(resize_policy<_Tp>&); inline bool - resize_needed_for_grow(size_type size) const; + resize_needed_for_grow(size_type) const; inline bool - resize_needed_for_shrink(size_type size) const; + resize_needed_for_shrink(size_type) const; inline bool - grow_needed(size_type size) const; + grow_needed(size_type) const; inline bool - shrink_needed(size_type size) const; + shrink_needed(size_type) const; inline size_type get_new_size_for_grow() const; @@ -88,8 +97,8 @@ namespace __gnu_pbds inline size_type get_new_size_for_shrink() const; - size_type - get_new_size_for_arbitrary(size_type size) const; + inline size_type + get_new_size_for_arbitrary(size_type) const; inline void notify_grow_resize(); @@ -98,83 +107,67 @@ namespace __gnu_pbds notify_shrink_resize(); void - notify_arbitrary(size_type actual_size); + notify_arbitrary(size_type); #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; -#endif + assert_valid(const char*, int) const; +#endif #ifdef PB_DS_BINARY_HEAP_TRACE_ void trace() const; -#endif - - private: - enum - { - ratio = 8, - factor = 2 - }; - - private: - size_type m_next_shrink_size; - size_type m_next_grow_size; +#endif }; - PB_DS_CLASS_T_DEC - inline - PB_DS_CLASS_C_DEC:: - resize_policy() : - m_next_shrink_size(0), - m_next_grow_size(min_size) - { PB_DS_ASSERT_VALID((*this)) } + template + const _Tp resize_policy<_Tp>::min_size; - PB_DS_CLASS_T_DEC + template inline void - PB_DS_CLASS_C_DEC:: - swap(PB_DS_CLASS_C_DEC& other) + resize_policy<_Tp>:: + swap(resize_policy<_Tp>& other) { - std::swap(m_next_shrink_size, other.m_next_shrink_size); - std::swap(m_next_grow_size, other.m_next_grow_size); + std::swap(m_shrink_size, other.m_shrink_size); + std::swap(m_grow_size, other.m_grow_size); } - PB_DS_CLASS_T_DEC + template inline bool - PB_DS_CLASS_C_DEC:: + resize_policy<_Tp>:: resize_needed_for_grow(size_type size) const { - _GLIBCXX_DEBUG_ASSERT(size <= m_next_grow_size); - return size == m_next_grow_size; + _GLIBCXX_DEBUG_ASSERT(size <= m_grow_size); + return size == m_grow_size; } - PB_DS_CLASS_T_DEC + template inline bool - PB_DS_CLASS_C_DEC:: + resize_policy<_Tp>:: resize_needed_for_shrink(size_type size) const { - _GLIBCXX_DEBUG_ASSERT(size <= m_next_grow_size); - return size == m_next_shrink_size; + _GLIBCXX_DEBUG_ASSERT(size <= m_grow_size); + return size == m_shrink_size; } - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::size_type - PB_DS_CLASS_C_DEC:: + template + inline typename resize_policy<_Tp>::size_type + resize_policy<_Tp>:: get_new_size_for_grow() const - { return m_next_grow_size* factor; } + { return m_grow_size * factor; } - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::size_type - PB_DS_CLASS_C_DEC:: + template + inline typename resize_policy<_Tp>::size_type + resize_policy<_Tp>:: get_new_size_for_shrink() const { - const size_type half_size = m_next_grow_size / factor; - return std::max(static_cast(min_size), half_size); + const size_type half_size = m_grow_size / factor; + return std::max(min_size, half_size); } - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::size_type - PB_DS_CLASS_C_DEC:: + template + inline typename resize_policy<_Tp>::size_type + resize_policy<_Tp>:: get_new_size_for_arbitrary(size_type size) const { size_type ret = min_size; @@ -183,71 +176,65 @@ namespace __gnu_pbds return ret; } - PB_DS_CLASS_T_DEC + template inline void - PB_DS_CLASS_C_DEC:: + resize_policy<_Tp>:: notify_grow_resize() { PB_DS_ASSERT_VALID((*this)) - _GLIBCXX_DEBUG_ASSERT(m_next_grow_size >= min_size); - m_next_grow_size *= factor; - m_next_shrink_size = m_next_grow_size / ratio; + _GLIBCXX_DEBUG_ASSERT(m_grow_size >= min_size); + m_grow_size *= factor; + m_shrink_size = m_grow_size / ratio; PB_DS_ASSERT_VALID((*this)) } - PB_DS_CLASS_T_DEC + template inline void - PB_DS_CLASS_C_DEC:: + resize_policy<_Tp>:: notify_shrink_resize() { PB_DS_ASSERT_VALID((*this)) - m_next_shrink_size /= factor; - if (m_next_shrink_size == 1) - m_next_shrink_size = 0; - - m_next_grow_size = - std::max(m_next_grow_size / factor, static_cast(min_size)); + m_shrink_size /= factor; + if (m_shrink_size == 1) + m_shrink_size = 0; + m_grow_size = std::max(m_grow_size / factor, min_size); PB_DS_ASSERT_VALID((*this)) } - PB_DS_CLASS_T_DEC + template inline void - PB_DS_CLASS_C_DEC:: + resize_policy<_Tp>:: notify_arbitrary(size_type actual_size) { - m_next_grow_size = actual_size; - m_next_shrink_size = m_next_grow_size / ratio; + m_grow_size = actual_size; + m_shrink_size = m_grow_size / ratio; PB_DS_ASSERT_VALID((*this)) } #ifdef _GLIBCXX_DEBUG - PB_DS_CLASS_T_DEC + template void - PB_DS_CLASS_C_DEC:: + resize_policy<_Tp>:: assert_valid(const char* __file, int __line) const { - PB_DS_DEBUG_VERIFY(m_next_shrink_size == 0 || - m_next_shrink_size* ratio == m_next_grow_size); - - PB_DS_DEBUG_VERIFY(m_next_grow_size >= min_size); + PB_DS_DEBUG_VERIFY(m_shrink_size == 0 + || m_shrink_size * ratio == m_grow_size); + PB_DS_DEBUG_VERIFY(m_grow_size >= min_size); } -#endif +#endif #ifdef PB_DS_BINARY_HEAP_TRACE_ - PB_DS_CLASS_T_DEC + template void - PB_DS_CLASS_C_DEC:: + resize_policy<_Tp>:: trace() const { - std::cerr << "shrink = " << m_next_shrink_size << - " grow = " << m_next_grow_size << std::endl; + std::cerr << "shrink = " << m_shrink_size + << " grow = " << m_grow_size << std::endl; } -#endif - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC +#endif } // namespace detail } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp index 675b4ec40db..0d09b535730 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp @@ -35,7 +35,7 @@ // warranty. /** - * @file split_join_fn_imps.hpp + * @file binary_heap_/split_join_fn_imps.hpp * Contains an implementation class for a binary_heap. */ @@ -48,40 +48,30 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other) PB_DS_ASSERT_VALID((*this)) typedef - typename entry_pred< - value_type, - Pred, - simple_value, - Allocator>::type + typename entry_pred::type pred_t; const size_type left = partition(pred_t(pred)); - _GLIBCXX_DEBUG_ASSERT(m_size >= left); const size_type ersd = m_size - left; - _GLIBCXX_DEBUG_ASSERT(m_size >= ersd); - const size_type actual_size = - resize_policy::get_new_size_for_arbitrary(left); - - const size_type other_actual_size = - other.get_new_size_for_arbitrary(ersd); + const size_type new_size = resize_policy::get_new_size_for_arbitrary(left); + const size_type other_actual_size = other.get_new_size_for_arbitrary(ersd); entry_pointer a_entries = 0; entry_pointer a_other_entries = 0; __try { - a_entries = s_entry_allocator.allocate(actual_size); - + a_entries = s_entry_allocator.allocate(new_size); a_other_entries = s_entry_allocator.allocate(other_actual_size); } __catch(...) { if (a_entries != 0) - s_entry_allocator.deallocate(a_entries, actual_size); + s_entry_allocator.deallocate(a_entries, new_size); if (a_other_entries != 0) s_entry_allocator.deallocate(a_other_entries, other_actual_size); @@ -92,14 +82,14 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other) for (size_type i = 0; i < other.m_size; ++i) erase_at(other.m_a_entries, i, s_no_throw_copies_ind); - _GLIBCXX_DEBUG_ASSERT(actual_size >= left); + _GLIBCXX_DEBUG_ASSERT(new_size >= left); std::copy(m_a_entries, m_a_entries + left, a_entries); std::copy(m_a_entries + left, m_a_entries + m_size, a_other_entries); s_entry_allocator.deallocate(m_a_entries, m_actual_size); s_entry_allocator.deallocate(other.m_a_entries, other.m_actual_size); - m_actual_size = actual_size; + m_actual_size = new_size; other.m_actual_size = other_actual_size; m_size = left; @@ -108,8 +98,8 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other) m_a_entries = a_entries; other.m_a_entries = a_other_entries; - std::make_heap(m_a_entries, m_a_entries + m_size, static_cast(*this)); - std::make_heap(other.m_a_entries, other.m_a_entries + other.m_size, static_cast(other)); + make_heap(); + other.make_heap(); resize_policy::notify_arbitrary(m_actual_size); other.notify_arbitrary(other.m_actual_size); @@ -127,20 +117,20 @@ join(PB_DS_CLASS_C_DEC& other) PB_DS_ASSERT_VALID(other) const size_type len = m_size + other.m_size; - const size_type actual_size = resize_policy::get_new_size_for_arbitrary(len); + const size_type new_size = resize_policy::get_new_size_for_arbitrary(len); entry_pointer a_entries = 0; entry_pointer a_other_entries = 0; __try { - a_entries = s_entry_allocator.allocate(actual_size); + a_entries = s_entry_allocator.allocate(new_size); a_other_entries = s_entry_allocator.allocate(resize_policy::min_size); } __catch(...) { if (a_entries != 0) - s_entry_allocator.deallocate(a_entries, actual_size); + s_entry_allocator.deallocate(a_entries, new_size); if (a_other_entries != 0) s_entry_allocator.deallocate(a_other_entries, resize_policy::min_size); @@ -149,25 +139,23 @@ join(PB_DS_CLASS_C_DEC& other) } std::copy(m_a_entries, m_a_entries + m_size, a_entries); - std::copy(other.m_a_entries, other.m_a_entries + other.m_size, a_entries + m_size); + std::copy(other.m_a_entries, other.m_a_entries + other.m_size, + a_entries + m_size); s_entry_allocator.deallocate(m_a_entries, m_actual_size); m_a_entries = a_entries; m_size = len; - m_actual_size = actual_size; - - resize_policy::notify_arbitrary(actual_size); - - std::make_heap(m_a_entries, m_a_entries + m_size, static_cast(*this)); + m_actual_size = new_size; + resize_policy::notify_arbitrary(new_size); + make_heap(); s_entry_allocator.deallocate(other.m_a_entries, other.m_actual_size); other.m_a_entries = a_other_entries; other.m_size = 0; other.m_actual_size = resize_policy::min_size; - other.notify_arbitrary(resize_policy::min_size); - + other.make_heap(); + PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp index 36bd66f7553..2704ec65c1b 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file trace_fn_imps.hpp + * @file binary_heap_/trace_fn_imps.hpp * Contains an implementation class for a binary_heap. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp index a6d6098fd37..d8704f65c41 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp @@ -53,64 +53,56 @@ namespace __gnu_pbds { namespace detail { - #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ - binomial_heap_ + binomial_heap -#define PB_DS_BASE_C_DEC \ - binomial_heap_base_ - - /** - * class description = "8y|\|0|\/|i41 h34p 74813"> - **/ - template - class binomial_heap_ : public PB_DS_BASE_C_DEC + /// Binomial heap. + template + class binomial_heap + : public binomial_heap_base { private: - typedef PB_DS_BASE_C_DEC base_type; - typedef typename base_type::node_pointer node_pointer; - typedef typename base_type::const_node_pointer const_node_pointer; + typedef binomial_heap_base base_type; + typedef typename base_type::node_pointer node_pointer; + typedef typename base_type::node_const_pointer node_const_pointer; public: - typedef Value_Type value_type; - typedef typename Allocator::size_type size_type; - typedef typename Allocator::difference_type difference_type; - typedef typename base_type::pointer pointer; - typedef typename base_type::const_pointer const_pointer; - typedef typename base_type::reference reference; - typedef typename base_type::const_reference const_reference; - typedef typename base_type::const_point_iterator const_point_iterator; - typedef typename base_type::point_iterator point_iterator; - typedef typename base_type::const_iterator const_iterator; - typedef typename base_type::iterator iterator; - typedef typename base_type::cmp_fn cmp_fn; - typedef typename base_type::allocator_type allocator_type; + typedef Value_Type value_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; + typedef typename base_type::pointer pointer; + typedef typename base_type::const_pointer const_pointer; + typedef typename base_type::reference reference; + typedef typename base_type::const_reference const_reference; + typedef typename base_type::point_const_iterator point_const_iterator; + typedef typename base_type::point_iterator point_iterator; + typedef typename base_type::const_iterator const_iterator; + typedef typename base_type::iterator iterator; + typedef typename base_type::cmp_fn cmp_fn; + typedef typename base_type::allocator_type allocator_type; - binomial_heap_(); + binomial_heap(); - binomial_heap_(const Cmp_Fn& r_cmp_fn); + binomial_heap(const Cmp_Fn&); - binomial_heap_(const PB_DS_CLASS_C_DEC& other); + binomial_heap(const binomial_heap&); - ~binomial_heap_(); + ~binomial_heap(); protected: #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; -#endif + assert_valid(const char*, int) const; +#endif }; #include #include #undef PB_DS_CLASS_C_DEC - #undef PB_DS_CLASS_T_DEC - -#undef PB_DS_BASE_C_DEC } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp index ebe1f2e9ea8..ee8d89c9dfb 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp @@ -34,28 +34,27 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file detail/binomial_heap_/constructors_destructor_fn_imps.hpp * Contains an implementation for binomial_heap_. */ PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -binomial_heap_() +binomial_heap() { PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -binomial_heap_(const Cmp_Fn& r_cmp_fn) : - PB_DS_BASE_C_DEC(r_cmp_fn) +binomial_heap(const Cmp_Fn& r_cmp_fn) +: base_type(r_cmp_fn) { PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -binomial_heap_(const PB_DS_CLASS_C_DEC& other) : - PB_DS_BASE_C_DEC(other) +binomial_heap(const PB_DS_CLASS_C_DEC& other) +: base_type(other) { PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~binomial_heap_() { } - +~binomial_heap() { } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp index 80c0b048632..12949aedb2b 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file detail/binomial_heap_/debug_fn_imps.hpp * Contains an implementation for binomial_heap_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp index b2add18e7a0..9d260d0e17e 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file binomial_heap_base_.hpp + * @file binomial_heap_base_/binomial_heap_base_.hpp * Contains an implementation class for a base of binomial heaps. */ @@ -51,96 +51,65 @@ #include #include #include -#include namespace __gnu_pbds { namespace detail { - #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ - binomial_heap_base_ + binomial_heap_base #ifdef _GLIBCXX_DEBUG -#define PB_DS_BASE_C_DEC \ - left_child_next_sibling_heap_ -#else -#define PB_DS_BASE_C_DEC \ - left_child_next_sibling_heap_ -#endif +#define PB_DS_B_HEAP_BASE \ + left_child_next_sibling_heap +#else +#define PB_DS_B_HEAP_BASE \ + left_child_next_sibling_heap +#endif - /** - * class description = "8y|\|0|\/|i41 h34p 74813"> - **/ - template - class binomial_heap_base_ : public PB_DS_BASE_C_DEC + /// Base class for binomial heap. + template + class binomial_heap_base + : public PB_DS_B_HEAP_BASE { - private: - typedef PB_DS_BASE_C_DEC base_type; + typedef typename _Alloc::template rebind::other __rebind_v; + typedef PB_DS_B_HEAP_BASE base_type; protected: - typedef typename base_type::node node; - - typedef typename base_type::node_pointer node_pointer; - - typedef typename base_type::const_node_pointer const_node_pointer; + typedef typename base_type::node node; + typedef typename base_type::node_pointer node_pointer; + typedef typename base_type::node_const_pointer node_const_pointer; public: + typedef Value_Type value_type; + typedef Cmp_Fn cmp_fn; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; - typedef typename Allocator::size_type size_type; + typedef typename __rebind_v::pointer pointer; + typedef typename __rebind_v::const_pointer const_pointer; + typedef typename __rebind_v::reference reference; + typedef typename __rebind_v::const_reference const_reference; - typedef typename Allocator::difference_type difference_type; - - typedef Value_Type value_type; - - typedef - typename Allocator::template rebind< - value_type>::other::pointer - pointer; - - typedef - typename Allocator::template rebind< - value_type>::other::const_pointer - const_pointer; - - typedef - typename Allocator::template rebind< - value_type>::other::reference - reference; - - typedef - typename Allocator::template rebind< - value_type>::other::const_reference - const_reference; - - typedef - typename PB_DS_BASE_C_DEC::const_point_iterator - const_point_iterator; - - typedef typename PB_DS_BASE_C_DEC::point_iterator point_iterator; - - typedef typename PB_DS_BASE_C_DEC::const_iterator const_iterator; - - typedef typename PB_DS_BASE_C_DEC::iterator iterator; - - typedef Cmp_Fn cmp_fn; - - typedef Allocator allocator_type; + typedef typename base_type::point_const_iterator point_const_iterator; + typedef typename base_type::point_iterator point_iterator; + typedef typename base_type::const_iterator const_iterator; + typedef typename base_type::iterator iterator; public: inline point_iterator - push(const_reference r_val); + push(const_reference); void - modify(point_iterator it, const_reference r_new_val); + modify(point_iterator, const_reference); inline const_reference top() const; @@ -149,72 +118,72 @@ namespace __gnu_pbds pop(); void - erase(point_iterator it); + erase(point_iterator); inline void clear(); template size_type - erase_if(Pred pred); + erase_if(Pred); template void - split(Pred pred, PB_DS_CLASS_C_DEC& other); + split(Pred, PB_DS_CLASS_C_DEC&); void - join(PB_DS_CLASS_C_DEC& other); + join(PB_DS_CLASS_C_DEC&); protected: - binomial_heap_base_(); + binomial_heap_base(); - binomial_heap_base_(const Cmp_Fn& r_cmp_fn); + binomial_heap_base(const Cmp_Fn&); - binomial_heap_base_(const PB_DS_CLASS_C_DEC& other); + binomial_heap_base(const PB_DS_CLASS_C_DEC&); void - swap(PB_DS_CLASS_C_DEC& other); + swap(PB_DS_CLASS_C_DEC&); - ~binomial_heap_base_(); + ~binomial_heap_base(); template void - copy_from_range(It first_it, It last_it); + copy_from_range(It, It); inline void find_max(); #ifdef _GLIBCXX_DEBUG void - assert_valid(bool strictly_binomial, const char* file, int line) const; + assert_valid(bool, const char*, int) const; void - assert_max(const char* file, int line) const; -#endif + assert_max(const char*, int) const; +#endif private: inline node_pointer - fix(node_pointer p_nd) const; + fix(node_pointer) const; inline void - insert_node(node_pointer p_nd); + insert_node(node_pointer); inline void - remove_parentless_node(node_pointer p_nd); + remove_parentless_node(node_pointer); inline node_pointer - join(node_pointer p_lhs, node_pointer p_rhs) const; + join(node_pointer, node_pointer) const; #ifdef _GLIBCXX_DEBUG void - assert_node_consistent(const_node_pointer, bool, bool, + assert_node_consistent(node_const_pointer, bool, bool, const char*, int) const; #endif protected: - node_pointer m_p_max; + node_pointer m_p_max; }; #define PB_DS_ASSERT_VALID_COND(X, _StrictlyBinomial) \ @@ -235,10 +204,8 @@ namespace __gnu_pbds #undef PB_DS_ASSERT_VALID_COND #undef PB_DS_CLASS_C_DEC #undef PB_DS_CLASS_T_DEC -#undef PB_DS_BASE_C_DEC - - +#undef PB_DS_B_HEAP_BASE } // namespace detail } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp index fa86c230cd2..ef9d0e3b300 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file binomial_heap_base_/constructors_destructor_fn_imps.hpp * Contains an implementation class for a base of binomial heaps. */ @@ -46,35 +46,27 @@ copy_from_range(It first_it, It last_it) { while (first_it != last_it) push(*(first_it++)); - PB_DS_ASSERT_VALID_COND((*this),false) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -binomial_heap_base_() : - m_p_max(0) +binomial_heap_base() : m_p_max(0) { PB_DS_ASSERT_VALID_COND((*this),false) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -binomial_heap_base_(const Cmp_Fn& r_cmp_fn) : - PB_DS_BASE_C_DEC(r_cmp_fn), - m_p_max(0) -{ - PB_DS_ASSERT_VALID_COND((*this),false) -} +binomial_heap_base(const Cmp_Fn& r_cmp_fn) +: base_type(r_cmp_fn), m_p_max(0) +{ PB_DS_ASSERT_VALID_COND((*this),false) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -binomial_heap_base_(const PB_DS_CLASS_C_DEC& other) : - PB_DS_BASE_C_DEC(other), - m_p_max(0) -{ - PB_DS_ASSERT_VALID_COND((*this),false) -} +binomial_heap_base(const PB_DS_CLASS_C_DEC& other) +: base_type(other), m_p_max(0) +{ PB_DS_ASSERT_VALID_COND((*this),false) } PB_DS_CLASS_T_DEC void @@ -82,16 +74,12 @@ PB_DS_CLASS_C_DEC:: swap(PB_DS_CLASS_C_DEC& other) { PB_DS_ASSERT_VALID_COND((*this),false) - base_type::swap(other); - std::swap(m_p_max, other.m_p_max); - PB_DS_ASSERT_VALID_COND((*this),false) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~binomial_heap_base_() +~binomial_heap_base() { } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp index 6f2aa2a7983..137ec4b0c6e 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp @@ -35,7 +35,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file binomial_heap_base_/debug_fn_imps.hpp * Contains an implementation class for a base of binomial heaps. */ @@ -68,7 +68,7 @@ assert_max(const char* __file, int __line) const PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -assert_node_consistent(const_node_pointer p_nd, bool strictly_binomial, +assert_node_consistent(node_const_pointer p_nd, bool strictly_binomial, bool increasing, const char* __file, int __line) const { PB_DS_DEBUG_VERIFY(increasing || strictly_binomial); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp index e7a2dc4f6fd..2cdc456dd7d 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file binomial_heap_base_/erase_fn_imps.hpp * Contains an implementation class for a base of binomial heaps. */ @@ -50,15 +50,10 @@ pop() find_max(); _GLIBCXX_DEBUG_ASSERT(m_p_max != 0); - node_pointer p_nd = m_p_max; - remove_parentless_node(m_p_max); - base_type::actual_erase_node(p_nd); - m_p_max = 0; - PB_DS_ASSERT_VALID_COND((*this),true) } @@ -71,8 +66,7 @@ remove_parentless_node(node_pointer p_nd) _GLIBCXX_DEBUG_ASSERT(base_type::parent(p_nd) == 0); node_pointer p_cur_root = p_nd == base_type::m_p_root? - p_nd->m_p_next_sibling : - base_type::m_p_root; + p_nd->m_p_next_sibling : base_type::m_p_root; if (p_cur_root != 0) p_cur_root->m_p_prev_or_parent = 0; @@ -84,17 +78,14 @@ remove_parentless_node(node_pointer p_nd) p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd->m_p_prev_or_parent; node_pointer p_child = p_nd->m_p_l_child; - if (p_child != 0) { p_child->m_p_prev_or_parent = 0; - while (p_child->m_p_next_sibling != 0) p_child = p_child->m_p_next_sibling; } m_p_max = 0; - base_type::m_p_root = join(p_cur_root, p_child); } @@ -104,7 +95,6 @@ PB_DS_CLASS_C_DEC:: clear() { base_type::clear(); - m_p_max = 0; } @@ -117,13 +107,9 @@ erase(point_iterator it) _GLIBCXX_DEBUG_ASSERT(!base_type::empty()); base_type::bubble_to_top(it.m_p_nd); - remove_parentless_node(it.m_p_nd); - base_type::actual_erase_node(it.m_p_nd); - m_p_max = 0; - PB_DS_ASSERT_VALID_COND((*this),true) } @@ -138,55 +124,38 @@ erase_if(Pred pred) if (base_type::empty()) { PB_DS_ASSERT_VALID_COND((*this),true) - return 0; } base_type::to_linked_list(); - node_pointer p_out = base_type::prune(pred); - size_type ersd = 0; - while (p_out != 0) { ++ersd; - node_pointer p_next = p_out->m_p_next_sibling; - base_type::actual_erase_node(p_out); - p_out = p_next; } node_pointer p_cur = base_type::m_p_root; - base_type::m_p_root = 0; - while (p_cur != 0) { node_pointer p_next = p_cur->m_p_next_sibling; - p_cur->m_p_l_child = p_cur->m_p_prev_or_parent = 0; - p_cur->m_metadata = 0; - p_cur->m_p_next_sibling = base_type::m_p_root; if (base_type::m_p_root != 0) base_type::m_p_root->m_p_prev_or_parent = p_cur; base_type::m_p_root = p_cur; - base_type::m_p_root = fix(base_type::m_p_root); - p_cur = p_next; } m_p_max = 0; - PB_DS_ASSERT_VALID_COND((*this),true) - return ersd; } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp index f832cb60c7d..8059917f9df 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file find_fn_imps.hpp + * @file binomial_heap_base_/find_fn_imps.hpp * Contains an implementation class for a base of binomial heaps. */ @@ -59,14 +59,11 @@ PB_DS_CLASS_C_DEC:: find_max() { node_pointer p_cur = base_type::m_p_root; - m_p_max = p_cur; - while (p_cur != 0) { if (Cmp_Fn::operator()(m_p_max->m_value, p_cur->m_value)) m_p_max = p_cur; - p_cur = p_cur->m_p_next_sibling; } } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp index 11bd5e1444f..30f49db0635 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file binomial_heap_base_/insert_fn_imps.hpp * Contains an implementation class for a base of binomial heaps. */ @@ -44,15 +44,10 @@ PB_DS_CLASS_C_DEC:: push(const_reference r_val) { PB_DS_ASSERT_VALID_COND((*this),true) - node_pointer p_nd = base_type::get_new_node_for_insert(r_val); - insert_node(p_nd); - m_p_max = 0; - PB_DS_ASSERT_VALID_COND((*this),true) - return point_iterator(p_nd); } @@ -63,60 +58,42 @@ insert_node(node_pointer p_nd) { if (base_type::m_p_root == 0) { - p_nd->m_p_next_sibling = p_nd->m_p_prev_or_parent = - p_nd->m_p_l_child = 0; - + p_nd->m_p_next_sibling = 0; + p_nd->m_p_prev_or_parent = 0; + p_nd->m_p_l_child = 0; p_nd->m_metadata = 0; - base_type::m_p_root = p_nd; - return; } if (base_type::m_p_root->m_metadata > 0) { p_nd->m_p_prev_or_parent = p_nd->m_p_l_child = 0; - p_nd->m_p_next_sibling = base_type::m_p_root; - base_type::m_p_root->m_p_prev_or_parent = p_nd; - base_type::m_p_root = p_nd; - p_nd->m_metadata = 0; - return; } if (Cmp_Fn::operator()(base_type::m_p_root->m_value, p_nd->m_value)) { p_nd->m_p_next_sibling = base_type::m_p_root->m_p_next_sibling; - p_nd->m_p_prev_or_parent = 0; - p_nd->m_metadata = 1; - p_nd->m_p_l_child = base_type::m_p_root; - base_type::m_p_root->m_p_prev_or_parent = p_nd; - base_type::m_p_root->m_p_next_sibling = 0; - base_type::m_p_root = p_nd; } else { p_nd->m_p_next_sibling = 0; - p_nd->m_p_l_child = 0; - p_nd->m_p_prev_or_parent = base_type::m_p_root; - p_nd->m_metadata = 0; - _GLIBCXX_DEBUG_ASSERT(base_type::m_p_root->m_p_l_child == 0); base_type::m_p_root->m_p_l_child = p_nd; - base_type::m_p_root->m_metadata = 1; } @@ -128,36 +105,31 @@ inline typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: fix(node_pointer p_nd) const { - while (p_nd->m_p_next_sibling != 0&& + while (p_nd->m_p_next_sibling != 0 && p_nd->m_metadata == p_nd->m_p_next_sibling->m_metadata) { node_pointer p_next = p_nd->m_p_next_sibling; - if (Cmp_Fn::operator()(p_nd->m_value, p_next->m_value)) - { - p_next->m_p_prev_or_parent = - p_nd->m_p_prev_or_parent; + { + p_next->m_p_prev_or_parent = p_nd->m_p_prev_or_parent; if (p_nd->m_p_prev_or_parent != 0) p_nd->m_p_prev_or_parent->m_p_next_sibling = p_next; base_type::make_child_of(p_nd, p_next); - ++p_next->m_metadata; - p_nd = p_next; - } + } else - { + { p_nd->m_p_next_sibling = p_next->m_p_next_sibling; if (p_nd->m_p_next_sibling != 0) p_next->m_p_next_sibling = 0; base_type::make_child_of(p_next, p_nd); - ++p_nd->m_metadata; - } + } } if (p_nd->m_p_next_sibling != 0) @@ -178,39 +150,29 @@ modify(point_iterator it, const_reference r_new_val) PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_nd, false) const bool bubble_up = Cmp_Fn::operator()(p_nd->m_value, r_new_val); - p_nd->m_value = r_new_val; if (bubble_up) { node_pointer p_parent = base_type::parent(p_nd); - - while (p_parent != 0&& + while (p_parent != 0 && Cmp_Fn::operator()(p_parent->m_value, p_nd->m_value)) - { + { base_type::swap_with_parent(p_nd, p_parent); - p_parent = base_type::parent(p_nd); - } + } if (p_nd->m_p_prev_or_parent == 0) base_type::m_p_root = p_nd; m_p_max = 0; - PB_DS_ASSERT_VALID_COND((*this),true) - - return; + return; } base_type::bubble_to_top(p_nd); - remove_parentless_node(p_nd); - insert_node(p_nd); - m_p_max = 0; - PB_DS_ASSERT_VALID_COND((*this),true) } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp index 6564c54a21a..44bc4ed7c4d 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file split_join_fn_imps.hpp + * @file binomial_heap_base_/split_join_fn_imps.hpp * Contains an implementation class for a base of binomial heaps. */ @@ -48,72 +48,54 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other) PB_DS_ASSERT_VALID_COND(other,true) other.clear(); - if (base_type::empty()) { PB_DS_ASSERT_VALID_COND((*this),true) PB_DS_ASSERT_VALID_COND(other,true) - return; } base_type::to_linked_list(); - node_pointer p_out = base_type::prune(pred); - while (p_out != 0) { _GLIBCXX_DEBUG_ASSERT(base_type::m_size > 0); --base_type::m_size; - ++other.m_size; node_pointer p_next = p_out->m_p_next_sibling; - p_out->m_p_l_child = p_out->m_p_prev_or_parent = 0; - p_out->m_metadata = 0; p_out->m_p_next_sibling = other.m_p_root; - if (other.m_p_root != 0) other.m_p_root->m_p_prev_or_parent = p_out; other.m_p_root = p_out; - other.m_p_root = other.fix(other.m_p_root); - p_out = p_next; } PB_DS_ASSERT_VALID_COND(other,true) - node_pointer p_cur = base_type::m_p_root; - base_type::m_p_root = 0; while (p_cur != 0) { node_pointer p_next = p_cur->m_p_next_sibling; - p_cur->m_p_l_child = p_cur->m_p_prev_or_parent = 0; - p_cur->m_metadata = 0; - p_cur->m_p_next_sibling = base_type::m_p_root; if (base_type::m_p_root != 0) base_type::m_p_root->m_p_prev_or_parent = p_cur; base_type::m_p_root = p_cur; - base_type::m_p_root = fix(base_type::m_p_root); - p_cur = p_next; } m_p_max = 0; - PB_DS_ASSERT_VALID_COND((*this),true) PB_DS_ASSERT_VALID_COND(other,true) } @@ -127,14 +109,11 @@ join(PB_DS_CLASS_C_DEC& other) PB_DS_ASSERT_VALID_COND(other,true) node_pointer p_other = other.m_p_root; - if (p_other != 0) do { node_pointer p_next = p_other->m_p_next_sibling; - std::swap(p_other->m_p_next_sibling, p_other->m_p_prev_or_parent); - p_other = p_next; } while (p_other != 0); @@ -157,68 +136,55 @@ PB_DS_CLASS_C_DEC:: join(node_pointer p_lhs, node_pointer p_rhs) const { node_pointer p_ret = 0; - node_pointer p_cur = 0; while (p_lhs != 0 || p_rhs != 0) { if (p_rhs == 0) - { + { if (p_cur == 0) p_ret = p_cur = p_lhs; else - { + { p_cur->m_p_next_sibling = p_lhs; - p_lhs->m_p_prev_or_parent = p_cur; - } - + } p_cur = p_lhs = 0; - } + } else if (p_lhs == 0 || p_rhs->m_metadata < p_lhs->m_metadata) - { + { if (p_cur == 0) - { + { p_ret = p_cur = p_rhs; - p_rhs = p_rhs->m_p_prev_or_parent; - } + } else - { + { p_cur->m_p_next_sibling = p_rhs; - p_rhs = p_rhs->m_p_prev_or_parent; - p_cur->m_p_next_sibling->m_p_prev_or_parent = p_cur; - p_cur = p_cur->m_p_next_sibling; - } - } + } + } else if (p_lhs->m_metadata < p_rhs->m_metadata) - { + { if (p_cur == 0) p_ret = p_cur = p_lhs; else - { + { p_cur->m_p_next_sibling = p_lhs; - p_lhs->m_p_prev_or_parent = p_cur; - p_cur = p_cur->m_p_next_sibling; - } - + } p_lhs = p_cur->m_p_next_sibling; - } + } else - { + { node_pointer p_next_rhs = p_rhs->m_p_prev_or_parent; - p_rhs->m_p_next_sibling = p_lhs; - p_lhs = fix(p_rhs); - p_rhs = p_next_rhs; - } + } } if (p_cur != 0) @@ -229,4 +195,3 @@ join(node_pointer p_lhs, node_pointer p_rhs) const return p_ret; } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/branch_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/branch_policy.hpp new file mode 100644 index 00000000000..efe39f2fe4a --- /dev/null +++ b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/branch_policy.hpp @@ -0,0 +1,124 @@ +// -*- C++ -*- + +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 3, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. + +// Permission to use, copy, modify, sell, and distribute this software +// is hereby granted without fee, provided that the above copyright +// notice appears in all copies, and that both that copyright notice +// and this permission notice appear in supporting documentation. None +// of the above authors, nor IBM Haifa Research Laboratories, make any +// representation about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +/** + * @file branch_policy/branch_policy.hpp + * Contains a base class for branch policies. + */ + +#ifndef PB_DS_BRANCH_POLICY_BASE_HPP +#define PB_DS_BRANCH_POLICY_BASE_HPP + +#include + +namespace __gnu_pbds +{ + /// A null node updator, indicating that no node updates are required. + template + struct null_node_update : public null_type + { }; + + namespace detail + { + /// Primary template, base class for branch structure policies. + template + struct branch_policy + { + protected: + typedef typename Node_Itr::value_type it_type; + typedef typename std::iterator_traits::value_type value_type; + typedef typename value_type::first_type key_type; + + typedef typename remove_const::type rcvalue_type; + typedef typename remove_const::type rckey_type; + + typedef typename _Alloc::template rebind::other rebind_v; + typedef typename _Alloc::template rebind::other rebind_k; + + typedef typename rebind_v::reference reference; + typedef typename rebind_v::const_reference const_reference; + typedef typename rebind_v::const_pointer const_pointer; + + typedef typename rebind_k::const_reference key_const_reference; + + static inline key_const_reference + extract_key(const_reference r_val) + { return r_val.first; } + + virtual it_type + end() = 0; + + it_type + end_iterator() const + { return const_cast(this)->end(); } + + virtual + ~branch_policy() { } + }; + + /// Specialization for const iterators. + template + struct branch_policy + { + protected: + typedef typename Node_CItr::value_type it_type; + typedef typename std::iterator_traits::value_type value_type; + typedef typename remove_const::type rcvalue_type; + typedef typename _Alloc::template rebind::other rebind_v; + typedef typename rebind_v::reference reference; + typedef typename rebind_v::const_reference const_reference; + typedef typename rebind_v::const_pointer const_pointer; + + typedef value_type key_type; + typedef typename rebind_v::const_reference key_const_reference; + + static inline key_const_reference + extract_key(const_reference r_val) + { return r_val; } + + virtual it_type + end() const = 0; + + it_type + end_iterator() const + { return end(); } + + virtual + ~branch_policy() { } + }; + } // namespace detail +} // namespace __gnu_pbds + +#endif // #ifndef PB_DS_BRANCH_POLICY_BASE_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp similarity index 69% rename from libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp rename to libstdc++-v3/include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp index 5f04e14b470..caa8dd738d3 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,22 +34,33 @@ // warranty. /** - * @file null_metadata.hpp - * Contains an implementation struct for this type of heap's node. + * @file branch_policy/null_node_metadata.hpp + * Contains an implementation class for tree-like classes. */ -#ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_0_METADATA_HPP -#define PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_0_METADATA_HPP +#ifndef PB_DS_0_NODE_METADATA_HPP +#define PB_DS_0_NODE_METADATA_HPP + +#include namespace __gnu_pbds { namespace detail { - - struct null_left_child_next_sibling_heap_node_metadata - { }; - + /// Constant node iterator. + template + struct dumnode_const_iterator + { + private: + typedef types_traits __traits_type; + typedef typename __traits_type::pointer const_iterator; + + public: + typedef const_iterator value_type; + typedef const_iterator const_reference; + typedef const_reference reference; + }; } // namespace detail } // namespace __gnu_pbds -#endif // #ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_0_METADATA_HPP +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/traits.hpp similarity index 51% rename from libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp rename to libstdc++-v3/include/ext/pb_ds/detail/branch_policy/traits.hpp index 36272eda822..92f9f444453 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/branch_policy/traits.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,53 +34,62 @@ // warranty. /** - * @file node_metadata_base.hpp - * Contains an internal PB_DS_BASE_C_DEC for a patricia tree. + * @file branch_policy/traits.hpp + * Contains an implementation class for tree-like classes. */ -#ifndef PB_DS_PAT_TRIE_NODE_METADATA_BASE_HPP -#define PB_DS_PAT_TRIE_NODE_METADATA_BASE_HPP +#ifndef PB_DS_NODE_AND_IT_TRAITS_HPP +#define PB_DS_NODE_AND_IT_TRAITS_HPP -#include +#include +#include +#include +#include + +#define PB_DS_DEBUG_VERIFY(_Cond) \ + _GLIBCXX_DEBUG_VERIFY_AT(_Cond, \ + _M_message(#_Cond" assertion from %1;:%2;") \ + ._M_string(__FILE__)._M_integer(__LINE__) \ + ,__file,__line) namespace __gnu_pbds { namespace detail { + /// Tree traits class, primary template. + template + class Node_Update, + typename Tag, + typename _Alloc> + struct tree_traits; - template - struct pat_trie_node_metadata_base - { - public: - typedef Metadata metadata_type; - - typedef - typename Allocator::template rebind< - metadata_type>::other::const_reference - const_metadata_reference; - - public: - inline const_metadata_reference - get_metadata() const - { - return (m_metadata); - } - - public: - metadata_type m_metadata; - }; - - template - struct pat_trie_node_metadata_base< - null_node_metadata, - Allocator> - { - public: - typedef null_node_metadata metadata_type; - }; + /// Trie traits class, primary template. + template + class Node_Update, + typename Tag, + typename _Alloc> + struct trie_traits; } // namespace detail } // namespace __gnu_pbds -#endif // #ifndef PB_DS_PAT_TRIE_NODE_BASE_HPP +#include +#include +#include +#include +#undef PB_DS_DEBUG_VERIFY + +#endif // #ifndef PB_DS_NODE_AND_IT_TRAITS_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp index 149a206a4e7..f1c2540e7d5 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp @@ -35,7 +35,7 @@ // warranty. /** - * @file cc_ht_map_.hpp + * @file cc_hash_table_map_/cc_ht_map_.hpp * Contains an implementation class for cc_ht_map_. */ @@ -49,99 +49,89 @@ #include #ifdef _GLIBCXX_DEBUG #include -#endif +#endif #ifdef PB_DS_HT_MAP_TRACE_ #include -#endif +#endif #include namespace __gnu_pbds { namespace detail { +#ifdef PB_DS_DATA_TRUE_INDICATOR +#define PB_DS_CC_HASH_NAME cc_ht_map +#endif + +#ifdef PB_DS_DATA_FALSE_INDICATOR +#define PB_DS_CC_HASH_NAME cc_ht_set +#endif #define PB_DS_CLASS_T_DEC \ template -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_CLASS_NAME cc_ht_map_data_ -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_CLASS_NAME cc_ht_map_no_data_ -#endif - #define PB_DS_CLASS_C_DEC \ - PB_DS_CLASS_NAME #define PB_DS_HASH_EQ_FN_C_DEC \ - hash_eq_fn + hash_eq_fn #define PB_DS_RANGED_HASH_FN_C_DEC \ - ranged_hash_fn + ranged_hash_fn -#define PB_DS_TYPES_TRAITS_C_DEC \ - types_traits +#define PB_DS_CC_HASH_TRAITS_BASE \ + types_traits #ifdef _GLIBCXX_DEBUG #define PB_DS_DEBUG_MAP_BASE_C_DEC \ - debug_map_base::other::const_reference> -#endif - -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_V2F(X) (X).first -#define PB_DS_V2S(X) (X).second -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_V2F(X) (X) -#define PB_DS_V2S(X) Mapped_Data() + debug_map_base::other::const_reference> #endif - // <011i$i0|\|-<|-|4i|\|i|\|g |-|4$|-| 74813. + /// Collision chaining hash. template - class PB_DS_CLASS_NAME: + class PB_DS_CC_HASH_NAME: #ifdef _GLIBCXX_DEBUG protected PB_DS_DEBUG_MAP_BASE_C_DEC, -#endif +#endif public PB_DS_HASH_EQ_FN_C_DEC, public Resize_Policy, public PB_DS_RANGED_HASH_FN_C_DEC, - public PB_DS_TYPES_TRAITS_C_DEC + public PB_DS_CC_HASH_TRAITS_BASE { private: - typedef PB_DS_TYPES_TRAITS_C_DEC traits_base; - typedef typename traits_base::comp_hash comp_hash; - typedef typename traits_base::value_type value_type_; - typedef typename traits_base::pointer pointer_; + typedef PB_DS_CC_HASH_TRAITS_BASE traits_base; + typedef typename traits_base::comp_hash comp_hash; + typedef typename traits_base::value_type value_type_; + typedef typename traits_base::pointer pointer_; typedef typename traits_base::const_pointer const_pointer_; - typedef typename traits_base::reference reference_; + typedef typename traits_base::reference reference_; typedef typename traits_base::const_reference const_reference_; - struct entry : public traits_base::stored_value_type + struct entry : public traits_base::stored_data_type { - typename Allocator::template rebind::other::pointer m_p_next; + typename _Alloc::template rebind::other::pointer m_p_next; }; - typedef cond_dealtor cond_dealtor_t; + typedef cond_dealtor cond_dealtor_t; - typedef typename Allocator::template rebind::other entry_allocator; + typedef typename _Alloc::template rebind::other entry_allocator; typedef typename entry_allocator::pointer entry_pointer; typedef typename entry_allocator::const_pointer const_entry_pointer; typedef typename entry_allocator::reference entry_reference; typedef typename entry_allocator::const_reference const_entry_reference; - typedef typename Allocator::template rebind::other entry_pointer_allocator; + typedef typename _Alloc::template rebind::other entry_pointer_allocator; typedef typename entry_pointer_allocator::pointer entry_pointer_array; typedef PB_DS_RANGED_HASH_FN_C_DEC ranged_hash_fn_base; @@ -149,12 +139,12 @@ namespace __gnu_pbds typedef Resize_Policy resize_base; #ifdef _GLIBCXX_DEBUG - typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; -#endif + typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; +#endif -#define PB_DS_GEN_POS std::pair +#define PB_DS_GEN_POS std::pair -#include +#include #include #include #include @@ -162,13 +152,13 @@ namespace __gnu_pbds #undef PB_DS_GEN_POS public: - typedef Allocator allocator_type; - typedef typename Allocator::size_type size_type; - typedef typename Allocator::difference_type difference_type; - typedef Hash_Fn hash_fn; - typedef Eq_Fn eq_fn; - typedef Comb_Hash_Fn comb_hash_fn; - typedef Resize_Policy resize_policy; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; + typedef Hash_Fn hash_fn; + typedef Eq_Fn eq_fn; + typedef Comb_Hash_Fn comb_hash_fn; + typedef Resize_Policy resize_policy; enum { @@ -177,55 +167,55 @@ namespace __gnu_pbds typedef typename traits_base::key_type key_type; typedef typename traits_base::key_pointer key_pointer; - typedef typename traits_base::const_key_pointer const_key_pointer; + typedef typename traits_base::key_const_pointer key_const_pointer; typedef typename traits_base::key_reference key_reference; - typedef typename traits_base::const_key_reference const_key_reference; + typedef typename traits_base::key_const_reference key_const_reference; typedef typename traits_base::mapped_type mapped_type; typedef typename traits_base::mapped_pointer mapped_pointer; - typedef typename traits_base::const_mapped_pointer const_mapped_pointer; + typedef typename traits_base::mapped_const_pointer mapped_const_pointer; typedef typename traits_base::mapped_reference mapped_reference; - typedef typename traits_base::const_mapped_reference const_mapped_reference; - typedef typename traits_base::value_type value_type; - typedef typename traits_base::pointer pointer; + typedef typename traits_base::mapped_const_reference mapped_const_reference; + typedef typename traits_base::value_type value_type; + typedef typename traits_base::pointer pointer; typedef typename traits_base::const_pointer const_pointer; - typedef typename traits_base::reference reference; + typedef typename traits_base::reference reference; typedef typename traits_base::const_reference const_reference; #ifdef PB_DS_DATA_TRUE_INDICATOR - typedef point_iterator_ point_iterator; -#endif + typedef point_iterator_ point_iterator; +#endif #ifdef PB_DS_DATA_FALSE_INDICATOR - typedef const_point_iterator_ point_iterator; -#endif + typedef point_const_iterator_ point_iterator; +#endif - typedef const_point_iterator_ const_point_iterator; + typedef point_const_iterator_ point_const_iterator; #ifdef PB_DS_DATA_TRUE_INDICATOR - typedef iterator_ iterator; -#endif + typedef iterator_ iterator; +#endif #ifdef PB_DS_DATA_FALSE_INDICATOR - typedef const_iterator_ iterator; -#endif + typedef const_iterator_ iterator; +#endif - typedef const_iterator_ const_iterator; + typedef const_iterator_ const_iterator; - PB_DS_CLASS_NAME(); + PB_DS_CC_HASH_NAME(); - PB_DS_CLASS_NAME(const Hash_Fn&); + PB_DS_CC_HASH_NAME(const Hash_Fn&); - PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&); + PB_DS_CC_HASH_NAME(const Hash_Fn&, const Eq_Fn&); - PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Hash_Fn&); + PB_DS_CC_HASH_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Hash_Fn&); - PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Hash_Fn&, + PB_DS_CC_HASH_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Hash_Fn&, const Resize_Policy&); - PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&); + PB_DS_CC_HASH_NAME(const PB_DS_CLASS_C_DEC&); virtual - ~PB_DS_CLASS_NAME(); + ~PB_DS_CC_HASH_NAME(); void swap(PB_DS_CLASS_C_DEC&); @@ -246,28 +236,28 @@ namespace __gnu_pbds inline bool empty() const; - Hash_Fn& + Hash_Fn& get_hash_fn(); - const Hash_Fn& + const Hash_Fn& get_hash_fn() const; - Eq_Fn& + Eq_Fn& get_eq_fn(); - const Eq_Fn& + const Eq_Fn& get_eq_fn() const; - Comb_Hash_Fn& + Comb_Hash_Fn& get_comb_hash_fn(); - const Comb_Hash_Fn& + const Comb_Hash_Fn& get_comb_hash_fn() const; - Resize_Policy& + Resize_Policy& get_resize_policy(); - const Resize_Policy& + const Resize_Policy& get_resize_policy() const; inline std::pair @@ -275,30 +265,30 @@ namespace __gnu_pbds { return insert_imp(r_val, traits_base::m_store_extra_indicator); } inline mapped_reference - operator[](const_key_reference r_key) + operator[](key_const_reference r_key) { #ifdef PB_DS_DATA_TRUE_INDICATOR return (subscript_imp(r_key, traits_base::m_store_extra_indicator)); -#else +#else insert(r_key); - return traits_base::s_null_mapped; -#endif + return traits_base::s_null_type; +#endif } inline point_iterator - find(const_key_reference); + find(key_const_reference); - inline const_point_iterator - find(const_key_reference) const; + inline point_const_iterator + find(key_const_reference) const; inline point_iterator find_end(); - inline const_point_iterator + inline point_const_iterator find_end() const; inline bool - erase(const_key_reference); + erase(key_const_reference); template inline size_type @@ -321,13 +311,13 @@ namespace __gnu_pbds #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; -#endif + assert_valid(const char*, int) const; +#endif #ifdef PB_DS_HT_MAP_TRACE_ void trace() const; -#endif +#endif private: void @@ -340,19 +330,23 @@ namespace __gnu_pbds do_resize_if_needed_no_throw(); void - resize_imp(size_type new_size); + resize_imp(size_type); void - do_resize(size_type new_size); + do_resize(size_type); void resize_imp_no_exceptions(size_type, entry_pointer_array, size_type); inline entry_pointer - resize_imp_no_exceptions_reassign_pointer(entry_pointer, entry_pointer_array, false_type); + resize_imp_no_exceptions_reassign_pointer(entry_pointer, + entry_pointer_array, + false_type); inline entry_pointer - resize_imp_no_exceptions_reassign_pointer(entry_pointer, entry_pointer_array, true_type); + resize_imp_no_exceptions_reassign_pointer(entry_pointer, + entry_pointer_array, + true_type); void deallocate_links_in_list(entry_pointer); @@ -368,14 +362,14 @@ namespace __gnu_pbds #ifdef PB_DS_DATA_TRUE_INDICATOR inline mapped_reference - subscript_imp(const_key_reference r_key, false_type) + subscript_imp(key_const_reference r_key, false_type) { _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) - const size_type pos = ranged_hash_fn_base::operator()(r_key); + const size_type pos = ranged_hash_fn_base::operator()(r_key); entry_pointer p_e = m_entries[pos]; resize_base::notify_insert_search_start(); - while (p_e != 0 + while (p_e != 0 && !hash_eq_fn_base::operator()(p_e->m_value.first, r_key)) { resize_base::notify_insert_search_collision(); @@ -394,14 +388,15 @@ namespace __gnu_pbds } inline mapped_reference - subscript_imp(const_key_reference r_key, true_type) + subscript_imp(key_const_reference r_key, true_type) { _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) comp_hash pos_hash_pair = ranged_hash_fn_base::operator()(r_key); entry_pointer p_e = m_entries[pos_hash_pair.first]; resize_base::notify_insert_search_start(); - while (p_e != 0 && - !hash_eq_fn_base::operator()(p_e->m_value.first, p_e->m_hash, r_key, pos_hash_pair.second)) + while (p_e != 0 && + !hash_eq_fn_base::operator()(p_e->m_value.first, p_e->m_hash, + r_key, pos_hash_pair.second)) { resize_base::notify_insert_search_collision(); p_e = p_e->m_p_next; @@ -415,10 +410,10 @@ namespace __gnu_pbds } PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key) - return insert_new_imp(value_type(r_key, mapped_type()), + return insert_new_imp(value_type(r_key, mapped_type()), pos_hash_pair)->second; } -#endif +#endif inline std::pair insert_imp(const_reference, false_type); @@ -433,7 +428,8 @@ namespace __gnu_pbds pos = ranged_hash_fn_base::operator()(PB_DS_V2F(r_val)); // Following lines might throw an exception. - entry_pointer p_e = get_entry(r_val, traits_base::m_no_throw_copies_indicator); + entry_pointer p_e = get_entry(r_val, + traits_base::m_no_throw_copies_indicator); // At this point no exceptions can be thrown. p_e->m_p_next = m_entries[pos]; @@ -452,7 +448,8 @@ namespace __gnu_pbds if (do_resize_if_needed()) r_pos_hash_pair = ranged_hash_fn_base::operator()(PB_DS_V2F(r_val)); - entry_pointer p_e = get_entry(r_val, traits_base::m_no_throw_copies_indicator); + entry_pointer p_e = get_entry(r_val, + traits_base::m_no_throw_copies_indicator); // At this point no exceptions can be thrown. p_e->m_hash = r_pos_hash_pair.second; @@ -465,11 +462,11 @@ namespace __gnu_pbds } inline pointer - find_key_pointer(const_key_reference r_key, false_type) + find_key_pointer(key_const_reference r_key, false_type) { entry_pointer p_e = m_entries[ranged_hash_fn_base::operator()(r_key)]; resize_base::notify_find_search_start(); - while (p_e != 0 && + while (p_e != 0 && !hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value), r_key)) { resize_base::notify_find_search_collision(); @@ -483,17 +480,17 @@ namespace __gnu_pbds PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key) else PB_DS_CHECK_KEY_EXISTS(r_key) -#endif +#endif return &p_e->m_value; } inline pointer - find_key_pointer(const_key_reference r_key, true_type) + find_key_pointer(key_const_reference r_key, true_type) { comp_hash pos_hash_pair = ranged_hash_fn_base::operator()(r_key); entry_pointer p_e = m_entries[pos_hash_pair.first]; resize_base::notify_find_search_start(); - while (p_e != 0 && + while (p_e != 0 && !hash_eq_fn_base::operator()(PB_DS_V2F(p_e->m_value), p_e->m_hash, r_key, pos_hash_pair.second)) @@ -509,30 +506,30 @@ namespace __gnu_pbds PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key) else PB_DS_CHECK_KEY_EXISTS(r_key) -#endif +#endif return &p_e->m_value; } inline bool - erase_in_pos_imp(const_key_reference, size_type); + erase_in_pos_imp(key_const_reference, size_type); inline bool - erase_in_pos_imp(const_key_reference, const comp_hash&); + erase_in_pos_imp(key_const_reference, const comp_hash&); inline void erase_entry_pointer(entry_pointer&); #ifdef PB_DS_DATA_TRUE_INDICATOR void - inc_it_state(pointer& r_p_value, + inc_it_state(pointer& r_p_value, std::pair& r_pos) const { - inc_it_state((const_mapped_pointer& )r_p_value, r_pos); + inc_it_state((mapped_const_pointer& )r_p_value, r_pos); } -#endif +#endif void - inc_it_state(const_pointer& r_p_value, + inc_it_state(const_pointer& r_p_value, std::pair& r_pos) const { _GLIBCXX_DEBUG_ASSERT(r_p_value != 0); @@ -554,7 +551,7 @@ namespace __gnu_pbds } void - get_start_it_state(pointer& r_p_value, + get_start_it_state(pointer& r_p_value, std::pair& r_pos) const { for (r_pos.second = 0; r_pos.second < m_num_e; ++r_pos.second) @@ -570,26 +567,26 @@ namespace __gnu_pbds #ifdef _GLIBCXX_DEBUG void assert_entry_pointer_array_valid(const entry_pointer_array, - const char* file, int line) const; + const char*, int) const; void assert_entry_pointer_valid(const entry_pointer, true_type, - const char* file, int line) const; + const char*, int) const; void assert_entry_pointer_valid(const entry_pointer, false_type, - const char* file, int line) const; -#endif + const char*, int) const; +#endif #ifdef PB_DS_HT_MAP_TRACE_ void trace_list(const_entry_pointer) const; -#endif +#endif private: #ifdef PB_DS_DATA_TRUE_INDICATOR friend class iterator_; -#endif +#endif friend class const_iterator_; @@ -598,7 +595,7 @@ namespace __gnu_pbds static iterator s_end_it; static const_iterator s_const_end_it; static point_iterator s_find_end_it; - static const_point_iterator s_const_find_end_it; + static point_const_iterator s_const_find_end_it; size_type m_num_e; size_type m_num_used_e; @@ -606,8 +603,8 @@ namespace __gnu_pbds enum { - store_hash_ok = !Store_Hash - || !is_same::value + store_hash_ok = !Store_Hash + || !is_same::value }; PB_DS_STATIC_ASSERT(sth, store_hash_ok); @@ -629,12 +626,8 @@ namespace __gnu_pbds #undef PB_DS_CLASS_C_DEC #undef PB_DS_HASH_EQ_FN_C_DEC #undef PB_DS_RANGED_HASH_FN_C_DEC -#undef PB_DS_TYPES_TRAITS_C_DEC +#undef PB_DS_CC_HASH_TRAITS_BASE #undef PB_DS_DEBUG_MAP_BASE_C_DEC -#undef PB_DS_CLASS_NAME -#undef PB_DS_V2F -#undef PB_DS_V2S - +#undef PB_DS_CC_HASH_NAME } // namespace detail } // namespace __gnu_pbds - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp index c61eff99b90..4f7116f573f 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file cmp_fn_imps.hpp + * @file cc_hash_table_map_/cmp_fn_imps.hpp * Contains implementations of cc_ht_map_'s entire container comparison related * functions. */ @@ -58,9 +58,9 @@ cmp_with_other(const Other_Map_Type& other) const for (typename Other_Map_Type::const_iterator it = other.begin(); it != other.end(); ++it) { - const_key_reference r_key = const_key_reference(PB_DS_V2F(*it)); + key_const_reference r_key = key_const_reference(PB_DS_V2F(*it)); - const_mapped_pointer p_mapped_value = + mapped_const_pointer p_mapped_value = const_cast(*this). find_key_pointer(r_key, traits_base::m_store_extra_indicator); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp index fa3f31df003..5b2db9b0f64 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,7 +34,7 @@ // warranty. /** - * @file cond_key_dtor_entry_dealtor.hpp + * @file cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp * Contains a conditional key destructor, used for exception handling. */ @@ -42,65 +42,43 @@ namespace __gnu_pbds { namespace detail { - -#define PB_DS_CLASS_T_DEC template -#define PB_DS_CLASS_C_DEC PB_DS_CKDED_CLASS_NAME - - /** - * A conditional key destructor, used for exception handling. - **/ + /// Conditional dey destructor, cc_hash. template - class PB_DS_CKDED_CLASS_NAME + class cond_dealtor { public: - typedef typename HT_Map::entry entry; - typedef typename HT_Map::entry_allocator entry_allocator; - typedef typename HT_Map::key_type key_type; + typedef typename HT_Map::entry entry; + typedef typename HT_Map::entry_allocator entry_allocator; + typedef typename HT_Map::key_type key_type; + + cond_dealtor(entry_allocator* p_a, entry* p_e) + : m_p_a(p_a), m_p_e(p_e), m_key_destruct(false), + m_no_action_destructor(false) + { } inline - PB_DS_CKDED_CLASS_NAME(entry_allocator* p_a, entry* p_e); + ~cond_dealtor(); - inline - ~PB_DS_CKDED_CLASS_NAME(); + void + set_key_destruct() + { m_key_destruct = true; } - inline void - set_key_destruct(); - - inline void - set_no_action_destructor(); + void + set_no_action_destructor() + { m_no_action_destructor = true; } protected: - entry_allocator* const m_p_a; - entry* const m_p_e; + entry_allocator* const m_p_a; + entry* const m_p_e; - bool m_key_destruct; - bool m_no_action_destructor; + bool m_key_destruct; + bool m_no_action_destructor; }; - PB_DS_CLASS_T_DEC + template inline - PB_DS_CLASS_C_DEC:: - PB_DS_CKDED_CLASS_NAME(entry_allocator* p_a, entry* p_e) - : m_p_a(p_a), m_p_e(p_e), m_key_destruct(false), - m_no_action_destructor(false) - { } - - PB_DS_CLASS_T_DEC - inline void - PB_DS_CLASS_C_DEC:: - set_key_destruct() - { m_key_destruct = true; } - - PB_DS_CLASS_T_DEC - inline void - PB_DS_CLASS_C_DEC:: - set_no_action_destructor() - { m_no_action_destructor = true; } - - PB_DS_CLASS_T_DEC - inline - PB_DS_CLASS_C_DEC:: - ~PB_DS_CKDED_CLASS_NAME() + cond_dealtor:: + ~cond_dealtor() { if (m_no_action_destructor) return; @@ -108,10 +86,5 @@ namespace __gnu_pbds m_p_e->m_value.first.~key_type(); m_p_a->deallocate(m_p_e, 1); } - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC - } // namespace detail } // namespace __gnu_pbds - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp index 8278fd7e662..9d37d9f86c3 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp @@ -35,9 +35,9 @@ // warranty. /** - * @file constructor_destructor_fn_imps.hpp + * @file cc_hash_table_map_/constructor_destructor_fn_imps.hpp * Contains implementations of cc_ht_map_'s constructors, destructor, - * and related functions. + * and related functions. */ PB_DS_CLASS_T_DEC @@ -60,7 +60,7 @@ copy_from_range(It first_it, It last_it) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME() : +PB_DS_CC_HASH_NAME() : ranged_hash_fn_base(resize_base::get_nearest_larger_size(1)), m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0), m_entries(s_entry_pointer_allocator.allocate(m_num_e)) @@ -71,7 +71,7 @@ PB_DS_CLASS_NAME() : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn) : +PB_DS_CC_HASH_NAME(const Hash_Fn& r_hash_fn) : ranged_hash_fn_base(resize_base::get_nearest_larger_size(1), r_hash_fn), m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0), m_entries(s_entry_pointer_allocator.allocate(m_num_e)) @@ -82,7 +82,7 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn) : +PB_DS_CC_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn) : PB_DS_HASH_EQ_FN_C_DEC(r_eq_fn), ranged_hash_fn_base(resize_base::get_nearest_larger_size(1), r_hash_fn), m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0), @@ -96,7 +96,8 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Hash_Fn& r_comb_hash_fn) : +PB_DS_CC_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, + const Comb_Hash_Fn& r_comb_hash_fn) : PB_DS_HASH_EQ_FN_C_DEC(r_eq_fn), ranged_hash_fn_base(resize_base::get_nearest_larger_size(1), r_hash_fn, r_comb_hash_fn), @@ -109,7 +110,9 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Hash PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Hash_Fn& r_comb_hash_fn, const Resize_Policy& r_resize_policy) : +PB_DS_CC_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, + const Comb_Hash_Fn& r_comb_hash_fn, + const Resize_Policy& r_resize_policy) : PB_DS_HASH_EQ_FN_C_DEC(r_eq_fn), Resize_Policy(r_resize_policy), ranged_hash_fn_base(resize_base::get_nearest_larger_size(1), @@ -123,7 +126,7 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Hash PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) : +PB_DS_CC_HASH_NAME(const PB_DS_CLASS_C_DEC& other) : PB_DS_HASH_EQ_FN_C_DEC(other), resize_base(other), ranged_hash_fn_base(other), m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0), @@ -133,19 +136,19 @@ PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) : PB_DS_ASSERT_VALID((*this)) __try { - copy_from_range(other.begin(), other.end()); + copy_from_range(other.begin(), other.end()); } __catch(...) { - deallocate_all(); - __throw_exception_again; + deallocate_all(); + __throw_exception_again; } PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~PB_DS_CLASS_NAME() +~PB_DS_CC_HASH_NAME() { deallocate_all(); } PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp index 4f1cce64806..1f68349d929 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file constructor_destructor_no_store_hash_fn_imps.hpp + * @file cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp * Contains implementations of cc_ht_map_'s constructors, destructor, * and related functions. */ @@ -42,7 +42,7 @@ PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -constructor_insert_new_imp(const_mapped_reference r_val, size_type pos, +constructor_insert_new_imp(mapped_const_reference r_val, size_type pos, false_type) { // Following lines might throw an exception. diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp index a2b6fa11149..f6a73af6d65 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp @@ -34,9 +34,9 @@ // warranty. /** - * @file constructor_destructor_store_hash_fn_imps.hpp + * @file cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp * Contains implementations of cc_ht_map_'s constructors, destructor, - * and related functions. + * and related functions. */ PB_DS_CLASS_T_DEC @@ -49,7 +49,7 @@ constructor_insert_new_imp(const_reference r_val, size_type pos, true_type) // At this point no exceptions can be thrown. p->m_p_next = m_entries[pos]; - p->m_hash = ranged_hash_fn_base::operator()((const_key_reference)(PB_DS_V2F(p->m_value))).second; + p->m_hash = ranged_hash_fn_base::operator()((key_const_reference)(PB_DS_V2F(p->m_value))).second; m_entries[pos] = p; _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(r_key);) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp index d10ff7862cc..c5af1d3ea4a 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file cc_hash_table_map_/debug_fn_imps.hpp * Contains implementations of cc_ht_map_'s debug-mode functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp index 4a02bbfcc5d..1c19cac9590 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_no_store_hash_fn_imps.hpp + * @file cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp * Contains implementations of cc_ht_map_'s debug-mode functions. */ @@ -47,4 +47,4 @@ assert_entry_pointer_valid(const entry_pointer p, false_type, const char* __file, int __line) const { debug_base::check_key_exists(PB_DS_V2F(p->m_value), __file, __line); } -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp index 07f2998bcec..76ad8c6bff5 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_store_hash_fn_imps.hpp + * @file cc_hash_table_map_/debug_store_hash_fn_imps.hpp * Contains implementations of cc_ht_map_'s debug-mode functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp index 07999119335..74404035f99 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file entry_list_fn_imps.hpp + * @file cc_hash_table_map_/entry_list_fn_imps.hpp * Contains implementations of cc_ht_map_'s entry-list related functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp index c6febe421a1..c9c4b1c745d 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file cc_hash_table_map_/erase_fn_imps.hpp * Contains implementations of cc_ht_map_'s erase related functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp index ffe32103cbe..1e2661efa55 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_no_store_hash_fn_imps.hpp + * @file cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp * Contains implementations of cc_ht_map_'s erase related functions, * when the hash value is not stored. */ @@ -42,7 +42,7 @@ PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: -erase(const_key_reference r_key) +erase(key_const_reference r_key) { PB_DS_ASSERT_VALID((*this)) return erase_in_pos_imp(r_key, ranged_hash_fn_base::operator()(r_key)); @@ -51,7 +51,7 @@ erase(const_key_reference r_key) PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: -erase_in_pos_imp(const_key_reference r_key, size_type pos) +erase_in_pos_imp(key_const_reference r_key, size_type pos) { PB_DS_ASSERT_VALID((*this)) entry_pointer p_e = m_entries[pos]; @@ -78,24 +78,23 @@ erase_in_pos_imp(const_key_reference r_key, size_type pos) { entry_pointer p_next_e = p_e->m_p_next; if (p_next_e == 0) - { + { resize_base::notify_erase_search_end(); PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key) - PB_DS_ASSERT_VALID((*this)) - return false; - } + PB_DS_ASSERT_VALID((*this)) + return false; + } if (hash_eq_fn_base::operator()(PB_DS_V2F(p_next_e->m_value), r_key)) - { + { resize_base::notify_erase_search_end(); PB_DS_CHECK_KEY_EXISTS(r_key) - erase_entry_pointer(p_e->m_p_next); + erase_entry_pointer(p_e->m_p_next); do_resize_if_needed_no_throw(); PB_DS_ASSERT_VALID((*this)) - return true; - } + return true; + } resize_base::notify_erase_search_collision(); p_e = p_next_e; } } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp index 09d34f2c0b1..a4cddeafb67 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_store_hash_fn_imps.hpp + * @file cc_hash_table_map_/erase_store_hash_fn_imps.hpp * Contains implementations of cc_ht_map_'s erase related functions, * when the hash value is stored. */ @@ -42,7 +42,7 @@ PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: -erase_in_pos_imp(const_key_reference r_key, const comp_hash& r_pos_hash_pair) +erase_in_pos_imp(key_const_reference r_key, const comp_hash& r_pos_hash_pair) { PB_DS_ASSERT_VALID((*this)) entry_pointer p_e = m_entries[r_pos_hash_pair.first]; @@ -70,26 +70,25 @@ erase_in_pos_imp(const_key_reference r_key, const comp_hash& r_pos_hash_pair) { entry_pointer p_next_e = p_e->m_p_next; if (p_next_e == 0) - { + { resize_base::notify_erase_search_end(); PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key) - PB_DS_ASSERT_VALID((*this)) - return false; - } + PB_DS_ASSERT_VALID((*this)) + return false; + } if (hash_eq_fn_base::operator()(PB_DS_V2F(p_next_e->m_value), p_next_e->m_hash, r_key, r_pos_hash_pair.second)) - { + { resize_base::notify_erase_search_end(); PB_DS_CHECK_KEY_EXISTS(r_key) - erase_entry_pointer(p_e->m_p_next); + erase_entry_pointer(p_e->m_p_next); do_resize_if_needed_no_throw(); PB_DS_ASSERT_VALID((*this)) - return true; - } + return true; + } resize_base::notify_erase_search_collision(); p_e = p_next_e; } } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp index 32ca47d6e3f..e3f363f41ed 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp @@ -34,23 +34,23 @@ // warranty. /** - * @file find_fn_imps.hpp + * @file cc_hash_table_map_/find_fn_imps.hpp * Contains implementations of cc_ht_map_'s find related functions. */ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::point_iterator PB_DS_CLASS_C_DEC:: -find(const_key_reference r_key) +find(key_const_reference r_key) { PB_DS_ASSERT_VALID((*this)) return find_key_pointer(r_key, traits_base::m_store_extra_indicator); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_point_iterator +inline typename PB_DS_CLASS_C_DEC::point_const_iterator PB_DS_CLASS_C_DEC:: -find(const_key_reference r_key) const +find(key_const_reference r_key) const { PB_DS_ASSERT_VALID((*this)) return const_cast(*this).find_key_pointer(r_key, @@ -64,7 +64,7 @@ find_end() { return 0; } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_point_iterator +inline typename PB_DS_CLASS_C_DEC::point_const_iterator PB_DS_CLASS_C_DEC:: find_end() const { return 0; } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp index 1db51c990a6..d532c4f45be 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file find_store_hash_fn_imps.hpp + * @file cc_hash_table_map_/find_store_hash_fn_imps.hpp * Contains implementations of cc_ht_map_'s find related functions, * when the hash value is stored. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp index 2b429960c00..99eea41c598 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file info_fn_imps.hpp + * @file cc_hash_table_map_/info_fn_imps.hpp * Contains implementations of cc_ht_map_'s entire container info related * functions. */ @@ -76,8 +76,8 @@ cmp_with_other(const Other_Map_Type& other) const for (typename Other_Map_Type::const_iterator it = other.begin(); it != other.end(); ++it) { - const_key_reference r_key =(const_key_reference)PB_DS_V2F(*it); - const_mapped_pointer p_mapped_value = + key_const_reference r_key =(key_const_reference)PB_DS_V2F(*it); + mapped_const_pointer p_mapped_value = const_cast(*this). find_key_pointer(r_key, traits_base::m_store_extra_indicator); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp index 0679dbe6e74..dc7d44cc504 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file cc_hash_table_map_/insert_fn_imps.hpp * Contains implementations of cc_ht_map_'s insert related functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp index acbd8a78d07..ba898739589 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_no_store_hash_fn_imps.hpp + * @file cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp * Contains implementations of cc_ht_map_'s insert related functions, * when the hash value is not stored. */ @@ -45,7 +45,7 @@ PB_DS_CLASS_C_DEC:: insert_imp(const_reference r_val, false_type) { PB_DS_ASSERT_VALID((*this)) - const_key_reference r_key = PB_DS_V2F(r_val); + key_const_reference r_key = PB_DS_V2F(r_val); const size_type pos = ranged_hash_fn_base::operator()(r_key); entry_pointer p_e = m_entries[pos]; resize_base::notify_insert_search_start(); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp index 1224880ecc9..f4553976cfb 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_store_hash_fn_imps.hpp + * @file cc_hash_table_map_/insert_store_hash_fn_imps.hpp * Contains implementations of cc_ht_map_'s insert related functions, * when the hash value is stored. */ @@ -45,7 +45,7 @@ PB_DS_CLASS_C_DEC:: insert_imp(const_reference r_val, true_type) { PB_DS_ASSERT_VALID((*this)) - const_key_reference key = PB_DS_V2F(r_val); + key_const_reference key = PB_DS_V2F(r_val); comp_hash pos_hash_pair = ranged_hash_fn_base::operator()(key); entry_pointer p_e = m_entries[pos_hash_pair.first]; resize_base::notify_insert_search_start(); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp index a7592b7f1f7..5be4a9caab0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file iterators_fn_imps.hpp + * @file cc_hash_table_map_/iterators_fn_imps.hpp * Contains implementations of cc_ht_map_'s iterators related functions, e.g., * begin(). */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp index 9a661b36197..5bf12c8f166 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file policy_access_fn_imps.hpp + * @file cc_hash_table_map_/policy_access_fn_imps.hpp * Contains implementations of cc_ht_map_'s policy access * functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp index 4e3f48dd12d..66145b81da1 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp @@ -35,7 +35,7 @@ // warranty. /** - * @file resize_fn_imps.hpp + * @file cc_hash_table_map_/resize_fn_imps.hpp * Contains implementations of cc_ht_map_'s resize related functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp index 6577630f0f0..f43850818b6 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp @@ -34,9 +34,9 @@ // warranty. /** - * @file resize_no_store_hash_fn_imps.hpp + * @file cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp * Contains implementations of cc_ht_map_'s resize related functions, when the - * hash value is not stored. + * hash value is not stored. */ PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp index c1adb61b190..1901b803938 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp @@ -34,9 +34,9 @@ // warranty. /** - * @file resize_store_hash_fn_imps.hpp + * @file cc_hash_table_map_/resize_store_hash_fn_imps.hpp * Contains implementations of cc_ht_map_'s resize related functions, when the - * hash value is stored. + * hash value is stored. */ PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp index 0d5ec85f2e5..ff11890e693 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp @@ -34,9 +34,9 @@ // warranty. /** - * @file size_fn_imps.hpp + * @file cc_hash_table_map_/size_fn_imps.hpp * Contains implementations of cc_ht_map_'s entire container size related - * functions. + * functions. */ PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp index b9c1ee20e5e..3c07f95a496 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file standard_policies.hpp + * @file cc_hash_table_map_/standard_policies.hpp * Contains standard policies for cc_ht_map types. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp index 497977d97cc..ede1d6a8fc9 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file trace_fn_imps.hpp + * @file cc_hash_table_map_/trace_fn_imps.hpp * Contains implementations of cc_ht_map_'s trace-mode functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp index 1ee48a2ac66..eb87bea9e24 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,7 +34,7 @@ // warranty. /** - * @file cond_dealtor.hpp + * @file detail/cond_dealtor.hpp * Contains a conditional deallocator. */ @@ -43,83 +43,42 @@ namespace __gnu_pbds { - namespace detail { + /// Conditional deallocate constructor argument. + template + class cond_dealtor + { + typedef typename _Alloc::template rebind __rebind_e; -#define PB_DS_COND_DEALTOR_CLASS_T_DEC \ - template + public: + typedef typename __rebind_e::other entry_allocator; + typedef typename entry_allocator::pointer entry_pointer; -#define PB_DS_COND_DEALTOR_CLASS_C_DEC \ - cond_dealtor< \ - Entry, \ - Allocator> + cond_dealtor(entry_pointer p_e) + : m_p_e(p_e), m_no_action_destructor(false) { } - template - class cond_dealtor - { - public: - typedef - typename Allocator::template rebind::other - entry_allocator; + ~cond_dealtor() + { + if (m_no_action_destructor) + return; + s_alloc.deallocate(m_p_e, 1); + } - typedef typename entry_allocator::pointer entry_pointer; + void + set_no_action() + { m_no_action_destructor = true; } - public: - inline - cond_dealtor(entry_pointer p_e); - - inline - ~cond_dealtor(); - - inline void - set_no_action(); - - private: - entry_pointer m_p_e; - - bool m_no_action_destructor; - - static entry_allocator s_alloc; - }; - - PB_DS_COND_DEALTOR_CLASS_T_DEC - typename PB_DS_COND_DEALTOR_CLASS_C_DEC::entry_allocator - PB_DS_COND_DEALTOR_CLASS_C_DEC::s_alloc; - - PB_DS_COND_DEALTOR_CLASS_T_DEC - inline - PB_DS_COND_DEALTOR_CLASS_C_DEC:: - cond_dealtor(entry_pointer p_e) : - m_p_e(p_e), - m_no_action_destructor(false) - { } - - PB_DS_COND_DEALTOR_CLASS_T_DEC - inline void - PB_DS_COND_DEALTOR_CLASS_C_DEC:: - set_no_action() - { - m_no_action_destructor = true; - } - - PB_DS_COND_DEALTOR_CLASS_T_DEC - inline - PB_DS_COND_DEALTOR_CLASS_C_DEC:: - ~cond_dealtor() - { - if (m_no_action_destructor) - return; - - s_alloc.deallocate(m_p_e, 1); - } - -#undef PB_DS_COND_DEALTOR_CLASS_T_DEC -#undef PB_DS_COND_DEALTOR_CLASS_C_DEC + private: + entry_pointer m_p_e; + bool m_no_action_destructor; + static entry_allocator s_alloc; + }; + template + typename cond_dealtor::entry_allocator + cond_dealtor::s_alloc; } // namespace detail - } // namespace __gnu_pbds #endif // #ifndef PB_DS_COND_DEALTOR_HPP - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp index 20c99886879..a960b7d2317 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file detail/constructors_destructor_fn_imps.hpp * Contains constructors_destructor_fn_imps applicable to different containers. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp b/libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp index 2964b2d30c6..37217d950b7 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -35,7 +35,7 @@ /** * @file container_base_dispatch.hpp - * Contains an associative container dispatching base. + * Contains associative container dispatching. */ #ifndef PB_DS_ASSOC_CNTNR_BASE_DS_DISPATCHER_HPP @@ -60,60 +60,38 @@ __FILE__, __LINE__);) #define PB_DS_DATA_TRUE_INDICATOR +#define PB_DS_V2F(X) (X).first +#define PB_DS_V2S(X) (X).second +#define PB_DS_EP2VP(X)& ((X)->m_value) #include -#undef PB_DS_DATA_TRUE_INDICATOR - -#define PB_DS_DATA_FALSE_INDICATOR -#include -#undef PB_DS_DATA_FALSE_INDICATOR - -#define PB_DS_DATA_TRUE_INDICATOR +#include #include -#undef PB_DS_DATA_TRUE_INDICATOR - -#define PB_DS_DATA_FALSE_INDICATOR -#include -#undef PB_DS_DATA_FALSE_INDICATOR - -#define PB_DS_DATA_TRUE_INDICATOR #include -#undef PB_DS_DATA_TRUE_INDICATOR - -#define PB_DS_DATA_FALSE_INDICATOR -#include -#undef PB_DS_DATA_FALSE_INDICATOR - -#define PB_DS_DATA_TRUE_INDICATOR #include -#undef PB_DS_DATA_TRUE_INDICATOR - -#define PB_DS_DATA_FALSE_INDICATOR -#include -#undef PB_DS_DATA_FALSE_INDICATOR - -#define PB_DS_DATA_TRUE_INDICATOR #include -#undef PB_DS_DATA_TRUE_INDICATOR - -#define PB_DS_DATA_FALSE_INDICATOR -#include -#undef PB_DS_DATA_FALSE_INDICATOR - -#define PB_DS_DATA_TRUE_INDICATOR #include -#undef PB_DS_DATA_TRUE_INDICATOR - -#define PB_DS_DATA_FALSE_INDICATOR -#include -#undef PB_DS_DATA_FALSE_INDICATOR - -#define PB_DS_DATA_TRUE_INDICATOR #include #undef PB_DS_DATA_TRUE_INDICATOR +#undef PB_DS_V2F +#undef PB_DS_V2S +#undef PB_DS_EP2VP #define PB_DS_DATA_FALSE_INDICATOR +#define PB_DS_V2F(X) (X) +#define PB_DS_V2S(X) Mapped_Data() +#define PB_DS_EP2VP(X)& ((X)->m_value.first) +#include +#include +#include +#include +#include +#include +#include #include #undef PB_DS_DATA_FALSE_INDICATOR +#undef PB_DS_V2F +#undef PB_DS_V2S +#undef PB_DS_EP2VP #undef PB_DS_CHECK_KEY_DOES_NOT_EXIST #undef PB_DS_CHECK_KEY_EXISTS @@ -124,28 +102,10 @@ namespace __gnu_pbds { namespace detail { - // Primary template. - template - struct container_base_dispatch; - - template - struct container_base_dispatch - { - private: - typedef __gnu_cxx::typelist::at_index at0; - typedef typename at0::type at0t; - typedef __gnu_cxx::typelist::at_index at1; - typedef typename at1::type at1t; - - public: - typedef lu_map_data_ type; - }; - - template - struct container_base_dispatch + /// Specialization for list-update map. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -154,34 +114,14 @@ namespace detail typedef typename at1::type at1t; public: - typedef lu_map_no_data_ type; + /// Dispatched type. + typedef lu_map type; }; - template - struct container_base_dispatch - { - private: - typedef __gnu_cxx::typelist::at_index at1; - typedef typename at1::type at1t; - - public: - typedef pat_trie_data_ type; - }; - - template - struct container_base_dispatch - { - private: - typedef __gnu_cxx::typelist::at_index at1; - typedef typename at1::type at1t; - - public: - typedef pat_trie_no_data_ type; - }; - - template - struct container_base_dispatch + /// Specialization for list-update set. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -190,12 +130,39 @@ namespace detail typedef typename at1::type at1t; public: - typedef rb_tree_data_ type; + /// Dispatched type. + typedef lu_set type; }; - template - struct container_base_dispatch + /// Specialization for PATRICIA trie map. + template + struct container_base_dispatch + { + private: + typedef __gnu_cxx::typelist::at_index at1; + typedef typename at1::type at1t; + + public: + typedef pat_trie_map type; + }; + + /// Specialization for PATRICIA trie set. + template + struct container_base_dispatch + { + private: + typedef __gnu_cxx::typelist::at_index at1; + typedef typename at1::type at1t; + + public: + /// Dispatched type. + typedef pat_trie_set type; + }; + + /// Specialization for R-B tree map. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -204,12 +171,14 @@ namespace detail typedef typename at1::type at1t; public: - typedef rb_tree_no_data_ type; + /// Dispatched type. + typedef rb_tree_map type; }; - template - struct container_base_dispatch + /// Specialization for R-B tree set. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -218,12 +187,13 @@ namespace detail typedef typename at1::type at1t; public: - typedef splay_tree_data_ type; + typedef rb_tree_set type; }; - template - struct container_base_dispatch + /// Specialization splay tree map. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -232,11 +202,29 @@ namespace detail typedef typename at1::type at1t; public: - typedef splay_tree_no_data_ type; + /// Dispatched type. + typedef splay_tree_map type; + }; + + /// Specialization splay tree set. + template + struct container_base_dispatch + { + private: + typedef __gnu_cxx::typelist::at_index at0; + typedef typename at0::type at0t; + typedef __gnu_cxx::typelist::at_index at1; + typedef typename at1::type at1t; + + public: + /// Dispatched type. + typedef splay_tree_set type; }; - template - struct container_base_dispatch + /// Specialization ordered-vector tree map. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -245,12 +233,14 @@ namespace detail typedef typename at1::type at1t; public: - typedef ov_tree_data_ type; + /// Dispatched type. + typedef ov_tree_map type; }; - template - struct container_base_dispatch + /// Specialization ordered-vector tree set. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -259,11 +249,13 @@ namespace detail typedef typename at1::type at1t; public: - typedef ov_tree_no_data_ type; + /// Dispatched type. + typedef ov_tree_set type; }; - template - struct container_base_dispatch + /// Specialization colision-chaining hash map. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -278,13 +270,15 @@ namespace detail typedef typename at4::type at4t; public: - typedef cc_ht_map_data_ type; + /// Dispatched type. + typedef cc_ht_map type; }; - template - struct container_base_dispatch + /// Specialization colision-chaining hash set. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -299,12 +293,14 @@ namespace detail typedef typename at4::type at4t; public: - typedef cc_ht_map_no_data_ type; }; - template - struct container_base_dispatch + /// Specialization general-probe hash map. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -321,13 +317,15 @@ namespace detail typedef typename at5::type at5t; public: - typedef gp_ht_map_data_ type; + /// Dispatched type. + typedef gp_ht_map type; }; - template - struct container_base_dispatch + /// Specialization general-probe hash set. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -344,10 +342,11 @@ namespace detail typedef typename at5::type at5t; public: - typedef gp_ht_map_no_data_ type; + /// Dispatched type. + typedef gp_ht_set type; }; } // namespace detail } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp index a9a0b42d263..c1709ba452d 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp @@ -35,7 +35,7 @@ // warranty. /** - * @file debug_map_base.hpp + * @file detail/debug_map_base.hpp * Contains a debug-mode base for all maps. */ @@ -63,73 +63,69 @@ namespace __gnu_pbds { return (__out << '(' << p.first << ',' << p.second << ')'); } #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ debug_map_base - template + /// Debug base class. + template class debug_map_base { private: - typedef typename std::allocator key_allocator; - typedef typename key_allocator::size_type size_type; - typedef Const_Key_Reference const_key_reference; - typedef std::_GLIBCXX_STD_C::list key_set; - typedef typename key_set::iterator key_set_iterator; - typedef typename key_set::const_iterator const_key_set_iterator; - typedef __gnu_cxx::throw_allocator_random key_db_allocator; - typedef typename key_db_allocator::never_adjustor never_adjustor; + typedef Const_Key_Reference key_const_reference; + typedef std::_GLIBCXX_STD_C::list key_repository; + typedef typename key_repository::size_type size_type; + typedef typename key_repository::iterator iterator; + typedef typename key_repository::const_iterator const_iterator; protected: debug_map_base(); - debug_map_base(const PB_DS_CLASS_C_DEC& other); + debug_map_base(const PB_DS_CLASS_C_DEC&); ~debug_map_base(); inline void - insert_new(const_key_reference r_key); + insert_new(key_const_reference); inline void - erase_existing(const_key_reference r_key); + erase_existing(key_const_reference); void clear(); inline void - check_key_exists(const_key_reference r_key, - const char* file, int line) const; + check_key_exists(key_const_reference, const char*, int) const; inline void - check_key_does_not_exist(const_key_reference r_key, - const char* file, int line) const; + check_key_does_not_exist(key_const_reference, const char*, int) const; inline void - check_size(size_type size, const char* file, int line) const; + check_size(size_type, const char*, int) const; void - swap(PB_DS_CLASS_C_DEC& other); + swap(PB_DS_CLASS_C_DEC&); template void - split(const_key_reference, Cmp_Fn, PB_DS_CLASS_C_DEC&); + split(key_const_reference, Cmp_Fn, PB_DS_CLASS_C_DEC&); void - join(PB_DS_CLASS_C_DEC& other, bool with_cleanup = true); + join(PB_DS_CLASS_C_DEC&, bool with_cleanup = true); private: void - assert_valid(const char* file, int line) const; + assert_valid(const char*, int) const; - const_key_set_iterator - find(const_key_reference r_key) const; + const_iterator + find(key_const_reference) const; - key_set_iterator - find(const_key_reference r_key); + iterator + find(key_const_reference); - key_set m_key_set; - Eq_Fn m_eq; + key_repository m_keys; + Eq_Fn m_eq; }; PB_DS_CLASS_T_DEC @@ -139,7 +135,8 @@ namespace __gnu_pbds PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: - debug_map_base(const PB_DS_CLASS_C_DEC& other) : m_key_set(other.m_key_set) + debug_map_base(const PB_DS_CLASS_C_DEC& other) + : m_keys(other.m_keys), m_eq(other.m_eq) { PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC @@ -150,20 +147,19 @@ namespace __gnu_pbds PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: - insert_new(const_key_reference r_key) + insert_new(key_const_reference r_key) { PB_DS_ASSERT_VALID((*this)) - if (find(r_key) != m_key_set.end()) + if (find(r_key) != m_keys.end()) { std::cerr << "insert_new key already present " << r_key << std::endl; - std::abort; + std::abort(); } - never_adjustor never; __try { - m_key_set.push_back(r_key); + m_keys.push_back(r_key); } __catch(...) { @@ -177,16 +173,16 @@ namespace __gnu_pbds PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: - erase_existing(const_key_reference r_key) + erase_existing(key_const_reference r_key) { PB_DS_ASSERT_VALID((*this)) - key_set_iterator it = find(r_key); - if (it == m_key_set.end()) + iterator it = find(r_key); + if (it == m_keys.end()) { std::cerr << "erase_existing" << r_key << std::endl; std::abort(); } - m_key_set.erase(it); + m_keys.erase(it); PB_DS_ASSERT_VALID((*this)) } @@ -196,18 +192,18 @@ namespace __gnu_pbds clear() { PB_DS_ASSERT_VALID((*this)) - m_key_set.clear(); + m_keys.clear(); PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: - check_key_exists(const_key_reference r_key, + check_key_exists(key_const_reference r_key, const char* __file, int __line) const { assert_valid(__file, __line); - if (find(r_key) == m_key_set.end()) + if (find(r_key) == m_keys.end()) { std::cerr << __file << ':' << __line << ": check_key_exists " << r_key << std::endl; @@ -218,11 +214,11 @@ namespace __gnu_pbds PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: - check_key_does_not_exist(const_key_reference r_key, + check_key_does_not_exist(key_const_reference r_key, const char* __file, int __line) const { assert_valid(__file, __line); - if (find(r_key) != m_key_set.end()) + if (find(r_key) != m_keys.end()) { using std::cerr; using std::endl; @@ -238,11 +234,11 @@ namespace __gnu_pbds check_size(size_type size, const char* __file, int __line) const { assert_valid(__file, __line); - const size_type key_set_size = m_key_set.size(); - if (size != key_set_size) + const size_type keys_size = m_keys.size(); + if (size != keys_size) { - std::cerr << __file << ':' << __line << ": check_size " << size - << " != " << key_set_size << std::endl; + std::cerr << __file << ':' << __line << ": check_size " + << size << " != " << keys_size << std::endl; std::abort(); } } @@ -253,31 +249,32 @@ namespace __gnu_pbds swap(PB_DS_CLASS_C_DEC& other) { PB_DS_ASSERT_VALID((*this)) - m_key_set.swap(other.m_key_set); + m_keys.swap(other.m_keys); + std::swap(m_eq, other.m_eq); PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::const_key_set_iterator + typename PB_DS_CLASS_C_DEC::const_iterator PB_DS_CLASS_C_DEC:: - find(const_key_reference r_key) const + find(key_const_reference r_key) const { PB_DS_ASSERT_VALID((*this)) - typedef const_key_set_iterator iterator_type; - for (iterator_type it = m_key_set.begin(); it != m_key_set.end(); ++it) + typedef const_iterator iterator_type; + for (iterator_type it = m_keys.begin(); it != m_keys.end(); ++it) if (m_eq(*it, r_key)) return it; - return m_key_set.end(); + return m_keys.end(); } PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::key_set_iterator + typename PB_DS_CLASS_C_DEC::iterator PB_DS_CLASS_C_DEC:: - find(const_key_reference r_key) + find(key_const_reference r_key) { PB_DS_ASSERT_VALID((*this)) - key_set_iterator it = m_key_set.begin(); - while (it != m_key_set.end()) + iterator it = m_keys.begin(); + while (it != m_keys.end()) { if (m_eq(*it, r_key)) return it; @@ -291,12 +288,12 @@ namespace __gnu_pbds PB_DS_CLASS_C_DEC:: assert_valid(const char* __file, int __line) const { - const_key_set_iterator prime_it = m_key_set.begin(); - while (prime_it != m_key_set.end()) + const_iterator prime_it = m_keys.begin(); + while (prime_it != m_keys.end()) { - const_key_set_iterator sec_it = prime_it; + const_iterator sec_it = prime_it; ++sec_it; - while (sec_it != m_key_set.end()) + while (sec_it != m_keys.end()) { PB_DS_DEBUG_VERIFY(!m_eq(*sec_it, *prime_it)); PB_DS_DEBUG_VERIFY(!m_eq(*prime_it, *sec_it)); @@ -310,15 +307,15 @@ namespace __gnu_pbds template void PB_DS_CLASS_C_DEC:: - split(const_key_reference r_key, Cmp_Fn cmp_fn, PB_DS_CLASS_C_DEC& other) + split(key_const_reference r_key, Cmp_Fn cmp_fn, PB_DS_CLASS_C_DEC& other) { other.clear(); - key_set_iterator it = m_key_set.begin(); - while (it != m_key_set.end()) - if (cmp_fn(r_key, * it)) + iterator it = m_keys.begin(); + while (it != m_keys.end()) + if (cmp_fn(r_key, *it)) { other.insert_new(*it); - it = m_key_set.erase(it); + it = m_keys.erase(it); } else ++it; @@ -329,16 +326,16 @@ namespace __gnu_pbds PB_DS_CLASS_C_DEC:: join(PB_DS_CLASS_C_DEC& other, bool with_cleanup) { - key_set_iterator it = other.m_key_set.begin(); - while (it != other.m_key_set.end()) + iterator it = other.m_keys.begin(); + while (it != other.m_keys.end()) { insert_new(*it); if (with_cleanup) - it = other.m_key_set.erase(it); + it = other.m_keys.erase(it); else ++it; } - _GLIBCXX_DEBUG_ASSERT(!with_cleanup || other.m_key_set.empty()); + _GLIBCXX_DEBUG_ASSERT(!with_cleanup || other.m_keys.empty()); } #undef PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp b/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp index ec95bca6402..389bdcdb637 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -51,6 +51,7 @@ namespace __gnu_pbds { namespace detail { + /// Equivalence function. template struct eq_by_less : private Cmp_Fn { diff --git a/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp index b21c252e2c0..6255d55eb0e 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -36,7 +36,7 @@ /** * @file hash_eq_fn.hpp * Contains 2 eqivalence functions, one employing a hash value, - * and one ignoring it. + * and one ignoring it. */ #ifndef PB_DS_HASH_EQ_FN_HPP @@ -49,130 +49,60 @@ namespace __gnu_pbds { namespace detail { - template - struct hash_eq_fn; + template + struct hash_eq_fn; -#define PB_DS_CLASS_T_DEC \ - template - -#define PB_DS_CLASS_C_DEC \ - hash_eq_fn - - /** - * Specialization 1- The client requests that hash values not be stored. - **/ - template - struct hash_eq_fn : public Eq_Fn + /// Specialization 1 - The client requests that hash values not be stored. + template + struct hash_eq_fn : public Eq_Fn { - typedef Eq_Fn eq_fn_base; + typedef Eq_Fn eq_fn_base; + typedef typename _Alloc::template rebind::other key_allocator; + typedef typename key_allocator::const_reference key_const_reference; - typedef typename Allocator::template rebind::other key_allocator; + hash_eq_fn() { } - typedef typename key_allocator::const_reference const_key_reference; + hash_eq_fn(const Eq_Fn& r_eq_fn) : Eq_Fn(r_eq_fn) { } - hash_eq_fn(); + bool + operator()(key_const_reference r_lhs_key, + key_const_reference r_rhs_key) const + { return eq_fn_base::operator()(r_lhs_key, r_rhs_key); } - hash_eq_fn(const Eq_Fn& r_eq_fn); - - inline bool - operator()(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const; - - inline void - swap(const PB_DS_CLASS_C_DEC& other); + void + swap(const hash_eq_fn& other) + { std::swap((Eq_Fn&)(*this), (Eq_Fn&)other); } }; - PB_DS_CLASS_T_DEC - PB_DS_CLASS_C_DEC:: - hash_eq_fn() - { } - PB_DS_CLASS_T_DEC - inline void - PB_DS_CLASS_C_DEC:: - swap(const PB_DS_CLASS_C_DEC& other) - { std::swap((Eq_Fn& )(*this), (Eq_Fn& )other); } - - PB_DS_CLASS_T_DEC - PB_DS_CLASS_C_DEC:: - hash_eq_fn(const Eq_Fn& r_eq_fn) : - Eq_Fn(r_eq_fn) - { } - - PB_DS_CLASS_T_DEC - inline bool - PB_DS_CLASS_C_DEC:: - operator()(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const - { return (eq_fn_base::operator()(r_lhs_key, r_rhs_key)); } - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC - -#define PB_DS_CLASS_T_DEC \ - template - -#define PB_DS_CLASS_C_DEC \ - hash_eq_fn - - /** - * Specialization 2- The client requests that hash values be stored. - **/ - template - struct hash_eq_fn : - public Eq_Fn + /// Specialization 2 - The client requests that hash values be stored. + template + struct hash_eq_fn : public Eq_Fn { - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; + typedef Eq_Fn eq_fn_base; + typedef typename _Alloc::template rebind::other key_allocator; + typedef typename key_allocator::const_reference key_const_reference; - typedef Eq_Fn eq_fn_base; + hash_eq_fn() { } - typedef typename Allocator::template rebind::other key_allocator; + hash_eq_fn(const Eq_Fn& r_eq_fn) : Eq_Fn(r_eq_fn) { } - typedef typename key_allocator::const_reference const_key_reference; + bool + operator()(key_const_reference r_lhs_key, size_type lhs_hash, + key_const_reference r_rhs_key, size_type rhs_hash) const + { + _GLIBCXX_DEBUG_ASSERT(!eq_fn_base::operator()(r_lhs_key, r_rhs_key) + || lhs_hash == rhs_hash); - hash_eq_fn(); + return (lhs_hash == rhs_hash && + eq_fn_base::operator()(r_lhs_key, r_rhs_key)); + } - hash_eq_fn(const Eq_Fn& r_eq_fn); - - inline bool - operator()(const_key_reference r_lhs_key, size_type lhs_hash, - const_key_reference r_rhs_key, size_type rhs_hash) const; - - inline void - swap(const PB_DS_CLASS_C_DEC& other); + void + swap(const hash_eq_fn& other) + { std::swap((Eq_Fn&)(*this), (Eq_Fn&)(other)); } }; - - PB_DS_CLASS_T_DEC - PB_DS_CLASS_C_DEC:: - hash_eq_fn() - { } - - PB_DS_CLASS_T_DEC - PB_DS_CLASS_C_DEC:: - hash_eq_fn(const Eq_Fn& r_eq_fn) : - Eq_Fn(r_eq_fn) - { } - - PB_DS_CLASS_T_DEC - inline bool - PB_DS_CLASS_C_DEC:: - operator()(const_key_reference r_lhs_key, size_type lhs_hash, - const_key_reference r_rhs_key, size_type rhs_hash) const - { - _GLIBCXX_DEBUG_ASSERT(!eq_fn_base::operator()(r_lhs_key, r_rhs_key) - || lhs_hash == rhs_hash); - - return (lhs_hash == rhs_hash && - eq_fn_base::operator()(r_lhs_key, r_rhs_key)); - } - - PB_DS_CLASS_T_DEC - inline void - PB_DS_CLASS_C_DEC:: - swap(const PB_DS_CLASS_C_DEC& other) - { std::swap((Eq_Fn& )(*this), (Eq_Fn& )(other)); } - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC - } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp index 90f17094a0f..8a51541b528 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp @@ -35,9 +35,9 @@ // warranty. /** - * @file constructor_destructor_fn_imps.hpp + * @file gp_hash_table_map_/constructor_destructor_fn_imps.hpp * Contains implementations of gp_ht_map_'s constructors, destructor, - * and related functions. + * and related functions. */ PB_DS_CLASS_T_DEC @@ -56,7 +56,7 @@ copy_from_range(It first_it, It last_it) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME() +PB_DS_GP_HASH_NAME() : ranged_probe_fn_base(resize_base::get_nearest_larger_size(1)), m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0), m_entries(s_entry_allocator.allocate(m_num_e)) @@ -67,7 +67,7 @@ PB_DS_CLASS_NAME() PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn) +PB_DS_GP_HASH_NAME(const Hash_Fn& r_hash_fn) : ranged_probe_fn_base(resize_base::get_nearest_larger_size(1), r_hash_fn), m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0), m_entries(s_entry_allocator.allocate(m_num_e)) @@ -78,7 +78,7 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn) +PB_DS_GP_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn) : hash_eq_fn_base(r_eq_fn), ranged_probe_fn_base(resize_base::get_nearest_larger_size(1), r_hash_fn), m_num_e(resize_base::get_nearest_larger_size(1)), m_num_used_e(0), @@ -90,7 +90,7 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, +PB_DS_GP_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Probe_Fn& r_comb_hash_fn) : hash_eq_fn_base(r_eq_fn), ranged_probe_fn_base(resize_base::get_nearest_larger_size(1), @@ -104,7 +104,7 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, +PB_DS_GP_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Probe_Fn& comb_hash_fn, const Probe_Fn& prober) : hash_eq_fn_base(r_eq_fn), ranged_probe_fn_base(resize_base::get_nearest_larger_size(1), @@ -118,7 +118,7 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, +PB_DS_GP_HASH_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Probe_Fn& comb_hash_fn, const Probe_Fn& prober, const Resize_Policy& r_resize_policy) : hash_eq_fn_base(r_eq_fn), resize_base(r_resize_policy), @@ -133,7 +133,7 @@ PB_DS_CLASS_NAME(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) : +PB_DS_GP_HASH_NAME(const PB_DS_CLASS_C_DEC& other) : #ifdef _GLIBCXX_DEBUG debug_base(other), #endif @@ -166,7 +166,7 @@ PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~PB_DS_CLASS_NAME() +~PB_DS_GP_HASH_NAME() { deallocate_all(); } PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp index ec8069839b0..d077cbf3cea 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file constructor_destructor_no_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s constructors, destructor, * and related functions. */ @@ -42,7 +42,7 @@ PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -constructor_insert_new_imp(const_mapped_reference r_val, size_type pos, +constructor_insert_new_imp(mapped_const_reference r_val, size_type pos, false_type) { _GLIBCXX_DEBUG_ASSERT(m_entries[pos].m_stat != valid_entry_status)k; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp index 5f304875908..ff83c20b8f5 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file constructor_destructor_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s constructors, destructor, * and related functions. */ @@ -42,7 +42,7 @@ PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -constructor_insert_new_imp(const_mapped_reference r_val, size_type pos, +constructor_insert_new_imp(mapped_const_reference r_val, size_type pos, true_type) { _GLIBCXX_DEBUG_ASSERT(m_entries[pos].m_stat != valid_entry_status); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp index eca853a2092..cad9a733be9 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file gp_hash_table_map_/debug_fn_imps.hpp * Contains implementations of gp_ht_map_'s debug-mode functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp index ba8f54e5dea..ff9bdae14a0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_no_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s debug-mode functions. */ @@ -57,7 +57,7 @@ assert_entry_array_valid(const entry_array a_entries, false_type, break; case valid_entry_status: { - const_key_reference r_key = PB_DS_V2F(p_e->m_value); + key_const_reference r_key = PB_DS_V2F(p_e->m_value); debug_base::check_key_exists(r_key, __file, __line); ++iterated_num_used_e; break; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp index 2c2833eacbf..488b6b9236c 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/debug_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s debug-mode functions. */ @@ -58,7 +58,7 @@ assert_entry_array_valid(const entry_array a_entries, true_type, break; case valid_entry_status: { - const_key_reference r_key = PB_DS_V2F(p_e->m_value); + key_const_reference r_key = PB_DS_V2F(p_e->m_value); debug_base::check_key_exists(r_key, __file, __line); const comp_hash pos_hash_pair = ranged_probe_fn_base::operator()(r_key); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp index e57d5cc7f2d..0e6227bc7cf 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file gp_hash_table_map_/erase_fn_imps.hpp * Contains implementations of gp_ht_map_'s erase related functions. */ @@ -93,7 +93,7 @@ erase_if(Pred pred) PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: -erase(const_key_reference r_key) +erase(key_const_reference r_key) { return erase_imp(r_key, traits_base::m_store_extra_indicator); } #include diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp index 67e64e91ab6..d95b9a72b46 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_no_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s erase related functions, * when the hash value is not stored. */ @@ -42,7 +42,7 @@ PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: -erase_imp(const_key_reference r_key, false_type) +erase_imp(key_const_reference r_key, false_type) { PB_DS_ASSERT_VALID((*this)) size_type hash = ranged_probe_fn_base::operator()(r_key); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp index 02dc63ea5bb..9ccad4f94b7 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/erase_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s erase related functions, * when the hash value is stored. */ @@ -42,7 +42,7 @@ PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: -erase_imp(const_key_reference r_key, true_type) +erase_imp(key_const_reference r_key, true_type) { const comp_hash pos_hash_pair = ranged_probe_fn_base::operator()(r_key); size_type i; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp index d8b32fe1719..e6e9c5f0da9 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp @@ -34,23 +34,23 @@ // warranty. /** - * @file find_fn_imps.hpp + * @file gp_hash_table_map_/find_fn_imps.hpp * Contains implementations of gp_ht_map_'s find related functions. */ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::point_iterator PB_DS_CLASS_C_DEC:: -find(const_key_reference r_key) +find(key_const_reference r_key) { PB_DS_ASSERT_VALID((*this)) return find_key_pointer(r_key, traits_base::m_store_extra_indicator); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_point_iterator +inline typename PB_DS_CLASS_C_DEC::point_const_iterator PB_DS_CLASS_C_DEC:: -find(const_key_reference r_key) const +find(key_const_reference r_key) const { PB_DS_ASSERT_VALID((*this)) return const_cast(*this).find_key_pointer(r_key, traits_base::m_store_extra_indicator); @@ -63,7 +63,7 @@ find_end() { return 0; } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_point_iterator +inline typename PB_DS_CLASS_C_DEC::point_const_iterator PB_DS_CLASS_C_DEC:: find_end() const { return 0; } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp index 298604c80e2..2af9781b5e3 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file find_no_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/find_no_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s find related functions, * when the hash value is not stored. */ @@ -42,5 +42,5 @@ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::pointer PB_DS_CLASS_C_DEC:: -find_key_pointer(const_key_reference r_key, false_type) +find_key_pointer(key_const_reference r_key, false_type) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp index a44b8326e28..80c7788c70f 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file find_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/find_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s insert related functions, * when the hash value is stored. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp index a9179d5363d..4ce94aefecd 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp @@ -35,8 +35,8 @@ // warranty. /** - * @file gp_ht_map_.hpp - * Contains an implementation class for gp_ht_map_. + * @file gp_hash_table_map_/gp_ht_map_.hpp + * Contains an implementation class for general probing hash. */ #include @@ -47,7 +47,7 @@ #include #ifdef PB_DS_HT_MAP_TRACE_ #include -#endif +#endif #ifdef _GLIBCXX_DEBUG #include #endif @@ -57,73 +57,66 @@ namespace __gnu_pbds { namespace detail { -#define PB_DS_CLASS_T_DEC \ - template - #ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_CLASS_NAME gp_ht_map_data_ +#define PB_DS_GP_HASH_NAME gp_ht_map #endif #ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_CLASS_NAME gp_ht_map_no_data_ -#endif +#define PB_DS_GP_HASH_NAME gp_ht_set +#endif + +#define PB_DS_CLASS_T_DEC \ + template #define PB_DS_CLASS_C_DEC \ - PB_DS_CLASS_NAME + PB_DS_GP_HASH_NAME #define PB_DS_HASH_EQ_FN_C_DEC \ - hash_eq_fn + hash_eq_fn #define PB_DS_RANGED_PROBE_FN_C_DEC \ - ranged_probe_fn + ranged_probe_fn -#define PB_DS_TYPES_TRAITS_C_DEC \ - types_traits +#define PB_DS_GP_HASH_TRAITS_BASE \ + types_traits #ifdef _GLIBCXX_DEBUG #define PB_DS_DEBUG_MAP_BASE_C_DEC \ - debug_map_base::other::const_reference> -#endif - -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_V2F(X) (X).first -#define PB_DS_V2S(X) (X).second -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_V2F(X) (X) -#define PB_DS_V2S(X) Mapped() + debug_map_base::other::const_reference> #endif + + /// General probing hash. template - class PB_DS_CLASS_NAME : + class PB_DS_GP_HASH_NAME : #ifdef _GLIBCXX_DEBUG protected PB_DS_DEBUG_MAP_BASE_C_DEC, -#endif +#endif public PB_DS_HASH_EQ_FN_C_DEC, public Resize_Policy, public PB_DS_RANGED_PROBE_FN_C_DEC, - public PB_DS_TYPES_TRAITS_C_DEC + public PB_DS_GP_HASH_TRAITS_BASE { private: - typedef PB_DS_TYPES_TRAITS_C_DEC traits_base; - typedef typename traits_base::value_type value_type_; - typedef typename traits_base::pointer pointer_; + typedef PB_DS_GP_HASH_TRAITS_BASE traits_base; + typedef typename traits_base::value_type value_type_; + typedef typename traits_base::pointer pointer_; typedef typename traits_base::const_pointer const_pointer_; - typedef typename traits_base::reference reference_; + typedef typename traits_base::reference reference_; typedef typename traits_base::const_reference const_reference_; - typedef typename traits_base::comp_hash comp_hash; + typedef typename traits_base::comp_hash comp_hash; enum entry_status { @@ -132,30 +125,30 @@ namespace __gnu_pbds erased_entry_status } __attribute__ ((packed)); - struct entry : public traits_base::stored_value_type + struct entry : public traits_base::stored_data_type { entry_status m_stat; }; - typedef typename Allocator::template rebind::other entry_allocator; + typedef typename _Alloc::template rebind::other entry_allocator; typedef typename entry_allocator::pointer entry_pointer; typedef typename entry_allocator::const_pointer const_entry_pointer; typedef typename entry_allocator::reference entry_reference; typedef typename entry_allocator::const_reference const_entry_reference; typedef typename entry_allocator::pointer entry_array; - typedef PB_DS_RANGED_PROBE_FN_C_DEC ranged_probe_fn_base; + typedef PB_DS_RANGED_PROBE_FN_C_DEC ranged_probe_fn_base; #ifdef _GLIBCXX_DEBUG - typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; -#endif + typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; +#endif - typedef PB_DS_HASH_EQ_FN_C_DEC hash_eq_fn_base; - typedef Resize_Policy resize_base; + typedef PB_DS_HASH_EQ_FN_C_DEC hash_eq_fn_base; + typedef Resize_Policy resize_base; -#define PB_DS_GEN_POS typename Allocator::size_type +#define PB_DS_GEN_POS typename _Alloc::size_type -#include +#include #include #include #include @@ -163,30 +156,30 @@ namespace __gnu_pbds #undef PB_DS_GEN_POS public: - typedef Allocator allocator_type; - typedef typename Allocator::size_type size_type; - typedef typename Allocator::difference_type difference_type; - typedef Hash_Fn hash_fn; - typedef Eq_Fn eq_fn; - typedef Probe_Fn probe_fn; - typedef Comb_Probe_Fn comb_probe_fn; - typedef Resize_Policy resize_policy; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; + typedef Hash_Fn hash_fn; + typedef Eq_Fn eq_fn; + typedef Probe_Fn probe_fn; + typedef Comb_Probe_Fn comb_probe_fn; + typedef Resize_Policy resize_policy; enum { store_hash = Store_Hash }; - typedef typename traits_base::key_type key_type; + typedef typename traits_base::key_type key_type; typedef typename traits_base::key_pointer key_pointer; - typedef typename traits_base::const_key_pointer const_key_pointer; + typedef typename traits_base::key_const_pointer key_const_pointer; typedef typename traits_base::key_reference key_reference; - typedef typename traits_base::const_key_reference const_key_reference; + typedef typename traits_base::key_const_reference key_const_reference; typedef typename traits_base::mapped_type mapped_type; typedef typename traits_base::mapped_pointer mapped_pointer; - typedef typename traits_base::const_mapped_pointer const_mapped_pointer; + typedef typename traits_base::mapped_const_pointer mapped_const_pointer; typedef typename traits_base::mapped_reference mapped_reference; - typedef typename traits_base::const_mapped_reference const_mapped_reference; + typedef typename traits_base::mapped_const_reference mapped_const_reference; typedef typename traits_base::value_type value_type; typedef typename traits_base::pointer pointer; typedef typename traits_base::const_pointer const_pointer; @@ -194,50 +187,50 @@ namespace __gnu_pbds typedef typename traits_base::const_reference const_reference; #ifdef PB_DS_DATA_TRUE_INDICATOR - typedef point_iterator_ point_iterator; -#endif + typedef point_iterator_ point_iterator; +#endif #ifdef PB_DS_DATA_FALSE_INDICATOR - typedef const_point_iterator_ point_iterator; -#endif + typedef point_const_iterator_ point_iterator; +#endif - typedef const_point_iterator_ const_point_iterator; + typedef point_const_iterator_ point_const_iterator; #ifdef PB_DS_DATA_TRUE_INDICATOR - typedef iterator_ iterator; -#endif + typedef iterator_ iterator; +#endif #ifdef PB_DS_DATA_FALSE_INDICATOR - typedef const_iterator_ iterator; -#endif + typedef const_iterator_ iterator; +#endif - typedef const_iterator_ const_iterator; + typedef const_iterator_ const_iterator; - PB_DS_CLASS_NAME(); + PB_DS_GP_HASH_NAME(); - PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&); + PB_DS_GP_HASH_NAME(const PB_DS_CLASS_C_DEC&); - PB_DS_CLASS_NAME(const Hash_Fn&); + PB_DS_GP_HASH_NAME(const Hash_Fn&); - PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&); + PB_DS_GP_HASH_NAME(const Hash_Fn&, const Eq_Fn&); - PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&); + PB_DS_GP_HASH_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&); - PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&, + PB_DS_GP_HASH_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&, const Probe_Fn&); - PB_DS_CLASS_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&, + PB_DS_GP_HASH_NAME(const Hash_Fn&, const Eq_Fn&, const Comb_Probe_Fn&, const Probe_Fn&, const Resize_Policy&); template void - copy_from_range(It first_it, It last_it); + copy_from_range(It, It); virtual - ~PB_DS_CLASS_NAME(); + ~PB_DS_GP_HASH_NAME(); void - swap(PB_DS_CLASS_C_DEC& other); + swap(PB_DS_CLASS_C_DEC&); inline size_type size() const; @@ -248,72 +241,72 @@ namespace __gnu_pbds inline bool empty() const; - Hash_Fn& + Hash_Fn& get_hash_fn(); - const Hash_Fn& + const Hash_Fn& get_hash_fn() const; - Eq_Fn& + Eq_Fn& get_eq_fn(); - const Eq_Fn& + const Eq_Fn& get_eq_fn() const; - Probe_Fn& + Probe_Fn& get_probe_fn(); - const Probe_Fn& + const Probe_Fn& get_probe_fn() const; - Comb_Probe_Fn& + Comb_Probe_Fn& get_comb_probe_fn(); - const Comb_Probe_Fn& + const Comb_Probe_Fn& get_comb_probe_fn() const; - Resize_Policy& + Resize_Policy& get_resize_policy(); - const Resize_Policy& + const Resize_Policy& get_resize_policy() const; inline std::pair insert(const_reference r_val) { - _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid(__FILE__, __LINE__);) - return insert_imp(r_val, traits_base::m_store_extra_indicator); + _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::assert_valid(__FILE__, __LINE__);) + return insert_imp(r_val, traits_base::m_store_extra_indicator); } inline mapped_reference - operator[](const_key_reference r_key) + operator[](key_const_reference r_key) { #ifdef PB_DS_DATA_TRUE_INDICATOR return subscript_imp(r_key, traits_base::m_store_extra_indicator); -#else +#else insert(r_key); - return traits_base::s_null_mapped; + return traits_base::s_null_type; #endif } inline point_iterator - find(const_key_reference r_key); + find(key_const_reference); - inline const_point_iterator - find(const_key_reference r_key) const; + inline point_const_iterator + find(key_const_reference) const; inline point_iterator find_end(); - inline const_point_iterator + inline point_const_iterator find_end() const; inline bool - erase(const_key_reference r_key); + erase(key_const_reference); template inline size_type - erase_if(Pred prd); + erase_if(Pred); void clear(); @@ -332,18 +325,18 @@ namespace __gnu_pbds #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; -#endif + assert_valid(const char*, int) const; +#endif #ifdef PB_DS_HT_MAP_TRACE_ void trace() const; -#endif +#endif private: #ifdef PB_DS_DATA_TRUE_INDICATOR friend class iterator_; -#endif +#endif friend class const_iterator_; @@ -378,10 +371,10 @@ namespace __gnu_pbds resize_imp_reassign(entry_pointer, entry_array, true_type); inline size_type - find_ins_pos(const_key_reference, false_type); + find_ins_pos(key_const_reference, false_type); inline comp_hash - find_ins_pos(const_key_reference, true_type); + find_ins_pos(key_const_reference, true_type); inline std::pair insert_imp(const_reference, false_type); @@ -399,14 +392,12 @@ namespace __gnu_pbds traits_base::m_store_extra_indicator); _GLIBCXX_DEBUG_ASSERT(m_entries[pos].m_stat != valid_entry_status); - entry* const p_e = m_entries + pos; new (&p_e->m_value) value_type(r_val); p_e->m_stat = valid_entry_status; resize_base::notify_inserted(++m_num_used_e); _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(p_e->m_value));) - _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) return &p_e->m_value; } @@ -432,18 +423,17 @@ namespace __gnu_pbds resize_base::notify_inserted(++m_num_used_e); _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(p_e->m_value));) - _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) return &p_e->m_value; } #ifdef PB_DS_DATA_TRUE_INDICATOR inline mapped_reference - subscript_imp(const_key_reference key, false_type) + subscript_imp(key_const_reference key, false_type) { _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) - const size_type pos = find_ins_pos(key, + const size_type pos = find_ins_pos(key, traits_base::m_store_extra_indicator); entry_pointer p_e = &m_entries[pos]; @@ -455,12 +445,12 @@ namespace __gnu_pbds } inline mapped_reference - subscript_imp(const_key_reference key, true_type) + subscript_imp(key_const_reference key, true_type) { _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) - comp_hash pos_hash_pair = - find_ins_pos(key, traits_base::m_store_extra_indicator); + comp_hash pos_hash_pair = find_ins_pos(key, + traits_base::m_store_extra_indicator); if (m_entries[pos_hash_pair.first].m_stat != valid_entry_status) return insert_new_imp(value_type(key, mapped_type()), @@ -472,16 +462,16 @@ namespace __gnu_pbds #endif inline pointer - find_key_pointer(const_key_reference key, false_type) + find_key_pointer(key_const_reference key, false_type) { const size_type hash = ranged_probe_fn_base::operator()(key); - size_type i; resize_base::notify_find_search_start(); // Loop until entry is found or until all possible entries accessed. - for (i = 0; i < m_num_e; ++i) + for (size_type i = 0; i < m_num_e; ++i) { - const size_type pos = ranged_probe_fn_base::operator()(key, hash, i); + const size_type pos = ranged_probe_fn_base::operator()(key, + hash, i); entry* const p_e = m_entries + pos; switch (p_e->m_stat) @@ -516,14 +506,13 @@ namespace __gnu_pbds } inline pointer - find_key_pointer(const_key_reference key, true_type) + find_key_pointer(key_const_reference key, true_type) { comp_hash pos_hash_pair = ranged_probe_fn_base::operator()(key); - size_type i; resize_base::notify_find_search_start(); // Loop until entry is found or until all possible entries accessed. - for (i = 0; i < m_num_e; ++i) + for (size_type i = 0; i < m_num_e; ++i) { const size_type pos = ranged_probe_fn_base::operator()(key, pos_hash_pair.second, i); @@ -564,19 +553,19 @@ namespace __gnu_pbds } inline bool - erase_imp(const_key_reference, true_type); + erase_imp(key_const_reference, true_type); inline bool - erase_imp(const_key_reference, false_type); + erase_imp(key_const_reference, false_type); inline void - erase_entry(entry_pointer p_e); + erase_entry(entry_pointer); #ifdef PB_DS_DATA_TRUE_INDICATOR void inc_it_state(pointer& r_p_value, size_type& r_pos) const - { inc_it_state((const_mapped_pointer& )r_p_value, r_pos); } -#endif + { inc_it_state((mapped_const_pointer& )r_p_value, r_pos); } +#endif void inc_it_state(const_pointer& r_p_value, size_type& r_pos) const @@ -627,12 +616,12 @@ namespace __gnu_pbds #ifdef _GLIBCXX_DEBUG void assert_entry_array_valid(const entry_array, false_type, - const char* file, int line) const; + const char*, int) const; void assert_entry_array_valid(const entry_array, true_type, - const char* file, int line) const; -#endif + const char*, int) const; +#endif static entry_allocator s_entry_allocator; static iterator s_end_it; @@ -644,8 +633,8 @@ namespace __gnu_pbds enum { - store_hash_ok = !Store_Hash - || !is_same::value + store_hash_ok = !Store_Hash + || !is_same::value }; PB_DS_STATIC_ASSERT(sth, store_hash_ok); @@ -666,12 +655,8 @@ namespace __gnu_pbds #undef PB_DS_CLASS_C_DEC #undef PB_DS_HASH_EQ_FN_C_DEC #undef PB_DS_RANGED_PROBE_FN_C_DEC -#undef PB_DS_TYPES_TRAITS_C_DEC +#undef PB_DS_GP_HASH_TRAITS_BASE #undef PB_DS_DEBUG_MAP_BASE_C_DEC -#undef PB_DS_CLASS_NAME -#undef PB_DS_V2F -#undef PB_DS_V2S - +#undef PB_DS_GP_HASH_NAME } // namespace detail } // namespace __gnu_pbds - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp index 423a9288e5e..8fa762b7718 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp @@ -34,9 +34,9 @@ // warranty. /** - * @file info_fn_imps.hpp + * @file gp_hash_table_map_/info_fn_imps.hpp * Contains implementations of gp_ht_map_'s entire container info related - * functions. + * functions. */ PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp index 101ce8c6be7..03731778bec 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file gp_hash_table_map_/insert_fn_imps.hpp * Contains implementations of gp_ht_map_'s insert related functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp index 95c9054f3b7..03b2c9b8ee3 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_no_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s insert related functions, * when the hash value is not stored. */ @@ -42,7 +42,7 @@ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: -find_ins_pos(const_key_reference r_key, false_type) +find_ins_pos(key_const_reference r_key, false_type) { size_type hash = ranged_probe_fn_base::operator()(r_key); size_type i; @@ -95,7 +95,7 @@ inline std::pair PB_DS_CLASS_C_DEC:: insert_imp(const_reference r_val, false_type) { - const_key_reference r_key = PB_DS_V2F(r_val); + key_const_reference r_key = PB_DS_V2F(r_val); const size_type pos = find_ins_pos(r_key, traits_base::m_store_extra_indicator); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp index a27d9d202c9..856306a7ab1 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/insert_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s find related functions, * when the hash value is stored. */ @@ -42,7 +42,7 @@ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::comp_hash PB_DS_CLASS_C_DEC:: -find_ins_pos(const_key_reference r_key, true_type) +find_ins_pos(key_const_reference r_key, true_type) { PB_DS_ASSERT_VALID((*this)) comp_hash pos_hash_pair = ranged_probe_fn_base::operator()(r_key); @@ -100,7 +100,7 @@ inline std::pair PB_DS_CLASS_C_DEC:: insert_imp(const_reference r_val, true_type) { - const_key_reference r_key = PB_DS_V2F(r_val); + key_const_reference r_key = PB_DS_V2F(r_val); comp_hash pos_hash_pair = find_ins_pos(r_key, traits_base::m_store_extra_indicator); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp index ff1f80f28fd..695b03eedc0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp @@ -34,9 +34,9 @@ // warranty. /** - * @file iterator_fn_imps.hpp + * @file gp_hash_table_map_/iterator_fn_imps.hpp * Contains implementations of gp_ht_map_'s iterators related functions, e.g., - * begin(). + * begin(). */ PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp index b1a3f7a7e67..22afeb7690f 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp @@ -34,9 +34,9 @@ // warranty. /** - * @file policy_access_fn_imps.hpp + * @file gp_hash_table_map_/policy_access_fn_imps.hpp * Contains implementations of gp_ht_map_'s policy agpess - * functions. + * functions. */ PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp index 70381f10602..76b6174efef 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp @@ -35,7 +35,7 @@ // warranty. /** - * @file resize_fn_imps.hpp + * @file gp_hash_table_map_/resize_fn_imps.hpp * Contains implementations of gp_ht_map_'s resize related functions. */ @@ -80,7 +80,7 @@ PB_DS_CLASS_C_DEC:: resize_imp(size_type new_size) { #ifdef PB_DS_REGRESSION - typename Allocator::group_adjustor adjust(m_num_e); + typename _Alloc::group_adjustor adjust(m_num_e); #endif if (new_size == m_num_e) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp index 1d2839e0ac7..8819238b6da 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp @@ -34,9 +34,9 @@ // warranty. /** - * @file resize_no_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s resize related functions, when the - * hash value is not stored. + * hash value is not stored. */ PB_DS_CLASS_T_DEC @@ -45,7 +45,7 @@ PB_DS_CLASS_C_DEC:: resize_imp_reassign(entry_pointer p_e, entry_array a_entries_resized, false_type) { - const_key_reference r_key = PB_DS_V2F(p_e->m_value); + key_const_reference r_key = PB_DS_V2F(p_e->m_value); size_type hash = ranged_probe_fn_base::operator()(r_key); size_type i; for (i = 0; i < m_num_e; ++i) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp index 765e9624b8f..c291747ed14 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp @@ -34,9 +34,9 @@ // warranty. /** - * @file resize_store_hash_fn_imps.hpp + * @file gp_hash_table_map_/resize_store_hash_fn_imps.hpp * Contains implementations of gp_ht_map_'s resize related functions, when the - * hash value is stored. + * hash value is stored. */ PB_DS_CLASS_T_DEC @@ -45,7 +45,7 @@ PB_DS_CLASS_C_DEC:: resize_imp_reassign(entry_pointer p_e, entry_array a_entries_resized, true_type) { - const_key_reference r_key = PB_DS_V2F(p_e->m_value); + key_const_reference r_key = PB_DS_V2F(p_e->m_value); size_type hash = ranged_probe_fn_base::operator()(r_key, p_e->m_hash); size_type i; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp index dac063927f6..74aeba4d63d 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file standard_policies.hpp + * @file gp_hash_table_map_/standard_policies.hpp * Contains standard policies for gp_ht_map types. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp index c3fe13c0082..0e6a7da087e 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file trace_fn_imps.hpp + * @file gp_hash_table_map_/trace_fn_imps.hpp * Contains implementations of gp_ht_map_'s trace-mode functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp index 970cfc1e553..19855ac1e8b 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp @@ -47,7 +47,7 @@ namespace __gnu_pbds { namespace detail { - template + template class probe_fn_base { protected: diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp index 24899272f8f..8567851f798 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -42,7 +42,6 @@ #ifndef PB_DS_RANGED_HASH_FN_HPP #define PB_DS_RANGED_HASH_FN_HPP -#include #include #include @@ -50,33 +49,33 @@ namespace __gnu_pbds { namespace detail { - template class ranged_hash_fn; #define PB_DS_CLASS_T_DEC \ - template #define PB_DS_CLASS_C_DEC \ - ranged_hash_fn + ranged_hash_fn /** * Specialization 1 * The client supplies a hash function and a ranged hash function, * and requests that hash values not be stored. **/ - template - class ranged_hash_fn< Key, Hash_Fn, Allocator, Comb_Hash_Fn, false> + class ranged_hash_fn< Key, Hash_Fn, _Alloc, Comb_Hash_Fn, false> : public Hash_Fn, public Comb_Hash_Fn { protected: - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef Hash_Fn hash_fn_base; typedef Comb_Hash_Fn comb_hash_fn_base; - typedef typename Allocator::template rebind< Key>::other key_allocator; - typedef typename key_allocator::const_reference const_key_reference; + typedef typename _Alloc::template rebind< Key>::other key_allocator; + typedef typename key_allocator::const_reference key_const_reference; ranged_hash_fn(size_type); @@ -91,7 +90,7 @@ namespace __gnu_pbds notify_resized(size_type); inline size_type - operator()(const_key_reference) const; + operator()(key_const_reference) const; }; PB_DS_CLASS_T_DEC @@ -130,36 +129,36 @@ namespace __gnu_pbds PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: - operator()(const_key_reference r_key) const + operator()(key_const_reference r_key) const { return (comb_hash_fn_base::operator()(hash_fn_base::operator()(r_key)));} #undef PB_DS_CLASS_T_DEC #undef PB_DS_CLASS_C_DEC #define PB_DS_CLASS_T_DEC \ - template #define PB_DS_CLASS_C_DEC \ - ranged_hash_fn + ranged_hash_fn /** * Specialization 2 * The client supplies a hash function and a ranged hash function, * and requests that hash values be stored. **/ - template - class ranged_hash_fn + class ranged_hash_fn : public Hash_Fn, public Comb_Hash_Fn { protected: - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef std::pair comp_hash; typedef Hash_Fn hash_fn_base; typedef Comb_Hash_Fn comb_hash_fn_base; - typedef typename Allocator::template rebind::other key_allocator; - typedef typename key_allocator::const_reference const_key_reference; + typedef typename _Alloc::template rebind::other key_allocator; + typedef typename key_allocator::const_reference key_const_reference; ranged_hash_fn(size_type); @@ -174,10 +173,10 @@ namespace __gnu_pbds notify_resized(size_type); inline comp_hash - operator()(const_key_reference) const; + operator()(key_const_reference) const; inline comp_hash - operator()(const_key_reference, size_type) const; + operator()(key_const_reference, size_type) const; }; PB_DS_CLASS_T_DEC @@ -216,7 +215,7 @@ namespace __gnu_pbds PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::comp_hash PB_DS_CLASS_C_DEC:: - operator()(const_key_reference r_key) const + operator()(key_const_reference r_key) const { const size_type hash = hash_fn_base::operator()(r_key); return std::make_pair(comb_hash_fn_base::operator()(hash), hash); @@ -227,9 +226,9 @@ namespace __gnu_pbds PB_DS_CLASS_C_DEC:: operator() #ifdef _GLIBCXX_DEBUG - (const_key_reference r_key, size_type hash) const + (key_const_reference r_key, size_type hash) const #else - (const_key_reference /*r_key*/, size_type hash) const + (key_const_reference /*r_key*/, size_type hash) const #endif { _GLIBCXX_DEBUG_ASSERT(hash == hash_fn_base::operator()(r_key)); @@ -240,30 +239,30 @@ namespace __gnu_pbds #undef PB_DS_CLASS_C_DEC #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ - ranged_hash_fn + ranged_hash_fn /** * Specialization 3 * The client does not supply a hash function (by specifying - * null_hash_fn as the Hash_Fn parameter), and requests that hash + * null_type as the Hash_Fn parameter), and requests that hash * values not be stored. **/ - template - class ranged_hash_fn - : public null_hash_fn, public Comb_Hash_Fn + template + class ranged_hash_fn + : public Comb_Hash_Fn { protected: - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef Comb_Hash_Fn comb_hash_fn_base; ranged_hash_fn(size_type); ranged_hash_fn(size_type, const Comb_Hash_Fn&); - ranged_hash_fn(size_type, const null_hash_fn&, const Comb_Hash_Fn&); + ranged_hash_fn(size_type, const null_type&, const Comb_Hash_Fn&); void swap(PB_DS_CLASS_C_DEC&); @@ -282,7 +281,7 @@ namespace __gnu_pbds PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: - ranged_hash_fn(size_type size, const null_hash_fn& r_null_hash_fn, + ranged_hash_fn(size_type size, const null_type& r_null_type, const Comb_Hash_Fn& r_comb_hash_fn) : Comb_Hash_Fn(r_comb_hash_fn) { } @@ -297,30 +296,30 @@ namespace __gnu_pbds #undef PB_DS_CLASS_C_DEC #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ - ranged_hash_fn + ranged_hash_fn /** * Specialization 4 * The client does not supply a hash function (by specifying - * null_hash_fn as the Hash_Fn parameter), and requests that hash + * null_type as the Hash_Fn parameter), and requests that hash * values be stored. **/ - template - class ranged_hash_fn - : public null_hash_fn, public Comb_Hash_Fn + template + class ranged_hash_fn + : public Comb_Hash_Fn { protected: - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef Comb_Hash_Fn comb_hash_fn_base; ranged_hash_fn(size_type); ranged_hash_fn(size_type, const Comb_Hash_Fn&); - ranged_hash_fn(size_type, const null_hash_fn&, const Comb_Hash_Fn&); + ranged_hash_fn(size_type, const null_type&, const Comb_Hash_Fn&); void swap(PB_DS_CLASS_C_DEC&); @@ -339,7 +338,7 @@ namespace __gnu_pbds PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: - ranged_hash_fn(size_type size, const null_hash_fn& r_null_hash_fn, + ranged_hash_fn(size_type size, const null_type& r_null_type, const Comb_Hash_Fn& r_comb_hash_fn) : Comb_Hash_Fn(r_comb_hash_fn) { } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp index ddfba9de1f2..b13de65555a 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp @@ -42,7 +42,6 @@ #ifndef PB_DS_RANGED_PROBE_FN_HPP #define PB_DS_RANGED_PROBE_FN_HPP -#include #include #include @@ -50,35 +49,35 @@ namespace __gnu_pbds { namespace detail { - template class ranged_probe_fn; #define PB_DS_CLASS_T_DEC \ - template #define PB_DS_CLASS_C_DEC \ - ranged_probe_fn + ranged_probe_fn /** * Specialization 1 * The client supplies a probe function and a ranged probe * function, and requests that hash values not be stored. **/ - template - class ranged_probe_fn : public Hash_Fn, public Comb_Probe_Fn, public Probe_Fn { protected: - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef Comb_Probe_Fn comb_probe_fn_base; typedef Hash_Fn hash_fn_base; typedef Probe_Fn probe_fn_base; - typedef typename Allocator::template rebind::other key_allocator; - typedef typename key_allocator::const_reference const_key_reference; + typedef typename _Alloc::template rebind::other key_allocator; + typedef typename key_allocator::const_reference key_const_reference; ranged_probe_fn(size_type); @@ -96,10 +95,10 @@ namespace __gnu_pbds notify_resized(size_type); inline size_type - operator()(const_key_reference) const; + operator()(key_const_reference) const; inline size_type - operator()(const_key_reference, size_type, size_type) const; + operator()(key_const_reference, size_type, size_type) const; }; PB_DS_CLASS_T_DEC @@ -146,13 +145,13 @@ namespace __gnu_pbds PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: - operator()(const_key_reference r_key) const + operator()(key_const_reference r_key) const { return comb_probe_fn_base::operator()(hash_fn_base::operator()(r_key)); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: - operator()(const_key_reference, size_type hash, size_type i) const + operator()(key_const_reference, size_type hash, size_type i) const { return comb_probe_fn_base::operator()(hash + probe_fn_base::operator()(i)); } @@ -161,30 +160,30 @@ namespace __gnu_pbds #undef PB_DS_CLASS_C_DEC #define PB_DS_CLASS_T_DEC \ - template #define PB_DS_CLASS_C_DEC \ - ranged_probe_fn + ranged_probe_fn /** * Specialization 2- The client supplies a probe function and a ranged * probe function, and requests that hash values not be stored. **/ - template - class ranged_probe_fn : public Hash_Fn, public Comb_Probe_Fn, public Probe_Fn { protected: - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef std::pair comp_hash; typedef Comb_Probe_Fn comb_probe_fn_base; typedef Hash_Fn hash_fn_base; typedef Probe_Fn probe_fn_base; - typedef typename Allocator::template rebind::other key_allocator; - typedef typename key_allocator::const_reference const_key_reference; + typedef typename _Alloc::template rebind::other key_allocator; + typedef typename key_allocator::const_reference key_const_reference; ranged_probe_fn(size_type); @@ -203,13 +202,13 @@ namespace __gnu_pbds notify_resized(size_type); inline comp_hash - operator()(const_key_reference) const; + operator()(key_const_reference) const; inline size_type - operator()(const_key_reference, size_type, size_type) const; + operator()(key_const_reference, size_type, size_type) const; inline size_type - operator()(const_key_reference, size_type) const; + operator()(key_const_reference, size_type) const; }; PB_DS_CLASS_T_DEC @@ -256,7 +255,7 @@ namespace __gnu_pbds PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::comp_hash PB_DS_CLASS_C_DEC:: - operator()(const_key_reference r_key) const + operator()(key_const_reference r_key) const { const size_type hash = hash_fn_base::operator()(r_key); return std::make_pair(comb_probe_fn_base::operator()(hash), hash); @@ -265,7 +264,7 @@ namespace __gnu_pbds PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: - operator()(const_key_reference, size_type hash, size_type i) const + operator()(key_const_reference, size_type hash, size_type i) const { return comb_probe_fn_base::operator()(hash + probe_fn_base::operator()(i)); } @@ -275,9 +274,9 @@ namespace __gnu_pbds PB_DS_CLASS_C_DEC:: operator() #ifdef _GLIBCXX_DEBUG - (const_key_reference r_key, size_type hash) const + (key_const_reference r_key, size_type hash) const #else - (const_key_reference /*r_key*/, size_type hash) const + (key_const_reference /*r_key*/, size_type hash) const #endif { _GLIBCXX_DEBUG_ASSERT(hash == hash_fn_base::operator()(r_key)); @@ -292,16 +291,16 @@ namespace __gnu_pbds * The client does not supply a hash function or probe function, * and requests that hash values not be stored. **/ - template - class ranged_probe_fn - : public Comb_Probe_Fn, public null_hash_fn, public null_probe_fn + template + class ranged_probe_fn + : public Comb_Probe_Fn { protected: - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef Comb_Probe_Fn comb_probe_fn_base; - typedef typename Allocator::template rebind::other key_allocator; - typedef typename key_allocator::const_reference const_key_reference; + typedef typename _Alloc::template rebind::other key_allocator; + typedef typename key_allocator::const_reference key_const_reference; ranged_probe_fn(size_type size) { Comb_Probe_Fn::notify_resized(size); } @@ -310,9 +309,9 @@ namespace __gnu_pbds : Comb_Probe_Fn(r_comb_probe_fn) { } - ranged_probe_fn(size_type, const null_hash_fn&, + ranged_probe_fn(size_type, const null_type&, const Comb_Probe_Fn& r_comb_probe_fn, - const null_probe_fn&) + const null_type&) : Comb_Probe_Fn(r_comb_probe_fn) { } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp index 7dcd82588c1..3ca9001e025 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp @@ -41,33 +41,28 @@ #ifndef PB_DS_SAMPLE_PROBE_FN_HPP #define PB_DS_SAMPLE_PROBE_FN_HPP -// A sample probe policy. -class sample_probe_fn +namespace __gnu_pbds { + /// A sample probe policy. + class sample_probe_fn + { + public: + typedef std::size_t size_type; -public: + // Default constructor. + sample_probe_fn(); - // Size type. - typedef std::size_t size_type; + // Copy constructor. + sample_probe_fn(const sample_probe_fn&); -public: - - // Default constructor. - sample_probe_fn(); - - // Copy constructor. - sample_probe_fn(const sample_probe_fn& other); - - // Swaps content. - inline void - swap(sample_probe_fn& other); - -protected: - - // Returns the i-th offset from the hash value of some key r_key. - inline size_type - operator()(const_key_reference r_key, size_type i) const; - -}; + // Swaps content. + inline void + swap(sample_probe_fn&); + protected: + // Returns the i-th offset from the hash value of some key r_key. + inline size_type + operator()(key_const_reference r_key, size_type i) const; + }; +} #endif // #ifndef PB_DS_SAMPLE_PROBE_FN_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp index 988f111ea20..3092376832c 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp @@ -41,37 +41,34 @@ #ifndef PB_DS_SAMPLE_RANGE_HASHING_HPP #define PB_DS_SAMPLE_RANGE_HASHING_HPP -// A sample range-hashing functor. -class sample_range_hashing +namespace __gnu_pbds { + /// A sample range-hashing functor. + class sample_range_hashing + { + public: + // Size type. + typedef std::size_t size_type; -public: + // Default constructor. + sample_range_hashing(); - // Size type. - typedef std::size_t size_type; + // Copy constructor. + sample_range_hashing(const sample_range_hashing& other); -public: + // Swaps content. + inline void + swap(sample_range_hashing& other); - // Default constructor. - sample_range_hashing(); - - // Copy constructor. - sample_range_hashing(const sample_range_hashing& other); - - // Swaps content. - inline void - swap(sample_range_hashing& other); - -protected: - - // Notifies the policy object that the container's __size has changed to size. - void - notify_resized(size_type size); - - // Transforms the __hash value hash into a ranged-hash value. - inline size_type - operator()(size_type hash) const; - -}; + protected: + // Notifies the policy object that the container's __size has + // changed to size. + void + notify_resized(size_type); + // Transforms the __hash value hash into a ranged-hash value. + inline size_type + operator()(size_type ) const; + }; +} #endif // #ifndef PB_DS_SAMPLE_RANGE_HASHING_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp index 8fa04d140e5..cc9aaab9134 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp @@ -41,37 +41,35 @@ #ifndef PB_DS_SAMPLE_RANGED_HASH_FN_HPP #define PB_DS_SAMPLE_RANGED_HASH_FN_HPP -// A sample ranged-hash functor. -class sample_ranged_hash_fn +namespace __gnu_pbds { + /// A sample ranged-hash functor. + class sample_ranged_hash_fn + { + public: + typedef std::size_t size_type; -public: + // Default constructor. + sample_ranged_hash_fn(); - // Size type. - typedef std::size_t size_type; + // Copy constructor. + sample_ranged_hash_fn(const sample_ranged_hash_fn&); -public: + // Swaps content. + inline void + swap(sample_ranged_hash_fn&); - // Default constructor. - sample_ranged_hash_fn(); + protected: - // Copy constructor. - sample_ranged_hash_fn(const sample_ranged_hash_fn& other); + // Notifies the policy object that the container's __size has + // changed to size. + void + notify_resized(size_type); - // Swaps content. - inline void - swap(sample_ranged_hash_fn& other); - -protected: - - // Notifies the policy object that the container's __size has changed to size. - void - notify_resized(size_type size); - - // Transforms r_key into a position within the table. - inline size_type - operator()(const_key_reference r_key) const; - -}; + // Transforms key_const_reference into a position within the table. + inline size_type + operator()(key_const_reference) const; + }; +} #endif // #ifndef PB_DS_SAMPLE_RANGED_HASH_FN_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp index 2bcfdf51a54..b362f3d354f 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp @@ -41,37 +41,37 @@ #ifndef PB_DS_SAMPLE_RANGED_PROBE_FN_HPP #define PB_DS_SAMPLE_RANGED_PROBE_FN_HPP -// A sample ranged-probe functor. -class sample_ranged_probe_fn +namespace __gnu_pbds { + /// A sample ranged-probe functor. + class sample_ranged_probe_fn + { + public: + typedef std::size_t size_type; -public: + // Default constructor. + sample_ranged_probe_fn(); - // Size type. - typedef std::size_t size_type; + // Copy constructor. + sample_ranged_probe_fn(const sample_ranged_probe_fn&); -public: + // Swaps content. + inline void + swap(sample_ranged_probe_fn&); - // Default constructor. - sample_ranged_probe_fn(); + protected: - // Copy constructor. - sample_ranged_probe_fn(const sample_ranged_probe_fn& other); + // Notifies the policy object that the container's __size has + // changed to size. + void + notify_resized(size_type); - // Swaps content. - inline void - swap(sample_ranged_probe_fn& other); - -protected: - - // Notifies the policy object that the container's __size has changed to size. - void - notify_resized(size_type size); - - // Transforms the const key reference r_key into the i-th position within the table. This method is called for each collision within the probe sequence. - inline size_type - operator()(const_key_reference r_key, std::size_t hash, size_type i) const; - -}; + // Transforms the const key reference r_key into the i-th position + // within the table. This method is called for each collision within + // the probe sequence. + inline size_type + operator()(key_const_reference, std::size_t, size_type) const; + }; +} #endif // #ifndef PB_DS_SAMPLE_RANGED_PROBE_FN_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp index 2448f3c7988..e51abe17e06 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp @@ -34,65 +34,61 @@ // warranty. /** - * @file const_iterator.hpp + * @file left_child_next_sibling_heap_/const_iterator.hpp * Contains an iterator class returned by the table's const find and insert - * methods. + * methods. */ #ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_CONST_ITERATOR_HPP #define PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_CONST_ITERATOR_HPP -#include +#include #include namespace __gnu_pbds { namespace detail { +#define PB_DS_CLASS_C_DEC \ + left_child_next_sibling_heap_const_iterator_ -#define PB_DS_CLASS_C_DEC \ - left_child_next_sibling_heap_const_iterator_ +#define PB_DS_BASIC_HEAP_CIT_BASE \ + left_child_next_sibling_heap_node_point_const_iterator_ -#define PB_DS_BASE_C_DEC \ - left_child_next_sibling_heap_node_const_point_iterator_ - - // Const point-type iterator. - template - class left_child_next_sibling_heap_const_iterator_ : public PB_DS_BASE_C_DEC + /// Const point-type iterator. + template + class left_child_next_sibling_heap_const_iterator_ + : public PB_DS_BASIC_HEAP_CIT_BASE { - private: - typedef typename PB_DS_BASE_C_DEC::node_pointer node_pointer; - - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_BASIC_HEAP_CIT_BASE base_type; + typedef typename base_type::node_pointer node_pointer; public: - // Category. - typedef std::forward_iterator_tag iterator_category; + typedef std::forward_iterator_tag iterator_category; // Difference type. - typedef typename Allocator::difference_type difference_type; + typedef typename _Alloc::difference_type difference_type; // Iterator's value type. - typedef typename base_type::value_type value_type; + typedef typename base_type::value_type value_type; // Iterator's pointer type. - typedef typename base_type::pointer pointer; + typedef typename base_type::pointer pointer; // Iterator's const pointer type. - typedef typename base_type::const_pointer const_pointer; + typedef typename base_type::const_pointer const_pointer; // Iterator's reference type. - typedef typename base_type::reference reference; + typedef typename base_type::reference reference; // Iterator's const reference type. - typedef typename base_type::const_reference const_reference; - - public: + typedef typename base_type::const_reference const_reference; inline - left_child_next_sibling_heap_const_iterator_(node_pointer p_nd) : base_type(p_nd) + left_child_next_sibling_heap_const_iterator_(node_pointer p_nd) + : base_type(p_nd) { } // Default constructor. @@ -115,7 +111,7 @@ namespace __gnu_pbds operator!=(const PB_DS_CLASS_C_DEC& other) const { return (base_type::m_p_nd != other.m_p_nd); } - inline PB_DS_CLASS_C_DEC& + inline PB_DS_CLASS_C_DEC& operator++() { _GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd != 0); @@ -147,16 +143,17 @@ namespace __gnu_pbds { node_pointer p_next = base_type::m_p_nd; base_type::m_p_nd = base_type::m_p_nd->m_p_prev_or_parent; - if (base_type::m_p_nd == 0 || base_type::m_p_nd->m_p_l_child == p_next) + if (base_type::m_p_nd == 0 + || base_type::m_p_nd->m_p_l_child == p_next) return; } } }; #undef PB_DS_CLASS_C_DEC -#undef PB_DS_BASE_C_DEC +#undef PB_DS_BASIC_HEAP_CIT_BASE } // namespace detail } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp index 5bec709fb50..5cec97b3273 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp @@ -35,7 +35,7 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp * Contains an implementation class for left_child_next_sibling_heap_. */ @@ -49,7 +49,7 @@ PB_DS_CLASS_C_DEC::s_no_throw_copies_ind; PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -left_child_next_sibling_heap_() : +left_child_next_sibling_heap() : m_p_root(0), m_size(0) { @@ -58,7 +58,7 @@ left_child_next_sibling_heap_() : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -left_child_next_sibling_heap_(const Cmp_Fn& r_cmp_fn) : +left_child_next_sibling_heap(const Cmp_Fn& r_cmp_fn) : Cmp_Fn(r_cmp_fn), m_p_root(0), m_size(0) @@ -68,7 +68,7 @@ left_child_next_sibling_heap_(const Cmp_Fn& r_cmp_fn) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -left_child_next_sibling_heap_(const PB_DS_CLASS_C_DEC& other) +left_child_next_sibling_heap(const PB_DS_CLASS_C_DEC& other) : Cmp_Fn(other), m_p_root(0), m_size(0) { m_size = other.m_size; @@ -102,7 +102,7 @@ value_swap(PB_DS_CLASS_C_DEC& other) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~left_child_next_sibling_heap_() +~left_child_next_sibling_heap() { clear(); } @@ -110,7 +110,7 @@ PB_DS_CLASS_C_DEC:: PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -recursive_copy_node(const_node_pointer p_nd) +recursive_copy_node(node_const_pointer p_nd) { if (p_nd == 0) return (0); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp index 77c23c1eb36..500fac11207 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file left_child_next_sibling_heap_/debug_fn_imps.hpp * Contains an implementation class for left_child_next_sibling_heap_. */ @@ -56,7 +56,7 @@ assert_valid(const char* __file, int __line) const PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -assert_node_consistent(const_node_pointer p_nd, bool single_link, +assert_node_consistent(node_const_pointer p_nd, bool single_link, const char* __file, int __line) const { if (p_nd == 0) @@ -73,10 +73,10 @@ assert_node_consistent(const_node_pointer p_nd, bool single_link, if (p_nd->m_p_l_child == 0) return; - const_node_pointer p_child = p_nd->m_p_l_child; + node_const_pointer p_child = p_nd->m_p_l_child; while (p_child != 0) { - const_node_pointer p_next_child = p_child->m_p_next_sibling; + node_const_pointer p_next_child = p_child->m_p_next_sibling; PB_DS_DEBUG_VERIFY(!Cmp_Fn::operator()(p_nd->m_value, p_child->m_value)); p_child = p_next_child; } @@ -102,13 +102,13 @@ assert_size(const char* __file, int __line) const PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: -size_under_node(const_node_pointer p_nd) +size_under_node(node_const_pointer p_nd) { return 1 + size_from_node(p_nd->m_p_l_child); } PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: -size_from_node(const_node_pointer p_nd) +size_from_node(node_const_pointer p_nd) { size_type ret = 0; while (p_nd != 0) @@ -122,10 +122,10 @@ size_from_node(const_node_pointer p_nd) PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: -degree(const_node_pointer p_nd) +degree(node_const_pointer p_nd) { size_type ret = 0; - const_node_pointer p_child = p_nd->m_p_l_child; + node_const_pointer p_child = p_nd->m_p_l_child; while (p_child != 0) { ++ret; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp index 056cc38fc94..c7d5602318b 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file left_child_next_sibling_heap_/erase_fn_imps.hpp * Contains an implementation class for left_child_next_sibling_heap_. */ @@ -92,7 +92,7 @@ to_linked_list() p_cur = p_cur->m_p_next_sibling; #ifdef _GLIBCXX_DEBUG - const_node_pointer p_counter = m_p_root; + node_const_pointer p_counter = m_p_root; size_type count = 0; while (p_counter != 0) { diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp index 75e6561c393..3535a0351aa 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file info_fn_imps.hpp + * @file left_child_next_sibling_heap_/info_fn_imps.hpp * Contains an implementation class for left_child_next_sibling_heap_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp index 9ffc912719c..e5031c8d9d0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file left_child_next_sibling_heap_/insert_fn_imps.hpp * Contains an implementation class for left_child_next_sibling_heap_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp index ec09cf641bd..40b0a17c78b 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file iterators_fn_imps.hpp + * @file left_child_next_sibling_heap_/iterators_fn_imps.hpp * Contains an implementation class for left_child_next_sibling_heap_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp index d3115463810..b6f3b51710b 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file left_child_next_sibling_heap_.hpp + * @file left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp * Contains an implementation class for a basic heap. */ @@ -49,159 +49,102 @@ #include #include #include -#include +#include #include #ifdef PB_DS_LC_NS_HEAP_TRACE_ #include -#endif +#endif #include namespace __gnu_pbds { namespace detail { - #ifdef _GLIBCXX_DEBUG -#define PB_DS_CLASS_T_DEC \ - template< \ - typename Value_Type, \ - class Cmp_Fn, \ - typename Node_Metadata, \ - class Allocator, \ - bool Single_Link_Roots> -#else -#define PB_DS_CLASS_T_DEC \ - template< \ - typename Value_Type, \ - class Cmp_Fn, \ - typename Node_Metadata, \ - class Allocator> -#endif +#define PB_DS_CLASS_T_DEC \ + template -#ifdef _GLIBCXX_DEBUG -#define PB_DS_CLASS_C_DEC \ - left_child_next_sibling_heap_< \ - Value_Type, \ - Cmp_Fn, \ - Node_Metadata, \ - Allocator, \ - Single_Link_Roots> -#else -#define PB_DS_CLASS_C_DEC \ - left_child_next_sibling_heap_< \ - Value_Type, \ - Cmp_Fn, \ - Node_Metadata, \ - Allocator> -#endif +#define PB_DS_CLASS_C_DEC \ + left_child_next_sibling_heap +#else +#define PB_DS_CLASS_T_DEC \ + template - /** - * class description = "Base class for some types of h3ap$"> - **/ -#ifdef _GLIBCXX_DEBUG +#define PB_DS_CLASS_C_DEC \ + left_child_next_sibling_heap +#endif + + /// Base class for a basic heap. template -#else - template -#endif - class left_child_next_sibling_heap_ : public Cmp_Fn + typename _Alloc +#ifdef _GLIBCXX_DEBUG + ,bool Single_Link_Roots> +#else + > +#endif + class left_child_next_sibling_heap : public Cmp_Fn { - protected: typedef - typename Allocator::template rebind< - left_child_next_sibling_heap_node_< - Value_Type, - Node_Metadata, - Allocator> >::other + typename _Alloc::template rebind< + left_child_next_sibling_heap_node_ >::other node_allocator; - typedef typename node_allocator::value_type node; - - typedef typename node_allocator::pointer node_pointer; - - typedef typename node_allocator::const_pointer const_node_pointer; - + typedef typename node_allocator::value_type node; + typedef typename node_allocator::pointer node_pointer; + typedef typename node_allocator::const_pointer node_const_pointer; typedef Node_Metadata node_metadata; - - typedef std::pair< node_pointer, node_pointer> node_pointer_pair; + typedef std::pair< node_pointer, node_pointer> node_pointer_pair; private: - typedef cond_dealtor< node, Allocator> cond_dealtor_t; + typedef cond_dealtor< node, _Alloc> cond_dealtor_t; enum { simple_value = is_simple::value }; - typedef integral_constant no_throw_copies_t; + typedef integral_constant no_throw_copies_t; + typedef typename _Alloc::template rebind __rebind_v; public: + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; + typedef Value_Type value_type; - typedef typename Allocator::size_type size_type; + typedef typename __rebind_v::other::pointer pointer; + typedef typename __rebind_v::other::const_pointer const_pointer; + typedef typename __rebind_v::other::reference reference; + typedef typename __rebind_v::other::const_reference const_reference; - typedef typename Allocator::difference_type difference_type; + typedef left_child_next_sibling_heap_node_point_const_iterator_ + point_const_iterator; - typedef Value_Type value_type; + typedef point_const_iterator point_iterator; - typedef - typename Allocator::template rebind< - value_type>::other::pointer - pointer; - - typedef - typename Allocator::template rebind< - value_type>::other::const_pointer - const_pointer; - - typedef - typename Allocator::template rebind< - value_type>::other::reference - reference; - - typedef - typename Allocator::template rebind< - value_type>::other::const_reference - const_reference; - - typedef - left_child_next_sibling_heap_node_const_point_iterator_< - node, - Allocator> - const_point_iterator; - - typedef const_point_iterator point_iterator; - - typedef - left_child_next_sibling_heap_const_iterator_< - node, - Allocator> + typedef left_child_next_sibling_heap_const_iterator_ const_iterator; - typedef const_iterator iterator; - - typedef Cmp_Fn cmp_fn; - - typedef Allocator allocator_type; + typedef const_iterator iterator; + typedef Cmp_Fn cmp_fn; + typedef _Alloc allocator_type; public: - left_child_next_sibling_heap_(); - - left_child_next_sibling_heap_(const Cmp_Fn& r_cmp_fn); - - left_child_next_sibling_heap_(const PB_DS_CLASS_C_DEC& other); + left_child_next_sibling_heap(); + left_child_next_sibling_heap(const Cmp_Fn&); + left_child_next_sibling_heap(const left_child_next_sibling_heap&); void - swap(PB_DS_CLASS_C_DEC& other); + swap(PB_DS_CLASS_C_DEC&); - ~left_child_next_sibling_heap_(); + ~left_child_next_sibling_heap(); inline bool empty() const; @@ -212,10 +155,10 @@ namespace __gnu_pbds inline size_type max_size() const; - Cmp_Fn& + Cmp_Fn& get_cmp_fn(); - const Cmp_Fn& + const Cmp_Fn& get_cmp_fn() const; inline iterator @@ -236,100 +179,97 @@ namespace __gnu_pbds #ifdef PB_DS_LC_NS_HEAP_TRACE_ void trace() const; -#endif +#endif protected: inline node_pointer - get_new_node_for_insert(const_reference r_val); + get_new_node_for_insert(const_reference); inline static void - make_child_of(node_pointer p_nd, node_pointer p_new_parent); + make_child_of(node_pointer, node_pointer); void - value_swap(PB_DS_CLASS_C_DEC& other); + value_swap(left_child_next_sibling_heap&); inline static node_pointer - parent(node_pointer p_nd); + parent(node_pointer); inline void - swap_with_parent(node_pointer p_nd, node_pointer p_parent); + swap_with_parent(node_pointer, node_pointer); void - bubble_to_top(node_pointer p_nd); + bubble_to_top(node_pointer); inline void - actual_erase_node(node_pointer p_nd); + actual_erase_node(node_pointer); void - clear_imp(node_pointer p_nd); + clear_imp(node_pointer); void to_linked_list(); template node_pointer - prune(Pred pred); + prune(Pred); #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; + assert_valid(const char*, int) const; void - assert_node_consistent(const_node_pointer p_nd, bool single_link, - const char* file, int line) const; + assert_node_consistent(node_const_pointer, bool, const char*, int) const; static size_type - size_under_node(const_node_pointer p_nd); + size_under_node(node_const_pointer); static size_type - degree(const_node_pointer p_nd); -#endif + degree(node_const_pointer); +#endif #ifdef PB_DS_LC_NS_HEAP_TRACE_ static void - trace_node(const_node_pointer, size_type level); -#endif - - protected: - node_pointer m_p_root; - - size_type m_size; + trace_node(node_const_pointer, size_type); +#endif private: #ifdef _GLIBCXX_DEBUG void - assert_iterators(const char* file, int line) const; + assert_iterators(const char*, int) const; void - assert_size(const char* file, int line) const; + assert_size(const char*, int) const; static size_type - size_from_node(const_node_pointer p_nd); -#endif + size_from_node(node_const_pointer); +#endif node_pointer - recursive_copy_node(const_node_pointer p_nd); + recursive_copy_node(node_const_pointer); inline node_pointer - get_new_node_for_insert(const_reference r_val, false_type); + get_new_node_for_insert(const_reference, false_type); inline node_pointer - get_new_node_for_insert(const_reference r_val, true_type); + get_new_node_for_insert(const_reference, true_type); #ifdef PB_DS_LC_NS_HEAP_TRACE_ template static void - trace_node_metadata(const_node_pointer p_nd, type_to_type); + trace_node_metadata(node_const_pointer, type_to_type); static void - trace_node_metadata(const_node_pointer, type_to_type); -#endif + trace_node_metadata(node_const_pointer, + type_to_type); +#endif + protected: + node_pointer m_p_root; + size_type m_size; private: - static node_allocator s_node_allocator; - - static no_throw_copies_t s_no_throw_copies_ind; + static node_allocator s_node_allocator; + static no_throw_copies_t s_no_throw_copies_ind; }; #include @@ -347,4 +287,4 @@ namespace __gnu_pbds } // namespace detail } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp index 1cdfe288391..d74b86c42d9 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp @@ -34,87 +34,54 @@ // warranty. /** - * @file node.hpp + * @file left_child_next_sibling_heap_/node.hpp * Contains an implementation struct for this type of heap's node. */ #ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_NODE_HPP #define PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_NODE_HPP -#include - namespace __gnu_pbds { namespace detail { - - template + /// Node. + template struct left_child_next_sibling_heap_node_ { private: - typedef - left_child_next_sibling_heap_node_< - Value_Type, - Metadata_Type, - Allocator> - this_type; + typedef left_child_next_sibling_heap_node_<_Value, _Metadata, _Alloc> this_type; public: - typedef typename Allocator::size_type size_type; + typedef _Value value_type; + typedef typename _Alloc::size_type size_type; + typedef _Metadata metadata_type; - typedef - typename Allocator::template rebind< - this_type>::other::pointer - node_pointer; + typedef typename _Alloc::template rebind::other::pointer node_pointer; - typedef Value_Type value_type; - - typedef Metadata_Type metadata_type; - - public: - value_type m_value; - - metadata_type m_metadata; - - node_pointer m_p_l_child; - - node_pointer m_p_next_sibling; - - node_pointer m_p_prev_or_parent; + value_type m_value; + metadata_type m_metadata; + node_pointer m_p_l_child; + node_pointer m_p_next_sibling; + node_pointer m_p_prev_or_parent; }; - template - struct left_child_next_sibling_heap_node_< - Value_Type, - null_left_child_next_sibling_heap_node_metadata, - Allocator> + template + struct left_child_next_sibling_heap_node_<_Value, null_type, _Alloc> { private: - typedef - left_child_next_sibling_heap_node_< - Value_Type, - null_left_child_next_sibling_heap_node_metadata, - Allocator> - this_type; + typedef left_child_next_sibling_heap_node_<_Value, null_type, _Alloc> this_type; public: - typedef typename Allocator::size_type size_type; + typedef _Value value_type; + typedef typename _Alloc::size_type size_type; - typedef - typename Allocator::template rebind< - this_type>::other::pointer - node_pointer; + typedef typename _Alloc::template rebind::other::pointer node_pointer; - typedef Value_Type value_type; - - public: - value_type m_value; - - node_pointer m_p_l_child; - - node_pointer m_p_next_sibling; - - node_pointer m_p_prev_or_parent; + value_type m_value; + node_pointer m_p_l_child; + node_pointer m_p_next_sibling; + node_pointer m_p_prev_or_parent; }; } // namespace detail diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp similarity index 82% rename from libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp rename to libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp index 712a76fb7c0..5b29254f6aa 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp @@ -34,9 +34,9 @@ // warranty. /** - * @file const_point_iterator.hpp + * @file left_child_next_sibling_heap_/point_const_iterator.hpp * Contains an iterator class returned by the table's const find and insert - * methods. + * methods. */ #ifndef PB_DS_LEFT_CHILD_NEXT_SIBLING_HEAP_CONST_FIND_ITERATOR_HPP @@ -51,18 +51,18 @@ namespace __gnu_pbds { #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ - left_child_next_sibling_heap_node_const_point_iterator_ + left_child_next_sibling_heap_node_point_const_iterator_ - // Const point-type iterator. - template - class left_child_next_sibling_heap_node_const_point_iterator_ + /// Const point-type iterator. + template + class left_child_next_sibling_heap_node_point_const_iterator_ { protected: - typedef typename Allocator::template rebind::other::pointer node_pointer; + typedef typename _Alloc::template rebind::other::pointer node_pointer; public: @@ -77,42 +77,42 @@ namespace __gnu_pbds // Iterator's pointer type. typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< value_type>::other::pointer pointer; // Iterator's const pointer type. typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< value_type>::other::const_pointer const_pointer; // Iterator's reference type. typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< value_type>::other::reference reference; // Iterator's const reference type. typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< value_type>::other::const_reference const_reference; public: inline - left_child_next_sibling_heap_node_const_point_iterator_(node_pointer p_nd) : m_p_nd(p_nd) + left_child_next_sibling_heap_node_point_const_iterator_(node_pointer p_nd) : m_p_nd(p_nd) { } // Default constructor. inline - left_child_next_sibling_heap_node_const_point_iterator_() : m_p_nd(0) + left_child_next_sibling_heap_node_point_const_iterator_() : m_p_nd(0) { } // Copy constructor. inline - left_child_next_sibling_heap_node_const_point_iterator_(const PB_DS_CLASS_C_DEC& other) : m_p_nd(other.m_p_nd) + left_child_next_sibling_heap_node_point_const_iterator_(const PB_DS_CLASS_C_DEC& other) : m_p_nd(other.m_p_nd) { } // Access. diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp index 350b4d08af3..b2d0d8527d7 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file policy_access_fn_imps.hpp + * @file left_child_next_sibling_heap_/policy_access_fn_imps.hpp * Contains an implementation class for left_child_next_sibling_heap_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp index d42100212e4..28ee13e9122 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file trace_fn_imps.hpp + * @file left_child_next_sibling_heap_/trace_fn_imps.hpp * Contains an implementation class for left_child_next_sibling_heap_. */ @@ -46,16 +46,14 @@ PB_DS_CLASS_C_DEC:: trace() const { std::cerr << std::endl; - trace_node(m_p_root, 0); - std::cerr << std::endl; } PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -trace_node(const_node_pointer p_nd, size_type level) +trace_node(node_const_pointer p_nd, size_type level) { while (p_nd != 0) { @@ -68,11 +66,8 @@ trace_node(const_node_pointer p_nd, size_type level) " left = " << p_nd->m_p_l_child << " "; trace_node_metadata(p_nd, type_to_type()); - std::cerr << p_nd->m_value << std::endl; - trace_node(p_nd->m_p_l_child, level + 1); - p_nd = p_nd->m_p_next_sibling; } } @@ -81,7 +76,7 @@ PB_DS_CLASS_T_DEC template void PB_DS_CLASS_C_DEC:: -trace_node_metadata(const_node_pointer p_nd, type_to_type) +trace_node_metadata(node_const_pointer p_nd, type_to_type) { std::cerr << "(" << p_nd->m_metadata << ") "; } @@ -89,7 +84,7 @@ trace_node_metadata(const_node_pointer p_nd, type_to_type) PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -trace_node_metadata(const_node_pointer, type_to_type) +trace_node_metadata(node_const_pointer, type_to_type) { } #endif // #ifdef PB_DS_LC_NS_HEAP_TRACE_ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp index 17ddaaf3e69..8ec39a6acef 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp @@ -35,8 +35,7 @@ // warranty. /** - * @file constructor_destructor_fn_imps.hpp - * Contains implementations of PB_DS_CLASS_NAME. + * @file list_update_map_/constructor_destructor_fn_imps.hpp */ PB_DS_CLASS_T_DEC @@ -47,7 +46,7 @@ PB_DS_CLASS_T_DEC Eq_Fn PB_DS_CLASS_C_DEC::s_eq_fn; PB_DS_CLASS_T_DEC -null_lu_metadata PB_DS_CLASS_C_DEC::s_null_lu_metadata; +null_type PB_DS_CLASS_C_DEC::s_null_type; PB_DS_CLASS_T_DEC Update_Policy PB_DS_CLASS_C_DEC::s_update_policy; @@ -68,13 +67,13 @@ copy_from_range(It first_it, It last_it) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME() : m_p_l(0) +PB_DS_LU_NAME() : m_p_l(0) { PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC template PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(It first_it, It last_it) : m_p_l(0) +PB_DS_LU_NAME(It first_it, It last_it) : m_p_l(0) { copy_from_range(first_it, last_it); PB_DS_ASSERT_VALID((*this)); @@ -82,19 +81,19 @@ PB_DS_CLASS_NAME(It first_it, It last_it) : m_p_l(0) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) : +PB_DS_LU_NAME(const PB_DS_CLASS_C_DEC& other) : m_p_l(0) { __try { for (const_iterator it = other.begin(); it != other.end(); ++it) - { - entry_pointer p_l = allocate_new_entry(*it, - PB_DS_TYPES_TRAITS_C_DEC::m_no_throw_copies_indicator); + { + entry_pointer p_l = allocate_new_entry(*it, + traits_base::m_no_throw_copies_indicator); p_l->m_p_next = m_p_l; m_p_l = p_l; - } + } } __catch(...) { @@ -134,6 +133,5 @@ deallocate_all() PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~PB_DS_CLASS_NAME() +~PB_DS_LU_NAME() { deallocate_all(); } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp index 98391802945..510c9050015 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file list_update_map_/debug_fn_imps.hpp * Contains implementations of cc_ht_map_'s debug-mode functions. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp index 021ef50d870..f1e440a72a0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file entry_metadata_base.hpp + * @file list_update_map_/entry_metadata_base.hpp * Contains an implementation for a list update map. */ @@ -52,7 +52,7 @@ namespace __gnu_pbds }; template<> - struct lu_map_entry_metadata_base + struct lu_map_entry_metadata_base { }; } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp index dd60ea6cdce..bbd7b8355ea 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp @@ -34,14 +34,14 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file list_update_map_/erase_fn_imps.hpp * Contains implementations of lu_map_. */ PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: -erase(const_key_reference r_key) +erase(key_const_reference r_key) { PB_DS_ASSERT_VALID((*this)) if (m_p_l == 0) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp index 9164b92255e..0d5f98aaf7e 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp @@ -34,14 +34,14 @@ // warranty. /** - * @file find_fn_imps.hpp + * @file list_update_map_/find_fn_imps.hpp * Contains implementations of lu_map_. */ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::entry_pointer PB_DS_CLASS_C_DEC:: -find_imp(const_key_reference r_key) const +find_imp(key_const_reference r_key) const { if (m_p_l == 0) return 0; @@ -85,6 +85,6 @@ apply_update(entry_pointer p_l, type_to_type) PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: -apply_update(entry_pointer, type_to_type) -{ return s_update_policy(s_null_lu_metadata); } +apply_update(entry_pointer, type_to_type) +{ return s_update_policy(s_null_type); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp index 31f743cf18b..294d73a0187 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file info_fn_imps.hpp + * @file list_update_map_/info_fn_imps.hpp * Contains implementations of lu_map_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp index 2677683f8df..9c250df49a1 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file list_update_map_/insert_fn_imps.hpp * Contains implementations of lu_map_. */ @@ -101,6 +101,6 @@ init_entry_metadata(entry_pointer p_l, type_to_type) PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -init_entry_metadata(entry_pointer, type_to_type) +init_entry_metadata(entry_pointer, type_to_type) { } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp index ac3163858f1..2a1aa6c9dd0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file iterators_fn_imps.hpp + * @file list_update_map_/iterators_fn_imps.hpp * Contains implementations of lu_map_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp index 329f2fa780a..9e48f17f7cd 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file lu_map_.hpp + * @file list_update_map_/lu_map_.hpp * Contains a list update map. */ @@ -47,82 +47,70 @@ #include #ifdef _GLIBCXX_DEBUG #include -#endif +#endif #ifdef PB_DS_LU_MAP_TRACE_ #include -#endif +#endif #include namespace __gnu_pbds { namespace detail { -#define PB_DS_CLASS_T_DEC \ - template - #ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_CLASS_NAME lu_map_data_ -#endif +#define PB_DS_LU_NAME lu_map +#endif #ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_CLASS_NAME lu_map_no_data_ -#endif +#define PB_DS_LU_NAME lu_set +#endif + +#define PB_DS_CLASS_T_DEC \ + template #define PB_DS_CLASS_C_DEC \ - PB_DS_CLASS_NAME + PB_DS_LU_NAME -#define PB_DS_TYPES_TRAITS_C_DEC \ - types_traits +#define PB_DS_LU_TRAITS_BASE \ + types_traits #ifdef _GLIBCXX_DEBUG #define PB_DS_DEBUG_MAP_BASE_C_DEC \ debug_map_base::other::const_reference> -#endif + typename _Alloc::template rebind::other::const_reference> +#endif -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_V2F(X) (X).first -#define PB_DS_V2S(X) (X).second -#define PB_DS_EP2VP(X)& ((X)->m_value) -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_V2F(X) (X) -#define PB_DS_V2S(X) Mapped_Data() -#define PB_DS_EP2VP(X)& ((X)->m_value.first) -#endif - - /* Skip to the lu, my darling. */ - // list-based (with updates) associative container. + /// list-based (with updates) associative container. + /// Skip to the lu, my darling. template - class PB_DS_CLASS_NAME : + typename Eq_Fn, + typename _Alloc, + typename Update_Policy> + class PB_DS_LU_NAME : #ifdef _GLIBCXX_DEBUG protected PB_DS_DEBUG_MAP_BASE_C_DEC, -#endif - public PB_DS_TYPES_TRAITS_C_DEC +#endif + public PB_DS_LU_TRAITS_BASE { private: - typedef PB_DS_TYPES_TRAITS_C_DEC traits_base; + typedef PB_DS_LU_TRAITS_BASE traits_base; - struct entry + struct entry : public lu_map_entry_metadata_base { typename traits_base::value_type m_value; - typename Allocator::template rebind::other::pointer m_p_next; + typename _Alloc::template rebind::other::pointer m_p_next; }; - typedef typename Allocator::template rebind::other entry_allocator; + typedef typename _Alloc::template rebind::other entry_allocator; typedef typename entry_allocator::pointer entry_pointer; typedef typename entry_allocator::const_pointer const_entry_pointer; typedef typename entry_allocator::reference entry_reference; typedef typename entry_allocator::const_reference const_entry_reference; - typedef typename Allocator::template rebind::other entry_pointer_allocator; + typedef typename _Alloc::template rebind::other entry_pointer_allocator; typedef typename entry_pointer_allocator::pointer entry_pointer_array; typedef typename traits_base::value_type value_type_; @@ -133,7 +121,7 @@ namespace __gnu_pbds #define PB_DS_GEN_POS entry_pointer -#include +#include #include #include #include @@ -143,27 +131,27 @@ namespace __gnu_pbds #ifdef _GLIBCXX_DEBUG typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; -#endif +#endif - typedef cond_dealtor cond_dealtor_t; + typedef cond_dealtor cond_dealtor_t; public: - typedef Allocator allocator_type; - typedef typename Allocator::size_type size_type; - typedef typename Allocator::difference_type difference_type; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; typedef Eq_Fn eq_fn; typedef Update_Policy update_policy; typedef typename Update_Policy::metadata_type update_metadata; typedef typename traits_base::key_type key_type; typedef typename traits_base::key_pointer key_pointer; - typedef typename traits_base::const_key_pointer const_key_pointer; + typedef typename traits_base::key_const_pointer key_const_pointer; typedef typename traits_base::key_reference key_reference; - typedef typename traits_base::const_key_reference const_key_reference; + typedef typename traits_base::key_const_reference key_const_reference; typedef typename traits_base::mapped_type mapped_type; typedef typename traits_base::mapped_pointer mapped_pointer; - typedef typename traits_base::const_mapped_pointer const_mapped_pointer; + typedef typename traits_base::mapped_const_pointer mapped_const_pointer; typedef typename traits_base::mapped_reference mapped_reference; - typedef typename traits_base::const_mapped_reference const_mapped_reference; + typedef typename traits_base::mapped_const_reference mapped_const_reference; typedef typename traits_base::value_type value_type; typedef typename traits_base::pointer pointer; typedef typename traits_base::const_pointer const_pointer; @@ -171,35 +159,35 @@ namespace __gnu_pbds typedef typename traits_base::const_reference const_reference; #ifdef PB_DS_DATA_TRUE_INDICATOR - typedef point_iterator_ point_iterator; -#endif + typedef point_iterator_ point_iterator; +#endif #ifdef PB_DS_DATA_FALSE_INDICATOR - typedef const_point_iterator_ point_iterator; -#endif + typedef point_const_iterator_ point_iterator; +#endif - typedef const_point_iterator_ const_point_iterator; + typedef point_const_iterator_ point_const_iterator; #ifdef PB_DS_DATA_TRUE_INDICATOR - typedef iterator_ iterator; -#endif + typedef iterator_ iterator; +#endif #ifdef PB_DS_DATA_FALSE_INDICATOR - typedef const_iterator_ iterator; -#endif + typedef const_iterator_ iterator; +#endif - typedef const_iterator_ const_iterator; + typedef const_iterator_ const_iterator; public: - PB_DS_CLASS_NAME(); + PB_DS_LU_NAME(); - PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&); + PB_DS_LU_NAME(const PB_DS_CLASS_C_DEC&); virtual - ~PB_DS_CLASS_NAME(); + ~PB_DS_LU_NAME(); template - PB_DS_CLASS_NAME(It first_it, It last_it); + PB_DS_LU_NAME(It, It); void swap(PB_DS_CLASS_C_DEC&); @@ -214,38 +202,38 @@ namespace __gnu_pbds empty() const; inline mapped_reference - operator[](const_key_reference r_key) + operator[](key_const_reference r_key) { #ifdef PB_DS_DATA_TRUE_INDICATOR _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) return insert(std::make_pair(r_key, mapped_type())).first->second; -#else +#else insert(r_key); - return traits_base::s_null_mapped; -#endif + return traits_base::s_null_type; +#endif } inline std::pair insert(const_reference); inline point_iterator - find(const_key_reference r_key) + find(key_const_reference r_key) { _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) entry_pointer p_e = find_imp(r_key); return point_iterator(p_e == 0 ? 0: &p_e->m_value); } - inline const_point_iterator - find(const_key_reference r_key) const + inline point_const_iterator + find(key_const_reference r_key) const { _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) entry_pointer p_e = find_imp(r_key); - return const_point_iterator(p_e == 0 ? 0: &p_e->m_value); + return point_const_iterator(p_e == 0 ? 0: &p_e->m_value); } inline bool - erase(const_key_reference); + erase(key_const_reference); template inline size_type @@ -269,7 +257,7 @@ namespace __gnu_pbds #ifdef _GLIBCXX_DEBUG void assert_valid(const char* file, int line) const; -#endif +#endif #ifdef PB_DS_LU_MAP_TRACE_ void @@ -285,7 +273,7 @@ namespace __gnu_pbds private: #ifdef PB_DS_DATA_TRUE_INDICATOR friend class iterator_; -#endif +#endif friend class const_iterator_; @@ -300,7 +288,7 @@ namespace __gnu_pbds init_entry_metadata(entry_pointer, type_to_type); inline static void - init_entry_metadata(entry_pointer, type_to_type); + init_entry_metadata(entry_pointer, type_to_type); void deallocate_all(); @@ -323,18 +311,18 @@ namespace __gnu_pbds apply_update(entry_pointer, type_to_type); inline static bool - apply_update(entry_pointer, type_to_type); + apply_update(entry_pointer, type_to_type); inline entry_pointer - find_imp(const_key_reference) const; + find_imp(key_const_reference) const; - static entry_allocator s_entry_allocator; - static Eq_Fn s_eq_fn; - static Update_Policy s_update_policy; - static type_to_type s_metadata_type_indicator; - static null_lu_metadata s_null_lu_metadata; + static entry_allocator s_entry_allocator; + static Eq_Fn s_eq_fn; + static Update_Policy s_update_policy; + static type_to_type s_metadata_type_indicator; + static null_type s_null_type; - mutable entry_pointer m_p_l; + mutable entry_pointer m_p_l; }; #include @@ -348,12 +336,8 @@ namespace __gnu_pbds #undef PB_DS_CLASS_T_DEC #undef PB_DS_CLASS_C_DEC -#undef PB_DS_TYPES_TRAITS_C_DEC +#undef PB_DS_LU_TRAITS_BASE #undef PB_DS_DEBUG_MAP_BASE_C_DEC -#undef PB_DS_CLASS_NAME -#undef PB_DS_V2F -#undef PB_DS_EP2VP -#undef PB_DS_V2S - +#undef PB_DS_LU_NAME } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp index 009610998a5..1ee219ae553 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file trace_fn_imps.hpp + * @file list_update_map_/trace_fn_imps.hpp * Contains implementations of lu_map_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp deleted file mode 100644 index f74a9fb5485..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp +++ /dev/null @@ -1,51 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file counter_lu_policy_imp.hpp - * Contains a lu counter policy implementation. - */ - -PB_DS_CLASS_T_DEC -detail::counter_lu_metadata -PB_DS_CLASS_C_DEC:: -operator()() const -{ return (base_type::operator()(max_count)); } - -PB_DS_CLASS_T_DEC -bool -PB_DS_CLASS_C_DEC:: -operator()(metadata_reference r_data) const -{ return (base_type::operator()(r_data, max_count)); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp similarity index 64% rename from libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp rename to libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp index 8e476cb91b9..74ab81388bb 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp @@ -1,6 +1,7 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011 +// Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,7 +35,7 @@ // warranty. /** - * @file counter_lu_metadata.hpp + * @file lu_counter_metadata.hpp * Contains implementation of a lu counter policy's metadata. */ @@ -43,44 +44,45 @@ namespace __gnu_pbds namespace detail { template - class counter_lu_policy_base; + class lu_counter_policy_base; - // A list-update metadata type that moves elements to the front of - // the list based on the counter algorithm. + /// A list-update metadata type that moves elements to the front of + /// the list based on the counter algorithm. template - class counter_lu_metadata - { - public: - typedef Size_Type size_type; - - private: - counter_lu_metadata(size_type init_count) : m_count(init_count) - { } - - friend class counter_lu_policy_base; - - mutable size_type m_count; - }; - - template - class counter_lu_policy_base - { - protected: - typedef Size_Type size_type; - - counter_lu_metadata - operator()(size_type max_size) const - { return counter_lu_metadata(std::rand() % max_size); } - - template - bool - operator()(Metadata_Reference r_data, size_type m_max_count) const + class lu_counter_metadata { - if (++r_data.m_count != m_max_count) - return false; - r_data.m_count = 0; - return true; - } + public: + typedef Size_Type size_type; + + private: + lu_counter_metadata(size_type init_count) : m_count(init_count) + { } + + friend class lu_counter_policy_base; + + mutable size_type m_count; }; + + /// Base class for list-update counter policy. + template + class lu_counter_policy_base + { + protected: + typedef Size_Type size_type; + + lu_counter_metadata + operator()(size_type max_size) const + { return lu_counter_metadata(std::rand() % max_size); } + + template + bool + operator()(Metadata_Reference r_data, size_type m_max_count) const + { + if (++r_data.m_count != m_max_count) + return false; + r_data.m_count = 0; + return true; + } + }; } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp deleted file mode 100644 index 34426c53821..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp +++ /dev/null @@ -1,55 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file mtf_lu_policy_imp.hpp - * Contains a move-to-front policy implementation. - */ - -PB_DS_CLASS_T_DEC -null_lu_metadata PB_DS_CLASS_C_DEC::s_metadata; - -PB_DS_CLASS_T_DEC -typename PB_DS_CLASS_C_DEC::metadata_type -PB_DS_CLASS_C_DEC:: -operator()() const -{ return s_metadata; } - -PB_DS_CLASS_T_DEC -inline bool -PB_DS_CLASS_C_DEC:: -operator()(metadata_reference /*r_data*/) const -{ return true; } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp index c5da1e9d004..13ee6e1c7b0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp @@ -41,34 +41,36 @@ #ifndef PB_DS_SAMPLE_UPDATE_POLICY_HPP #define PB_DS_SAMPLE_UPDATE_POLICY_HPP -// A sample list-update policy. -struct sample_update_policy +namespace __gnu_pbds { - // Default constructor. - sample_update_policy(); + /// A sample list-update policy. + struct sample_update_policy + { + // Default constructor. + sample_update_policy(); - // Copy constructor. - sample_update_policy(const sample_update_policy&); + // Copy constructor. + sample_update_policy(const sample_update_policy&); - // Swaps content. - inline void - swap(sample_update_policy& other); + // Swaps content. + inline void + swap(sample_update_policy& other); -protected: - // Metadata on which this functor operates. - typedef some_metadata_type metadata_type; + protected: + // Metadata on which this functor operates. + typedef some_metadata_type metadata_type; - // Creates a metadata object. - metadata_type - operator()() const; + // Creates a metadata object. + metadata_type + operator()() const; - // Decides whether a metadata object should be moved to the front of - // the list. A list-update based containers object will call this - // method to decide whether to move a node to the front of the - // list. The method shoule return true if the node should be moved - // to the front of the list. - bool - operator()(metadata_reference) const; -}; - -#endif + // Decides whether a metadata object should be moved to the front of + // the list. A list-update based containers object will call this + // method to decide whether to move a node to the front of the + // list. The method shoule return true if the node should be moved + // to the front of the list. + bool + operator()(metadata_reference) const; + }; +} +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp deleted file mode 100644 index e2c4b9ae9c4..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp +++ /dev/null @@ -1,74 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file cond_dtor.hpp - * Contains a conditional destructor - */ - -template -class cond_dtor -{ -public: - cond_dtor(value_vector a_vec, iterator& r_last_it, Size_Type total_size) - : m_a_vec(a_vec), m_r_last_it(r_last_it), m_max_size(total_size), - m_no_action(false) - { } - - ~cond_dtor() - { - if (m_no_action) - return; - iterator it = m_a_vec; - while (it != m_r_last_it) - { - it->~value_type(); - ++it; - } - - if (m_max_size > 0) - value_allocator().deallocate(m_a_vec, m_max_size); - } - - inline void - set_no_action() - { m_no_action = true; } - -protected: - value_vector m_a_vec; - iterator& m_r_last_it; - const Size_Type m_max_size; - bool m_no_action; -}; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp index 1c3b9dd6e47..494ded24bd6 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file ov_tree_map_/constructors_destructor_fn_imps.hpp * Contains an implementation class for ov_tree_. */ @@ -48,7 +48,7 @@ PB_DS_CLASS_C_DEC::s_metadata_alloc; PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_OV_TREE_CLASS_NAME() : +PB_DS_OV_TREE_NAME() : m_a_values(0), m_a_metadata(0), m_end_it(0), @@ -57,8 +57,8 @@ PB_DS_OV_TREE_CLASS_NAME() : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn& r_cmp_fn) : - cmp_fn_base(r_cmp_fn), +PB_DS_OV_TREE_NAME(const Cmp_Fn& r_cmp_fn) : + cmp_fn(r_cmp_fn), m_a_values(0), m_a_metadata(0), m_end_it(0), @@ -67,9 +67,9 @@ PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn& r_cmp_fn) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) : - cmp_fn_base(r_cmp_fn), - node_update(r_node_update), +PB_DS_OV_TREE_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_nodeu) : + cmp_fn(r_cmp_fn), + node_update(r_nodeu), m_a_values(0), m_a_metadata(0), m_end_it(0), @@ -78,11 +78,11 @@ PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_updat PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_OV_TREE_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) : +PB_DS_OV_TREE_NAME(const PB_DS_CLASS_C_DEC& other) : #ifdef PB_DS_TREE_TRACE - PB_DS_TREE_TRACE_BASE_C_DEC(other), -#endif - cmp_fn_base(other), + trace_base(other), +#endif + cmp_fn(other), node_update(other), m_a_values(0), m_a_metadata(0), @@ -100,23 +100,14 @@ PB_DS_CLASS_C_DEC:: copy_from_range(It first_it, It last_it) { #ifdef PB_DS_DATA_TRUE_INDICATOR - typedef - std::map< - key_type, - mapped_type, - Cmp_Fn, - typename Allocator::template rebind< - value_type>::other> + typedef std::map::other> map_type; -#else - typedef - std::set< - key_type, - Cmp_Fn, - typename Allocator::template rebind< - Key>::other> +#else + typedef std::set::other> map_type; -#endif +#endif map_type m(first_it, last_it); copy_from_ordered_range(m.begin(), m.end()); @@ -141,24 +132,21 @@ copy_from_ordered_range(It first_it, It last_it) cond_dtor cd(a_values, target_it, len); while (source_it != source_end_it) { - new (const_cast(static_cast(target_it))) - value_type(*source_it++); - + void* __v = const_cast(static_cast(target_it)); + new (__v) value_type(*source_it++); ++target_it; } - reallocate_metadata((node_update* )this, len); + reallocate_metadata((node_update*)this, len); cd.set_no_action(); m_a_values = a_values; m_size = len; m_end_it = m_a_values + m_size; - update(PB_DS_node_begin_imp(), (node_update* )this); + update(PB_DS_node_begin_imp(), (node_update*)this); #ifdef _GLIBCXX_DEBUG for (const_iterator dbg_it = m_a_values; dbg_it != m_end_it; ++dbg_it) - { - debug_base::insert_new(PB_DS_V2F(*dbg_it)); - } + debug_base::insert_new(PB_DS_V2F(*dbg_it)); #endif } @@ -166,12 +154,12 @@ PB_DS_CLASS_T_DEC template void PB_DS_CLASS_C_DEC:: -copy_from_ordered_range(It first_it, It last_it, It other_first_it, +copy_from_ordered_range(It first_it, It last_it, It other_first_it, It other_last_it) { clear(); - const size_type len = std::distance(first_it, last_it) - + std::distance(other_first_it, other_last_it); + const size_type len = std::distance(first_it, last_it) + + std::distance(other_first_it, other_last_it); value_vector a_values = s_value_alloc.allocate(len); @@ -206,9 +194,7 @@ copy_from_ordered_range(It first_it, It last_it, It other_first_it, #ifdef _GLIBCXX_DEBUG for (const_iterator dbg_it = m_a_values; dbg_it != m_end_it; ++dbg_it) - { - debug_base::insert_new(PB_DS_V2F(*dbg_it)); - } + debug_base::insert_new(PB_DS_V2F(*dbg_it)); #endif } @@ -220,7 +206,10 @@ swap(PB_DS_CLASS_C_DEC& other) PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) value_swap(other); - std::swap((Cmp_Fn& )(*this), (Cmp_Fn& )other); + std::swap(static_cast(*this), + static_cast(other)); + std::swap(static_cast(*this), + static_cast(other)); PB_DS_ASSERT_VALID(other) PB_DS_ASSERT_VALID((*this)) } @@ -230,18 +219,18 @@ void PB_DS_CLASS_C_DEC:: value_swap(PB_DS_CLASS_C_DEC& other) { + _GLIBCXX_DEBUG_ONLY(debug_base::swap(other);) std::swap(m_a_values, other.m_a_values); std::swap(m_a_metadata, other.m_a_metadata); std::swap(m_size, other.m_size); std::swap(m_end_it, other.m_end_it); - _GLIBCXX_DEBUG_ONLY(debug_base::swap(other);) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~PB_DS_OV_TREE_CLASS_NAME() +~PB_DS_OV_TREE_NAME() { - //PB_DS_ASSERT_VALID((*this)) + PB_DS_ASSERT_VALID((*this)) cond_dtor cd(m_a_values, m_end_it, m_size); reallocate_metadata((node_update*)this, 0); } @@ -249,7 +238,7 @@ PB_DS_CLASS_C_DEC:: PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -update(node_iterator /*it*/, null_node_update_pointer) +update(node_iterator, null_node_update_pointer) { } PB_DS_CLASS_T_DEC @@ -258,10 +247,11 @@ void PB_DS_CLASS_C_DEC:: update(node_iterator nd_it, Node_Update* p_update) { - const_node_iterator end_it = PB_DS_node_end_imp(); - if (nd_it == end_it) - return; - update(nd_it.get_l_child(), p_update); - update(nd_it.get_r_child(), p_update); - node_update::operator()(nd_it, end_it); + node_const_iterator end_it = PB_DS_node_end_imp(); + if (nd_it != end_it) + { + update(nd_it.get_l_child(), p_update); + update(nd_it.get_r_child(), p_update); + node_update::operator()(nd_it, end_it); + } } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp index 1ba96d8edbb..8c27a46500f 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file ov_tree_map_/debug_fn_imps.hpp * Contains an implementation class for ov_tree_. */ @@ -76,5 +76,4 @@ assert_iterators(const char* __file, int __line) const PB_DS_DEBUG_VERIFY(iterated_num == m_size); } -#endif - +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp index a9bfab64e12..31eb7c74920 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file ov_tree_map_/erase_fn_imps.hpp * Contains an implementation class for ov_tree_. */ @@ -70,11 +70,12 @@ erase_if(Pred pred) PB_DS_ASSERT_VALID((*this)) #ifdef PB_DS_REGRESSION - typename Allocator::group_adjustor adjust(m_size); -#endif + typename _Alloc::group_adjustor adjust(m_size); +#endif size_type new_size = 0; size_type num_val_ersd = 0; + for (iterator source_it = begin(); source_it != m_end_it; ++source_it) if (!pred(*source_it)) ++new_size; @@ -94,16 +95,16 @@ erase_if(Pred pred) for (iterator source_it = begin(); source_it != m_end_it; ++source_it) { if (!pred(*source_it)) - { - new (const_cast(static_cast(target_it))) + { + new (const_cast(static_cast(target_it))) value_type(*source_it); _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(*source_it))); ++target_it; - } + } } - reallocate_metadata((node_update* )this, new_size); + reallocate_metadata((node_update*)this, new_size); cd.set_no_action(); { @@ -113,7 +114,7 @@ erase_if(Pred pred) m_a_values = a_new_values; m_size = new_size; m_end_it = target_it; - update(node_begin(), (node_update* )this); + update(node_begin(), (node_update*)this); PB_DS_ASSERT_VALID((*this)) return num_val_ersd; } @@ -131,8 +132,8 @@ erase_imp(It it) PB_DS_CHECK_KEY_EXISTS(PB_DS_V2F(*it)) #ifdef PB_DS_REGRESSION - typename Allocator::group_adjustor adjust(m_size); -#endif + typename _Alloc::group_adjustor adjust(m_size); +#endif _GLIBCXX_DEBUG_ASSERT(m_size > 0); value_vector a_values = s_value_alloc.allocate(m_size - 1); @@ -149,12 +150,12 @@ erase_imp(It it) { if (source_it != it) { - _GLIBCXX_DEBUG_ONLY(++cnt;) + _GLIBCXX_DEBUG_ONLY(++cnt;) _GLIBCXX_DEBUG_ASSERT(cnt != m_size); - new (const_cast(static_cast(target_it))) + new (const_cast(static_cast(target_it))) value_type(*source_it); - ++target_it; + ++target_it; } else ret_it = target_it; @@ -162,9 +163,9 @@ erase_imp(It it) } _GLIBCXX_DEBUG_ASSERT(m_size > 0); - reallocate_metadata((node_update* )this, m_size - 1); + reallocate_metadata((node_update*)this, m_size - 1); cd.set_no_action(); - _GLIBCXX_DEBUG_ONLY(PB_DS_CLASS_C_DEC::erase_existing(PB_DS_V2F(*it));) + _GLIBCXX_DEBUG_ONLY(debug_base::erase_existing(PB_DS_V2F(*it));) { cond_dtor cd1(m_a_values, m_end_it, m_size); } @@ -172,7 +173,7 @@ erase_imp(It it) m_a_values = a_values; --m_size; m_end_it = m_a_values + m_size; - update(node_begin(), (node_update* )this); + update(node_begin(), (node_update*)this); PB_DS_ASSERT_VALID((*this)) return It(ret_it); } @@ -180,7 +181,7 @@ erase_imp(It it) PB_DS_CLASS_T_DEC bool PB_DS_CLASS_C_DEC:: -erase(const_key_reference r_key) +erase(key_const_reference r_key) { point_iterator it = find(r_key); if (it == end()) @@ -188,4 +189,3 @@ erase(const_key_reference r_key) erase(it); return true; } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp index 7eeb85b7c19..6beee7118c7 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file info_fn_imps.hpp + * @file ov_tree_map_/info_fn_imps.hpp * Contains an implementation class for ov_tree_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp index 51d1b4d34bb..e96628bdd88 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file ov_tree_map_/insert_fn_imps.hpp * Contains an implementation class for ov_tree_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp index 40f110084c1..af866866ce0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp @@ -34,18 +34,18 @@ // warranty. /** - * @file iterators_fn_imps.hpp + * @file ov_tree_map_/iterators_fn_imps.hpp * Contains an implementation class for ov_tree_. */ PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_node_iterator +inline typename PB_DS_CLASS_C_DEC::node_const_iterator PB_DS_CLASS_C_DEC:: node_begin() const { return PB_DS_node_begin_imp(); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_node_iterator +inline typename PB_DS_CLASS_C_DEC::node_const_iterator PB_DS_CLASS_C_DEC:: node_end() const { return PB_DS_node_end_imp(); } @@ -63,11 +63,11 @@ node_end() { return PB_DS_node_end_imp(); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_node_iterator +inline typename PB_DS_CLASS_C_DEC::node_const_iterator PB_DS_CLASS_C_DEC:: PB_DS_node_begin_imp() const { - return const_node_iterator(const_cast(mid_pointer(begin(), end())), + return node_const_iterator(const_cast(mid_pointer(begin(), end())), const_cast(begin()), const_cast(end()),(m_a_metadata == 0)? 0 : @@ -75,11 +75,11 @@ PB_DS_node_begin_imp() const } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_node_iterator +inline typename PB_DS_CLASS_C_DEC::node_const_iterator PB_DS_CLASS_C_DEC:: PB_DS_node_end_imp() const { - return const_node_iterator(end(), end(), end(), + return node_const_iterator(end(), end(), end(), (m_a_metadata == 0) ? 0 : m_a_metadata + m_size); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp index 3517896a6f5..79c95043853 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file node_iterators.hpp + * @file ov_tree_map_/node_iterators.hpp * Contains an implementation class for ov_tree_. */ @@ -49,28 +49,27 @@ namespace __gnu_pbds { namespace detail { - #define PB_DS_OV_TREE_CONST_NODE_ITERATOR_C_DEC \ - ov_tree_node_const_it_ + ov_tree_node_const_it_ - // Const node reference. - template + /// Const node reference. + template class ov_tree_node_const_it_ { protected: typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< Value_Type>::other::pointer pointer; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< Value_Type>::other::const_pointer const_pointer; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< Metadata_Type>::other::const_pointer const_metadata_pointer; @@ -93,18 +92,18 @@ namespace __gnu_pbds typedef trivial_iterator_difference_type difference_type; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< Value_Type>::other::const_pointer value_type; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< typename remove_const< Value_Type>::type>::other::const_pointer reference; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< typename remove_const< Value_Type>::type>::other::const_pointer const_reference; @@ -112,9 +111,9 @@ namespace __gnu_pbds typedef Metadata_Type metadata_type; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< metadata_type>::other::const_reference - const_metadata_reference; + metadata_const_reference; public: inline @@ -125,12 +124,12 @@ namespace __gnu_pbds operator*() const { return m_p_value; } - inline const_metadata_reference + inline metadata_const_reference get_metadata() const { enum { - has_metadata = !is_same::value + has_metadata = !is_same::value }; PB_DS_STATIC_ASSERT(should_have_metadata, has_metadata); @@ -196,10 +195,10 @@ namespace __gnu_pbds }; #define PB_DS_OV_TREE_NODE_ITERATOR_C_DEC \ - ov_tree_node_it_ + ov_tree_node_it_ - // Node reference. - template + /// Node reference. + template class ov_tree_node_it_ : public PB_DS_OV_TREE_CONST_NODE_ITERATOR_C_DEC { @@ -223,18 +222,18 @@ namespace __gnu_pbds typedef trivial_iterator_difference_type difference_type; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< Value_Type>::other::pointer value_type; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< typename remove_const< Value_Type>::type>::other::pointer reference; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< typename remove_const< Value_Type>::type>::other::pointer const_reference; @@ -270,7 +269,9 @@ namespace __gnu_pbds get_r_child() const { if (base_type::m_p_value == base_type::m_p_end_value) - return (this_type(base_type::m_p_end_value, base_type::m_p_end_value, base_type::m_p_end_value)); + return this_type(base_type::m_p_end_value, + base_type::m_p_end_value, + base_type::m_p_end_value); const_metadata_pointer p_end_metadata = base_type::m_p_metadata + (base_type::m_p_end_value - base_type::m_p_value); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp index 06436591ef5..20a435047dd 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp @@ -34,19 +34,21 @@ // warranty. /** - * @file ov_tree_map_.hpp + * @file ov_tree_map_/ov_tree_map_.hpp * Contains an implementation class for ov_tree_. */ #include #include +#include #include #include #include -#include #include -#include #include +#ifdef _GLIBCXX_DEBUG +#include +#endif #include #include #include @@ -58,159 +60,171 @@ namespace __gnu_pbds { namespace detail { -#define PB_DS_CLASS_T_DEC \ - template - #ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_OV_TREE_CLASS_NAME ov_tree_data_ -#endif +#define PB_DS_OV_TREE_NAME ov_tree_map +#define PB_DS_CONST_NODE_ITERATOR_NAME ov_tree_node_const_iterator_map +#endif #ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_OV_TREE_CLASS_NAME ov_tree_no_data_ -#endif +#define PB_DS_OV_TREE_NAME ov_tree_set +#define PB_DS_CONST_NODE_ITERATOR_NAME ov_tree_node_const_iterator_set +#endif -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_CONST_NODE_ITERATOR_NAME ov_tree_const_node_iterator_data_ -#else -#define PB_DS_CONST_NODE_ITERATOR_NAME ov_tree_const_node_iterator_no_data_ -#endif +#define PB_DS_CLASS_T_DEC \ + template #define PB_DS_CLASS_C_DEC \ - PB_DS_OV_TREE_CLASS_NAME + PB_DS_OV_TREE_NAME -#define PB_DS_TYPES_TRAITS_C_DEC \ - types_traits +#define PB_DS_OV_TREE_TRAITS_BASE \ + types_traits #ifdef _GLIBCXX_DEBUG #define PB_DS_DEBUG_MAP_BASE_C_DEC \ debug_map_base, \ - typename Allocator::template rebind::other::const_reference> -#endif - -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_V2F(X) (X).first -#define PB_DS_V2S(X) (X).second -#define PB_DS_EP2VP(X)& ((X)->m_value) -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_V2F(X) (X) -#define PB_DS_V2S(X) Mapped_Data() -#define PB_DS_EP2VP(X)& ((X)->m_value.first) -#endif + typename _Alloc::template rebind::other::const_reference> +#endif #ifdef PB_DS_TREE_TRACE #define PB_DS_TREE_TRACE_BASE_C_DEC \ - tree_trace_base + Cmp_Fn, false, _Alloc> #endif #ifndef PB_DS_CHECK_KEY_EXISTS # error Missing definition #endif - // Ordered-vector tree associative-container. - template - class PB_DS_OV_TREE_CLASS_NAME : + /// Ordered-vector tree associative-container. + template + class PB_DS_OV_TREE_NAME : #ifdef _GLIBCXX_DEBUG protected PB_DS_DEBUG_MAP_BASE_C_DEC, -#endif +#endif #ifdef PB_DS_TREE_TRACE public PB_DS_TREE_TRACE_BASE_C_DEC, -#endif +#endif public Cmp_Fn, public Node_And_It_Traits::node_update, - public PB_DS_TYPES_TRAITS_C_DEC + public PB_DS_OV_TREE_TRAITS_BASE { private: - typedef PB_DS_TYPES_TRAITS_C_DEC traits_base; + typedef PB_DS_OV_TREE_TRAITS_BASE traits_base; + typedef Node_And_It_Traits traits_type; typedef typename remove_const::type non_const_value_type; - typedef typename Allocator::template rebind::other value_allocator; - typedef typename value_allocator::pointer value_vector; - - - typedef Cmp_Fn cmp_fn_base; + typedef typename _Alloc::template rebind::other value_allocator; + typedef typename value_allocator::pointer value_vector; #ifdef _GLIBCXX_DEBUG - typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; -#endif + typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; +#endif - typedef typename traits_base::pointer mapped_pointer_; - typedef typename traits_base::const_pointer const_mapped_pointer_; +#ifdef PB_DS_TREE_TRACE + typedef PB_DS_TREE_TRACE_BASE_C_DEC trace_base; +#endif - typedef typename Node_And_It_Traits::metadata_type metadata_type; + typedef typename traits_base::pointer mapped_pointer_; + typedef typename traits_base::const_pointer mapped_const_pointer_; - typedef typename Allocator::template rebind::other metadata_allocator; - typedef typename metadata_allocator::pointer metadata_pointer; - typedef typename metadata_allocator::const_reference const_metadata_reference; - typedef typename metadata_allocator::reference metadata_reference; + typedef typename traits_type::metadata_type metadata_type; - typedef - typename Node_And_It_Traits::null_node_update_pointer + typedef typename _Alloc::template rebind::other metadata_allocator; + typedef typename metadata_allocator::pointer metadata_pointer; + typedef typename metadata_allocator::const_reference metadata_const_reference; + typedef typename metadata_allocator::reference metadata_reference; + + typedef typename traits_type::null_node_update_pointer null_node_update_pointer; public: + typedef ov_tree_tag container_category; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; + typedef Cmp_Fn cmp_fn; - typedef Allocator allocator_type; - typedef typename Allocator::size_type size_type; - typedef typename Allocator::difference_type difference_type; - - typedef Cmp_Fn cmp_fn; - - typedef typename Node_And_It_Traits::node_update node_update; - - typedef typename traits_base::key_type key_type; - typedef typename traits_base::key_pointer key_pointer; - typedef typename traits_base::const_key_pointer const_key_pointer; - typedef typename traits_base::key_reference key_reference; - typedef typename traits_base::const_key_reference const_key_reference; - typedef typename traits_base::mapped_type mapped_type; - typedef typename traits_base::mapped_pointer mapped_pointer; - typedef typename traits_base::const_mapped_pointer const_mapped_pointer; - typedef typename traits_base::mapped_reference mapped_reference; - typedef typename traits_base::const_mapped_reference const_mapped_reference; - typedef typename traits_base::value_type value_type; - typedef typename traits_base::pointer pointer; - typedef typename traits_base::const_pointer const_pointer; - typedef typename traits_base::reference reference; - typedef typename traits_base::const_reference const_reference; - - typedef const_pointer const_point_iterator; + typedef typename traits_base::key_type key_type; + typedef typename traits_base::key_pointer key_pointer; + typedef typename traits_base::key_const_pointer key_const_pointer; + typedef typename traits_base::key_reference key_reference; + typedef typename traits_base::key_const_reference key_const_reference; + typedef typename traits_base::mapped_type mapped_type; + typedef typename traits_base::mapped_pointer mapped_pointer; + typedef typename traits_base::mapped_const_pointer mapped_const_pointer; + typedef typename traits_base::mapped_reference mapped_reference; + typedef typename traits_base::mapped_const_reference mapped_const_reference; + typedef typename traits_base::value_type value_type; + typedef typename traits_base::pointer pointer; + typedef typename traits_base::const_pointer const_pointer; + typedef typename traits_base::reference reference; + typedef typename traits_base::const_reference const_reference; + typedef const_pointer point_const_iterator; #ifdef PB_DS_DATA_TRUE_INDICATOR - typedef pointer point_iterator; -#else - typedef const_point_iterator point_iterator; -#endif + typedef pointer point_iterator; +#else + typedef point_const_iterator point_iterator; +#endif - typedef const_point_iterator const_iterator; + typedef point_iterator iterator; + typedef point_const_iterator const_iterator; - typedef point_iterator iterator; + /// Conditional destructor. + template + class cond_dtor + { + public: + cond_dtor(value_vector a_vec, iterator& r_last_it, + Size_Type total_size) + : m_a_vec(a_vec), m_r_last_it(r_last_it), m_max_size(total_size), + m_no_action(false) + { } -#include + ~cond_dtor() + { + if (m_no_action) + return; + iterator it = m_a_vec; + while (it != m_r_last_it) + { + it->~value_type(); + ++it; + } + + if (m_max_size > 0) + value_allocator().deallocate(m_a_vec, m_max_size); + } - typedef - typename Node_And_It_Traits::const_node_iterator - const_node_iterator; + inline void + set_no_action() + { m_no_action = true; } + + protected: + value_vector m_a_vec; + iterator& m_r_last_it; + const Size_Type m_max_size; + bool m_no_action; + }; + + typedef typename traits_type::node_update node_update; + typedef typename traits_type::node_iterator node_iterator; + typedef typename traits_type::node_const_iterator node_const_iterator; - typedef typename Node_And_It_Traits::node_iterator node_iterator; - public: + PB_DS_OV_TREE_NAME(); - PB_DS_OV_TREE_CLASS_NAME(); + PB_DS_OV_TREE_NAME(const Cmp_Fn&); - PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn&); + PB_DS_OV_TREE_NAME(const Cmp_Fn&, const node_update&); - PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn&, const node_update&); + PB_DS_OV_TREE_NAME(const PB_DS_CLASS_C_DEC&); - PB_DS_OV_TREE_CLASS_NAME(const PB_DS_CLASS_C_DEC&); - - ~PB_DS_OV_TREE_CLASS_NAME(); + ~PB_DS_OV_TREE_NAME(); void swap(PB_DS_CLASS_C_DEC&); @@ -228,14 +242,14 @@ namespace __gnu_pbds inline size_type size() const; - Cmp_Fn& + Cmp_Fn& get_cmp_fn(); - const Cmp_Fn& + const Cmp_Fn& get_cmp_fn() const; inline mapped_reference - operator[](const_key_reference r_key) + operator[](key_const_reference r_key) { #ifdef PB_DS_DATA_TRUE_INDICATOR PB_DS_ASSERT_VALID((*this)) @@ -246,19 +260,18 @@ namespace __gnu_pbds PB_DS_ASSERT_VALID((*this)) return it->second; } - - return (insert_new_val(it, std::make_pair(r_key, mapped_type()))->second); -#else + return insert_new_val(it, std::make_pair(r_key, mapped_type()))->second; +#else insert(r_key); - return traits_base::s_null_mapped; -#endif + return traits_base::s_null_type; +#endif } inline std::pair insert(const_reference r_value) { PB_DS_ASSERT_VALID((*this)) - const_key_reference r_key = PB_DS_V2F(r_value); + key_const_reference r_key = PB_DS_V2F(r_value); point_iterator it = lower_bound(r_key); if (it != end()&& !Cmp_Fn::operator()(r_key, PB_DS_V2F(*it))) @@ -272,14 +285,14 @@ namespace __gnu_pbds } inline point_iterator - lower_bound(const_key_reference r_key) + lower_bound(key_const_reference r_key) { pointer it = m_a_values; pointer e_it = m_a_values + m_size; while (it != e_it) { pointer mid_it = it + ((e_it - it) >> 1); - if (cmp_fn_base::operator()(PB_DS_V2F(*mid_it), r_key)) + if (cmp_fn::operator()(PB_DS_V2F(*mid_it), r_key)) it = ++mid_it; else e_it = mid_it; @@ -287,15 +300,15 @@ namespace __gnu_pbds return it; } - inline const_point_iterator - lower_bound(const_key_reference r_key) const + inline point_const_iterator + lower_bound(key_const_reference r_key) const { return const_cast(*this).lower_bound(r_key); } inline point_iterator - upper_bound(const_key_reference r_key) + upper_bound(key_const_reference r_key) { iterator pot_it = lower_bound(r_key); - if (pot_it != end()&& !Cmp_Fn::operator()(r_key, PB_DS_V2F(*pot_it))) + if (pot_it != end() && !Cmp_Fn::operator()(r_key, PB_DS_V2F(*pot_it))) { PB_DS_CHECK_KEY_EXISTS(r_key) return ++pot_it; @@ -305,12 +318,12 @@ namespace __gnu_pbds return pot_it; } - inline const_point_iterator - upper_bound(const_key_reference r_key) const + inline point_const_iterator + upper_bound(key_const_reference r_key) const { return const_cast(*this).upper_bound(r_key); } inline point_iterator - find(const_key_reference r_key) + find(key_const_reference r_key) { PB_DS_ASSERT_VALID((*this)) iterator pot_it = lower_bound(r_key); @@ -324,12 +337,12 @@ namespace __gnu_pbds return end(); } - inline const_point_iterator - find(const_key_reference r_key) const - { return (const_cast(*this).find(r_key)); } + inline point_const_iterator + find(key_const_reference r_key) const + { return (const_cast(*this).find(r_key)); } bool - erase(const_key_reference); + erase(key_const_reference); template inline size_type @@ -346,7 +359,7 @@ namespace __gnu_pbds join(PB_DS_CLASS_C_DEC&); void - split(const_key_reference, PB_DS_CLASS_C_DEC&); + split(key_const_reference, PB_DS_CLASS_C_DEC&); inline iterator begin() @@ -364,10 +377,10 @@ namespace __gnu_pbds end() const { return m_end_it; } - inline const_node_iterator + inline node_const_iterator node_begin() const; - inline const_node_iterator + inline node_const_iterator node_end() const; inline node_iterator @@ -379,7 +392,7 @@ namespace __gnu_pbds private: inline void - update(node_iterator /*it*/, null_node_update_pointer); + update(node_iterator, null_node_update_pointer); template void @@ -415,8 +428,8 @@ namespace __gnu_pbds insert_new_val(iterator it, const_reference r_value) { #ifdef PB_DS_REGRESSION - typename Allocator::group_adjustor adjust(m_size); -#endif + typename _Alloc::group_adjustor adjust(m_size); +#endif PB_DS_CHECK_KEY_DOES_NOT_EXIST(PB_DS_V2F(r_value)) @@ -430,23 +443,23 @@ namespace __gnu_pbds cond_dtor cd(a_values, target_it, m_size + 1); while (source_it != it) { - new (const_cast(static_cast(target_it))) + new (const_cast(static_cast(target_it))) value_type(*source_it++); ++target_it; } - new (const_cast(static_cast(ret_it = target_it))) + new (const_cast(static_cast(ret_it = target_it))) value_type(r_value); ++target_it; while (source_it != source_end_it) { - new (const_cast(static_cast(target_it))) + new (const_cast(static_cast(target_it))) value_type(*source_it++); ++target_it; } - reallocate_metadata((node_update* )this, m_size + 1); + reallocate_metadata((node_update*)this, m_size + 1); cd.set_no_action(); if (m_size != 0) { @@ -464,20 +477,20 @@ namespace __gnu_pbds #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; + assert_valid(const char*, int) const; void - assert_iterators(const char* file, int line) const; -#endif + assert_iterators(const char*, int) const; +#endif template It - erase_imp(It it); + erase_imp(It); - inline const_node_iterator + inline node_const_iterator PB_DS_node_begin_imp() const; - inline const_node_iterator + inline node_const_iterator PB_DS_node_end_imp() const; inline node_iterator @@ -487,13 +500,13 @@ namespace __gnu_pbds PB_DS_node_end_imp(); private: - static value_allocator s_value_alloc; + static value_allocator s_value_alloc; static metadata_allocator s_metadata_alloc; - value_vector m_a_values; - metadata_pointer m_a_metadata; - iterator m_end_it; - size_type m_size; + value_vector m_a_values; + metadata_pointer m_a_metadata; + iterator m_end_it; + size_type m_size; }; #include @@ -507,17 +520,12 @@ namespace __gnu_pbds #undef PB_DS_CLASS_C_DEC #undef PB_DS_CLASS_T_DEC -#undef PB_DS_OV_TREE_CLASS_NAME -#undef PB_DS_TYPES_TRAITS_C_DEC +#undef PB_DS_OV_TREE_NAME +#undef PB_DS_OV_TREE_TRAITS_BASE #undef PB_DS_DEBUG_MAP_BASE_C_DEC #ifdef PB_DS_TREE_TRACE #undef PB_DS_TREE_TRACE_BASE_C_DEC -#endif - -#undef PB_DS_V2F -#undef PB_DS_EP2VP -#undef PB_DS_V2S +#endif #undef PB_DS_CONST_NODE_ITERATOR_NAME - } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp index c06d6f851f3..eafe0b039b2 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp @@ -34,8 +34,8 @@ // warranty. /** - * @file policy_access_fn_imps.hpp - * Contains an implementation class for bin_search_tree_. + * @file ov_tree_map_/policy_access_fn_imps.hpp + * Contains an implementation class for ov_tree. */ PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp index 567a52e0218..a12c2320cc2 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp @@ -34,14 +34,14 @@ // warranty. /** - * @file split_join_fn_imps.hpp + * @file ov_tree_map_/split_join_fn_imps.hpp * Contains an implementation class for ov_tree_. */ PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other) +split(key_const_reference r_key, PB_DS_CLASS_C_DEC& other) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) @@ -73,17 +73,15 @@ split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other) return; } - _GLIBCXX_DEBUG_ONLY(debug_base::join(other);) iterator it = upper_bound(r_key); PB_DS_CLASS_C_DEC new_other(other, other); new_other.copy_from_ordered_range(it, end()); - PB_DS_CLASS_C_DEC new_this(*this, * this); + PB_DS_CLASS_C_DEC new_this(*this, *this); new_this.copy_from_ordered_range(begin(), it); // No exceptions from this point. - _GLIBCXX_DEBUG_ONLY(debug_base::split(r_key,(Cmp_Fn& )(*this), other);) - other.update(other.node_begin(), (node_update* )(&other)); - update(node_begin(), (node_update* )this); + other.update(other.node_begin(), (node_update*)(&other)); + update(node_begin(), (node_update*)this); other.value_swap(new_other); value_swap(new_this); PB_DS_ASSERT_VALID((*this)) @@ -120,14 +118,13 @@ join(PB_DS_CLASS_C_DEC& other) PB_DS_CLASS_C_DEC new_this(*this, *this); if (greater) - new_this.copy_from_ordered_range(begin(), end(), + new_this.copy_from_ordered_range(begin(), end(), other.begin(), other.end()); else new_this.copy_from_ordered_range(other.begin(), other.end(), begin(), end()); // No exceptions from this point. - _GLIBCXX_DEBUG_ONLY(debug_base::join(other, false);) value_swap(new_this); other.clear(); PB_DS_ASSERT_VALID((*this)) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp index 63cb0f7fb4c..359e599627b 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file traits.hpp + * @file ov_tree_map_/traits.hpp * Contains an implementation class for ov_tree_. */ @@ -47,135 +47,135 @@ namespace __gnu_pbds { namespace detail { - + /// Tree traits. template + typename _Alloc_> class Node_Update, - class Allocator> + typename _Alloc> struct tree_traits< Key, Mapped, Cmp_Fn, Node_Update, ov_tree_tag, - Allocator> + _Alloc> { private: typedef typename types_traits< Key, Mapped, - Allocator, + _Alloc, false>::value_type value_type; public: typedef - typename tree_node_metadata_selector< + typename tree_node_metadata_dispatch< Key, Mapped, Cmp_Fn, Node_Update, - Allocator>::type + _Alloc>::type metadata_type; typedef ov_tree_node_const_it_< value_type, metadata_type, - Allocator> - const_node_iterator; + _Alloc> + node_const_iterator; typedef ov_tree_node_it_< value_type, metadata_type, - Allocator> + _Alloc> node_iterator; typedef Node_Update< - const_node_iterator, + node_const_iterator, node_iterator, Cmp_Fn, - Allocator> + _Alloc> node_update; typedef - __gnu_pbds::null_tree_node_update< - const_node_iterator, + __gnu_pbds::null_node_update< + node_const_iterator, node_iterator, Cmp_Fn, - Allocator>* + _Alloc>* null_node_update_pointer; }; + /// Specialization. template + typename _Alloc_> class Node_Update, - class Allocator> + typename _Alloc> struct tree_traits< Key, - null_mapped_type, + null_type, Cmp_Fn, Node_Update, ov_tree_tag, - Allocator> + _Alloc> { private: typedef typename types_traits< Key, - null_mapped_type, - Allocator, + null_type, + _Alloc, false>::value_type value_type; public: typedef - typename tree_node_metadata_selector< + typename tree_node_metadata_dispatch< Key, - null_mapped_type, + null_type, Cmp_Fn, Node_Update, - Allocator>::type + _Alloc>::type metadata_type; typedef ov_tree_node_const_it_< value_type, metadata_type, - Allocator> - const_node_iterator; + _Alloc> + node_const_iterator; - typedef const_node_iterator node_iterator; + typedef node_const_iterator node_iterator; typedef Node_Update< - const_node_iterator, - const_node_iterator, + node_const_iterator, + node_const_iterator, Cmp_Fn, - Allocator> + _Alloc> node_update; typedef - __gnu_pbds::null_tree_node_update< - const_node_iterator, + __gnu_pbds::null_node_update< + node_const_iterator, node_iterator, Cmp_Fn, - Allocator>* + _Alloc>* null_node_update_pointer; }; - } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp index 6a70ea47601..0b836c549cd 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file pairing_heap_/constructors_destructor_fn_imps.hpp * Contains an implementation class for a pairing heap. */ @@ -46,32 +46,25 @@ copy_from_range(It first_it, It last_it) { while (first_it != last_it) push(*(first_it++)); - PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -pairing_heap_() -{ - PB_DS_ASSERT_VALID((*this)) -} +pairing_heap() +{ PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -pairing_heap_(const Cmp_Fn& r_cmp_fn) : - PB_DS_BASE_C_DEC(r_cmp_fn) -{ - PB_DS_ASSERT_VALID((*this)) -} +pairing_heap(const Cmp_Fn& r_cmp_fn) +: base_type(r_cmp_fn) +{ PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -pairing_heap_(const PB_DS_CLASS_C_DEC& other) : - PB_DS_BASE_C_DEC(other) -{ - PB_DS_ASSERT_VALID((*this)) -} +pairing_heap(const PB_DS_CLASS_C_DEC& other) +: base_type(other) +{ PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC void @@ -79,13 +72,11 @@ PB_DS_CLASS_C_DEC:: swap(PB_DS_CLASS_C_DEC& other) { PB_DS_ASSERT_VALID((*this)) - - PB_DS_BASE_C_DEC::swap(other); - + base_type::swap(other); PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~pairing_heap_() +~pairing_heap() { } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp index 7212db2c539..802c95e9b50 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file pairing_heap_/debug_fn_imps.hpp * Contains an implementation class for a pairing heap. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp index be3a41c7827..d6303c3294e 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file pairing_heap_/erase_fn_imps.hpp * Contains an implementation class for a pairing heap. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp index c02373b2f3a..49b2ca6342d 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file find_fn_imps.hpp + * @file pairing_heap_/find_fn_imps.hpp * Contains an implementation class for a pairing heap. */ @@ -45,6 +45,5 @@ top() const { PB_DS_ASSERT_VALID((*this)) _GLIBCXX_DEBUG_ASSERT(!base_type::empty()); - return base_type::m_p_root->m_value; } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp index 07e6b00cb83..ced5eeb0819 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file pairing_heap_/insert_fn_imps.hpp * Contains an implementation class for a pairing heap. */ @@ -44,13 +44,9 @@ PB_DS_CLASS_C_DEC:: push(const_reference r_val) { PB_DS_ASSERT_VALID((*this)) - node_pointer p_new_nd = base_type::get_new_node_for_insert(r_val); - push_imp(p_new_nd); - PB_DS_ASSERT_VALID((*this)) - return point_iterator(p_new_nd); } @@ -60,20 +56,16 @@ PB_DS_CLASS_C_DEC:: push_imp(node_pointer p_nd) { p_nd->m_p_l_child = 0; - if (base_type::m_p_root == 0) { p_nd->m_p_next_sibling = p_nd->m_p_prev_or_parent = 0; - base_type::m_p_root = p_nd; } else if (Cmp_Fn::operator()(base_type::m_p_root->m_value, p_nd->m_value)) { p_nd->m_p_next_sibling = p_nd->m_p_prev_or_parent = 0; - base_type::make_child_of(base_type::m_p_root, p_nd); PB_DS_ASSERT_NODE_CONSISTENT(p_nd, false) - base_type::m_p_root = p_nd; } else @@ -89,13 +81,8 @@ PB_DS_CLASS_C_DEC:: modify(point_iterator it, const_reference r_new_val) { PB_DS_ASSERT_VALID((*this)) - remove_node(it.m_p_nd); - it.m_p_nd->m_value = r_new_val; - push_imp(it.m_p_nd); - PB_DS_ASSERT_VALID((*this)) } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp index 3bdb82fb649..85e098ad4c8 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file pairing_heap_.hpp + * @file pairing_heap_/pairing_heap_.hpp * Contains an implementation class for a pairing heap. */ @@ -48,106 +48,69 @@ #include #include #include -#include #include namespace __gnu_pbds { namespace detail { - #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ - pairing_heap_ + pairing_heap #ifdef _GLIBCXX_DEBUG -#define PB_DS_BASE_C_DEC \ - left_child_next_sibling_heap_ -#else -#define PB_DS_BASE_C_DEC \ - left_child_next_sibling_heap_ -#endif +#define PB_DS_P_HEAP_BASE \ + left_child_next_sibling_heap +#else +#define PB_DS_P_HEAP_BASE \ + left_child_next_sibling_heap +#endif - /** - * class description = "P4ri|\|g h3ap$"> - **/ - template - class pairing_heap_ : public PB_DS_BASE_C_DEC + /// Pairing heap. + template + class pairing_heap : public PB_DS_P_HEAP_BASE { - private: - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_P_HEAP_BASE base_type; + typedef typename base_type::node_pointer node_pointer; - typedef typename base_type::node_pointer node_pointer; + typedef typename _Alloc::template rebind::other __rebind_a; public: + typedef Value_Type value_type; + typedef Cmp_Fn cmp_fn; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; - typedef typename Allocator::size_type size_type; + typedef typename __rebind_a::pointer pointer; + typedef typename __rebind_a::const_pointer const_pointer; + typedef typename __rebind_a::reference reference; + typedef typename __rebind_a::const_reference const_reference; - typedef typename Allocator::difference_type difference_type; + typedef typename base_type::point_const_iterator point_const_iterator; + typedef typename base_type::point_iterator point_iterator; + typedef typename base_type::const_iterator const_iterator; + typedef typename base_type::iterator iterator; - typedef Value_Type value_type; + pairing_heap(); - typedef - typename Allocator::template rebind< - value_type>::other::pointer - pointer; + pairing_heap(const Cmp_Fn&); - typedef - typename Allocator::template rebind< - value_type>::other::const_pointer - const_pointer; - - typedef - typename Allocator::template rebind< - value_type>::other::reference - reference; - - typedef - typename Allocator::template rebind< - value_type>::other::const_reference - const_reference; - - typedef - typename PB_DS_BASE_C_DEC::const_point_iterator - const_point_iterator; - - typedef typename PB_DS_BASE_C_DEC::point_iterator point_iterator; - - typedef typename PB_DS_BASE_C_DEC::const_iterator const_iterator; - - typedef typename PB_DS_BASE_C_DEC::iterator iterator; - - typedef Cmp_Fn cmp_fn; - - typedef Allocator allocator_type; - - - pairing_heap_(); - - pairing_heap_(const Cmp_Fn& r_cmp_fn); - - pairing_heap_(const PB_DS_CLASS_C_DEC& other); + pairing_heap(const pairing_heap&); void - swap(PB_DS_CLASS_C_DEC& other); + swap(pairing_heap&); - ~pairing_heap_(); + ~pairing_heap(); inline point_iterator - push(const_reference r_val); + push(const_reference); void - modify(point_iterator it, const_reference r_new_val); + modify(point_iterator, const_reference); inline const_reference top() const; @@ -156,51 +119,51 @@ namespace __gnu_pbds pop(); void - erase(point_iterator it); + erase(point_iterator); template size_type - erase_if(Pred pred); + erase_if(Pred); template void - split(Pred pred, PB_DS_CLASS_C_DEC& other); + split(Pred, pairing_heap&); void - join(PB_DS_CLASS_C_DEC& other); + join(pairing_heap&); protected: template void - copy_from_range(It first_it, It last_it); + copy_from_range(It, It); #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; + assert_valid(const char*, int) const; #endif private: inline void - push_imp(node_pointer p_nd); + push_imp(node_pointer); node_pointer - join_node_children(node_pointer p_nd); + join_node_children(node_pointer); node_pointer - forward_join(node_pointer p_nd, node_pointer p_next); + forward_join(node_pointer, node_pointer); node_pointer - back_join(node_pointer p_nd, node_pointer p_next); + back_join(node_pointer, node_pointer); void - remove_node(node_pointer p_nd); + remove_node(node_pointer); }; -#define PB_DS_ASSERT_NODE_CONSISTENT(_Node, _Bool) \ - _GLIBCXX_DEBUG_ONLY(assert_node_consistent(_Node, _Bool, \ - __FILE__, __LINE__);) +#define PB_DS_ASSERT_NODE_CONSISTENT(_Node, _Bool) \ + _GLIBCXX_DEBUG_ONLY(base_type::assert_node_consistent(_Node, _Bool, \ + __FILE__, __LINE__);) #include #include @@ -212,7 +175,7 @@ namespace __gnu_pbds #undef PB_DS_ASSERT_NODE_CONSISTENT #undef PB_DS_CLASS_C_DEC #undef PB_DS_CLASS_T_DEC -#undef PB_DS_BASE_C_DEC +#undef PB_DS_P_HEAP_BASE } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp index e5469b9b99b..a74ed63b845 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file split_join_fn_imps.hpp + * @file pairing_heap_/split_join_fn_imps.hpp * Contains an implementation class for a pairing heap. */ @@ -53,44 +53,32 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) - return; } base_type::to_linked_list(); - node_pointer p_out = base_type::prune(pred); - while (p_out != 0) { _GLIBCXX_DEBUG_ASSERT(base_type::m_size > 0); --base_type::m_size; - ++other.m_size; - node_pointer p_next = p_out->m_p_next_sibling; - p_out->m_p_l_child = p_out->m_p_next_sibling = p_out->m_p_prev_or_parent = 0; other.push_imp(p_out); - p_out = p_next; } PB_DS_ASSERT_VALID(other) - node_pointer p_cur = base_type::m_p_root; - base_type::m_p_root = 0; - while (p_cur != 0) { node_pointer p_next = p_cur->m_p_next_sibling; - p_cur->m_p_l_child = p_cur->m_p_next_sibling = p_cur->m_p_prev_or_parent = 0; push_imp(p_cur); - p_cur = p_next; } @@ -110,7 +98,6 @@ join(PB_DS_CLASS_C_DEC& other) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) - return; } @@ -120,7 +107,6 @@ join(PB_DS_CLASS_C_DEC& other) { base_type::make_child_of(base_type::m_p_root, other.m_p_root); PB_DS_ASSERT_NODE_CONSISTENT(other.m_p_root, false) - base_type::m_p_root = other.m_p_root; } else @@ -130,11 +116,8 @@ join(PB_DS_CLASS_C_DEC& other) } base_type::m_size += other.m_size; - other.m_p_root = 0; other.m_size = 0; - PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp deleted file mode 100644 index b7cdf236311..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/child_iterator.hpp +++ /dev/null @@ -1,93 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file child_iterator.hpp - * Contains a iterator for a patricia tree. - */ - -struct iterator : public const_iterator -{ -public: - typedef std::forward_iterator_tag iterator_category; - typedef typename Allocator::difference_type difference_type; - typedef node_pointer value_type; - typedef node_pointer_pointer pointer; - typedef node_pointer_reference reference; - - inline - iterator(node_pointer_pointer p_p_cur = 0, - node_pointer_pointer p_p_end = 0) - : const_iterator(p_p_cur, p_p_end) - { } - - inline bool - operator==(const iterator& other) const - { return const_iterator::m_p_p_cur == other.m_p_p_cur; } - - inline bool - operator!=(const iterator& other) const - { return const_iterator::m_p_p_cur != other.m_p_p_cur; } - - inline iterator& - operator++() - { - const_iterator::operator++(); - return *this; - } - - inline iterator - operator++(int) - { - iterator ret_it(*this); - operator++(); - return ret_it; - } - - node_pointer_pointer - operator->() - { - _GLIBCXX_DEBUG_ONLY(const_iterator::assert_referencible();) - return const_iterator::m_p_p_cur; - } - - node_pointer - operator*() - { - _GLIBCXX_DEBUG_ONLY(const_iterator::assert_referencible();) - return *const_iterator::m_p_p_cur; - } -}; - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp deleted file mode 100644 index 184b986522f..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file cond_dtor_entry_dealtor.hpp - * Contains a binary tree container conditional deallocator - */ - -class cond_dealtor -{ -public: - inline - cond_dealtor(leaf_pointer p_nd) : m_p_nd(p_nd), - m_no_action_dtor(false), - m_call_destructor(false) - { } - - inline void - set_no_action_dtor() - { - m_no_action_dtor = true; - } - - inline void - set_call_destructor() - { - m_call_destructor = true; - } - - inline - ~cond_dealtor() - { - if (m_no_action_dtor) - return; - - if (m_call_destructor) - m_p_nd->~leaf(); - - s_leaf_allocator.deallocate(m_p_nd, 1); - } - -protected: - leaf_pointer m_p_nd; - bool m_no_action_dtor; - bool m_call_destructor; -}; - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp deleted file mode 100644 index 730148e1429..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp +++ /dev/null @@ -1,111 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file const_child_iterator.hpp - * Contains a const_iterator for a patricia tree. - */ - -struct const_iterator -{ -public: - typedef std::forward_iterator_tag iterator_category; - - typedef typename Allocator::difference_type difference_type; - - typedef node_pointer value_type; - - typedef node_pointer_pointer pointer; - - typedef node_pointer_reference reference; - -public: - inline - const_iterator(node_pointer_pointer p_p_cur = 0, - node_pointer_pointer p_p_end = 0) - : m_p_p_cur(p_p_cur), m_p_p_end(p_p_end) - { } - - inline bool - operator==(const const_iterator& other) const - { return m_p_p_cur == other.m_p_p_cur; } - - inline bool - operator!=(const const_iterator& other) const - { return m_p_p_cur != other.m_p_p_cur; } - - inline const_iterator& - operator++() - { - do - ++m_p_p_cur; - while (m_p_p_cur != m_p_p_end&& * m_p_p_cur == 0); - return *this; - } - - inline const_iterator - operator++(int) - { - const_iterator ret_it(*this); - operator++(); - return ret_it; - } - - const node_pointer_pointer - operator->() const - { - _GLIBCXX_DEBUG_ONLY(assert_referencible();) - return (m_p_p_cur); - } - - const_node_pointer - operator*() const - { - _GLIBCXX_DEBUG_ONLY(assert_referencible();) - return (*m_p_p_cur); - } - -protected: -#ifdef _GLIBCXX_DEBUG - void - assert_referencible() const - { _GLIBCXX_DEBUG_ASSERT(m_p_p_cur != m_p_p_end&& * m_p_p_cur != 0); } -#endif - -public: - node_pointer_pointer m_p_p_cur; - node_pointer_pointer m_p_p_end; -}; - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp index 6201b1d8525..8370a2ec885 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp @@ -1,4 +1,4 @@ -// -*- C++ -*- + // -*- C++ -*- // Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 // Free Software Foundation, Inc. @@ -35,8 +35,8 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp - * Contains an implementation class for bin_search_tree_. + * @file pat_trie_/constructors_destructor_fn_imps.hpp + * Contains an implementation class for pat_trie. */ PB_DS_CLASS_T_DEC @@ -44,8 +44,8 @@ typename PB_DS_CLASS_C_DEC::head_allocator PB_DS_CLASS_C_DEC::s_head_allocator; PB_DS_CLASS_T_DEC -typename PB_DS_CLASS_C_DEC::internal_node_allocator -PB_DS_CLASS_C_DEC::s_internal_node_allocator; +typename PB_DS_CLASS_C_DEC::inode_allocator +PB_DS_CLASS_C_DEC::s_inode_allocator; PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::leaf_allocator @@ -53,7 +53,7 @@ PB_DS_CLASS_C_DEC::s_leaf_allocator; PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME() : +PB_DS_PAT_TRIE_NAME() : m_p_head(s_head_allocator.allocate(1)), m_size(0) { @@ -63,8 +63,8 @@ PB_DS_CLASS_NAME() : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const e_access_traits& r_e_access_traits) : - synth_e_access_traits(r_e_access_traits), +PB_DS_PAT_TRIE_NAME(const access_traits& r_access_traits) : + synth_access_traits(r_access_traits), m_p_head(s_head_allocator.allocate(1)), m_size(0) { @@ -74,11 +74,11 @@ PB_DS_CLASS_NAME(const e_access_traits& r_e_access_traits) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) : +PB_DS_PAT_TRIE_NAME(const PB_DS_CLASS_C_DEC& other) : #ifdef _GLIBCXX_DEBUG debug_base(other), #endif - synth_e_access_traits(other), + synth_access_traits(other), node_update(other), m_p_head(s_head_allocator.allocate(1)), m_size(0) @@ -115,7 +115,7 @@ swap(PB_DS_CLASS_C_DEC& other) PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) value_swap(other); - std::swap((e_access_traits& )(*this), (e_access_traits& )other); + std::swap((access_traits& )(*this), (access_traits& )other); PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) } @@ -132,7 +132,7 @@ value_swap(PB_DS_CLASS_C_DEC& other) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~PB_DS_CLASS_NAME() +~PB_DS_PAT_TRIE_NAME() { clear(); s_head_allocator.deallocate(m_p_head, 1); @@ -163,36 +163,33 @@ copy_from_range(It first_it, It last_it) PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -recursive_copy_node(const_node_pointer p_other_nd) +recursive_copy_node(node_const_pointer p_ncp) { - _GLIBCXX_DEBUG_ASSERT(p_other_nd != 0); - if (p_other_nd->m_type == pat_trie_leaf_node_type) + _GLIBCXX_DEBUG_ASSERT(p_ncp != 0); + if (p_ncp->m_type == leaf_node) { - const_leaf_pointer p_other_leaf = static_cast(p_other_nd); - + leaf_const_pointer p_other_lf = static_cast(p_ncp); leaf_pointer p_new_lf = s_leaf_allocator.allocate(1); cond_dealtor cond(p_new_lf); - new (p_new_lf) leaf(p_other_leaf->value()); - apply_update(p_new_lf, (node_update* )this); + new (p_new_lf) leaf(p_other_lf->value()); + apply_update(p_new_lf, (node_update*)this); cond.set_no_action_dtor(); return (p_new_lf); } - _GLIBCXX_DEBUG_ASSERT(p_other_nd->m_type == pat_trie_internal_node_type); - node_pointer a_p_children[internal_node::arr_size]; + _GLIBCXX_DEBUG_ASSERT(p_ncp->m_type == i_node); + node_pointer a_p_children[inode::arr_size]; size_type child_i = 0; - const_internal_node_pointer p_other_internal_nd = - static_cast(p_other_nd); + inode_const_pointer p_icp = static_cast(p_ncp); - typename internal_node::const_iterator child_it = - p_other_internal_nd->begin(); + typename inode::const_iterator child_it = p_icp->begin(); - internal_node_pointer p_ret; + inode_pointer p_ret; __try { - while (child_it != p_other_internal_nd->end()) + while (child_it != p_icp->end()) a_p_children[child_i++] = recursive_copy_node(*(child_it++)); - p_ret = s_internal_node_allocator.allocate(1); + p_ret = s_inode_allocator.allocate(1); } __catch(...) { @@ -201,8 +198,7 @@ recursive_copy_node(const_node_pointer p_other_nd) __throw_exception_again; } - new (p_ret) internal_node(p_other_internal_nd->get_e_ind(), - pref_begin(a_p_children[0])); + new (p_ret) inode(p_icp->get_e_ind(), pref_begin(a_p_children[0])); --child_i; _GLIBCXX_DEBUG_ASSERT(child_i >= 1); @@ -210,6 +206,6 @@ recursive_copy_node(const_node_pointer p_other_nd) p_ret->add_child(a_p_children[child_i], pref_begin(a_p_children[child_i]), pref_end(a_p_children[child_i]), this); while (child_i-- > 0); - apply_update(p_ret, (node_update* )this); + apply_update(p_ret, (node_update*)this); return p_ret; } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp index 1beceb568ef..0aa4b28c10e 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file pat_trie_/debug_fn_imps.hpp * Contains an implementation class for pat_trie_. */ @@ -57,8 +57,8 @@ assert_valid(const char* __file, int __line) const return; } - PB_DS_DEBUG_VERIFY(m_p_head->m_p_min->m_type == pat_trie_leaf_node_type); - PB_DS_DEBUG_VERIFY(m_p_head->m_p_max->m_type == pat_trie_leaf_node_type); + PB_DS_DEBUG_VERIFY(m_p_head->m_p_min->m_type == leaf_node); + PB_DS_DEBUG_VERIFY(m_p_head->m_p_max->m_type == leaf_node); PB_DS_DEBUG_VERIFY(!empty()); } @@ -87,8 +87,8 @@ assert_reverse_iterators(const char* __file, int __line) const for (const_reverse_iterator it = rbegin(); it != rend(); ++it) { ++calc_size; - const_node_pointer p_nd = - const_cast(this)->find_imp(PB_DS_V2F(*it)); + node_const_pointer p_nd = + const_cast(this)->find_imp(PB_DS_V2F(*it)); PB_DS_DEBUG_VERIFY(p_nd == it.m_p_nd); } PB_DS_DEBUG_VERIFY(calc_size == m_size); @@ -97,22 +97,19 @@ assert_reverse_iterators(const char* __file, int __line) const PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: -recursive_count_leafs(const_node_pointer p_nd, - const char* __file, int __line) +recursive_count_leafs(node_const_pointer p_nd, const char* __file, int __line) { if (p_nd == 0) return (0); - if (p_nd->m_type == pat_trie_leaf_node_type) + if (p_nd->m_type == leaf_node) return (1); - PB_DS_DEBUG_VERIFY(p_nd->m_type == pat_trie_internal_node_type); + PB_DS_DEBUG_VERIFY(p_nd->m_type == i_node); size_type ret = 0; - for (typename internal_node::const_iterator it = - static_cast(p_nd)->begin(); - it != static_cast(p_nd)->end(); + for (typename inode::const_iterator it = static_cast(p_nd)->begin(); + it != static_cast(p_nd)->end(); ++it) ret += recursive_count_leafs(*it, __file, __line); return ret; } -#endif - +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp index cbf1b417098..c0ccd108e42 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp @@ -34,24 +34,24 @@ // warranty. /** - * @file erase_fn_imps.hpp - * Contains an implementation class for bin_search_tree_. + * @file pat_trie_/erase_fn_imps.hpp + * Contains an implementation class for pat_trie. */ PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: -erase(const_key_reference r_key) +erase(key_const_reference r_key) { node_pointer p_nd = find_imp(r_key); - if (p_nd == 0 || p_nd->m_type == pat_trie_internal_node_type) + if (p_nd == 0 || p_nd->m_type == i_node) { PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key) return false; } - _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_leaf_node_type); - if (!synth_e_access_traits::equal_keys(PB_DS_V2F(reinterpret_cast(p_nd)->value()), r_key)) + _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == leaf_node); + if (!synth_access_traits::equal_keys(PB_DS_V2F(reinterpret_cast(p_nd)->value()), r_key)) { PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key) return false; @@ -66,48 +66,47 @@ erase(const_key_reference r_key) PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -erase_fixup(internal_node_pointer p_nd) +erase_fixup(inode_pointer p_nd) { _GLIBCXX_DEBUG_ASSERT(std::distance(p_nd->begin(), p_nd->end()) >= 1); if (std::distance(p_nd->begin(), p_nd->end()) == 1) { node_pointer p_parent = p_nd->m_p_parent; if (p_parent == m_p_head) - m_p_head->m_p_parent =* p_nd->begin(); + m_p_head->m_p_parent = *p_nd->begin(); else - { - _GLIBCXX_DEBUG_ASSERT(p_parent->m_type == pat_trie_internal_node_type); - node_pointer p_new_child =* p_nd->begin(); - static_cast(p_parent)->replace_child( - p_new_child, - pref_begin(p_new_child), - pref_end(p_new_child), - this); - } + { + _GLIBCXX_DEBUG_ASSERT(p_parent->m_type == i_node); + node_pointer p_new_child = *p_nd->begin(); + + typedef inode_pointer inode_ptr; + inode_ptr p_internal = static_cast(p_parent); + p_internal->replace_child(p_new_child, pref_begin(p_new_child), + pref_end(p_new_child), this); + } (*p_nd->begin())->m_p_parent = p_nd->m_p_parent; - p_nd->~internal_node(); - s_internal_node_allocator.deallocate(p_nd, 1); + p_nd->~inode(); + s_inode_allocator.deallocate(p_nd, 1); if (p_parent == m_p_head) return; - _GLIBCXX_DEBUG_ASSERT(p_parent->m_type == pat_trie_internal_node_type); - p_nd = static_cast(p_parent); + _GLIBCXX_DEBUG_ASSERT(p_parent->m_type == i_node); + p_nd = static_cast(p_parent); } while (true) { _GLIBCXX_DEBUG_ASSERT(std::distance(p_nd->begin(), p_nd->end()) > 1); p_nd->update_prefixes(this); - apply_update(p_nd, (node_update* )this); + apply_update(p_nd, (node_update*)this); PB_DS_ASSERT_NODE_VALID(p_nd) - if (p_nd->m_p_parent->m_type == pat_trie_head_node_type) - return; + if (p_nd->m_p_parent->m_type == head_node) + return; - _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_parent->m_type == - pat_trie_internal_node_type); + _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_parent->m_type == i_node); - p_nd = static_cast(p_nd->m_p_parent); + p_nd = static_cast(p_nd->m_p_parent); } } @@ -118,7 +117,7 @@ actual_erase_leaf(leaf_pointer p_l) { _GLIBCXX_DEBUG_ASSERT(m_size > 0); --m_size; - _GLIBCXX_DEBUG_ONLY(erase_existing(PB_DS_V2F(p_l->value()))); + _GLIBCXX_DEBUG_ONLY(debug_base::erase_existing(PB_DS_V2F(p_l->value()))); p_l->~leaf(); s_leaf_allocator.deallocate(p_l, 1); } @@ -128,15 +127,14 @@ void PB_DS_CLASS_C_DEC:: clear() { - PB_DS_ASSERT_VALID((*this)) - if (empty()) - return; - - clear_imp(m_p_head->m_p_parent); - m_size = 0; - initialize(); - _GLIBCXX_DEBUG_ONLY(debug_base::clear();) - PB_DS_ASSERT_VALID((*this)) + if (!empty()) + { + clear_imp(m_p_head->m_p_parent); + m_size = 0; + initialize(); + _GLIBCXX_DEBUG_ONLY(debug_base::clear();) + PB_DS_ASSERT_VALID((*this)) + } } PB_DS_CLASS_T_DEC @@ -144,22 +142,22 @@ void PB_DS_CLASS_C_DEC:: clear_imp(node_pointer p_nd) { - if (p_nd->m_type == pat_trie_internal_node_type) + if (p_nd->m_type == i_node) { - _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type); - for (typename internal_node::iterator it = - static_cast(p_nd)->begin(); - it != static_cast(p_nd)->end(); + _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node); + for (typename inode::iterator it = + static_cast(p_nd)->begin(); + it != static_cast(p_nd)->end(); ++it) - { + { node_pointer p_child =* it; clear_imp(p_child); - } - s_internal_node_allocator.deallocate(static_cast(p_nd), 1); + } + s_inode_allocator.deallocate(static_cast(p_nd), 1); return; } - _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_leaf_node_type); + _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == leaf_node); static_cast(p_nd)->~leaf(); s_leaf_allocator.deallocate(static_cast(p_nd), 1); } @@ -176,7 +174,7 @@ erase(const_iterator it) const_iterator ret_it = it; ++ret_it; - _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == pat_trie_leaf_node_type); + _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == leaf_node); erase_leaf(static_cast(it.m_p_nd)); PB_DS_ASSERT_VALID((*this)) return ret_it; @@ -194,7 +192,7 @@ erase(iterator it) return it; iterator ret_it = it; ++ret_it; - _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == pat_trie_leaf_node_type); + _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == leaf_node); erase_leaf(static_cast(it.m_p_nd)); PB_DS_ASSERT_VALID((*this)) return ret_it; @@ -213,7 +211,7 @@ erase(const_reverse_iterator it) const_reverse_iterator ret_it = it; ++ret_it; - _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == pat_trie_leaf_node_type); + _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == leaf_node); erase_leaf(static_cast(it.m_p_nd)); PB_DS_ASSERT_VALID((*this)) return ret_it; @@ -232,7 +230,7 @@ erase(reverse_iterator it) reverse_iterator ret_it = it; ++ret_it; - _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == pat_trie_leaf_node_type); + _GLIBCXX_DEBUG_ASSERT(it.m_p_nd->m_type == leaf_node); erase_leaf(static_cast(it.m_p_nd)); PB_DS_ASSERT_VALID((*this)) return ret_it; @@ -254,8 +252,8 @@ erase_if(Pred pred) PB_DS_ASSERT_VALID((*this)) if (pred(*it)) { - ++num_ersd; - it = erase(it); + ++num_ersd; + it = erase(it); } else ++it; @@ -271,7 +269,7 @@ PB_DS_CLASS_C_DEC:: erase_leaf(leaf_pointer p_l) { update_min_max_for_erased_leaf(p_l); - if (p_l->m_p_parent->m_type == pat_trie_head_node_type) + if (p_l->m_p_parent->m_type == head_node) { _GLIBCXX_DEBUG_ASSERT(size() == 1); clear(); @@ -279,11 +277,9 @@ erase_leaf(leaf_pointer p_l) } _GLIBCXX_DEBUG_ASSERT(size() > 1); - _GLIBCXX_DEBUG_ASSERT(p_l->m_p_parent->m_type == - pat_trie_internal_node_type); + _GLIBCXX_DEBUG_ASSERT(p_l->m_p_parent->m_type == i_node); - internal_node_pointer p_parent = - static_cast(p_l->m_p_parent); + inode_pointer p_parent = static_cast(p_l->m_p_parent); p_parent->remove_child(p_l); erase_fixup(p_parent); @@ -302,7 +298,7 @@ update_min_max_for_erased_leaf(leaf_pointer p_l) return; } - if (p_l == static_cast(m_p_head->m_p_min)) + if (p_l == static_cast(m_p_head->m_p_min)) { iterator it(p_l); ++it; @@ -310,7 +306,7 @@ update_min_max_for_erased_leaf(leaf_pointer p_l) return; } - if (p_l == static_cast(m_p_head->m_p_max)) + if (p_l == static_cast(m_p_head->m_p_max)) { iterator it(p_l); --it; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp index e2e20f186d7..bbef9d7a043 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp @@ -34,25 +34,25 @@ // warranty. /** - * @file find_fn_imps.hpp - * Contains an implementation class for bin_search_tree_. + * @file pat_trie_/find_fn_imps.hpp + * Contains an implementation class for pat_trie. */ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::point_iterator PB_DS_CLASS_C_DEC:: -find(const_key_reference r_key) +find(key_const_reference r_key) { PB_DS_ASSERT_VALID((*this)) node_pointer p_nd = find_imp(r_key); - if (p_nd == 0 || p_nd->m_type != pat_trie_leaf_node_type) + if (p_nd == 0 || p_nd->m_type != leaf_node) { PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key) return end(); } - if (synth_e_access_traits::equal_keys(PB_DS_V2F(static_cast(p_nd)->value()), r_key)) + if (synth_access_traits::equal_keys(PB_DS_V2F(static_cast(p_nd)->value()), r_key)) { PB_DS_CHECK_KEY_EXISTS(r_key) return iterator(p_nd); @@ -63,21 +63,21 @@ find(const_key_reference r_key) } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_point_iterator +inline typename PB_DS_CLASS_C_DEC::point_const_iterator PB_DS_CLASS_C_DEC:: -find(const_key_reference r_key) const +find(key_const_reference r_key) const { PB_DS_ASSERT_VALID((*this)) - const_node_pointer p_nd = const_cast(this)->find_imp(r_key); + node_const_pointer p_nd = const_cast(this)->find_imp(r_key); - if (p_nd == 0 || p_nd->m_type != pat_trie_leaf_node_type) + if (p_nd == 0 || p_nd->m_type != leaf_node) { PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key) return end(); } - if (synth_e_access_traits::equal_keys(PB_DS_V2F(static_cast(p_nd)->value()), r_key)) + if (synth_access_traits::equal_keys(PB_DS_V2F(static_cast(p_nd)->value()), r_key)) { PB_DS_CHECK_KEY_EXISTS(r_key) return const_iterator(const_cast(p_nd)); @@ -90,23 +90,23 @@ find(const_key_reference r_key) const PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -find_imp(const_key_reference r_key) +find_imp(key_const_reference r_key) { if (empty()) - return (0); + return 0; - typename synth_e_access_traits::const_iterator b_it = - synth_e_access_traits::begin(r_key); - typename synth_e_access_traits::const_iterator e_it = - synth_e_access_traits::end(r_key); + typename synth_access_traits::const_iterator b_it = + synth_access_traits::begin(r_key); + typename synth_access_traits::const_iterator e_it = + synth_access_traits::end(r_key); node_pointer p_nd = m_p_head->m_p_parent; _GLIBCXX_DEBUG_ASSERT(p_nd != 0); - while (p_nd->m_type != pat_trie_leaf_node_type) + while (p_nd->m_type != leaf_node) { - _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type); - node_pointer p_next_nd = static_cast(p_nd)->get_child_node(b_it, e_it, this); + _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node); + node_pointer p_next_nd = static_cast(p_nd)->get_child_node(b_it, e_it, this); if (p_next_nd == 0) return p_nd; @@ -118,7 +118,7 @@ find_imp(const_key_reference r_key) PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -lower_bound_imp(const_key_reference r_key) +lower_bound_imp(key_const_reference r_key) { if (empty()) return (m_p_head); @@ -126,30 +126,30 @@ lower_bound_imp(const_key_reference r_key) node_pointer p_nd = m_p_head->m_p_parent; _GLIBCXX_DEBUG_ASSERT(p_nd != 0); - typename PB_DS_CLASS_C_DEC::const_e_iterator b_it = - synth_e_access_traits::begin(r_key); + typename PB_DS_CLASS_C_DEC::a_const_iterator b_it = + synth_access_traits::begin(r_key); - typename PB_DS_CLASS_C_DEC::const_e_iterator e_it = - synth_e_access_traits::end(r_key); + typename PB_DS_CLASS_C_DEC::a_const_iterator e_it = + synth_access_traits::end(r_key); size_type checked_ind = 0; while (true) { - if (p_nd->m_type == pat_trie_leaf_node_type) + if (p_nd->m_type == leaf_node) { - if (!synth_e_access_traits::cmp_keys(PB_DS_V2F(static_cast(p_nd)->value()), r_key)) + if (!synth_access_traits::cmp_keys(PB_DS_V2F(static_cast(p_nd)->value()), r_key)) return p_nd; iterator it(p_nd); ++it; return it.m_p_nd; } - _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type); + _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node); const size_type new_checked_ind = - static_cast(p_nd)->get_e_ind(); + static_cast(p_nd)->get_e_ind(); p_nd = - static_cast(p_nd)->get_lower_bound_child_node( b_it, e_it, checked_ind, this); + static_cast(p_nd)->get_lower_bound_child_node( b_it, e_it, checked_ind, this); checked_ind = new_checked_ind; } } @@ -157,84 +157,84 @@ lower_bound_imp(const_key_reference r_key) PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::point_iterator PB_DS_CLASS_C_DEC:: -lower_bound(const_key_reference r_key) +lower_bound(key_const_reference r_key) { return point_iterator(lower_bound_imp(r_key)); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_point_iterator +inline typename PB_DS_CLASS_C_DEC::point_const_iterator PB_DS_CLASS_C_DEC:: -lower_bound(const_key_reference r_key) const +lower_bound(key_const_reference r_key) const { - return const_point_iterator(const_cast(this)->lower_bound_imp(r_key)); + return point_const_iterator(const_cast(this)->lower_bound_imp(r_key)); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::point_iterator PB_DS_CLASS_C_DEC:: -upper_bound(const_key_reference r_key) +upper_bound(key_const_reference r_key) { point_iterator l_bound_it = lower_bound(r_key); _GLIBCXX_DEBUG_ASSERT(l_bound_it == end() || - !synth_e_access_traits::cmp_keys(PB_DS_V2F(*l_bound_it), + !synth_access_traits::cmp_keys(PB_DS_V2F(*l_bound_it), r_key)); if (l_bound_it == end() || - synth_e_access_traits::cmp_keys(r_key, PB_DS_V2F(*l_bound_it))) + synth_access_traits::cmp_keys(r_key, PB_DS_V2F(*l_bound_it))) return l_bound_it; return ++l_bound_it; } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_point_iterator +inline typename PB_DS_CLASS_C_DEC::point_const_iterator PB_DS_CLASS_C_DEC:: -upper_bound(const_key_reference r_key) const +upper_bound(key_const_reference r_key) const { - const_point_iterator l_bound_it = lower_bound(r_key); + point_const_iterator l_bound_it = lower_bound(r_key); _GLIBCXX_DEBUG_ASSERT(l_bound_it == end() || - !synth_e_access_traits::cmp_keys(PB_DS_V2F(*l_bound_it), + !synth_access_traits::cmp_keys(PB_DS_V2F(*l_bound_it), r_key)); if (l_bound_it == end() || - synth_e_access_traits::cmp_keys(r_key, PB_DS_V2F(*l_bound_it))) + synth_access_traits::cmp_keys(r_key, PB_DS_V2F(*l_bound_it))) return l_bound_it; return ++l_bound_it; } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_e_iterator +inline typename PB_DS_CLASS_C_DEC::a_const_iterator PB_DS_CLASS_C_DEC:: -pref_begin(const_node_pointer p_nd) +pref_begin(node_const_pointer p_nd) { - if (p_nd->m_type == pat_trie_leaf_node_type) - return (synth_e_access_traits::begin(PB_DS_V2F(static_cast(p_nd)->value()))); + if (p_nd->m_type == leaf_node) + return (synth_access_traits::begin(PB_DS_V2F(static_cast(p_nd)->value()))); - _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type); - return static_cast(p_nd)->pref_b_it(); + _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node); + return static_cast(p_nd)->pref_b_it(); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_e_iterator +inline typename PB_DS_CLASS_C_DEC::a_const_iterator PB_DS_CLASS_C_DEC:: -pref_end(const_node_pointer p_nd) +pref_end(node_const_pointer p_nd) { - if (p_nd->m_type == pat_trie_leaf_node_type) - return (synth_e_access_traits::end(PB_DS_V2F(static_cast(p_nd)->value()))); + if (p_nd->m_type == leaf_node) + return (synth_access_traits::end(PB_DS_V2F(static_cast(p_nd)->value()))); - _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type); - return static_cast(p_nd)->pref_e_it(); + _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node); + return static_cast(p_nd)->pref_e_it(); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_leaf_pointer +inline typename PB_DS_CLASS_C_DEC::leaf_const_pointer PB_DS_CLASS_C_DEC:: -leftmost_descendant(const_node_pointer p_nd) +leftmost_descendant(node_const_pointer p_nd) { - if (p_nd->m_type == pat_trie_leaf_node_type) - return static_cast(p_nd); - return static_cast(p_nd)->leftmost_descendant(); + if (p_nd->m_type == leaf_node) + return static_cast(p_nd); + return static_cast(p_nd)->leftmost_descendant(); } PB_DS_CLASS_T_DEC @@ -242,19 +242,19 @@ inline typename PB_DS_CLASS_C_DEC::leaf_pointer PB_DS_CLASS_C_DEC:: leftmost_descendant(node_pointer p_nd) { - if (p_nd->m_type == pat_trie_leaf_node_type) + if (p_nd->m_type == leaf_node) return static_cast(p_nd); - return static_cast(p_nd)->leftmost_descendant(); + return static_cast(p_nd)->leftmost_descendant(); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_leaf_pointer +inline typename PB_DS_CLASS_C_DEC::leaf_const_pointer PB_DS_CLASS_C_DEC:: -rightmost_descendant(const_node_pointer p_nd) +rightmost_descendant(node_const_pointer p_nd) { - if (p_nd->m_type == pat_trie_leaf_node_type) - return static_cast(p_nd); - return static_cast(p_nd)->rightmost_descendant(); + if (p_nd->m_type == leaf_node) + return static_cast(p_nd); + return static_cast(p_nd)->rightmost_descendant(); } PB_DS_CLASS_T_DEC @@ -262,8 +262,8 @@ inline typename PB_DS_CLASS_C_DEC::leaf_pointer PB_DS_CLASS_C_DEC:: rightmost_descendant(node_pointer p_nd) { - if (p_nd->m_type == pat_trie_leaf_node_type) + if (p_nd->m_type == leaf_node) return static_cast(p_nd); - return static_cast(p_nd)->rightmost_descendant(); + return static_cast(p_nd)->rightmost_descendant(); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/head.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/head.hpp deleted file mode 100644 index bca847db784..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/head.hpp +++ /dev/null @@ -1,129 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file head.hpp - * Contains a leaf for a patricia tree. - */ - -#ifndef PB_DS_PAT_TRIE_IHEAD_HPP -#define PB_DS_PAT_TRIE_IHEAD_HPP - -#include -#include - -namespace __gnu_pbds -{ - namespace detail - { -#define PB_DS_CLASS_T_DEC \ - template - -#define PB_DS_CLASS_C_DEC \ - pat_trie_head - -#define PB_DS_BASE_C_DEC \ - pat_trie_node_base - - template - struct pat_trie_head : public PB_DS_BASE_C_DEC - { - private: - typedef E_Access_Traits e_access_traits; - - typedef - typename Allocator::template rebind< - e_access_traits>::other::const_pointer - const_e_access_traits_pointer; - - typedef - typename Allocator::template rebind< - PB_DS_BASE_C_DEC>::other::pointer - node_pointer; - -#ifdef _GLIBCXX_DEBUG - typedef - typename PB_DS_BASE_C_DEC::subtree_debug_info - subtree_debug_info; -#endif - - public: - pat_trie_head(); - -#ifdef _GLIBCXX_DEBUG - virtual subtree_debug_info - assert_valid_imp(const_e_access_traits_pointer p_traits, - const char* file, int line) const; -#endif - - public: - node_pointer m_p_min; - - node_pointer m_p_max; - }; - - PB_DS_CLASS_T_DEC - PB_DS_CLASS_C_DEC:: - pat_trie_head() : PB_DS_BASE_C_DEC(pat_trie_head_node_type) - { } - -#ifdef _GLIBCXX_DEBUG - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::subtree_debug_info - PB_DS_CLASS_C_DEC:: - assert_valid_imp(const_e_access_traits_pointer /*p_traits*/, - const char* __file, int __line) const - { - _GLIBCXX_DEBUG_VERIFY_AT(false, - _M_message("Assertion from %1;:%2;") - ._M_string(__FILE__)._M_integer(__LINE__), - __file, __line); - return subtree_debug_info(); - } -#endif - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC -#undef PB_DS_BASE_C_DEC - - } // namespace detail -} // namespace __gnu_pbds - -#endif - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp index 81d7096a94d..8246b518252 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp @@ -34,8 +34,8 @@ // warranty. /** - * @file info_fn_imps.hpp - * Contains an implementation class for bin_search_tree_. + * @file pat_trie_/info_fn_imps.hpp + * Contains an implementation class for pat_trie. */ PB_DS_CLASS_T_DEC @@ -54,5 +54,5 @@ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: max_size() const -{ return s_internal_node_allocator.max_size(); } +{ return s_inode_allocator.max_size(); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp index 9afce8b0945..1b11280fd32 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp @@ -34,8 +34,8 @@ // warranty. /** - * @file insert_join_fn_imps.hpp - * Contains an implementation class for bin_search_tree_. + * @file pat_trie_/insert_join_fn_imps.hpp + * Contains an implementation class for pat_trie. */ PB_DS_CLASS_T_DEC @@ -45,7 +45,7 @@ join(PB_DS_CLASS_C_DEC& other) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) - split_join_branch_bag bag; + branch_bag bag; if (!join_prep(other, bag)) { PB_DS_ASSERT_VALID((*this)) @@ -53,7 +53,7 @@ join(PB_DS_CLASS_C_DEC& other) return; } - m_p_head->m_p_parent = rec_join(m_p_head->m_p_parent, + m_p_head->m_p_parent = rec_join(m_p_head->m_p_parent, other.m_p_head->m_p_parent, 0, bag); m_p_head->m_p_parent->m_p_parent = m_p_head; @@ -68,7 +68,7 @@ join(PB_DS_CLASS_C_DEC& other) PB_DS_CLASS_T_DEC bool PB_DS_CLASS_C_DEC:: -join_prep(PB_DS_CLASS_C_DEC& other, split_join_branch_bag& r_bag) +join_prep(PB_DS_CLASS_C_DEC& other, branch_bag& r_bag) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) @@ -82,12 +82,12 @@ join_prep(PB_DS_CLASS_C_DEC& other, split_join_branch_bag& r_bag) } const bool greater = - synth_e_access_traits::cmp_keys(PB_DS_V2F(static_cast(m_p_head->m_p_max)->value()), - PB_DS_V2F(static_cast(other.m_p_head->m_p_min)->value())); + synth_access_traits::cmp_keys(PB_DS_V2F(static_cast(m_p_head->m_p_max)->value()), + PB_DS_V2F(static_cast(other.m_p_head->m_p_min)->value())); const bool lesser = - synth_e_access_traits::cmp_keys(PB_DS_V2F(static_cast(other.m_p_head->m_p_max)->value()), - PB_DS_V2F(static_cast(m_p_head->m_p_min)->value())); + synth_access_traits::cmp_keys(PB_DS_V2F(static_cast(other.m_p_head->m_p_max)->value()), + PB_DS_V2F(static_cast(m_p_head->m_p_min)->value())); if (!greater && !lesser) __throw_join_error(); @@ -100,91 +100,92 @@ join_prep(PB_DS_CLASS_C_DEC& other, split_join_branch_bag& r_bag) PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -rec_join_prep(const_node_pointer p_l, const_node_pointer p_r, split_join_branch_bag& r_bag) +rec_join_prep(node_const_pointer p_l, node_const_pointer p_r, + branch_bag& r_bag) { - if (p_l->m_type == pat_trie_leaf_node_type) + if (p_l->m_type == leaf_node) { - if (p_r->m_type == pat_trie_leaf_node_type) - { - rec_join_prep(static_cast(p_l), - static_cast(p_r), r_bag); + if (p_r->m_type == leaf_node) + { + rec_join_prep(static_cast(p_l), + static_cast(p_r), r_bag); return; - } + } - _GLIBCXX_DEBUG_ASSERT(p_r->m_type == pat_trie_internal_node_type); - rec_join_prep(static_cast(p_l), - static_cast(p_r), r_bag); + _GLIBCXX_DEBUG_ASSERT(p_r->m_type == i_node); + rec_join_prep(static_cast(p_l), + static_cast(p_r), r_bag); return; } - _GLIBCXX_DEBUG_ASSERT(p_l->m_type == pat_trie_internal_node_type); - if (p_r->m_type == pat_trie_leaf_node_type) + _GLIBCXX_DEBUG_ASSERT(p_l->m_type == i_node); + if (p_r->m_type == leaf_node) { - rec_join_prep(static_cast(p_l), - static_cast(p_r), r_bag); + rec_join_prep(static_cast(p_l), + static_cast(p_r), r_bag); return; } - _GLIBCXX_DEBUG_ASSERT(p_r->m_type == pat_trie_internal_node_type); + _GLIBCXX_DEBUG_ASSERT(p_r->m_type == i_node); - rec_join_prep(static_cast(p_l), - static_cast(p_r), r_bag); + rec_join_prep(static_cast(p_l), + static_cast(p_r), r_bag); } PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -rec_join_prep(const_leaf_pointer /*p_l*/, const_leaf_pointer /*p_r*/, - split_join_branch_bag& r_bag) +rec_join_prep(leaf_const_pointer /*p_l*/, leaf_const_pointer /*p_r*/, + branch_bag& r_bag) { r_bag.add_branch(); } PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -rec_join_prep(const_leaf_pointer /*p_l*/, const_internal_node_pointer /*p_r*/, - split_join_branch_bag& r_bag) +rec_join_prep(leaf_const_pointer /*p_l*/, inode_const_pointer /*p_r*/, + branch_bag& r_bag) { r_bag.add_branch(); } PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -rec_join_prep(const_internal_node_pointer /*p_l*/, const_leaf_pointer /*p_r*/, - split_join_branch_bag& r_bag) +rec_join_prep(inode_const_pointer /*p_l*/, leaf_const_pointer /*p_r*/, + branch_bag& r_bag) { r_bag.add_branch(); } PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -rec_join_prep(const_internal_node_pointer p_l, const_internal_node_pointer p_r, - split_join_branch_bag& r_bag) +rec_join_prep(inode_const_pointer p_l, inode_const_pointer p_r, + branch_bag& r_bag) { - if (p_l->get_e_ind() == p_r->get_e_ind() && - synth_e_access_traits::equal_prefixes(p_l->pref_b_it(), p_l->pref_e_it(), + if (p_l->get_e_ind() == p_r->get_e_ind() && + synth_access_traits::equal_prefixes(p_l->pref_b_it(), p_l->pref_e_it(), p_r->pref_b_it(), p_r->pref_e_it())) { - for (typename internal_node::const_iterator it = p_r->begin(); + for (typename inode::const_iterator it = p_r->begin(); it != p_r->end(); ++ it) - { - const_node_pointer p_l_join_child = p_l->get_join_child(*it, this); + { + node_const_pointer p_l_join_child = p_l->get_join_child(*it, this); if (p_l_join_child != 0) rec_join_prep(p_l_join_child, * it, r_bag); - } + } return; } - if (p_r->get_e_ind() < p_l->get_e_ind() && + if (p_r->get_e_ind() < p_l->get_e_ind() && p_r->should_be_mine(p_l->pref_b_it(), p_l->pref_e_it(), 0, this)) { - const_node_pointer p_r_join_child = p_r->get_join_child(p_l, this); + node_const_pointer p_r_join_child = p_r->get_join_child(p_l, this); if (p_r_join_child != 0) rec_join_prep(p_r_join_child, p_l, r_bag); return; } - if (p_r->get_e_ind() < p_l->get_e_ind() && + if (p_r->get_e_ind() < p_l->get_e_ind() && p_r->should_be_mine(p_l->pref_b_it(), p_l->pref_e_it(), 0, this)) { - const_node_pointer p_r_join_child = p_r->get_join_child(p_l, this); + node_const_pointer p_r_join_child = p_r->get_join_child(p_l, this); if (p_r_join_child != 0) rec_join_prep(p_r_join_child, p_l, r_bag); return; @@ -195,56 +196,57 @@ rec_join_prep(const_internal_node_pointer p_l, const_internal_node_pointer p_r, PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -rec_join(node_pointer p_l, node_pointer p_r, size_type checked_ind, split_join_branch_bag& r_bag) +rec_join(node_pointer p_l, node_pointer p_r, size_type checked_ind, + branch_bag& r_bag) { _GLIBCXX_DEBUG_ASSERT(p_r != 0); if (p_l == 0) { - apply_update(p_r, (node_update* )this); + apply_update(p_r, (node_update*)this); return (p_r); } - if (p_l->m_type == pat_trie_leaf_node_type) + if (p_l->m_type == leaf_node) { - if (p_r->m_type == pat_trie_leaf_node_type) - { + if (p_r->m_type == leaf_node) + { node_pointer p_ret = rec_join(static_cast(p_l), static_cast(p_r), r_bag); - apply_update(p_ret, (node_update* )this); + apply_update(p_ret, (node_update*)this); return p_ret; - } + } - _GLIBCXX_DEBUG_ASSERT(p_r->m_type == pat_trie_internal_node_type); + _GLIBCXX_DEBUG_ASSERT(p_r->m_type == i_node); node_pointer p_ret = rec_join(static_cast(p_l), - static_cast(p_r), + static_cast(p_r), checked_ind, r_bag); - apply_update(p_ret, (node_update* )this); + apply_update(p_ret, (node_update*)this); return p_ret; } - _GLIBCXX_DEBUG_ASSERT(p_l->m_type == pat_trie_internal_node_type); - if (p_r->m_type == pat_trie_leaf_node_type) + _GLIBCXX_DEBUG_ASSERT(p_l->m_type == i_node); + if (p_r->m_type == leaf_node) { - node_pointer p_ret = rec_join(static_cast(p_l), + node_pointer p_ret = rec_join(static_cast(p_l), static_cast(p_r), checked_ind, r_bag); - apply_update(p_ret, (node_update* )this); + apply_update(p_ret, (node_update*)this); return p_ret; } - _GLIBCXX_DEBUG_ASSERT(p_r->m_type == pat_trie_internal_node_type); - node_pointer p_ret = rec_join(static_cast(p_l), - static_cast(p_r), + _GLIBCXX_DEBUG_ASSERT(p_r->m_type == i_node); + node_pointer p_ret = rec_join(static_cast(p_l), + static_cast(p_r), r_bag); - apply_update(p_ret, (node_update* )this); + apply_update(p_ret, (node_update*)this); return p_ret; } PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -rec_join(leaf_pointer p_l, leaf_pointer p_r, split_join_branch_bag& r_bag) +rec_join(leaf_pointer p_l, leaf_pointer p_r, branch_bag& r_bag) { _GLIBCXX_DEBUG_ASSERT(p_r != 0); if (p_l == 0) @@ -257,13 +259,13 @@ rec_join(leaf_pointer p_l, leaf_pointer p_r, split_join_branch_bag& r_bag) PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -rec_join(leaf_pointer p_l, internal_node_pointer p_r, size_type checked_ind, - split_join_branch_bag& r_bag) +rec_join(leaf_pointer p_l, inode_pointer p_r, size_type checked_ind, + branch_bag& r_bag) { #ifdef _GLIBCXX_DEBUG const size_type lhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_l); const size_type rhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_r); -#endif +#endif _GLIBCXX_DEBUG_ASSERT(p_r != 0); node_pointer p_ret = rec_join(p_r, p_l, checked_ind, r_bag); @@ -274,7 +276,7 @@ rec_join(leaf_pointer p_l, internal_node_pointer p_r, size_type checked_ind, PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -rec_join(internal_node_pointer p_l, leaf_pointer p_r, size_type checked_ind, split_join_branch_bag& r_bag) +rec_join(inode_pointer p_l, leaf_pointer p_r, size_type checked_ind, branch_bag& r_bag) { _GLIBCXX_DEBUG_ASSERT(p_l != 0); _GLIBCXX_DEBUG_ASSERT(p_r != 0); @@ -282,14 +284,14 @@ rec_join(internal_node_pointer p_l, leaf_pointer p_r, size_type checked_ind, spl #ifdef _GLIBCXX_DEBUG const size_type lhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_l); const size_type rhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_r); -#endif +#endif if (!p_l->should_be_mine(pref_begin(p_r), pref_end(p_r), checked_ind, this)) { node_pointer p_ret = insert_branch(p_l, p_r, r_bag); PB_DS_ASSERT_NODE_VALID(p_ret) _GLIBCXX_DEBUG_ASSERT(PB_DS_RECURSIVE_COUNT_LEAFS(p_ret) == - lhs_leafs + rhs_leafs); + lhs_leafs + rhs_leafs); return p_ret; } @@ -312,7 +314,8 @@ rec_join(internal_node_pointer p_l, leaf_pointer p_r, size_type checked_ind, spl PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -rec_join(internal_node_pointer p_l, internal_node_pointer p_r, split_join_branch_bag& r_bag) +rec_join(inode_pointer p_l, inode_pointer p_r, + branch_bag& r_bag) { _GLIBCXX_DEBUG_ASSERT(p_l != 0); _GLIBCXX_DEBUG_ASSERT(p_r != 0); @@ -320,29 +323,29 @@ rec_join(internal_node_pointer p_l, internal_node_pointer p_r, split_join_branch #ifdef _GLIBCXX_DEBUG const size_type lhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_l); const size_type rhs_leafs = PB_DS_RECURSIVE_COUNT_LEAFS(p_r); -#endif +#endif - if (p_l->get_e_ind() == p_r->get_e_ind() && - synth_e_access_traits::equal_prefixes(p_l->pref_b_it(), p_l->pref_e_it(), + if (p_l->get_e_ind() == p_r->get_e_ind() && + synth_access_traits::equal_prefixes(p_l->pref_b_it(), p_l->pref_e_it(), p_r->pref_b_it(), p_r->pref_e_it())) { - for (typename internal_node::iterator it = p_r->begin(); + for (typename inode::iterator it = p_r->begin(); it != p_r->end(); ++ it) - { + { node_pointer p_new_child = rec_join(p_l->get_join_child(*it, this), * it, 0, r_bag); p_l->replace_child(p_new_child, pref_begin(p_new_child), pref_end(p_new_child), this); - } + } - p_r->~internal_node(); - s_internal_node_allocator.deallocate(p_r, 1); + p_r->~inode(); + s_inode_allocator.deallocate(p_r, 1); PB_DS_ASSERT_NODE_VALID(p_l) _GLIBCXX_DEBUG_ASSERT(PB_DS_RECURSIVE_COUNT_LEAFS(p_l) == lhs_leafs + rhs_leafs); return p_l; } - if (p_l->get_e_ind() < p_r->get_e_ind() && + if (p_l->get_e_ind() < p_r->get_e_ind() && p_l->should_be_mine(p_r->pref_b_it(), p_r->pref_e_it(), 0, this)) { node_pointer p_new_child = rec_join(p_l->get_join_child(p_r, this), @@ -353,13 +356,13 @@ rec_join(internal_node_pointer p_l, internal_node_pointer p_r, split_join_branch return p_l; } - if (p_r->get_e_ind() < p_l->get_e_ind() && + if (p_r->get_e_ind() < p_l->get_e_ind() && p_r->should_be_mine(p_l->pref_b_it(), p_l->pref_e_it(), 0, this)) { node_pointer p_new_child = rec_join(p_r->get_join_child(p_l, this), p_l, 0, r_bag); - p_r->replace_child(p_new_child, pref_begin(p_new_child), + p_r->replace_child(p_new_child, pref_begin(p_new_child), pref_end(p_new_child), this); PB_DS_ASSERT_NODE_VALID(p_r) @@ -379,8 +382,8 @@ PB_DS_CLASS_C_DEC:: insert(const_reference r_val) { node_pointer p_lf = find_imp(PB_DS_V2F(r_val)); - if (p_lf != 0 && p_lf->m_type == pat_trie_leaf_node_type && - synth_e_access_traits::equal_keys(PB_DS_V2F(static_cast(p_lf)->value()), PB_DS_V2F(r_val))) + if (p_lf != 0 && p_lf->m_type == leaf_node && + synth_access_traits::equal_keys(PB_DS_V2F(static_cast(p_lf)->value()), PB_DS_V2F(r_val))) { PB_DS_CHECK_KEY_EXISTS(PB_DS_V2F(r_val)) PB_DS_ASSERT_VALID((*this)) @@ -393,16 +396,16 @@ insert(const_reference r_val) cond_dealtor cond(p_new_lf); new (p_new_lf) leaf(r_val); - apply_update(p_new_lf, (node_update* )this); + apply_update(p_new_lf, (node_update*)this); cond.set_call_destructor(); - split_join_branch_bag bag; + branch_bag bag; bag.add_branch(); m_p_head->m_p_parent = rec_join(m_p_head->m_p_parent, p_new_lf, 0, bag); m_p_head->m_p_parent->m_p_parent = m_p_head; cond.set_no_action_dtor(); ++m_size; update_min_max_for_inserted_leaf(p_new_lf); - _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(r_val));) + _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(r_val));) PB_DS_ASSERT_VALID((*this)) return std::make_pair(point_iterator(p_new_lf), true); } @@ -410,17 +413,17 @@ insert(const_reference r_val) PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: -keys_diff_ind(typename e_access_traits::const_iterator b_l, - typename e_access_traits::const_iterator e_l, - typename e_access_traits::const_iterator b_r, - typename e_access_traits::const_iterator e_r) +keys_diff_ind(typename access_traits::const_iterator b_l, + typename access_traits::const_iterator e_l, + typename access_traits::const_iterator b_r, + typename access_traits::const_iterator e_r) { size_type diff_pos = 0; while (b_l != e_l) { if (b_r == e_r) return (diff_pos); - if (e_access_traits::e_pos(*b_l) != e_access_traits::e_pos(*b_r)) + if (access_traits::e_pos(*b_l) != access_traits::e_pos(*b_r)) return (diff_pos); ++b_l; ++b_r; @@ -431,20 +434,20 @@ keys_diff_ind(typename e_access_traits::const_iterator b_l, } PB_DS_CLASS_T_DEC -typename PB_DS_CLASS_C_DEC::internal_node_pointer +typename PB_DS_CLASS_C_DEC::inode_pointer PB_DS_CLASS_C_DEC:: -insert_branch(node_pointer p_l, node_pointer p_r, split_join_branch_bag& r_bag) +insert_branch(node_pointer p_l, node_pointer p_r, branch_bag& r_bag) { - typename synth_e_access_traits::const_iterator left_b_it = pref_begin(p_l); - typename synth_e_access_traits::const_iterator left_e_it = pref_end(p_l); - typename synth_e_access_traits::const_iterator right_b_it = pref_begin(p_r); - typename synth_e_access_traits::const_iterator right_e_it = pref_end(p_r); + typename synth_access_traits::const_iterator left_b_it = pref_begin(p_l); + typename synth_access_traits::const_iterator left_e_it = pref_end(p_l); + typename synth_access_traits::const_iterator right_b_it = pref_begin(p_r); + typename synth_access_traits::const_iterator right_e_it = pref_end(p_r); - const size_type diff_ind = keys_diff_ind(left_b_it, left_e_it, + const size_type diff_ind = keys_diff_ind(left_b_it, left_e_it, right_b_it, right_e_it); - internal_node_pointer p_new_nd = r_bag.get_branch(); - new (p_new_nd) internal_node(diff_ind, left_b_it); + inode_pointer p_new_nd = r_bag.get_branch(); + new (p_new_nd) inode(diff_ind, left_b_it); p_new_nd->add_child(p_l, left_b_it, left_e_it, this); p_new_nd->add_child(p_r, right_b_it, right_e_it, this); p_l->m_p_parent = p_new_nd; @@ -459,11 +462,11 @@ PB_DS_CLASS_C_DEC:: update_min_max_for_inserted_leaf(leaf_pointer p_new_lf) { if (m_p_head->m_p_min == m_p_head || - synth_e_access_traits::cmp_keys(PB_DS_V2F(p_new_lf->value()), - PB_DS_V2F(static_cast(m_p_head->m_p_min)->value()))) + synth_access_traits::cmp_keys(PB_DS_V2F(p_new_lf->value()), + PB_DS_V2F(static_cast(m_p_head->m_p_min)->value()))) m_p_head->m_p_min = p_new_lf; if (m_p_head->m_p_max == m_p_head || - synth_e_access_traits::cmp_keys(PB_DS_V2F(static_cast(m_p_head->m_p_max)->value()), PB_DS_V2F(p_new_lf->value()))) + synth_access_traits::cmp_keys(PB_DS_V2F(static_cast(m_p_head->m_p_max)->value()), PB_DS_V2F(p_new_lf->value()))) m_p_head->m_p_max = p_new_lf; } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp deleted file mode 100644 index cb8b6740d79..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/internal_node.hpp +++ /dev/null @@ -1,603 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011 -// Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file internal_node.hpp - * Contains an internal PB_DS_BASE_C_DEC for a patricia tree. - */ - -#ifndef PB_DS_PAT_TRIE_INTERNAL_NODE_HPP -#define PB_DS_PAT_TRIE_INTERNAL_NODE_HPP - -#include - -namespace __gnu_pbds -{ - namespace detail - { -#define PB_DS_CLASS_T_DEC \ - template - -#define PB_DS_CLASS_C_DEC \ - pat_trie_internal_node - -#define PB_DS_BASE_C_DEC \ - pat_trie_node_base - -#define PB_DS_LEAF_C_DEC \ - pat_trie_leaf - - template - struct pat_trie_internal_node : public PB_DS_BASE_C_DEC - { - private: - typedef PB_DS_BASE_C_DEC base_type; - typedef Type_Traits type_traits; - typedef typename type_traits::value_type value_type; - typedef typename Allocator::size_type size_type; - - typedef E_Access_Traits e_access_traits; - typedef typename e_access_traits::const_iterator const_e_iterator; - typedef typename Allocator::template rebind::other access_rebind; - typedef typename access_rebind::const_pointer const_e_access_traits_pointer; - - typedef typename Allocator::template rebind::other base_rebind; - typedef typename base_rebind::pointer node_pointer; - typedef typename base_rebind::const_pointer const_node_pointer; - - typedef PB_DS_LEAF_C_DEC leaf; - typedef typename Allocator::template rebind::other leaf_rebind; - typedef typename leaf_rebind::pointer leaf_pointer; - typedef typename leaf_rebind::const_pointer const_leaf_pointer; - - typedef typename Allocator::template rebind::other internal_node_rebind; - typedef typename internal_node_rebind::pointer internal_node_pointer; - typedef typename internal_node_rebind::const_pointer const_internal_node_pointer; - -#ifdef _GLIBCXX_DEBUG - typedef typename base_type::subtree_debug_info subtree_debug_info; - - virtual subtree_debug_info - assert_valid_imp(const_e_access_traits_pointer, - const char* file, int line) const; -#endif - - inline size_type - get_pref_pos(const_e_iterator, const_e_iterator, - const_e_access_traits_pointer) const; - - public: - typedef typename Allocator::template rebind::other node_pointer_rebind; - typedef typename node_pointer_rebind::pointer node_pointer_pointer; - typedef typename node_pointer_rebind::reference node_pointer_reference; - - enum - { - arr_size = E_Access_Traits::max_size + 1 - }; - PB_DS_STATIC_ASSERT(min_arr_size, arr_size >= 2); - -#include -#include - - pat_trie_internal_node(size_type, const const_e_iterator); - - void - update_prefixes(const_e_access_traits_pointer); - - const_iterator - begin() const; - - iterator - begin(); - - const_iterator - end() const; - - iterator - end(); - - inline node_pointer - get_child_node(const_e_iterator, const_e_iterator, - const_e_access_traits_pointer); - - inline const_node_pointer - get_child_node(const_e_iterator, const_e_iterator, - const_e_access_traits_pointer) const; - - inline iterator - get_child_it(const_e_iterator, const_e_iterator, - const_e_access_traits_pointer); - - inline node_pointer - get_lower_bound_child_node(const_e_iterator, const_e_iterator, - size_type, const_e_access_traits_pointer); - - inline node_pointer - add_child(node_pointer, const_e_iterator, const_e_iterator, - const_e_access_traits_pointer); - - inline const_node_pointer - get_join_child(const_node_pointer, const_e_access_traits_pointer) const; - - inline node_pointer - get_join_child(node_pointer, const_e_access_traits_pointer); - - void - remove_child(node_pointer p_nd); - - iterator - remove_child(iterator it); - - void - replace_child(node_pointer, const_e_iterator, const_e_iterator, - const_e_access_traits_pointer); - - inline const_e_iterator - pref_b_it() const; - - inline const_e_iterator - pref_e_it() const; - - inline size_type - get_e_ind() const; - - bool - should_be_mine(const_e_iterator, const_e_iterator, size_type, - const_e_access_traits_pointer) const; - - leaf_pointer - leftmost_descendant(); - - const_leaf_pointer - leftmost_descendant() const; - - leaf_pointer - rightmost_descendant(); - - const_leaf_pointer - rightmost_descendant() const; - -#ifdef _GLIBCXX_DEBUG - size_type - e_ind() const; -#endif - - private: - pat_trie_internal_node(const pat_trie_internal_node&); - - size_type - get_begin_pos() const; - - const size_type m_e_ind; - const_e_iterator m_pref_b_it; - const_e_iterator m_pref_e_it; - node_pointer m_a_p_children[arr_size]; - static leaf_rebind s_leaf_alloc; - static internal_node_rebind s_internal_node_alloc; - }; - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::leaf_rebind - PB_DS_CLASS_C_DEC::s_leaf_alloc; - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::internal_node_rebind - PB_DS_CLASS_C_DEC::s_internal_node_alloc; - - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::size_type - PB_DS_CLASS_C_DEC:: - get_pref_pos(const_e_iterator b_it, const_e_iterator e_it, - const_e_access_traits_pointer p_traits) const - { - if (static_cast(std::distance(b_it, e_it)) <= m_e_ind) - return 0; - std::advance(b_it, m_e_ind); - return 1 + p_traits->e_pos(*b_it); - } - - PB_DS_CLASS_T_DEC - PB_DS_CLASS_C_DEC:: - pat_trie_internal_node(size_type len, const const_e_iterator it) : - PB_DS_BASE_C_DEC(pat_trie_internal_node_type), - m_e_ind(len), m_pref_b_it(it), m_pref_e_it(it) - { - std::advance(m_pref_e_it, m_e_ind); - std::fill(m_a_p_children, m_a_p_children + arr_size, - static_cast(0)); - } - - PB_DS_CLASS_T_DEC - void - PB_DS_CLASS_C_DEC:: - update_prefixes(const_e_access_traits_pointer p_traits) - { - node_pointer p_first = *begin(); - if (p_first->m_type == pat_trie_leaf_node_type) - { - const_leaf_pointer p = static_cast(p_first); - m_pref_b_it = p_traits->begin(e_access_traits::extract_key(p->value())); - } - else - { - _GLIBCXX_DEBUG_ASSERT(p_first->m_type == pat_trie_internal_node_type); - m_pref_b_it = static_cast(p_first)->pref_b_it(); - } - m_pref_e_it = m_pref_b_it; - std::advance(m_pref_e_it, m_e_ind); - } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::const_iterator - PB_DS_CLASS_C_DEC:: - begin() const - { - typedef node_pointer_pointer pointer_type; - pointer_type p = const_cast(m_a_p_children); - return const_iterator(p + get_begin_pos(), p + arr_size); - } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::iterator - PB_DS_CLASS_C_DEC:: - begin() - { - return iterator(m_a_p_children + get_begin_pos(), - m_a_p_children + arr_size); - } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::const_iterator - PB_DS_CLASS_C_DEC:: - end() const - { - typedef node_pointer_pointer pointer_type; - pointer_type p = const_cast(m_a_p_children) + arr_size; - return const_iterator(p, p); - } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::iterator - PB_DS_CLASS_C_DEC:: - end() - { return iterator(m_a_p_children + arr_size, m_a_p_children + arr_size); } - - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::node_pointer - PB_DS_CLASS_C_DEC:: - get_child_node(const_e_iterator b_it, const_e_iterator e_it, - const_e_access_traits_pointer p_traits) - { - const size_type i = get_pref_pos(b_it, e_it, p_traits); - _GLIBCXX_DEBUG_ASSERT(i < arr_size); - return m_a_p_children[i]; - } - - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::iterator - PB_DS_CLASS_C_DEC:: - get_child_it(const_e_iterator b_it, const_e_iterator e_it, - const_e_access_traits_pointer p_traits) - { - const size_type i = get_pref_pos(b_it, e_it, p_traits); - _GLIBCXX_DEBUG_ASSERT(i < arr_size); - _GLIBCXX_DEBUG_ASSERT(m_a_p_children[i] != 0); - return iterator(m_a_p_children + i, m_a_p_children + i); - } - - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::const_node_pointer - PB_DS_CLASS_C_DEC:: - get_child_node(const_e_iterator b_it, const_e_iterator e_it, - const_e_access_traits_pointer p_traits) const - { return const_cast(get_child_node(b_it, e_it, p_traits)); } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::node_pointer - PB_DS_CLASS_C_DEC:: - get_lower_bound_child_node(const_e_iterator b_it, const_e_iterator e_it, - size_type checked_ind, - const_e_access_traits_pointer p_traits) - { - if (!should_be_mine(b_it, e_it, checked_ind, p_traits)) - { - if (p_traits->cmp_prefixes(b_it, e_it, m_pref_b_it, m_pref_e_it, true)) - return leftmost_descendant(); - return rightmost_descendant(); - } - - size_type i = get_pref_pos(b_it, e_it, p_traits); - _GLIBCXX_DEBUG_ASSERT(i < arr_size); - - if (m_a_p_children[i] != 0) - return m_a_p_children[i]; - - while (++i < arr_size) - if (m_a_p_children[i] != 0) - { - if (m_a_p_children[i]->m_type == pat_trie_leaf_node_type) - return m_a_p_children[i]; - - _GLIBCXX_DEBUG_ASSERT(m_a_p_children[i]->m_type == pat_trie_internal_node_type); - - return static_cast(m_a_p_children[i])->leftmost_descendant(); - } - - return rightmost_descendant(); - } - - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::node_pointer - PB_DS_CLASS_C_DEC:: - add_child(node_pointer p_nd, const_e_iterator b_it, const_e_iterator e_it, - const_e_access_traits_pointer p_traits) - { - const size_type i = get_pref_pos(b_it, e_it, p_traits); - _GLIBCXX_DEBUG_ASSERT(i < arr_size); - if (m_a_p_children[i] == 0) - { - m_a_p_children[i] = p_nd; - p_nd->m_p_parent = this; - return p_nd; - } - return m_a_p_children[i]; - } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::const_node_pointer - PB_DS_CLASS_C_DEC:: - get_join_child(const_node_pointer p_nd, const_e_access_traits_pointer p_traits) const - { - node_pointer p = const_cast(p_nd); - return const_cast(this)->get_join_child(p, p_traits); - } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::node_pointer - PB_DS_CLASS_C_DEC:: - get_join_child(node_pointer p_nd, const_e_access_traits_pointer p_traits) - { - size_type i; - const_e_iterator b_it; - const_e_iterator e_it; - if (p_nd->m_type == pat_trie_leaf_node_type) - { - typename Type_Traits::const_key_reference r_key = - e_access_traits::extract_key(static_cast(p_nd)->value()); - - b_it = p_traits->begin(r_key); - e_it = p_traits->end(r_key); - } - else - { - b_it = static_cast(p_nd)->pref_b_it(); - e_it = static_cast(p_nd)->pref_e_it(); - } - i = get_pref_pos(b_it, e_it, p_traits); - _GLIBCXX_DEBUG_ASSERT(i < arr_size); - return m_a_p_children[i]; - } - - PB_DS_CLASS_T_DEC - void - PB_DS_CLASS_C_DEC:: - remove_child(node_pointer p_nd) - { - size_type i = 0; - for (; i < arr_size; ++i) - if (m_a_p_children[i] == p_nd) - { - m_a_p_children[i] = 0; - return; - } - _GLIBCXX_DEBUG_ASSERT(i != arr_size); - } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::iterator - PB_DS_CLASS_C_DEC:: - remove_child(iterator it) - { - iterator ret = it; - ++ret; - * it.m_p_p_cur = 0; - return ret; - } - - PB_DS_CLASS_T_DEC - void - PB_DS_CLASS_C_DEC:: - replace_child(node_pointer p_nd, const_e_iterator b_it, - const_e_iterator e_it, - const_e_access_traits_pointer p_traits) - { - const size_type i = get_pref_pos(b_it, e_it, p_traits); - _GLIBCXX_DEBUG_ASSERT(i < arr_size); - m_a_p_children[i] = p_nd; - p_nd->m_p_parent = this; - } - - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::const_e_iterator - PB_DS_CLASS_C_DEC:: - pref_b_it() const - { return m_pref_b_it; } - - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::const_e_iterator - PB_DS_CLASS_C_DEC:: - pref_e_it() const - { return m_pref_e_it; } - - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::size_type - PB_DS_CLASS_C_DEC:: - get_e_ind() const - { return m_e_ind; } - - PB_DS_CLASS_T_DEC - bool - PB_DS_CLASS_C_DEC:: - should_be_mine(const_e_iterator b_it, const_e_iterator e_it, - size_type checked_ind, - const_e_access_traits_pointer p_traits) const - { - if (m_e_ind == 0) - return true; - - const size_type num_es = std::distance(b_it, e_it); - if (num_es < m_e_ind) - return false; - - const_e_iterator key_b_it = b_it; - std::advance(key_b_it, checked_ind); - const_e_iterator key_e_it = b_it; - std::advance(key_e_it, m_e_ind); - - const_e_iterator value_b_it = m_pref_b_it; - std::advance(value_b_it, checked_ind); - const_e_iterator value_e_it = m_pref_b_it; - std::advance(value_e_it, m_e_ind); - - return p_traits->equal_prefixes(key_b_it, key_e_it, value_b_it, - value_e_it); - } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::leaf_pointer - PB_DS_CLASS_C_DEC:: - leftmost_descendant() - { - node_pointer p_pot =* begin(); - if (p_pot->m_type == pat_trie_leaf_node_type) - return (static_cast(p_pot)); - _GLIBCXX_DEBUG_ASSERT(p_pot->m_type == pat_trie_internal_node_type); - return static_cast(p_pot)->leftmost_descendant(); - } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::const_leaf_pointer - PB_DS_CLASS_C_DEC:: - leftmost_descendant() const - { - return const_cast(this)->leftmost_descendant(); - } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::leaf_pointer - PB_DS_CLASS_C_DEC:: - rightmost_descendant() - { - const size_type num_children = std::distance(begin(), end()); - _GLIBCXX_DEBUG_ASSERT(num_children >= 2); - - iterator it = begin(); - std::advance(it, num_children - 1); - node_pointer p_pot =* it; - if (p_pot->m_type == pat_trie_leaf_node_type) - return static_cast(p_pot); - _GLIBCXX_DEBUG_ASSERT(p_pot->m_type == pat_trie_internal_node_type); - return static_cast(p_pot)->rightmost_descendant(); - } - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::const_leaf_pointer - PB_DS_CLASS_C_DEC:: - rightmost_descendant() const - { - return const_cast(this)->rightmost_descendant(); - } - -#ifdef _GLIBCXX_DEBUG - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::size_type - PB_DS_CLASS_C_DEC:: - e_ind() const - { return m_e_ind; } -#endif - - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::size_type - PB_DS_CLASS_C_DEC:: - get_begin_pos() const - { - size_type i; - for (i = 0; i < arr_size && m_a_p_children[i] == 0; ++i) - ; - return i; - } - -#ifdef _GLIBCXX_DEBUG - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::subtree_debug_info - PB_DS_CLASS_C_DEC:: - assert_valid_imp(const_e_access_traits_pointer p_traits, - const char* __file, int __line) const - { - PB_DS_DEBUG_VERIFY(base_type::m_type == pat_trie_internal_node_type); - PB_DS_DEBUG_VERIFY(static_cast(std::distance(pref_b_it(), pref_e_it())) == m_e_ind); - PB_DS_DEBUG_VERIFY(std::distance(begin(), end()) >= 2); - - for (typename pat_trie_internal_node::const_iterator it = begin(); - it != end(); ++it) - { - const_node_pointer p_nd =* it; - PB_DS_DEBUG_VERIFY(p_nd->m_p_parent == this); - subtree_debug_info child_ret = - p_nd->assert_valid_imp(p_traits, __file, __line); - - PB_DS_DEBUG_VERIFY(static_cast(std::distance(child_ret.first, child_ret.second)) >= m_e_ind); - PB_DS_DEBUG_VERIFY(should_be_mine(child_ret.first, child_ret.second, 0, p_traits)); - PB_DS_DEBUG_VERIFY(get_pref_pos(child_ret.first, child_ret.second, p_traits) == static_cast(it.m_p_p_cur - m_a_p_children)); - } - return std::make_pair(pref_b_it(), pref_e_it()); - } -#endif - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC -#undef PB_DS_BASE_C_DEC -#undef PB_DS_LEAF_C_DEC - - } // namespace detail -} // namespace __gnu_pbds - -#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp index 85199f81cb0..d53f1b274b3 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp @@ -34,8 +34,8 @@ // warranty. /** - * @file iterators_fn_imps.hpp - * Contains an implementation class for bin_search_tree_. + * @file pat_trie_/iterators_fn_imps.hpp + * Contains an implementation class for pat_trie. */ PB_DS_CLASS_T_DEC @@ -95,10 +95,10 @@ rend() const { return const_reverse_iterator(m_p_head); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_node_iterator +inline typename PB_DS_CLASS_C_DEC::node_const_iterator PB_DS_CLASS_C_DEC:: node_begin() const -{ return const_node_iterator(m_p_head->m_p_parent, this); } +{ return node_const_iterator(m_p_head->m_p_parent, this); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::node_iterator @@ -107,10 +107,10 @@ node_begin() { return node_iterator(m_p_head->m_p_parent, this); } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_node_iterator +inline typename PB_DS_CLASS_C_DEC::node_const_iterator PB_DS_CLASS_C_DEC:: node_end() const -{ return const_node_iterator(0, this); } +{ return node_const_iterator(0, this); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::node_iterator diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/leaf.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/leaf.hpp deleted file mode 100644 index de8057a0219..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/leaf.hpp +++ /dev/null @@ -1,169 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file leaf.hpp - * Contains a pat_trie_leaf for a patricia tree. - */ - -#ifndef PB_DS_PAT_TRIE_LEAF_HPP -#define PB_DS_PAT_TRIE_LEAF_HPP - -#include - -namespace __gnu_pbds -{ - namespace detail - { - -#define PB_DS_CLASS_T_DEC \ - template - -#define PB_DS_CLASS_C_DEC \ - pat_trie_leaf - -#define PB_DS_BASE_C_DEC \ - pat_trie_node_base - -#define PB_DS_PAT_TRIE_SUBTREE_DEBUG_INFO_C_DEC \ - pat_trie_subtree_debug_info - - template - struct pat_trie_leaf : public PB_DS_BASE_C_DEC - { - private: - typedef typename Type_Traits::value_type value_type; - - typedef typename Type_Traits::const_reference const_reference; - - typedef typename Type_Traits::reference reference; - - typedef - typename Allocator::template rebind< - E_Access_Traits>::other::const_pointer - const_e_access_traits_pointer; - -#ifdef _GLIBCXX_DEBUG - typedef - typename PB_DS_BASE_C_DEC::subtree_debug_info - subtree_debug_info; -#endif - - typedef PB_DS_BASE_C_DEC base_type; - - public: - pat_trie_leaf(const_reference r_val); - - inline reference - value(); - - inline const_reference - value() const; - -#ifdef _GLIBCXX_DEBUG - virtual subtree_debug_info - assert_valid_imp(const_e_access_traits_pointer p_traits, - const char* file, int line) const; - - virtual - ~pat_trie_leaf(); -#endif - - private: - pat_trie_leaf(const PB_DS_CLASS_C_DEC& other); - - value_type m_value; - }; - - PB_DS_CLASS_T_DEC - PB_DS_CLASS_C_DEC:: - pat_trie_leaf(const_reference r_val) : - PB_DS_BASE_C_DEC(pat_trie_leaf_node_type), m_value(r_val) - { } - - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::reference - PB_DS_CLASS_C_DEC:: - value() - { return m_value; } - - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::const_reference - PB_DS_CLASS_C_DEC:: - value() const - { return m_value; } - -#ifdef _GLIBCXX_DEBUG - PB_DS_CLASS_T_DEC - typename PB_DS_CLASS_C_DEC::subtree_debug_info - PB_DS_CLASS_C_DEC:: - assert_valid_imp(const_e_access_traits_pointer p_traits, - const char* __file, int __line) const - { - PB_DS_DEBUG_VERIFY(base_type::m_type == pat_trie_leaf_node_type); - subtree_debug_info ret; - const_reference r_val = value(); - return std::make_pair(p_traits->begin(p_traits->extract_key(r_val)), - p_traits->end(p_traits->extract_key(r_val))); - } - - PB_DS_CLASS_T_DEC - PB_DS_CLASS_C_DEC:: - ~pat_trie_leaf() { } -#endif - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC -#undef PB_DS_BASE_C_DEC -#undef PB_DS_PAT_TRIE_SUBTREE_DEBUG_INFO_C_DEC - - } // namespace detail -} // namespace __gnu_pbds - -#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_base.hpp deleted file mode 100644 index 6e131e4074c..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_base.hpp +++ /dev/null @@ -1,131 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file node_base.hpp - * Contains a pat_trie_node_base base for a patricia tree. - */ - -#ifndef PB_DS_PAT_TRIE_NODE_BASE_HPP -#define PB_DS_PAT_TRIE_NODE_BASE_HPP - -#include - -namespace __gnu_pbds -{ - namespace detail - { -#define PB_DS_CLASS_T_DEC \ - template - -#define PB_DS_CLASS_C_DEC \ - pat_trie_node_base - -#define PB_DS_PAT_TRIE_SUBTREE_DEBUG_INFO_C_DEC \ - pat_trie_subtree_debug_info - - enum pat_trie_node_type - { - pat_trie_internal_node_type, - pat_trie_leaf_node_type, - pat_trie_head_node_type - }; - - template - struct pat_trie_node_base : public pat_trie_node_metadata_base< - Metadata, - Allocator> - { - public: - typedef - typename Allocator::template rebind< - pat_trie_node_base>::other::pointer - node_pointer; - - typedef - typename Allocator::template rebind< - E_Access_Traits>::other::const_pointer - const_e_access_traits_pointer; - -#ifdef _GLIBCXX_DEBUG - typedef - std::pair< - typename E_Access_Traits::const_iterator, - typename E_Access_Traits::const_iterator> - subtree_debug_info; -#endif - - pat_trie_node_base(pat_trie_node_type type); - -#ifdef _GLIBCXX_DEBUG - void - assert_valid(const_e_access_traits_pointer p_traits, - const char* file, int line) const; - - virtual subtree_debug_info - assert_valid_imp(const_e_access_traits_pointer p_traits, - const char* file, int line) const = 0; -#endif - - node_pointer m_p_parent; - const pat_trie_node_type m_type; - }; - - PB_DS_CLASS_T_DEC - PB_DS_CLASS_C_DEC:: - pat_trie_node_base(pat_trie_node_type type) : m_type(type) - { } - -#ifdef _GLIBCXX_DEBUG - PB_DS_CLASS_T_DEC - void - PB_DS_CLASS_C_DEC:: - assert_valid(const_e_access_traits_pointer p_traits, - const char* __file, int __line) const - { assert_valid_imp(p_traits, __file, __line); } -#endif - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC -#undef PB_DS_PAT_TRIE_SUBTREE_DEBUG_INFO_C_DEC - - } // namespace detail -} // namespace __gnu_pbds - -#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp deleted file mode 100644 index c57462868bd..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/node_iterators.hpp +++ /dev/null @@ -1,338 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file node_iterators.hpp - * Contains an implementation class for pat_trie_. - */ - -#ifndef PB_DS_PAT_TRIE_NODE_ITERATORS_HPP -#define PB_DS_PAT_TRIE_NODE_ITERATORS_HPP - -#include - -namespace __gnu_pbds -{ - namespace detail - { - -#define PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC \ - pat_trie_const_node_it_< \ - Node, \ - Leaf, \ - Head, \ - Internal_Node, \ - Const_Iterator, \ - Iterator, \ - E_Access_Traits, \ - Allocator> - -#define PB_DS_PAT_TRIE_NODE_ITERATOR_C_DEC \ - pat_trie_node_it_< \ - Node, \ - Leaf, \ - Head, \ - Internal_Node, \ - Const_Iterator, \ - Iterator, \ - E_Access_Traits, \ - Allocator> - - // Const node iterator. - template - class pat_trie_const_node_it_ - { - protected: - typedef - typename Allocator::template rebind< - Node>::other::pointer - node_pointer; - - typedef - typename Allocator::template rebind< - Leaf>::other::const_pointer - const_leaf_pointer; - - typedef - typename Allocator::template rebind< - Leaf>::other::pointer - leaf_pointer; - - typedef - typename Allocator::template rebind< - Internal_Node>::other::pointer - internal_node_pointer; - - typedef - typename Allocator::template rebind< - Internal_Node>::other::const_pointer - const_internal_node_pointer; - - typedef - typename Allocator::template rebind< - E_Access_Traits>::other::const_pointer - const_e_access_traits_pointer; - - private: - inline typename E_Access_Traits::const_iterator - pref_begin() const - { - if (m_p_nd->m_type == pat_trie_leaf_node_type) - return (m_p_traits->begin( - m_p_traits->extract_key( - static_cast(m_p_nd)->value()))); - - _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_internal_node_type); - - return (static_cast(m_p_nd)->pref_b_it()); - } - - inline typename E_Access_Traits::const_iterator - pref_end() const - { - if (m_p_nd->m_type == pat_trie_leaf_node_type) - return (m_p_traits->end( - m_p_traits->extract_key( - static_cast(m_p_nd)->value()))); - - _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_internal_node_type); - - return (static_cast(m_p_nd)->pref_e_it()); - } - - public: - - // Size type. - typedef typename Allocator::size_type size_type; - - // Category. - typedef trivial_iterator_tag iterator_category; - - // Difference type. - typedef trivial_iterator_difference_type difference_type; - - // __Iterator's value type. - typedef Const_Iterator value_type; - - // __Iterator's reference type. - typedef value_type reference; - - // __Iterator's __const reference type. - typedef value_type const_reference; - - // Element access traits. - typedef E_Access_Traits e_access_traits; - - // A key's element __const iterator. - typedef typename e_access_traits::const_iterator const_e_iterator; - - // Metadata type. - typedef typename Node::metadata_type metadata_type; - - // Const metadata reference type. - typedef - typename Allocator::template rebind< - metadata_type>::other::const_reference - const_metadata_reference; - - // Default constructor. - /* - inline - pat_trie_const_node_it_() - */ - inline - pat_trie_const_node_it_(node_pointer p_nd = 0, - const_e_access_traits_pointer p_traits = 0) - : m_p_nd(const_cast(p_nd)), m_p_traits(p_traits) - { } - - // Subtree valid prefix. - inline std::pair - valid_prefix() const - { return std::make_pair(pref_begin(), pref_end()); } - - // Const access; returns the __const iterator* associated with - // the current leaf. - inline const_reference - operator*() const - { - _GLIBCXX_DEBUG_ASSERT(num_children() == 0); - return Const_Iterator(m_p_nd); - } - - // Metadata access. - inline const_metadata_reference - get_metadata() const - { return m_p_nd->get_metadata(); } - - // Returns the number of children in the corresponding node. - inline size_type - num_children() const - { - if (m_p_nd->m_type == pat_trie_leaf_node_type) - return 0; - _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_internal_node_type); - return std::distance(static_cast(m_p_nd)->begin(), static_cast(m_p_nd)->end()); - } - - // Returns a __const node __iterator to the corresponding node's - // i-th child. - PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC - get_child(size_type i) const - { - _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_internal_node_type); - typename Internal_Node::iterator it = - static_cast(m_p_nd)->begin(); - - std::advance(it, i); - return PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC(*it, m_p_traits); - } - - // Compares content to a different iterator object. - inline bool - operator==(const PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC& other) const - { return (m_p_nd == other.m_p_nd); } - - // Compares content (negatively) to a different iterator object. - inline bool - operator!=(const PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC& other) const - { return m_p_nd != other.m_p_nd; } - - private: - - friend class PB_DS_CLASS_C_DEC; - - public: - node_pointer m_p_nd; - - const_e_access_traits_pointer m_p_traits; - }; - - // Node iterator. - template - class pat_trie_node_it_ : - public PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC - - { - private: - typedef - typename Allocator::template rebind< - Node>::other::pointer - node_pointer; - - typedef Iterator iterator; - - typedef PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC base_type; - - typedef - typename base_type::const_e_access_traits_pointer - const_e_access_traits_pointer; - - typedef typename base_type::internal_node_pointer internal_node_pointer; - - public: - - // Size type. - typedef - typename PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC::size_type - size_type; - - // __Iterator's value type. - typedef Iterator value_type; - - // __Iterator's reference type. - typedef value_type reference; - - // __Iterator's __const reference type. - typedef value_type const_reference; - - // Default constructor. - /* - inline - pat_trie_node_it_() ; - */ - - inline - pat_trie_node_it_(node_pointer p_nd = 0, const_e_access_traits_pointer p_traits = 0) : base_type(p_nd, p_traits) - { } - - // Access; returns the iterator* associated with the current leaf. - inline reference - operator*() const - { - _GLIBCXX_DEBUG_ASSERT(base_type::num_children() == 0); - return Iterator(base_type::m_p_nd); - - } - - // Returns a node __iterator to the corresponding node's i-th child. - PB_DS_PAT_TRIE_NODE_ITERATOR_C_DEC - get_child(size_type i) const - { - _GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd->m_type == pat_trie_internal_node_type); - - typename Internal_Node::iterator it = - static_cast(base_type::m_p_nd)->begin(); - - std::advance(it, i); - return PB_DS_PAT_TRIE_NODE_ITERATOR_C_DEC(*it, base_type::m_p_traits); - } - - private: - friend class PB_DS_CLASS_C_DEC; - }; - -#undef PB_DS_PAT_TRIE_CONST_NODE_ITERATOR_C_DEC -#undef PB_DS_PAT_TRIE_NODE_ITERATOR_C_DEC - - } // namespace detail -} // namespace __gnu_pbds - -#endif - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp index 5313c0b9712..46bb016e25e 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp @@ -35,172 +35,249 @@ // warranty. /** - * @file pat_trie_.hpp + * @file pat_trie_/pat_trie_.hpp * Contains an implementation class for a patricia tree. */ -/** - * This implementation loosely borrows ideas from: - * 1) Fast Mergeable Integer Maps, Okasaki, Gill 1998 - * 2) Ptset: Sets of integers implemented as Patricia trees, - * Jean-Christophe Filliatr, 2000 - **/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include #include #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifdef _GLIBCXX_DEBUG #include -#endif +#endif #include namespace __gnu_pbds { namespace detail { -#define PB_DS_CLASS_T_DEC \ - template - #ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_CLASS_NAME pat_trie_data_ -#endif +#define PB_DS_PAT_TRIE_NAME pat_trie_map +#endif #ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_CLASS_NAME pat_trie_no_data_ -#endif +#define PB_DS_PAT_TRIE_NAME pat_trie_set +#endif + +#define PB_DS_CLASS_T_DEC \ + template #define PB_DS_CLASS_C_DEC \ - PB_DS_CLASS_NAME + PB_DS_PAT_TRIE_NAME -#define PB_DS_TYPES_TRAITS_C_DEC \ - types_traits +#define PB_DS_PAT_TRIE_TRAITS_BASE \ + types_traits #ifdef _GLIBCXX_DEBUG #define PB_DS_DEBUG_MAP_BASE_C_DEC \ - debug_map_base >, typename Allocator::template rebind::other::const_reference> -#endif + debug_map_base >, \ + typename _Alloc::template rebind::other::const_reference> +#endif -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_V2F(X) (X).first -#define PB_DS_V2S(X) (X).second -#define PB_DS_EP2VP(X)& ((X)->m_value) -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_V2F(X) (X) -#define PB_DS_V2S(X) Mapped_Data() -#define PB_DS_EP2VP(X)& ((X)->m_value.first) -#endif /** - * class description = PATRICIA trie implementation."> - **/ - template - class PB_DS_CLASS_NAME : + * @brief PATRICIA trie. + * + * This implementation loosely borrows ideas from: + * 1) Fast Mergeable Integer Maps, Okasaki, Gill 1998 + * 2) Ptset: Sets of integers implemented as Patricia trees, + * Jean-Christophe Filliatr, 2000 + */ + template + class PB_DS_PAT_TRIE_NAME : #ifdef _GLIBCXX_DEBUG public PB_DS_DEBUG_MAP_BASE_C_DEC, -#endif - public Node_And_It_Traits::synth_e_access_traits, +#endif + public Node_And_It_Traits::synth_access_traits, public Node_And_It_Traits::node_update, - public PB_DS_TYPES_TRAITS_C_DEC + public PB_DS_PAT_TRIE_TRAITS_BASE, + public pat_trie_base { private: - typedef PB_DS_TYPES_TRAITS_C_DEC traits_base; + typedef pat_trie_base base_type; + typedef PB_DS_PAT_TRIE_TRAITS_BASE traits_base; + typedef Node_And_It_Traits traits_type; - typedef typename Node_And_It_Traits::synth_e_access_traits synth_e_access_traits; - typedef typename Allocator::template rebind::other::const_pointer const_e_access_traits_pointer; - typedef typename synth_e_access_traits::const_iterator const_e_iterator; + typedef typename traits_type::synth_access_traits synth_access_traits; + typedef typename synth_access_traits::const_iterator a_const_iterator; - typedef typename Node_And_It_Traits::node node; - typedef typename Allocator::template rebind::other::const_pointer const_node_pointer; + typedef typename traits_type::node node; + typedef typename _Alloc::template rebind __rebind_n; + typedef typename __rebind_n::other::const_pointer node_const_pointer; + typedef typename __rebind_n::other::pointer node_pointer; - typedef typename Allocator::template rebind::other::pointer node_pointer; + typedef typename traits_type::head head; + typedef typename _Alloc::template rebind __rebind_h; + typedef typename __rebind_h::other head_allocator; + typedef typename head_allocator::pointer head_pointer; - typedef typename Node_And_It_Traits::head head; - typedef typename Allocator::template rebind::other head_allocator; - typedef typename head_allocator::pointer head_pointer; + typedef typename traits_type::leaf leaf; + typedef typename _Alloc::template rebind __rebind_l; + typedef typename __rebind_l::other leaf_allocator; + typedef typename leaf_allocator::pointer leaf_pointer; + typedef typename leaf_allocator::const_pointer leaf_const_pointer; - typedef typename Node_And_It_Traits::leaf leaf; - typedef typename Allocator::template rebind::other leaf_allocator; - typedef typename leaf_allocator::const_pointer const_leaf_pointer; - typedef typename leaf_allocator::pointer leaf_pointer; + typedef typename traits_type::inode inode; + typedef typename inode::iterator inode_iterator; + typedef typename _Alloc::template rebind __rebind_in; + typedef typename __rebind_in::other __rebind_ina; + typedef typename __rebind_in::other inode_allocator; + typedef typename __rebind_ina::pointer inode_pointer; + typedef typename __rebind_ina::const_pointer inode_const_pointer; - typedef typename Node_And_It_Traits::internal_node internal_node; - typedef typename Allocator::template rebind::other internal_node_allocator; - typedef typename internal_node_allocator::const_pointer const_internal_node_pointer; - typedef typename internal_node_allocator::pointer internal_node_pointer; -#include + /// Conditional deallocator. + class cond_dealtor + { + protected: + leaf_pointer m_p_nd; + bool m_no_action_dtor; + bool m_call_destructor; + + public: + cond_dealtor(leaf_pointer p_nd) + : m_p_nd(p_nd), m_no_action_dtor(false), m_call_destructor(false) + { } + + void + set_no_action_dtor() + { m_no_action_dtor = true; } + + void + set_call_destructor() + { m_call_destructor = true; } + + ~cond_dealtor() + { + if (m_no_action_dtor) + return; + + if (m_call_destructor) + m_p_nd->~leaf(); + + s_leaf_allocator.deallocate(m_p_nd, 1); + } + }; + + + /// Branch bag, for split-join. + class branch_bag + { + private: + typedef inode_pointer __inp; + typedef typename _Alloc::template rebind<__inp>::other __rebind_inp; #ifdef _GLIBCXX_DEBUG - typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; -#endif + typedef std::_GLIBCXX_STD_C::list<__inp, __rebind_inp> bag_type; +#else + typedef std::list<__inp, __rebind_inp> bag_type; +#endif -#include + bag_type m_bag; + public: + void + add_branch() + { + inode_pointer p_nd = s_inode_allocator.allocate(1); + __try + { + m_bag.push_back(p_nd); + } + __catch(...) + { + s_inode_allocator.deallocate(p_nd, 1); + __throw_exception_again; + } + } - typedef typename Node_And_It_Traits::null_node_update_pointer null_node_update_pointer; + inode_pointer + get_branch() + { + _GLIBCXX_DEBUG_ASSERT(!m_bag.empty()); + inode_pointer p_nd = *m_bag.begin(); + m_bag.pop_front(); + return p_nd; + } + + ~branch_bag() + { + while (!m_bag.empty()) + { + inode_pointer p_nd = *m_bag.begin(); + s_inode_allocator.deallocate(p_nd, 1); + m_bag.pop_front(); + } + } + + inline bool + empty() const + { return m_bag.empty(); } + }; + +#ifdef _GLIBCXX_DEBUG + typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; +#endif + + typedef typename traits_type::null_node_update_pointer null_node_update_pointer; public: - typedef pat_trie_tag container_category; - typedef Allocator allocator_type; - typedef typename Allocator::size_type size_type; - typedef typename Allocator::difference_type difference_type; + typedef pat_trie_tag container_category; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; - typedef typename traits_base::key_type key_type; - typedef typename traits_base::key_pointer key_pointer; - typedef typename traits_base::const_key_pointer const_key_pointer; - typedef typename traits_base::key_reference key_reference; - typedef typename traits_base::const_key_reference const_key_reference; - typedef typename traits_base::mapped_type mapped_type; - typedef typename traits_base::mapped_pointer mapped_pointer; - typedef typename traits_base::const_mapped_pointer const_mapped_pointer; - typedef typename traits_base::mapped_reference mapped_reference; - typedef typename traits_base::const_mapped_reference const_mapped_reference; - typedef typename traits_base::value_type value_type; - typedef typename traits_base::pointer pointer; - typedef typename traits_base::const_pointer const_pointer; - typedef typename traits_base::reference reference; - typedef typename traits_base::const_reference const_reference; + typedef typename traits_base::key_type key_type; + typedef typename traits_base::key_pointer key_pointer; + typedef typename traits_base::key_const_pointer key_const_pointer; + typedef typename traits_base::key_reference key_reference; + typedef typename traits_base::key_const_reference key_const_reference; + typedef typename traits_base::mapped_type mapped_type; + typedef typename traits_base::mapped_pointer mapped_pointer; + typedef typename traits_base::mapped_const_pointer mapped_const_pointer; + typedef typename traits_base::mapped_reference mapped_reference; + typedef typename traits_base::mapped_const_reference mapped_const_reference; + typedef typename traits_base::value_type value_type; + typedef typename traits_base::pointer pointer; + typedef typename traits_base::const_pointer const_pointer; + typedef typename traits_base::reference reference; + typedef typename traits_base::const_reference const_reference; - typedef typename Node_And_It_Traits::const_iterator const_point_iterator; - typedef typename Node_And_It_Traits::iterator point_iterator; - typedef const_point_iterator const_iterator; - typedef point_iterator iterator; + typedef typename traits_type::access_traits access_traits; + typedef typename traits_type::const_iterator point_const_iterator; + typedef typename traits_type::iterator point_iterator; + typedef point_const_iterator const_iterator; + typedef point_iterator iterator; - typedef typename Node_And_It_Traits::const_reverse_iterator const_reverse_iterator; - typedef typename Node_And_It_Traits::reverse_iterator reverse_iterator; - typedef typename Node_And_It_Traits::const_node_iterator const_node_iterator; - typedef typename Node_And_It_Traits::node_iterator node_iterator; - typedef typename Node_And_It_Traits::e_access_traits e_access_traits; - typedef typename Node_And_It_Traits::node_update node_update; + typedef typename traits_type::reverse_iterator reverse_iterator; + typedef typename traits_type::const_reverse_iterator const_reverse_iterator; + typedef typename traits_type::node_const_iterator node_const_iterator; + typedef typename traits_type::node_iterator node_iterator; + typedef typename traits_type::node_update node_update; - PB_DS_CLASS_NAME(); + PB_DS_PAT_TRIE_NAME(); - PB_DS_CLASS_NAME(const e_access_traits&); + PB_DS_PAT_TRIE_NAME(const access_traits&); - PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&); + PB_DS_PAT_TRIE_NAME(const PB_DS_CLASS_C_DEC&); void swap(PB_DS_CLASS_C_DEC&); - ~PB_DS_CLASS_NAME(); + ~PB_DS_PAT_TRIE_NAME(); inline bool empty() const; @@ -211,55 +288,55 @@ namespace __gnu_pbds inline size_type max_size() const; - e_access_traits& - get_e_access_traits(); + access_traits& + get_access_traits(); - const e_access_traits& - get_e_access_traits() const; + const access_traits& + get_access_traits() const; - node_update& + node_update& get_node_update(); - const node_update& + const node_update& get_node_update() const; inline std::pair insert(const_reference); inline mapped_reference - operator[](const_key_reference r_key) + operator[](key_const_reference r_key) { #ifdef PB_DS_DATA_TRUE_INDICATOR return insert(std::make_pair(r_key, mapped_type())).first->second; -#else +#else insert(r_key); - return traits_base::s_null_mapped; -#endif + return traits_base::s_null_type; +#endif } inline point_iterator - find(const_key_reference); + find(key_const_reference); - inline const_point_iterator - find(const_key_reference) const; + inline point_const_iterator + find(key_const_reference) const; inline point_iterator - lower_bound(const_key_reference); + lower_bound(key_const_reference); - inline const_point_iterator - lower_bound(const_key_reference) const; + inline point_const_iterator + lower_bound(key_const_reference) const; inline point_iterator - upper_bound(const_key_reference); + upper_bound(key_const_reference); - inline const_point_iterator - upper_bound(const_key_reference) const; + inline point_const_iterator + upper_bound(key_const_reference) const; void clear(); inline bool - erase(const_key_reference); + erase(key_const_reference); inline const_iterator erase(const_iterator); @@ -267,7 +344,7 @@ namespace __gnu_pbds #ifdef PB_DS_DATA_TRUE_INDICATOR inline iterator erase(iterator); -#endif +#endif inline const_reverse_iterator erase(const_reverse_iterator); @@ -275,7 +352,7 @@ namespace __gnu_pbds #ifdef PB_DS_DATA_TRUE_INDICATOR inline reverse_iterator erase(reverse_iterator); -#endif +#endif template inline size_type @@ -285,7 +362,7 @@ namespace __gnu_pbds join(PB_DS_CLASS_C_DEC&); void - split(const_key_reference, PB_DS_CLASS_C_DEC&); + split(key_const_reference, PB_DS_CLASS_C_DEC&); inline iterator begin(); @@ -311,13 +388,13 @@ namespace __gnu_pbds inline const_reverse_iterator rend() const; - inline const_node_iterator + inline node_const_iterator node_begin() const; inline node_iterator node_begin(); - inline const_node_iterator + inline node_const_iterator node_end() const; inline node_iterator @@ -326,10 +403,9 @@ namespace __gnu_pbds #ifdef PB_DS_PAT_TRIE_TRACE_ void trace() const; -#endif +#endif protected: - template void copy_from_range(It, It); @@ -338,10 +414,9 @@ namespace __gnu_pbds value_swap(PB_DS_CLASS_C_DEC&); node_pointer - recursive_copy_node(const_node_pointer); + recursive_copy_node(node_const_pointer); private: - void initialize(); @@ -353,54 +428,46 @@ namespace __gnu_pbds apply_update(node_pointer, Node_Update_*); bool - join_prep(PB_DS_CLASS_C_DEC&, split_join_branch_bag&); + join_prep(PB_DS_CLASS_C_DEC&, branch_bag&); void - rec_join_prep(const_node_pointer, const_node_pointer, - split_join_branch_bag&); + rec_join_prep(node_const_pointer, node_const_pointer, branch_bag&); void - rec_join_prep(const_leaf_pointer, const_leaf_pointer, - split_join_branch_bag&); + rec_join_prep(leaf_const_pointer, leaf_const_pointer, branch_bag&); void - rec_join_prep(const_leaf_pointer, const_internal_node_pointer, - split_join_branch_bag&); + rec_join_prep(leaf_const_pointer, inode_const_pointer, branch_bag&); void - rec_join_prep(const_internal_node_pointer, const_leaf_pointer, - split_join_branch_bag&); + rec_join_prep(inode_const_pointer, leaf_const_pointer, branch_bag&); void - rec_join_prep(const_internal_node_pointer, const_internal_node_pointer, - split_join_branch_bag&); + rec_join_prep(inode_const_pointer, inode_const_pointer, branch_bag&); node_pointer - rec_join(node_pointer, node_pointer, size_type, split_join_branch_bag&); + rec_join(node_pointer, node_pointer, size_type, branch_bag&); node_pointer - rec_join(leaf_pointer, leaf_pointer, split_join_branch_bag&); + rec_join(leaf_pointer, leaf_pointer, branch_bag&); node_pointer - rec_join(leaf_pointer, internal_node_pointer, size_type, - split_join_branch_bag&); + rec_join(leaf_pointer, inode_pointer, size_type, branch_bag&); node_pointer - rec_join(internal_node_pointer, leaf_pointer, size_type, - split_join_branch_bag&); + rec_join(inode_pointer, leaf_pointer, size_type, branch_bag&); node_pointer - rec_join(internal_node_pointer, internal_node_pointer, - split_join_branch_bag&); + rec_join(inode_pointer, inode_pointer, branch_bag&); size_type - keys_diff_ind(typename e_access_traits::const_iterator, - typename e_access_traits::const_iterator, - typename e_access_traits::const_iterator, - typename e_access_traits::const_iterator); + keys_diff_ind(typename access_traits::const_iterator, + typename access_traits::const_iterator, + typename access_traits::const_iterator, + typename access_traits::const_iterator); - internal_node_pointer - insert_branch(node_pointer, node_pointer, split_join_branch_bag&); + inode_pointer + insert_branch(node_pointer, node_pointer, branch_bag&); void update_min_max_for_inserted_leaf(leaf_pointer); @@ -415,90 +482,87 @@ namespace __gnu_pbds clear_imp(node_pointer); void - erase_fixup(internal_node_pointer); + erase_fixup(inode_pointer); void update_min_max_for_erased_leaf(leaf_pointer); - static inline const_e_iterator - pref_begin(const_node_pointer); + static inline a_const_iterator + pref_begin(node_const_pointer); - static inline const_e_iterator - pref_end(const_node_pointer); + static inline a_const_iterator + pref_end(node_const_pointer); inline node_pointer - find_imp(const_key_reference); + find_imp(key_const_reference); inline node_pointer - lower_bound_imp(const_key_reference); + lower_bound_imp(key_const_reference); inline node_pointer - upper_bound_imp(const_key_reference); + upper_bound_imp(key_const_reference); - inline static const_leaf_pointer - leftmost_descendant(const_node_pointer); + inline static leaf_const_pointer + leftmost_descendant(node_const_pointer); inline static leaf_pointer leftmost_descendant(node_pointer); - inline static const_leaf_pointer - rightmost_descendant(const_node_pointer); + inline static leaf_const_pointer + rightmost_descendant(node_const_pointer); inline static leaf_pointer rightmost_descendant(node_pointer); #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; + assert_valid(const char*, int) const; void - assert_iterators(const char* file, int line) const; + assert_iterators(const char*, int) const; void - assert_reverse_iterators(const char* file, int line) const; + assert_reverse_iterators(const char*, int) const; static size_type - recursive_count_leafs(const_node_pointer, - const char* file, int line); -#endif + recursive_count_leafs(node_const_pointer, const char*, int); +#endif #ifdef PB_DS_PAT_TRIE_TRACE_ static void - trace_node(const_node_pointer, size_type); + trace_node(node_const_pointer, size_type); template static void - trace_node_metadata(const_node_pointer, type_to_type); + trace_node_metadata(node_const_pointer, type_to_type); static void - trace_node_metadata(const_node_pointer, type_to_type); -#endif + trace_node_metadata(node_const_pointer, type_to_type); +#endif leaf_pointer - split_prep(const_key_reference, PB_DS_CLASS_C_DEC&, - split_join_branch_bag&); + split_prep(key_const_reference, PB_DS_CLASS_C_DEC&, branch_bag&); node_pointer - rec_split(node_pointer, const_e_iterator, const_e_iterator, - PB_DS_CLASS_C_DEC&, split_join_branch_bag&); + rec_split(node_pointer, a_const_iterator, a_const_iterator, + PB_DS_CLASS_C_DEC&, branch_bag&); void - split_insert_branch(size_type, const_e_iterator, - typename internal_node::iterator, - size_type, split_join_branch_bag&); + split_insert_branch(size_type, a_const_iterator, inode_iterator, + size_type, branch_bag&); - static head_allocator s_head_allocator; - static internal_node_allocator s_internal_node_allocator; - static leaf_allocator s_leaf_allocator; + static head_allocator s_head_allocator; + static inode_allocator s_inode_allocator; + static leaf_allocator s_leaf_allocator; - head_pointer m_p_head; - size_type m_size; + head_pointer m_p_head; + size_type m_size; }; -#define PB_DS_ASSERT_NODE_VALID(X) \ +#define PB_DS_ASSERT_NODE_VALID(X) \ _GLIBCXX_DEBUG_ONLY(X->assert_valid(this, __FILE__, __LINE__);) -#define PB_DS_RECURSIVE_COUNT_LEAFS(X) \ +#define PB_DS_RECURSIVE_COUNT_LEAFS(X) \ recursive_count_leafs(X, __FILE__, __LINE__) #include @@ -517,12 +581,8 @@ namespace __gnu_pbds #undef PB_DS_ASSERT_NODE_VALID #undef PB_DS_CLASS_C_DEC #undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_NAME -#undef PB_DS_TYPES_TRAITS_C_DEC +#undef PB_DS_PAT_TRIE_NAME +#undef PB_DS_PAT_TRIE_TRAITS_BASE #undef PB_DS_DEBUG_MAP_BASE_C_DEC -#undef PB_DS_V2F -#undef PB_DS_EP2VP -#undef PB_DS_V2S - } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp new file mode 100644 index 00000000000..b3718b51ed2 --- /dev/null +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp @@ -0,0 +1,1357 @@ +// -*- C++ -*- + +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 3, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. + +// Permission to use, copy, modify, sell, and distribute this software +// is hereby granted without fee, provided that the above copyright +// notice appears in all copies, and that both that copyright notice +// and this permission notice appear in supporting documentation. None +// of the above authors, nor IBM Haifa Research Laboratories, make any +// representation about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +/** + * @file pat_trie_/pat_trie_base.hpp + * Contains the base class for a patricia tree. + */ + +#ifndef PB_DS_PAT_TRIE_BASE +#define PB_DS_PAT_TRIE_BASE + +#include + +namespace __gnu_pbds +{ + namespace detail + { + /// Base type for PATRICIA trees. + struct pat_trie_base + { + /// Three types of nodes. + enum node_type + { + i_node, + leaf_node, + head_node + }; + + /// Metadata base primary template. + template + struct _Metadata + { + typedef Metadata metadata_type; + typedef _Alloc allocator_type; + typedef typename _Alloc::template rebind __rebind_m; + typedef typename __rebind_m::other::const_reference const_reference; + + const_reference + get_metadata() const + { return m_metadata; } + + metadata_type m_metadata; + }; + + /// Specialization for null metadata. + template + struct _Metadata + { + typedef null_type metadata_type; + typedef _Alloc allocator_type; + }; + + + /// Node base. + template + struct _Node_base + : public Metadata + { + private: + typedef typename Metadata::allocator_type _Alloc; + + public: + typedef _Alloc allocator_type; + typedef _ATraits access_traits; + typedef typename _ATraits::type_traits type_traits; + typedef typename _Alloc::template rebind<_Node_base> __rebind_n; + typedef typename __rebind_n::other::pointer node_pointer; + + node_pointer m_p_parent; + const node_type m_type; + + _Node_base(node_type type) : m_type(type) + { } + + typedef typename _Alloc::template rebind<_ATraits> __rebind_at; + typedef typename __rebind_at::other::const_pointer a_const_pointer; + typedef typename _ATraits::const_iterator a_const_iterator; + +#ifdef _GLIBCXX_DEBUG + typedef std::pair node_debug_info; + + void + assert_valid(a_const_pointer p_traits, + const char* __file, int __line) const + { assert_valid_imp(p_traits, __file, __line); } + + virtual node_debug_info + assert_valid_imp(a_const_pointer, const char*, int) const = 0; +#endif + }; + + + /// Head node for PATRICIA tree. + template + struct _Head + : public _Node_base<_ATraits, Metadata> + { + typedef _Node_base<_ATraits, Metadata> base_type; + typedef typename base_type::type_traits type_traits; + typedef typename base_type::node_pointer node_pointer; + + node_pointer m_p_min; + node_pointer m_p_max; + + _Head() : base_type(head_node) { } + +#ifdef _GLIBCXX_DEBUG + typedef typename base_type::node_debug_info node_debug_info; + typedef typename base_type::a_const_pointer a_const_pointer; + + virtual node_debug_info + assert_valid_imp(a_const_pointer, const char* __file, int __line) const + { + _GLIBCXX_DEBUG_VERIFY_AT(false, + _M_message("Assertion from %1;:%2;") + ._M_string(__FILE__)._M_integer(__LINE__), + __file, __line); + return node_debug_info(); + } +#endif + }; + + + /// Leaf node for PATRICIA tree. + template + struct _Leaf + : public _Node_base<_ATraits, Metadata> + { + typedef _Node_base<_ATraits, Metadata> base_type; + typedef typename base_type::type_traits type_traits; + typedef typename type_traits::value_type value_type; + typedef typename type_traits::reference reference; + typedef typename type_traits::const_reference const_reference; + + private: + value_type m_value; + + _Leaf(const _Leaf&); + + public: + _Leaf(const_reference other) + : base_type(leaf_node), m_value(other) { } + + reference + value() + { return m_value; } + + const_reference + value() const + { return m_value; } + +#ifdef _GLIBCXX_DEBUG + typedef typename base_type::node_debug_info node_debug_info; + typedef typename base_type::a_const_pointer a_const_pointer; + + virtual node_debug_info + assert_valid_imp(a_const_pointer p_traits, + const char* __file, int __line) const + { + PB_DS_DEBUG_VERIFY(base_type::m_type == leaf_node); + node_debug_info ret; + const_reference r_val = value(); + return std::make_pair(p_traits->begin(p_traits->extract_key(r_val)), + p_traits->end(p_traits->extract_key(r_val))); + } + + virtual + ~_Leaf() { } +#endif + }; + + + /// Internal node type, PATRICIA tree. + template + struct _Inode + : public _Node_base<_ATraits, Metadata> + { + typedef _Node_base<_ATraits, Metadata> base_type; + typedef typename base_type::type_traits type_traits; + typedef typename base_type::access_traits access_traits; + typedef typename type_traits::value_type value_type; + typedef typename base_type::allocator_type _Alloc; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + + private: + typedef typename base_type::a_const_pointer a_const_pointer; + typedef typename base_type::a_const_iterator a_const_iterator; + + typedef typename base_type::node_pointer node_pointer; + typedef typename _Alloc::template rebind __rebind_n; + typedef typename __rebind_n::other::const_pointer node_const_pointer; + + typedef _Leaf<_ATraits, Metadata> leaf; + typedef typename _Alloc::template rebind::other __rebind_l; + typedef typename __rebind_l::pointer leaf_pointer; + typedef typename __rebind_l::const_pointer leaf_const_pointer; + + typedef typename _Alloc::template rebind<_Inode>::other __rebind_in; + typedef typename __rebind_in::pointer inode_pointer; + typedef typename __rebind_in::const_pointer inode_const_pointer; + + inline size_type + get_pref_pos(a_const_iterator, a_const_iterator, a_const_pointer) const; + + public: + typedef typename _Alloc::template rebind::other __rebind_np; + typedef typename __rebind_np::pointer node_pointer_pointer; + typedef typename __rebind_np::reference node_pointer_reference; + + enum + { + arr_size = _ATraits::max_size + 1 + }; + PB_DS_STATIC_ASSERT(min_arr_size, arr_size >= 2); + + + /// Constant child iterator. + struct const_iterator + { + node_pointer_pointer m_p_p_cur; + node_pointer_pointer m_p_p_end; + + typedef std::forward_iterator_tag iterator_category; + typedef typename _Alloc::difference_type difference_type; + typedef node_pointer value_type; + typedef node_pointer_pointer pointer; + typedef node_pointer_reference reference; + + const_iterator(node_pointer_pointer p_p_cur = 0, + node_pointer_pointer p_p_end = 0) + : m_p_p_cur(p_p_cur), m_p_p_end(p_p_end) + { } + + bool + operator==(const const_iterator& other) const + { return m_p_p_cur == other.m_p_p_cur; } + + bool + operator!=(const const_iterator& other) const + { return m_p_p_cur != other.m_p_p_cur; } + + const_iterator& + operator++() + { + do + ++m_p_p_cur; + while (m_p_p_cur != m_p_p_end && *m_p_p_cur == 0); + return *this; + } + + const_iterator + operator++(int) + { + const_iterator ret_it(*this); + operator++(); + return ret_it; + } + + const node_pointer_pointer + operator->() const + { + _GLIBCXX_DEBUG_ONLY(assert_referencible();) + return m_p_p_cur; + } + + node_const_pointer + operator*() const + { + _GLIBCXX_DEBUG_ONLY(assert_referencible();) + return *m_p_p_cur; + } + + protected: +#ifdef _GLIBCXX_DEBUG + void + assert_referencible() const + { _GLIBCXX_DEBUG_ASSERT(m_p_p_cur != m_p_p_end && *m_p_p_cur != 0); } +#endif + }; + + + /// Child iterator. + struct iterator : public const_iterator + { + public: + typedef std::forward_iterator_tag iterator_category; + typedef typename _Alloc::difference_type difference_type; + typedef node_pointer value_type; + typedef node_pointer_pointer pointer; + typedef node_pointer_reference reference; + + inline + iterator(node_pointer_pointer p_p_cur = 0, + node_pointer_pointer p_p_end = 0) + : const_iterator(p_p_cur, p_p_end) { } + + bool + operator==(const iterator& other) const + { return const_iterator::m_p_p_cur == other.m_p_p_cur; } + + bool + operator!=(const iterator& other) const + { return const_iterator::m_p_p_cur != other.m_p_p_cur; } + + iterator& + operator++() + { + const_iterator::operator++(); + return *this; + } + + iterator + operator++(int) + { + iterator ret_it(*this); + operator++(); + return ret_it; + } + + node_pointer_pointer + operator->() + { + _GLIBCXX_DEBUG_ONLY(const_iterator::assert_referencible();) + return const_iterator::m_p_p_cur; + } + + node_pointer + operator*() + { + _GLIBCXX_DEBUG_ONLY(const_iterator::assert_referencible();) + return *const_iterator::m_p_p_cur; + } + }; + + + _Inode(size_type, const a_const_iterator); + + void + update_prefixes(a_const_pointer); + + const_iterator + begin() const; + + iterator + begin(); + + const_iterator + end() const; + + iterator + end(); + + inline node_pointer + get_child_node(a_const_iterator, a_const_iterator, a_const_pointer); + + inline node_const_pointer + get_child_node(a_const_iterator, a_const_iterator, a_const_pointer) const; + + inline iterator + get_child_it(a_const_iterator, a_const_iterator, a_const_pointer); + + inline node_pointer + get_lower_bound_child_node(a_const_iterator, a_const_iterator, + size_type, a_const_pointer); + + inline node_pointer + add_child(node_pointer, a_const_iterator, a_const_iterator, + a_const_pointer); + + inline node_const_pointer + get_join_child(node_const_pointer, a_const_pointer) const; + + inline node_pointer + get_join_child(node_pointer, a_const_pointer); + + void + remove_child(node_pointer); + + void + remove_child(iterator); + + void + replace_child(node_pointer, a_const_iterator, a_const_iterator, + a_const_pointer); + + inline a_const_iterator + pref_b_it() const; + + inline a_const_iterator + pref_e_it() const; + + bool + should_be_mine(a_const_iterator, a_const_iterator, size_type, + a_const_pointer) const; + + leaf_pointer + leftmost_descendant(); + + leaf_const_pointer + leftmost_descendant() const; + + leaf_pointer + rightmost_descendant(); + + leaf_const_pointer + rightmost_descendant() const; + +#ifdef _GLIBCXX_DEBUG + typedef typename base_type::node_debug_info node_debug_info; + + virtual node_debug_info + assert_valid_imp(a_const_pointer, const char*, int) const; +#endif + + size_type + get_e_ind() const + { return m_e_ind; } + + private: + _Inode(const _Inode&); + + size_type + get_begin_pos() const; + + static __rebind_l s_leaf_alloc; + static __rebind_in s_inode_alloc; + + const size_type m_e_ind; + a_const_iterator m_pref_b_it; + a_const_iterator m_pref_e_it; + node_pointer m_a_p_children[arr_size]; + }; + +#define PB_DS_CONST_IT_C_DEC \ + _CIter + +#define PB_DS_CONST_ODIR_IT_C_DEC \ + _CIter + +#define PB_DS_IT_C_DEC \ + _Iter + +#define PB_DS_ODIR_IT_C_DEC \ + _Iter + + + /// Const iterator. + template + class _CIter + { + public: + // These types are all the same for the first four template arguments. + typedef typename Node::allocator_type allocator_type; + typedef typename Node::type_traits type_traits; + + typedef std::bidirectional_iterator_tag iterator_category; + typedef typename allocator_type::difference_type difference_type; + typedef typename type_traits::value_type value_type; + typedef typename type_traits::pointer pointer; + typedef typename type_traits::reference reference; + typedef typename type_traits::const_pointer const_pointer; + typedef typename type_traits::const_reference const_reference; + + typedef allocator_type _Alloc; + typedef typename _Alloc::template rebind __rebind_n; + typedef typename __rebind_n::other::pointer node_pointer; + typedef typename _Alloc::template rebind __rebind_l; + typedef typename __rebind_l::other::pointer leaf_pointer; + typedef typename __rebind_l::other::const_pointer leaf_const_pointer; + typedef typename _Alloc::template rebind __rebind_h; + typedef typename __rebind_h::other::pointer head_pointer; + + typedef typename _Alloc::template rebind __rebind_in; + typedef typename __rebind_in::other::pointer inode_pointer; + typedef typename Inode::iterator inode_iterator; + + node_pointer m_p_nd; + + _CIter(node_pointer p_nd = 0) : m_p_nd(p_nd) + { } + + _CIter(const PB_DS_CONST_ODIR_IT_C_DEC& other) + : m_p_nd(other.m_p_nd) + { } + + _CIter& + operator=(const _CIter& other) + { + m_p_nd = other.m_p_nd; + return *this; + } + + _CIter& + operator=(const PB_DS_CONST_ODIR_IT_C_DEC& other) + { + m_p_nd = other.m_p_nd; + return *this; + } + + const_pointer + operator->() const + { + _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == leaf_node); + return &static_cast(m_p_nd)->value(); + } + + const_reference + operator*() const + { + _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == leaf_node); + return static_cast(m_p_nd)->value(); + } + + bool + operator==(const _CIter& other) const + { return m_p_nd == other.m_p_nd; } + + bool + operator==(const PB_DS_CONST_ODIR_IT_C_DEC& other) const + { return m_p_nd == other.m_p_nd; } + + bool + operator!=(const _CIter& other) const + { return m_p_nd != other.m_p_nd; } + + bool + operator!=(const PB_DS_CONST_ODIR_IT_C_DEC& other) const + { return m_p_nd != other.m_p_nd; } + + _CIter& + operator++() + { + inc(integral_constant()); + return *this; + } + + _CIter + operator++(int) + { + _CIter ret_it(m_p_nd); + operator++(); + return ret_it; + } + + _CIter& + operator--() + { + dec(integral_constant()); + return *this; + } + + _CIter + operator--(int) + { + _CIter ret_it(m_p_nd); + operator--(); + return ret_it; + } + + protected: + void + inc(false_type) + { dec(true_type()); } + + void + inc(true_type) + { + if (m_p_nd->m_type == head_node) + { + m_p_nd = static_cast(m_p_nd)->m_p_min; + return; + } + + node_pointer p_y = m_p_nd->m_p_parent; + while (p_y->m_type != head_node && get_larger_sibling(m_p_nd) == 0) + { + m_p_nd = p_y; + p_y = p_y->m_p_parent; + } + + if (p_y->m_type == head_node) + { + m_p_nd = p_y; + return; + } + m_p_nd = leftmost_descendant(get_larger_sibling(m_p_nd)); + } + + void + dec(false_type) + { inc(true_type()); } + + void + dec(true_type) + { + if (m_p_nd->m_type == head_node) + { + m_p_nd = static_cast(m_p_nd)->m_p_max; + return; + } + + node_pointer p_y = m_p_nd->m_p_parent; + while (p_y->m_type != head_node && get_smaller_sibling(m_p_nd) == 0) + { + m_p_nd = p_y; + p_y = p_y->m_p_parent; + } + + if (p_y->m_type == head_node) + { + m_p_nd = p_y; + return; + } + m_p_nd = rightmost_descendant(get_smaller_sibling(m_p_nd)); + } + + static node_pointer + get_larger_sibling(node_pointer p_nd) + { + inode_pointer p_parent = static_cast(p_nd->m_p_parent); + + inode_iterator it = p_parent->begin(); + while (*it != p_nd) + ++it; + + inode_iterator next_it = it; + ++next_it; + return (next_it == p_parent->end())? 0 : *next_it; + } + + static node_pointer + get_smaller_sibling(node_pointer p_nd) + { + inode_pointer p_parent = static_cast(p_nd->m_p_parent); + + inode_iterator it = p_parent->begin(); + if (*it == p_nd) + return 0; + + inode_iterator prev_it; + do + { + prev_it = it; + ++it; + if (*it == p_nd) + return *prev_it; + } + while (true); + + _GLIBCXX_DEBUG_ASSERT(false); + return 0; + } + + static leaf_pointer + leftmost_descendant(node_pointer p_nd) + { + if (p_nd->m_type == leaf_node) + return static_cast(p_nd); + return static_cast(p_nd)->leftmost_descendant(); + } + + static leaf_pointer + rightmost_descendant(node_pointer p_nd) + { + if (p_nd->m_type == leaf_node) + return static_cast(p_nd); + return static_cast(p_nd)->rightmost_descendant(); + } + }; + + + /// Iterator. + template + class _Iter + : public _CIter + { + public: + typedef _CIter + base_type; + typedef typename base_type::allocator_type allocator_type; + typedef typename base_type::type_traits type_traits; + typedef typename type_traits::value_type value_type; + typedef typename type_traits::pointer pointer; + typedef typename type_traits::reference reference; + + typedef typename base_type::node_pointer node_pointer; + typedef typename base_type::leaf_pointer leaf_pointer; + typedef typename base_type::leaf_const_pointer leaf_const_pointer; + typedef typename base_type::head_pointer head_pointer; + typedef typename base_type::inode_pointer inode_pointer; + + _Iter(node_pointer p_nd = 0) + : base_type(p_nd) { } + + _Iter(const PB_DS_ODIR_IT_C_DEC& other) + : base_type(other.m_p_nd) { } + + _Iter& + operator=(const _Iter& other) + { + base_type::m_p_nd = other.m_p_nd; + return *this; + } + + _Iter& + operator=(const PB_DS_ODIR_IT_C_DEC& other) + { + base_type::m_p_nd = other.m_p_nd; + return *this; + } + + pointer + operator->() const + { + _GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd->m_type == leaf_node); + return &static_cast(base_type::m_p_nd)->value(); + } + + reference + operator*() const + { + _GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd->m_type == leaf_node); + return static_cast(base_type::m_p_nd)->value(); + } + + _Iter& + operator++() + { + base_type::operator++(); + return *this; + } + + _Iter + operator++(int) + { + _Iter ret(base_type::m_p_nd); + operator++(); + return ret; + } + + _Iter& + operator--() + { + base_type::operator--(); + return *this; + } + + _Iter + operator--(int) + { + _Iter ret(base_type::m_p_nd); + operator--(); + return ret; + } + }; + +#undef PB_DS_CONST_ODIR_IT_C_DEC +#undef PB_DS_ODIR_IT_C_DEC + + +#define PB_DS_PAT_TRIE_NODE_CONST_ITERATOR_C_DEC \ + _Node_citer + +#define PB_DS_PAT_TRIE_NODE_ITERATOR_C_DEC \ + _Node_iter + + /// Node const iterator. + template + class _Node_citer + { + protected: + typedef typename _Alloc::template rebind __rebind_n; + typedef typename __rebind_n::other::pointer node_pointer; + + typedef typename _Alloc::template rebind __rebind_l; + typedef typename __rebind_l::other::pointer leaf_pointer; + typedef typename __rebind_l::other::const_pointer leaf_const_pointer; + + typedef typename _Alloc::template rebind __rebind_in; + typedef typename __rebind_in::other::pointer inode_pointer; + typedef typename __rebind_in::other::const_pointer inode_const_pointer; + + typedef typename Node::a_const_pointer a_const_pointer; + typedef typename Node::a_const_iterator a_const_iterator; + + private: + a_const_iterator + pref_begin() const + { + if (m_p_nd->m_type == leaf_node) + { + leaf_const_pointer lcp = static_cast(m_p_nd); + return m_p_traits->begin(m_p_traits->extract_key(lcp->value())); + } + _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == i_node); + return static_cast(m_p_nd)->pref_b_it(); + } + + a_const_iterator + pref_end() const + { + if (m_p_nd->m_type == leaf_node) + { + leaf_const_pointer lcp = static_cast(m_p_nd); + return m_p_traits->end(m_p_traits->extract_key(lcp->value())); + } + _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == i_node); + return static_cast(m_p_nd)->pref_e_it(); + } + + public: + typedef trivial_iterator_tag iterator_category; + typedef trivial_iterator_difference_type difference_type; + typedef typename _Alloc::size_type size_type; + + typedef _CIterator value_type; + typedef value_type reference; + typedef value_type const_reference; + + // Metadata type. + typedef typename Node::metadata_type metadata_type; + + // Const metadata reference type. + typedef typename _Alloc::template rebind __rebind_m; + typedef typename __rebind_m::other __rebind_ma; + typedef typename __rebind_ma::const_reference metadata_const_reference; + + inline + _Node_citer(node_pointer p_nd = 0, a_const_pointer p_traits = 0) + : m_p_nd(const_cast(p_nd)), m_p_traits(p_traits) + { } + + // Subtree valid prefix. + std::pair + valid_prefix() const + { return std::make_pair(pref_begin(), pref_end()); } + + // Const access; returns the __const iterator* associated with + // the current leaf. + const_reference + operator*() const + { + _GLIBCXX_DEBUG_ASSERT(num_children() == 0); + return _CIterator(m_p_nd); + } + + // Metadata access. + metadata_const_reference + get_metadata() const + { return m_p_nd->get_metadata(); } + + // Returns the number of children in the corresponding node. + size_type + num_children() const + { + if (m_p_nd->m_type == leaf_node) + return 0; + _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == i_node); + inode_pointer inp = static_cast(m_p_nd); + return std::distance(inp->begin(), inp->end()); + } + + // Returns a __const node __iterator to the corresponding node's + // i-th child. + _Node_citer + get_child(size_type i) const + { + _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == i_node); + inode_pointer inp = static_cast(m_p_nd); + typename Inode::iterator it = inp->begin(); + std::advance(it, i); + return _Node_citer(*it, m_p_traits); + } + + // Compares content to a different iterator object. + bool + operator==(const _Node_citer& other) const + { return m_p_nd == other.m_p_nd; } + + // Compares content (negatively) to a different iterator object. + bool + operator!=(const _Node_citer& other) const + { return m_p_nd != other.m_p_nd; } + + node_pointer m_p_nd; + a_const_pointer m_p_traits; + }; + + + /// Node iterator. + template + class _Node_iter + : public _Node_citer + { + private: + typedef _Node_citer base_type; + typedef typename _Alloc::template rebind __rebind_n; + typedef typename __rebind_n::other::pointer node_pointer; + typedef typename base_type::inode_pointer inode_pointer; + typedef typename base_type::a_const_pointer a_const_pointer; + typedef Iterator iterator; + + public: + typedef typename base_type::size_type size_type; + + typedef Iterator value_type; + typedef value_type reference; + typedef value_type const_reference; + + _Node_iter(node_pointer p_nd = 0, a_const_pointer p_traits = 0) + : base_type(p_nd, p_traits) + { } + + // Access; returns the iterator* associated with the current leaf. + reference + operator*() const + { + _GLIBCXX_DEBUG_ASSERT(base_type::num_children() == 0); + return iterator(base_type::m_p_nd); + } + + // Returns a node __iterator to the corresponding node's i-th child. + _Node_iter + get_child(size_type i) const + { + _GLIBCXX_DEBUG_ASSERT(base_type::m_p_nd->m_type == i_node); + + typename Inode::iterator it = + static_cast(base_type::m_p_nd)->begin(); + + std::advance(it, i); + return _Node_iter(*it, base_type::m_p_traits); + } + }; + }; + + +#define PB_DS_CLASS_T_DEC \ + template + +#define PB_DS_CLASS_C_DEC \ + pat_trie_base::_Inode<_ATraits, Metadata> + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::__rebind_l + PB_DS_CLASS_C_DEC::s_leaf_alloc; + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::__rebind_in + PB_DS_CLASS_C_DEC::s_inode_alloc; + + PB_DS_CLASS_T_DEC + inline typename PB_DS_CLASS_C_DEC::size_type + PB_DS_CLASS_C_DEC:: + get_pref_pos(a_const_iterator b_it, a_const_iterator e_it, + a_const_pointer p_traits) const + { + if (static_cast(std::distance(b_it, e_it)) <= m_e_ind) + return 0; + std::advance(b_it, m_e_ind); + return 1 + p_traits->e_pos(*b_it); + } + + PB_DS_CLASS_T_DEC + PB_DS_CLASS_C_DEC:: + _Inode(size_type len, const a_const_iterator it) + : base_type(i_node), m_e_ind(len), m_pref_b_it(it), m_pref_e_it(it) + { + std::advance(m_pref_e_it, m_e_ind); + std::fill(m_a_p_children, m_a_p_children + arr_size, + static_cast(0)); + } + + PB_DS_CLASS_T_DEC + void + PB_DS_CLASS_C_DEC:: + update_prefixes(a_const_pointer p_traits) + { + node_pointer p_first = *begin(); + if (p_first->m_type == leaf_node) + { + leaf_const_pointer p = static_cast(p_first); + m_pref_b_it = p_traits->begin(access_traits::extract_key(p->value())); + } + else + { + inode_pointer p = static_cast(p_first); + _GLIBCXX_DEBUG_ASSERT(p_first->m_type == i_node); + m_pref_b_it = p->pref_b_it(); + } + m_pref_e_it = m_pref_b_it; + std::advance(m_pref_e_it, m_e_ind); + } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::const_iterator + PB_DS_CLASS_C_DEC:: + begin() const + { + typedef node_pointer_pointer pointer_type; + pointer_type p = const_cast(m_a_p_children); + return const_iterator(p + get_begin_pos(), p + arr_size); + } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::iterator + PB_DS_CLASS_C_DEC:: + begin() + { + return iterator(m_a_p_children + get_begin_pos(), + m_a_p_children + arr_size); + } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::const_iterator + PB_DS_CLASS_C_DEC:: + end() const + { + typedef node_pointer_pointer pointer_type; + pointer_type p = const_cast(m_a_p_children) + arr_size; + return const_iterator(p, p); + } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::iterator + PB_DS_CLASS_C_DEC:: + end() + { return iterator(m_a_p_children + arr_size, m_a_p_children + arr_size); } + + PB_DS_CLASS_T_DEC + inline typename PB_DS_CLASS_C_DEC::node_pointer + PB_DS_CLASS_C_DEC:: + get_child_node(a_const_iterator b_it, a_const_iterator e_it, + a_const_pointer p_traits) + { + const size_type i = get_pref_pos(b_it, e_it, p_traits); + _GLIBCXX_DEBUG_ASSERT(i < arr_size); + return m_a_p_children[i]; + } + + PB_DS_CLASS_T_DEC + inline typename PB_DS_CLASS_C_DEC::iterator + PB_DS_CLASS_C_DEC:: + get_child_it(a_const_iterator b_it, a_const_iterator e_it, + a_const_pointer p_traits) + { + const size_type i = get_pref_pos(b_it, e_it, p_traits); + _GLIBCXX_DEBUG_ASSERT(i < arr_size); + _GLIBCXX_DEBUG_ASSERT(m_a_p_children[i] != 0); + return iterator(m_a_p_children + i, m_a_p_children + i); + } + + PB_DS_CLASS_T_DEC + inline typename PB_DS_CLASS_C_DEC::node_const_pointer + PB_DS_CLASS_C_DEC:: + get_child_node(a_const_iterator b_it, a_const_iterator e_it, + a_const_pointer p_traits) const + { return const_cast(get_child_node(b_it, e_it, p_traits)); } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::node_pointer + PB_DS_CLASS_C_DEC:: + get_lower_bound_child_node(a_const_iterator b_it, a_const_iterator e_it, + size_type checked_ind, + a_const_pointer p_traits) + { + if (!should_be_mine(b_it, e_it, checked_ind, p_traits)) + { + if (p_traits->cmp_prefixes(b_it, e_it, m_pref_b_it, + m_pref_e_it, true)) + return leftmost_descendant(); + return rightmost_descendant(); + } + + size_type i = get_pref_pos(b_it, e_it, p_traits); + _GLIBCXX_DEBUG_ASSERT(i < arr_size); + + if (m_a_p_children[i] != 0) + return m_a_p_children[i]; + + while (++i < arr_size) + if (m_a_p_children[i] != 0) + { + const node_type& __nt = m_a_p_children[i]->m_type; + node_pointer ret = m_a_p_children[i]; + + if (__nt == leaf_node) + return ret; + + _GLIBCXX_DEBUG_ASSERT(__nt == i_node); + inode_pointer inp = static_cast(ret); + return inp->leftmost_descendant(); + } + + return rightmost_descendant(); + } + + PB_DS_CLASS_T_DEC + inline typename PB_DS_CLASS_C_DEC::node_pointer + PB_DS_CLASS_C_DEC:: + add_child(node_pointer p_nd, a_const_iterator b_it, a_const_iterator e_it, + a_const_pointer p_traits) + { + const size_type i = get_pref_pos(b_it, e_it, p_traits); + _GLIBCXX_DEBUG_ASSERT(i < arr_size); + if (m_a_p_children[i] == 0) + { + m_a_p_children[i] = p_nd; + p_nd->m_p_parent = this; + return p_nd; + } + return m_a_p_children[i]; + } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::node_const_pointer + PB_DS_CLASS_C_DEC:: + get_join_child(node_const_pointer p_nd, + a_const_pointer p_tr) const + { + node_pointer p = const_cast(p_nd); + return const_cast(this)->get_join_child(p, p_tr); + } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::node_pointer + PB_DS_CLASS_C_DEC:: + get_join_child(node_pointer p_nd, a_const_pointer p_traits) + { + size_type i; + a_const_iterator b_it; + a_const_iterator e_it; + if (p_nd->m_type == leaf_node) + { + leaf_const_pointer p = static_cast(p_nd); + + typedef typename type_traits::key_const_reference kcr; + kcr r_key = access_traits::extract_key(p->value()); + b_it = p_traits->begin(r_key); + e_it = p_traits->end(r_key); + } + else + { + b_it = static_cast(p_nd)->pref_b_it(); + e_it = static_cast(p_nd)->pref_e_it(); + } + i = get_pref_pos(b_it, e_it, p_traits); + _GLIBCXX_DEBUG_ASSERT(i < arr_size); + return m_a_p_children[i]; + } + + PB_DS_CLASS_T_DEC + void + PB_DS_CLASS_C_DEC:: + remove_child(node_pointer p_nd) + { + size_type i = 0; + for (; i < arr_size; ++i) + if (m_a_p_children[i] == p_nd) + { + m_a_p_children[i] = 0; + return; + } + _GLIBCXX_DEBUG_ASSERT(i != arr_size); + } + + PB_DS_CLASS_T_DEC + void + PB_DS_CLASS_C_DEC:: + remove_child(iterator it) + { *it.m_p_p_cur = 0; } + + PB_DS_CLASS_T_DEC + void + PB_DS_CLASS_C_DEC:: + replace_child(node_pointer p_nd, a_const_iterator b_it, + a_const_iterator e_it, + a_const_pointer p_traits) + { + const size_type i = get_pref_pos(b_it, e_it, p_traits); + _GLIBCXX_DEBUG_ASSERT(i < arr_size); + m_a_p_children[i] = p_nd; + p_nd->m_p_parent = this; + } + + PB_DS_CLASS_T_DEC + inline typename PB_DS_CLASS_C_DEC::a_const_iterator + PB_DS_CLASS_C_DEC:: + pref_b_it() const + { return m_pref_b_it; } + + PB_DS_CLASS_T_DEC + inline typename PB_DS_CLASS_C_DEC::a_const_iterator + PB_DS_CLASS_C_DEC:: + pref_e_it() const + { return m_pref_e_it; } + + PB_DS_CLASS_T_DEC + bool + PB_DS_CLASS_C_DEC:: + should_be_mine(a_const_iterator b_it, a_const_iterator e_it, + size_type checked_ind, + a_const_pointer p_traits) const + { + if (m_e_ind == 0) + return true; + + const size_type num_es = std::distance(b_it, e_it); + if (num_es < m_e_ind) + return false; + + a_const_iterator key_b_it = b_it; + std::advance(key_b_it, checked_ind); + a_const_iterator key_e_it = b_it; + std::advance(key_e_it, m_e_ind); + + a_const_iterator value_b_it = m_pref_b_it; + std::advance(value_b_it, checked_ind); + a_const_iterator value_e_it = m_pref_b_it; + std::advance(value_e_it, m_e_ind); + + return p_traits->equal_prefixes(key_b_it, key_e_it, value_b_it, + value_e_it); + } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::leaf_pointer + PB_DS_CLASS_C_DEC:: + leftmost_descendant() + { + node_pointer p_pot = *begin(); + if (p_pot->m_type == leaf_node) + return (static_cast(p_pot)); + _GLIBCXX_DEBUG_ASSERT(p_pot->m_type == i_node); + return static_cast(p_pot)->leftmost_descendant(); + } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::leaf_const_pointer + PB_DS_CLASS_C_DEC:: + leftmost_descendant() const + { return const_cast(this)->leftmost_descendant(); } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::leaf_pointer + PB_DS_CLASS_C_DEC:: + rightmost_descendant() + { + const size_type num_children = std::distance(begin(), end()); + _GLIBCXX_DEBUG_ASSERT(num_children >= 2); + + iterator it = begin(); + std::advance(it, num_children - 1); + node_pointer p_pot =* it; + if (p_pot->m_type == leaf_node) + return static_cast(p_pot); + _GLIBCXX_DEBUG_ASSERT(p_pot->m_type == i_node); + return static_cast(p_pot)->rightmost_descendant(); + } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::leaf_const_pointer + PB_DS_CLASS_C_DEC:: + rightmost_descendant() const + { return const_cast(this)->rightmost_descendant(); } + + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::size_type + PB_DS_CLASS_C_DEC:: + get_begin_pos() const + { + size_type i = 0; + for (i; i < arr_size && m_a_p_children[i] == 0; ++i) + ; + return i; + } + +#ifdef _GLIBCXX_DEBUG + PB_DS_CLASS_T_DEC + typename PB_DS_CLASS_C_DEC::node_debug_info + PB_DS_CLASS_C_DEC:: + assert_valid_imp(a_const_pointer p_traits, + const char* __file, int __line) const + { + PB_DS_DEBUG_VERIFY(base_type::m_type == i_node); + PB_DS_DEBUG_VERIFY(static_cast(std::distance(pref_b_it(), pref_e_it())) == m_e_ind); + PB_DS_DEBUG_VERIFY(std::distance(begin(), end()) >= 2); + + for (typename _Inode::const_iterator it = begin(); it != end(); ++it) + { + node_const_pointer p_nd = *it; + PB_DS_DEBUG_VERIFY(p_nd->m_p_parent == this); + node_debug_info child_ret = p_nd->assert_valid_imp(p_traits, + __file, __line); + + PB_DS_DEBUG_VERIFY(static_cast(std::distance(child_ret.first, child_ret.second)) >= m_e_ind); + PB_DS_DEBUG_VERIFY(should_be_mine(child_ret.first, child_ret.second, 0, p_traits)); + PB_DS_DEBUG_VERIFY(get_pref_pos(child_ret.first, child_ret.second, p_traits) == static_cast(it.m_p_p_cur - m_a_p_children)); + } + return std::make_pair(pref_b_it(), pref_e_it()); + } +#endif + +#undef PB_DS_CLASS_T_DEC +#undef PB_DS_CLASS_C_DEC + } // namespace detail +} // namespace __gnu_pbds + +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp deleted file mode 100644 index a3e15062b3e..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/point_iterators.hpp +++ /dev/null @@ -1,484 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file point_iterators.hpp - * Contains an implementation class for bin_search_tree_. - */ - -#ifndef PB_DS_PAT_TRIE_FIND_ITERATORS_HPP -#define PB_DS_PAT_TRIE_FIND_ITERATORS_HPP - -#include - -namespace __gnu_pbds -{ - namespace detail - { - -#define PB_DS_CONST_IT_C_DEC \ - pat_trie_const_it_< \ - Type_Traits, \ - Node, \ - Leaf, \ - Head, \ - Internal_Node, \ - Is_Forward_Iterator, \ - Allocator> - -#define PB_DS_CONST_ODIR_IT_C_DEC \ - pat_trie_const_it_< \ - Type_Traits, \ - Node, \ - Leaf, \ - Head, \ - Internal_Node, \ - !Is_Forward_Iterator, \ - Allocator> - -#define PB_DS_IT_C_DEC \ - pat_trie_it_< \ - Type_Traits, \ - Node, \ - Leaf, \ - Head, \ - Internal_Node, \ - Is_Forward_Iterator, \ - Allocator> - -#define PB_DS_ODIR_IT_C_DEC \ - pat_trie_it_< \ - Type_Traits, \ - Node, \ - Leaf, \ - Head, \ - Internal_Node, \ - !Is_Forward_Iterator, \ - Allocator> - - - // Const iterator. - template - class pat_trie_const_it_ - { - - private: - typedef - typename Allocator::template rebind< - Node>::other::pointer - node_pointer; - - typedef - typename Allocator::template rebind< - Leaf>::other::const_pointer - const_leaf_pointer; - - typedef - typename Allocator::template rebind< - Leaf>::other::pointer - leaf_pointer; - - typedef - typename Allocator::template rebind< - Head>::other::pointer - head_pointer; - - typedef - typename Allocator::template rebind< - Internal_Node>::other::pointer - internal_node_pointer; - - public: - - typedef std::bidirectional_iterator_tag iterator_category; - - typedef typename Allocator::difference_type difference_type; - - typedef typename Type_Traits::value_type value_type; - - typedef typename Type_Traits::pointer pointer; - - typedef typename Type_Traits::const_pointer const_pointer; - - typedef typename Type_Traits::reference reference; - - typedef typename Type_Traits::const_reference const_reference; - - public: - - inline - pat_trie_const_it_(node_pointer p_nd = 0) : m_p_nd(p_nd) - { } - - inline - pat_trie_const_it_(const PB_DS_CONST_ODIR_IT_C_DEC& other) - : m_p_nd(other.m_p_nd) - { } - - inline - PB_DS_CONST_IT_C_DEC& - operator=(const PB_DS_CONST_IT_C_DEC& other) - { - m_p_nd = other.m_p_nd; - return *this; - } - - inline - PB_DS_CONST_IT_C_DEC& - operator=(const PB_DS_CONST_ODIR_IT_C_DEC& other) - { - m_p_nd = other.m_p_nd; - return *this; - } - - inline const_pointer - operator->() const - { - _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_leaf_node_type); - return &static_cast(m_p_nd)->value(); - } - - inline const_reference - operator*() const - { - _GLIBCXX_DEBUG_ASSERT(m_p_nd->m_type == pat_trie_leaf_node_type); - return static_cast(m_p_nd)->value(); - } - - inline bool - operator==(const PB_DS_CONST_IT_C_DEC& other) const - { return (m_p_nd == other.m_p_nd); } - - inline bool - operator==(const PB_DS_CONST_ODIR_IT_C_DEC& other) const - { return (m_p_nd == other.m_p_nd); } - - inline bool - operator!=(const PB_DS_CONST_IT_C_DEC& other) const - { return (m_p_nd != other.m_p_nd); } - - inline bool - operator!=(const PB_DS_CONST_ODIR_IT_C_DEC& other) const - { return (m_p_nd != other.m_p_nd); } - - inline PB_DS_CONST_IT_C_DEC& - operator++() - { - inc(integral_constant()); - return *this; - } - - inline PB_DS_CONST_IT_C_DEC - operator++(int) - { - PB_DS_CONST_IT_C_DEC ret_it(m_p_nd); - operator++(); - return ret_it; - } - - inline PB_DS_CONST_IT_C_DEC& - operator--() - { - dec(integral_constant()); - return *this; - } - - inline PB_DS_CONST_IT_C_DEC - operator--(int) - { - PB_DS_CONST_IT_C_DEC ret_it(m_p_nd); - operator--(); - return ret_it; - } - - protected: - inline void - inc(false_type) - { dec(true_type()); } - - void - inc(true_type) - { - if (m_p_nd->m_type == pat_trie_head_node_type) - { - m_p_nd = static_cast(m_p_nd)->m_p_min; - return; - } - - node_pointer p_y = m_p_nd->m_p_parent; - while (p_y->m_type != pat_trie_head_node_type && - get_larger_sibling(m_p_nd) == 0) - { - m_p_nd = p_y; - p_y = p_y->m_p_parent; - } - - if (p_y->m_type == pat_trie_head_node_type) - { - m_p_nd = p_y; - return; - } - m_p_nd = leftmost_descendant(get_larger_sibling(m_p_nd)); - } - - inline void - dec(false_type) - { inc(true_type()); } - - void - dec(true_type) - { - if (m_p_nd->m_type == pat_trie_head_node_type) - { - m_p_nd = static_cast(m_p_nd)->m_p_max; - return; - } - - node_pointer p_y = m_p_nd->m_p_parent; - while (p_y->m_type != pat_trie_head_node_type && - get_smaller_sibling(m_p_nd) == 0) - { - m_p_nd = p_y; - p_y = p_y->m_p_parent; - } - - if (p_y->m_type == pat_trie_head_node_type) - { - m_p_nd = p_y; - return; - } - m_p_nd = rightmost_descendant(get_smaller_sibling(m_p_nd)); - } - - inline static node_pointer - get_larger_sibling(node_pointer p_nd) - { - internal_node_pointer p_parent = - static_cast(p_nd->m_p_parent); - - typename Internal_Node::iterator it = p_parent->begin(); - while (*it != p_nd) - ++it; - - typename Internal_Node::iterator next_it = it; - ++next_it; - return ((next_it == p_parent->end())? 0 :* next_it); - } - - inline static node_pointer - get_smaller_sibling(node_pointer p_nd) - { - internal_node_pointer p_parent = - static_cast(p_nd->m_p_parent); - - typename Internal_Node::iterator it = p_parent->begin(); - - if (*it == p_nd) - return (0); - typename Internal_Node::iterator prev_it; - do - { - prev_it = it; - ++it; - if (*it == p_nd) - return (*prev_it); - } - while (true); - - _GLIBCXX_DEBUG_ASSERT(false); - return (0); - } - - inline static leaf_pointer - leftmost_descendant(node_pointer p_nd) - { - if (p_nd->m_type == pat_trie_leaf_node_type) - return static_cast(p_nd); - return static_cast(p_nd)->leftmost_descendant(); - } - - inline static leaf_pointer - rightmost_descendant(node_pointer p_nd) - { - if (p_nd->m_type == pat_trie_leaf_node_type) - return static_cast(p_nd); - return static_cast(p_nd)->rightmost_descendant(); - } - - public: - node_pointer m_p_nd; - }; - - // Iterator. - template - class pat_trie_it_ : - public PB_DS_CONST_IT_C_DEC - - { - private: - typedef - typename Allocator::template rebind< - Node>::other::pointer - node_pointer; - - typedef - typename Allocator::template rebind< - Leaf>::other::const_pointer - const_leaf_pointer; - - typedef - typename Allocator::template rebind< - Leaf>::other::pointer - leaf_pointer; - - typedef - typename Allocator::template rebind< - Head>::other::pointer - head_pointer; - - typedef - typename Allocator::template rebind< - Internal_Node>::other::pointer - internal_node_pointer; - - public: - typedef typename Type_Traits::value_type value_type; - - typedef typename Type_Traits::const_pointer const_pointer; - - typedef typename Type_Traits::pointer pointer; - - typedef typename Type_Traits::const_reference const_reference; - - typedef typename Type_Traits::reference reference; - - inline - pat_trie_it_(node_pointer p_nd = 0) : PB_DS_CONST_IT_C_DEC((node_pointer)p_nd) - { } - - inline - pat_trie_it_(const PB_DS_ODIR_IT_C_DEC& other) : PB_DS_CONST_IT_C_DEC(other.m_p_nd) - { } - - inline - PB_DS_IT_C_DEC& - operator=(const PB_DS_IT_C_DEC& other) - { - base_it_type::m_p_nd = other.m_p_nd; - return *this; - } - - inline - PB_DS_IT_C_DEC& - operator=(const PB_DS_ODIR_IT_C_DEC& other) - { - base_it_type::m_p_nd = other.m_p_nd; - return *this; - } - - inline pointer - operator->() const - { - _GLIBCXX_DEBUG_ASSERT(base_it_type::m_p_nd->m_type == pat_trie_leaf_node_type); - - return &static_cast(base_it_type::m_p_nd)->value(); - } - - inline reference - operator*() const - { - _GLIBCXX_DEBUG_ASSERT(base_it_type::m_p_nd->m_type == pat_trie_leaf_node_type); - return static_cast(base_it_type::m_p_nd)->value(); - } - - inline PB_DS_IT_C_DEC& - operator++() - { - PB_DS_CONST_IT_C_DEC:: - operator++(); - return *this; - } - - inline PB_DS_IT_C_DEC - operator++(int) - { - PB_DS_IT_C_DEC ret_it(base_it_type::m_p_nd); - operator++(); - return ret_it; - } - - inline PB_DS_IT_C_DEC& - operator--() - { - PB_DS_CONST_IT_C_DEC::operator--(); - return *this; - } - - inline PB_DS_IT_C_DEC - operator--(int) - { - PB_DS_IT_C_DEC ret_it(base_it_type::m_p_nd); - operator--(); - return ret_it; - } - - protected: - typedef PB_DS_CONST_IT_C_DEC base_it_type; - - friend class PB_DS_CLASS_C_DEC; - }; - -#undef PB_DS_CONST_IT_C_DEC -#undef PB_DS_CONST_ODIR_IT_C_DEC -#undef PB_DS_IT_C_DEC -#undef PB_DS_ODIR_IT_C_DEC - - } // namespace detail -} // namespace __gnu_pbds - -#endif - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp index 79bfe4283be..0afc2d40a60 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp @@ -34,20 +34,20 @@ // warranty. /** - * @file policy_access_fn_imps.hpp - * Contains an implementation class for bin_search_tree_. + * @file pat_trie_/policy_access_fn_imps.hpp + * Contains an implementation class for pat_trie. */ PB_DS_CLASS_T_DEC -typename PB_DS_CLASS_C_DEC::e_access_traits& +typename PB_DS_CLASS_C_DEC::access_traits& PB_DS_CLASS_C_DEC:: -get_e_access_traits() +get_access_traits() { return *this; } PB_DS_CLASS_T_DEC -const typename PB_DS_CLASS_C_DEC::e_access_traits& +const typename PB_DS_CLASS_C_DEC::access_traits& PB_DS_CLASS_C_DEC:: -get_e_access_traits() const +get_access_traits() const { return *this; } PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp index 7b2ebd5596c..6a5582da255 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp @@ -34,8 +34,8 @@ // warranty. /** - * @file r_erase_fn_imps.hpp - * Contains an implementation class for bin_search_tree_. + * @file pat_trie_/r_erase_fn_imps.hpp + * Contains an implementation class for pat_trie. */ PB_DS_CLASS_T_DEC @@ -45,7 +45,7 @@ actual_erase_node(node_pointer p_z) { _GLIBCXX_DEBUG_ASSERT(m_size > 0); --m_size; - _GLIBCXX_DEBUG_ONLY(erase_existing(PB_DS_V2F(p_z->m_value))); + _GLIBCXX_DEBUG_ONLY(debug_base::erase_existing(PB_DS_V2F(p_z->m_value))); p_z->~node(); s_node_allocator.deallocate(p_z, 1); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp index c7fcdb72dfd..683b3a9087c 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file rotate_fn_imps.hpp + * @file pat_trie_/rotate_fn_imps.hpp * Contains imps for rotating nodes. */ @@ -63,8 +63,8 @@ rotate_left(node_pointer p_x) _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_x);) _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y);) - apply_update(p_x, (Node_Update* )this); - apply_update(p_x->m_p_parent, (Node_Update* )this); + apply_update(p_x, (Node_Update*)this); + apply_update(p_x->m_p_parent, (Node_Update*)this); } PB_DS_CLASS_T_DEC @@ -92,8 +92,8 @@ rotate_right(node_pointer p_x) _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_x);) _GLIBCXX_DEBUG_ONLY(assert_node_consistent(p_y);) - apply_update(p_x, (Node_Update* )this); - apply_update(p_x->m_p_parent, (Node_Update* )this); + apply_update(p_x, (Node_Update*)this); + apply_update(p_x->m_p_parent, (Node_Update*)this); } PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp index 06add93c1a9..c2aa9cde821 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp @@ -34,18 +34,18 @@ // warranty. /** - * @file split_fn_imps.hpp - * Contains an implementation class for bin_search_tree_. + * @file pat_trie_/split_fn_imps.hpp + * Contains an implementation class for pat_trie. */ PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other) +split(key_const_reference r_key, PB_DS_CLASS_C_DEC& other) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) - split_join_branch_bag bag; + branch_bag bag; leaf_pointer p_split_lf = split_prep(r_key, other, bag); if (p_split_lf == 0) { @@ -57,18 +57,16 @@ split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other) _GLIBCXX_DEBUG_ASSERT(!bag.empty()); other.clear(); - m_p_head->m_p_parent = rec_split(m_p_head->m_p_parent, - pref_begin(p_split_lf), - pref_end(p_split_lf), - other, - bag); + + m_p_head->m_p_parent = rec_split(m_p_head->m_p_parent, pref_begin(p_split_lf), + pref_end(p_split_lf), other, bag); m_p_head->m_p_parent->m_p_parent = m_p_head; - other.m_p_head->m_p_max = m_p_head->m_p_max; + head_pointer __ohead = other.m_p_head; + __ohead->m_p_max = m_p_head->m_p_max; m_p_head->m_p_max = rightmost_descendant(m_p_head->m_p_parent); - other.m_p_head->m_p_min = - other.leftmost_descendant(other.m_p_head->m_p_parent); + __ohead->m_p_min = other.leftmost_descendant(__ohead->m_p_parent); other.m_size = std::distance(other.PB_DS_CLASS_C_DEC::begin(), other.PB_DS_CLASS_C_DEC::end()); @@ -80,7 +78,8 @@ split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other) PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::leaf_pointer PB_DS_CLASS_C_DEC:: -split_prep(const_key_reference r_key, PB_DS_CLASS_C_DEC& other, split_join_branch_bag& r_bag) +split_prep(key_const_reference r_key, PB_DS_CLASS_C_DEC& other, + branch_bag& r_bag) { _GLIBCXX_DEBUG_ASSERT(r_bag.empty()); if (m_size == 0) @@ -88,126 +87,122 @@ split_prep(const_key_reference r_key, PB_DS_CLASS_C_DEC& other, split_join_branc other.clear(); PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) - return (0); + return 0; } - if (synth_e_access_traits::cmp_keys(r_key, - PB_DS_V2F(static_cast(m_p_head->m_p_min)->value()))) + if (synth_access_traits::cmp_keys(r_key, + PB_DS_V2F(static_cast(m_p_head->m_p_min)->value()))) { other.clear(); value_swap(other); PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) - return (0); + return 0; } - if (!synth_e_access_traits::cmp_keys(r_key, - PB_DS_V2F(static_cast(m_p_head->m_p_max)->value()))) + if (!synth_access_traits::cmp_keys(r_key, + PB_DS_V2F(static_cast(m_p_head->m_p_max)->value()))) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) - return (0); + return 0; } iterator it = lower_bound(r_key); - if (!synth_e_access_traits::equal_keys(PB_DS_V2F(*it), r_key)) + if (!synth_access_traits::equal_keys(PB_DS_V2F(*it), r_key)) --it; node_pointer p_nd = it.m_p_nd; - _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_leaf_node_type); + _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == leaf_node); leaf_pointer p_ret_l = static_cast(p_nd); - while (p_nd->m_type != pat_trie_head_node_type) + while (p_nd->m_type != head_node) { r_bag.add_branch(); p_nd = p_nd->m_p_parent; } - _GLIBCXX_DEBUG_ONLY(debug_base::split(r_key,(synth_e_access_traits& )(*this), other);) + _GLIBCXX_DEBUG_ONLY(debug_base::split(r_key,(synth_access_traits&)(*this), other);) - return (p_ret_l); + return p_ret_l; } PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -rec_split(node_pointer p_nd, const_e_iterator b_it, const_e_iterator e_it, PB_DS_CLASS_C_DEC& other, split_join_branch_bag& r_bag) +rec_split(node_pointer p_nd, a_const_iterator b_it, a_const_iterator e_it, + PB_DS_CLASS_C_DEC& other, branch_bag& r_bag) { - if (p_nd->m_type == pat_trie_leaf_node_type) + if (p_nd->m_type == leaf_node) { _GLIBCXX_DEBUG_ASSERT(other.m_p_head->m_p_parent == 0); - return (p_nd); + return p_nd; } - _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == pat_trie_internal_node_type); - internal_node_pointer p_internal_nd = static_cast(p_nd); - - node_pointer p_child_ret = rec_split(p_internal_nd->get_child_node(b_it, e_it, this), b_it, e_it, other, r_bag); + _GLIBCXX_DEBUG_ASSERT(p_nd->m_type == i_node); + inode_pointer p_ind = static_cast(p_nd); + node_pointer pfirst = p_ind->get_child_node(b_it, e_it, this); + node_pointer p_child_ret = rec_split(pfirst, b_it, e_it, other, r_bag); PB_DS_ASSERT_NODE_VALID(p_child_ret) - p_internal_nd->replace_child(p_child_ret, b_it, e_it, this); - apply_update(p_internal_nd, (node_update* )this); - - typename internal_node::iterator child_it = - p_internal_nd->get_child_it(b_it, e_it, this); - - const size_type lhs_num_children = - std::distance(p_internal_nd->begin(), child_it) + 1; + p_ind->replace_child(p_child_ret, b_it, e_it, this); + apply_update(p_ind, (node_update*)this); + inode_iterator child_it = p_ind->get_child_it(b_it, e_it, this); + const size_type lhs_dist = std::distance(p_ind->begin(), child_it); + const size_type lhs_num_children = lhs_dist + 1; _GLIBCXX_DEBUG_ASSERT(lhs_num_children > 0); - size_type rhs_num_children = - std::distance(p_internal_nd->begin(), p_internal_nd->end()) - - lhs_num_children; - + const size_type rhs_dist = std::distance(p_ind->begin(), p_ind->end()); + size_type rhs_num_children = rhs_dist - lhs_num_children; if (rhs_num_children == 0) { - apply_update(p_internal_nd, (node_update* )this); - return (p_internal_nd); + apply_update(p_ind, (node_update*)this); + return p_ind; } - ++child_it; - other.split_insert_branch(p_internal_nd->get_e_ind(), - b_it, child_it, rhs_num_children, r_bag); + other.split_insert_branch(p_ind->get_e_ind(), b_it, child_it, + rhs_num_children, r_bag); - child_it = p_internal_nd->get_child_it(b_it, e_it, this); - ++child_it; + child_it = p_ind->get_child_it(b_it, e_it, this); while (rhs_num_children != 0) { - child_it = p_internal_nd->remove_child(child_it); + ++child_it; + p_ind->remove_child(child_it); --rhs_num_children; } + apply_update(p_ind, (node_update*)this); - apply_update(p_internal_nd, (node_update* )this); - _GLIBCXX_DEBUG_ASSERT(std::distance(p_internal_nd->begin(), - p_internal_nd->end()) >= 1); - - if (std::distance(p_internal_nd->begin(), p_internal_nd->end()) > 1) + const size_type int_dist = std::distance(p_ind->begin(), p_ind->end()); + _GLIBCXX_DEBUG_ASSERT(int_dist >= 1); + if (int_dist > 1) { - p_internal_nd->update_prefixes(this); - PB_DS_ASSERT_NODE_VALID(p_internal_nd) - apply_update(p_internal_nd, (node_update* )this); - return (p_internal_nd); + p_ind->update_prefixes(this); + PB_DS_ASSERT_NODE_VALID(p_ind) + apply_update(p_ind, (node_update*)this); + return p_ind; } - node_pointer p_ret =* p_internal_nd->begin(); - p_internal_nd->~internal_node(); - s_internal_node_allocator.deallocate(p_internal_nd, 1); - apply_update(p_ret, (node_update* )this); - return (p_ret); + node_pointer p_ret = *p_ind->begin(); + p_ind->~inode(); + s_inode_allocator.deallocate(p_ind, 1); + apply_update(p_ret, (node_update*)this); + return p_ret; } PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -split_insert_branch(size_type e_ind, const_e_iterator b_it, typename internal_node::iterator child_b_it, size_type num_children, split_join_branch_bag& r_bag) +split_insert_branch(size_type e_ind, a_const_iterator b_it, + inode_iterator child_b_it, + size_type num_children, branch_bag& r_bag) { #ifdef _GLIBCXX_DEBUG if (m_p_head->m_p_parent != 0) PB_DS_ASSERT_NODE_VALID(m_p_head->m_p_parent) -#endif - - const size_type total_num_children =((m_p_head->m_p_parent == 0)? 0 : 1) + num_children; +#endif + const size_type start = m_p_head->m_p_parent == 0 ? 0 : 1; + const size_type total_num_children = start + num_children; if (total_num_children == 0) { _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_parent == 0); @@ -217,38 +212,39 @@ split_insert_branch(size_type e_ind, const_e_iterator b_it, typename internal_no if (total_num_children == 1) { if (m_p_head->m_p_parent != 0) - { + { PB_DS_ASSERT_NODE_VALID(m_p_head->m_p_parent) - return; - } + return; + } _GLIBCXX_DEBUG_ASSERT(m_p_head->m_p_parent == 0); - m_p_head->m_p_parent =* child_b_it; + ++child_b_it; + m_p_head->m_p_parent = *child_b_it; m_p_head->m_p_parent->m_p_parent = m_p_head; - apply_update(m_p_head->m_p_parent, (node_update* )this); + apply_update(m_p_head->m_p_parent, (node_update*)this); PB_DS_ASSERT_NODE_VALID(m_p_head->m_p_parent) return; } _GLIBCXX_DEBUG_ASSERT(total_num_children > 1); - internal_node_pointer p_new_root = r_bag.get_branch(); - new (p_new_root) internal_node(e_ind, b_it); + inode_pointer p_new_root = r_bag.get_branch(); + new (p_new_root) inode(e_ind, b_it); size_type num_inserted = 0; while (num_inserted++ < num_children) { - PB_DS_ASSERT_NODE_VALID((*child_b_it)) - p_new_root->add_child(*child_b_it, pref_begin(*child_b_it), - pref_end(*child_b_it), this); ++child_b_it; + PB_DS_ASSERT_NODE_VALID((*child_b_it)) + p_new_root->add_child(*child_b_it, pref_begin(*child_b_it), + pref_end(*child_b_it), this); } if (m_p_head->m_p_parent != 0) - p_new_root->add_child(m_p_head->m_p_parent, + p_new_root->add_child(m_p_head->m_p_parent, pref_begin(m_p_head->m_p_parent), pref_end(m_p_head->m_p_parent), this); m_p_head->m_p_parent = p_new_root; p_new_root->m_p_parent = m_p_head; - apply_update(m_p_head->m_p_parent, (node_update* )this); + apply_update(m_p_head->m_p_parent, (node_update*)this); PB_DS_ASSERT_NODE_VALID(m_p_head->m_p_parent) } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp deleted file mode 100644 index 9cecae51770..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp +++ /dev/null @@ -1,93 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file split_join_branch_bag.hpp - * Contains an implementation class for pat_trie_. - */ - -class split_join_branch_bag -{ -private: - typedef - std::list< - internal_node_pointer, - typename Allocator::template rebind< - internal_node_pointer>::other> - bag_t; - -public: - - void - add_branch() - { - internal_node_pointer p_nd = s_internal_node_allocator.allocate(1); - __try - { - m_bag.push_back(p_nd); - } - __catch(...) - { - s_internal_node_allocator.deallocate(p_nd, 1); - __throw_exception_again; - } - } - - internal_node_pointer - get_branch() - { - _GLIBCXX_DEBUG_ASSERT(!m_bag.empty()); - internal_node_pointer p_nd =* m_bag.begin(); - m_bag.pop_front(); - return p_nd; - } - - ~split_join_branch_bag() - { - while (!m_bag.empty()) - { - internal_node_pointer p_nd =* m_bag.begin(); - s_internal_node_allocator.deallocate(p_nd, 1); - m_bag.pop_front(); - } - } - - inline bool - empty() const - { return m_bag.empty(); } - -private: - bag_t m_bag; -}; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp similarity index 50% rename from libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp rename to libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp index abf5f118523..7cce3c530ff 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file synth_e_access_traits.hpp + * @file pat_trie_/synth_access_traits.hpp * Contains an implementation class for a patricia tree. */ @@ -48,62 +48,56 @@ namespace __gnu_pbds namespace detail { -#define PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC \ - template +#define PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC \ + template -#define PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC \ - synth_e_access_traits< \ - Type_Traits, \ - Set, \ - E_Access_Traits> +#define PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC \ + synth_access_traits - template - struct synth_e_access_traits : public E_Access_Traits + /// Synthetic element access traits. + template + struct synth_access_traits : public _ATraits { + typedef _ATraits base_type; + typedef typename base_type::const_iterator const_iterator; + typedef Type_Traits type_traits; + typedef typename type_traits::const_reference const_reference; + typedef typename type_traits::key_const_reference key_const_reference; - private: - typedef E_Access_Traits base_type; + synth_access_traits(); - typedef Type_Traits type_traits; - - typedef typename type_traits::const_key_reference const_key_reference; - - typedef typename type_traits::const_reference const_reference; - - public: - synth_e_access_traits(); - - synth_e_access_traits(const E_Access_Traits& r_traits); + synth_access_traits(const base_type&); inline bool - equal_prefixes(typename base_type::const_iterator b_l, typename base_type::const_iterator e_l, typename base_type::const_iterator b_r, typename base_type::const_iterator e_r, bool compare_after = true) const; + equal_prefixes(const_iterator, const_iterator, const_iterator, + const_iterator, bool compare_after = true) const; bool - equal_keys(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const; + equal_keys(key_const_reference, key_const_reference) const; bool - cmp_prefixes(typename base_type::const_iterator b_l, typename base_type::const_iterator e_l, typename base_type::const_iterator b_r, typename base_type::const_iterator e_r, bool compare_after = false) const; + cmp_prefixes(const_iterator, const_iterator, const_iterator, + const_iterator, bool compare_after = false) const; bool - cmp_keys(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const; + cmp_keys(key_const_reference, key_const_reference) const; - inline static const_key_reference - extract_key(const_reference r_val); + inline static key_const_reference + extract_key(const_reference); #ifdef _GLIBCXX_DEBUG bool - operator()(const_key_reference r_lhs, const_key_reference r_rhs); + operator()(key_const_reference, key_const_reference); #endif private: - inline static const_key_reference - extract_key(const_reference r_val, true_type); + inline static key_const_reference + extract_key(const_reference, true_type); - inline static const_key_reference - extract_key(const_reference r_val, false_type); + inline static key_const_reference + extract_key(const_reference, false_type); - private: - static integral_constant s_set_ind; + static integral_constant s_set_ind; }; PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC @@ -112,26 +106,27 @@ namespace __gnu_pbds PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC:: - synth_e_access_traits() + synth_access_traits() { } PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC:: - synth_e_access_traits(const E_Access_Traits& r_traits) : - E_Access_Traits(r_traits) + synth_access_traits(const _ATraits& r_traits) + : _ATraits(r_traits) { } PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC inline bool PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC:: - equal_prefixes(typename base_type::const_iterator b_l, typename base_type::const_iterator e_l, typename base_type::const_iterator b_r, typename base_type::const_iterator e_r, bool compare_after /*= false */) const + equal_prefixes(const_iterator b_l, const_iterator e_l, const_iterator b_r, + const_iterator e_r, bool compare_after /*= false */) const { while (b_l != e_l) { if (b_r == e_r) - return (false); + return false; if (base_type::e_pos(*b_l) != base_type::e_pos(*b_r)) - return (false); + return false; ++b_l; ++b_r; } @@ -141,84 +136,78 @@ namespace __gnu_pbds PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC bool PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC:: - equal_keys(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const + equal_keys(key_const_reference r_lhs_key, + key_const_reference r_rhs_key) const { - return (equal_prefixes(base_type::begin(r_lhs_key), - base_type::end(r_lhs_key), - base_type::begin(r_rhs_key), - base_type::end(r_rhs_key), - true)); + return equal_prefixes(base_type::begin(r_lhs_key), + base_type::end(r_lhs_key), + base_type::begin(r_rhs_key), + base_type::end(r_rhs_key), + true); } PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC bool PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC:: - cmp_prefixes(typename base_type::const_iterator b_l, typename base_type::const_iterator e_l, typename base_type::const_iterator b_r, typename base_type::const_iterator e_r, bool compare_after /* = false*/) const + cmp_prefixes(const_iterator b_l, const_iterator e_l, const_iterator b_r, + const_iterator e_r, bool compare_after /* = false*/) const { while (b_l != e_l) { if (b_r == e_r) - return (false); - const typename base_type::size_type l_pos = - base_type::e_pos(*b_l); - const typename base_type::size_type r_pos = - base_type::e_pos(*b_r); + return false; + + const typename base_type::size_type l_pos = base_type::e_pos(*b_l); + const typename base_type::size_type r_pos = base_type::e_pos(*b_r); if (l_pos != r_pos) - return (l_pos < r_pos); + return l_pos < r_pos; ++b_l; ++b_r; } if (!compare_after) - return (false); - return (b_r != e_r); + return false; + return b_r != e_r; } PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC bool PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC:: - cmp_keys(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const + cmp_keys(key_const_reference r_lhs_key, + key_const_reference r_rhs_key) const { - return (cmp_prefixes(base_type::begin(r_lhs_key), - base_type::end(r_lhs_key), - base_type::begin(r_rhs_key), - base_type::end(r_rhs_key), - true)); + return cmp_prefixes(base_type::begin(r_lhs_key), + base_type::end(r_lhs_key), + base_type::begin(r_rhs_key), + base_type::end(r_rhs_key), + true); } PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC - inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::const_key_reference + inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::key_const_reference PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC:: extract_key(const_reference r_val) - { - return (extract_key(r_val, s_set_ind)); - } + { return extract_key(r_val, s_set_ind); } PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC - inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::const_key_reference + inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::key_const_reference PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC:: extract_key(const_reference r_val, true_type) - { - return (r_val); - } + { return r_val; } PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC - inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::const_key_reference + inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::key_const_reference PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC:: extract_key(const_reference r_val, false_type) - { - return (r_val.first); - } + { return r_val.first; } #ifdef _GLIBCXX_DEBUG PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC bool PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC:: - operator()(const_key_reference r_lhs, const_key_reference r_rhs) - { - return (cmp_keys(r_lhs, r_rhs)); - } -#endif + operator()(key_const_reference r_lhs, key_const_reference r_rhs) + { return cmp_keys(r_lhs, r_rhs); } +#endif #undef PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC #undef PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC @@ -226,4 +215,4 @@ namespace __gnu_pbds } // namespace detail } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp index 39cf28a1b27..c8b54547fc8 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file trace_fn_imps.hpp + * @file pat_trie_/trace_fn_imps.hpp * Contains an implementation class for pat_trie_. */ @@ -55,7 +55,7 @@ trace() const PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -trace_node(const_node_pointer p_nd, size_type level) +trace_node(node_const_pointer p_nd, size_type level) { for (size_type i = 0; i < level; ++i) std::cerr << ' '; @@ -63,7 +63,7 @@ trace_node(const_node_pointer p_nd, size_type level) std::cerr << ((p_nd->m_type == pat_trie_leaf_node_type) ? "l " : "i "); trace_node_metadata(p_nd, type_to_type()); - typename e_access_traits::const_iterator el_it = pref_begin(p_nd); + typename access_traits::const_iterator el_it = pref_begin(p_nd); while (el_it != pref_end(p_nd)) { std::cerr <<* el_it; @@ -76,8 +76,7 @@ trace_node(const_node_pointer p_nd, size_type level) return; } - const_internal_node_pointer p_internal = - static_cast(p_nd); + inode_const_pointer p_internal = static_cast(p_nd); std::cerr << " " << static_cast(p_internal->get_e_ind()) << std::endl; @@ -87,8 +86,7 @@ trace_node(const_node_pointer p_nd, size_type level) for (size_type child_i = 0; child_i < num_children; ++child_i) { - typename internal_node::const_iterator child_it = - p_internal->begin(); + typename inode::const_iterator child_it = p_internal->begin(); std::advance(child_it, num_children - child_i - 1); trace_node(*child_it, level + 1); } @@ -98,7 +96,7 @@ PB_DS_CLASS_T_DEC template void PB_DS_CLASS_C_DEC:: -trace_node_metadata(const_node_pointer p_nd, type_to_type) +trace_node_metadata(node_const_pointer p_nd, type_to_type) { std::cerr << "(" << static_cast(p_nd->get_metadata()) << ") "; } @@ -106,7 +104,7 @@ trace_node_metadata(const_node_pointer p_nd, type_to_type) PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -trace_node_metadata(const_node_pointer, type_to_type) +trace_node_metadata(node_const_pointer, type_to_type) { } #endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp index c8e7f587b55..2e64c52480f 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,317 +34,105 @@ // warranty. /** - * @file traits.hpp + * @file pat_trie_/traits.hpp * Contains an implementation class for pat_trie_. */ #ifndef PB_DS_PAT_TRIE_NODE_AND_IT_TRAITS_HPP #define PB_DS_PAT_TRIE_NODE_AND_IT_TRAITS_HPP -#include -#include -#include -#include -#include -#include -#include +#include +#include namespace __gnu_pbds { namespace detail { - + /// Specialization. template - class Node_Update, - class Allocator> - struct trie_traits< - Key, - Mapped, - E_Access_Traits, - Node_Update, - pat_trie_tag, - Allocator> + typename _ATraits, + template + class Node_Update, + typename _Alloc> + struct trie_traits { private: - typedef types_traits< Key, Mapped, Allocator, false> type_traits; + typedef pat_trie_base base_type; + typedef types_traits type_traits; public: - typedef - typename trie_node_metadata_selector< - Key, - Mapped, - E_Access_Traits, - Node_Update, - Allocator>::type - metadata_type; + typedef typename trie_node_metadata_dispatch::type metadata_type; + typedef base_type::_Metadata metadata; + typedef _ATraits access_traits; - typedef E_Access_Traits e_access_traits; + typedef __gnu_pbds::detail::synth_access_traits synth_access_traits; - typedef - __gnu_pbds::detail::synth_e_access_traits< - type_traits, - false, - e_access_traits> - synth_e_access_traits; + typedef base_type::_Node_base node; + typedef base_type::_Head head; + typedef base_type::_Leaf leaf; + typedef base_type::_Inode inode; - typedef - pat_trie_node_base< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - node; + typedef base_type::_Iter iterator; + typedef base_type::_CIter const_iterator; + typedef base_type::_Iter reverse_iterator; + typedef base_type::_CIter const_reverse_iterator; - typedef - pat_trie_leaf< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - leaf; - typedef - pat_trie_head< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - head; + typedef base_type::_Node_citer node_const_iterator; - typedef - pat_trie_internal_node< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - internal_node; + typedef base_type::_Node_iter node_iterator; - typedef - pat_trie_const_it_< - type_traits, - node, - leaf, - head, - internal_node, - true, - Allocator> - const_iterator; + typedef Node_Update node_update; - typedef - pat_trie_it_< - type_traits, - node, - leaf, - head, - internal_node, - true, - Allocator> - iterator; - - typedef - pat_trie_const_it_< - type_traits, - node, - leaf, - head, - internal_node, - false, - Allocator> - const_reverse_iterator; - - typedef - pat_trie_it_< - type_traits, - node, - leaf, - head, - internal_node, - false, - Allocator> - reverse_iterator; - - typedef - pat_trie_const_node_it_< - node, - leaf, - head, - internal_node, - const_iterator, - iterator, - synth_e_access_traits, - Allocator> - const_node_iterator; - - typedef - pat_trie_node_it_< - node, - leaf, - head, - internal_node, - const_iterator, - iterator, - synth_e_access_traits, - Allocator> - node_iterator; - - typedef - Node_Update< - const_node_iterator, - node_iterator, - E_Access_Traits, - Allocator> - node_update; - - typedef - __gnu_pbds::null_trie_node_update< - const_node_iterator, - node_iterator, - E_Access_Traits, - Allocator>* - null_node_update_pointer; + typedef null_node_update* null_node_update_pointer; }; + /// Specialization. template - class Node_Update, - class Allocator> - struct trie_traits< - Key, - null_mapped_type, - E_Access_Traits, - Node_Update, - pat_trie_tag, - Allocator> + typename _ATraits, + template + class Node_Update, + typename _Alloc> + struct trie_traits { private: - typedef - types_traits< - Key, - null_mapped_type, - Allocator, - false> - type_traits; + typedef pat_trie_base base_type; + typedef types_traits type_traits; public: - typedef - typename trie_node_metadata_selector< - Key, - null_mapped_type, - E_Access_Traits, - Node_Update, - Allocator>::type - metadata_type; + typedef typename trie_node_metadata_dispatch::type metadata_type; + typedef base_type::_Metadata metadata; + typedef _ATraits access_traits; + typedef __gnu_pbds::detail::synth_access_traits synth_access_traits; - typedef E_Access_Traits e_access_traits; + typedef base_type::_Node_base node; + typedef base_type::_Head head; + typedef base_type::_Leaf leaf; + typedef base_type::_Inode inode; - typedef - __gnu_pbds::detail::synth_e_access_traits< - type_traits, - true, - e_access_traits> - synth_e_access_traits; + typedef base_type::_CIter const_iterator; + typedef const_iterator iterator; + typedef base_type::_CIter const_reverse_iterator; + typedef const_reverse_iterator reverse_iterator; - typedef - pat_trie_node_base< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - node; - typedef - pat_trie_leaf< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - leaf; + typedef base_type::_Node_citer node_const_iterator; - typedef - pat_trie_head< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - head; + typedef node_const_iterator node_iterator; - typedef - pat_trie_internal_node< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - internal_node; + typedef Node_Update node_update; - typedef - pat_trie_const_it_< - type_traits, - node, - leaf, - head, - internal_node, - true, - Allocator> - const_iterator; - - typedef const_iterator iterator; - - typedef - pat_trie_const_it_< - type_traits, - node, - leaf, - head, - internal_node, - false, - Allocator> - const_reverse_iterator; - - typedef const_reverse_iterator reverse_iterator; - - typedef - pat_trie_const_node_it_< - node, - leaf, - head, - internal_node, - const_iterator, - iterator, - synth_e_access_traits, - Allocator> - const_node_iterator; - - typedef const_node_iterator node_iterator; - - typedef - Node_Update< - const_node_iterator, - node_iterator, - E_Access_Traits, - Allocator> - node_update; - - typedef - __gnu_pbds::null_trie_node_update< - const_node_iterator, - const_node_iterator, - E_Access_Traits, - Allocator>* - null_node_update_pointer; + typedef null_node_update* null_node_update_pointer; }; } // namespace detail } // namespace __gnu_pbds #endif // #ifndef PB_DS_PAT_TRIE_NODE_AND_IT_TRAITS_HPP - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp index 8c0304f695e..12ef07bd607 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp @@ -34,22 +34,22 @@ // warranty. /** - * @file update_fn_imps.hpp + * @file pat_trie_/update_fn_imps.hpp * Contains an implementation class for pat_trie_. */ PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -apply_update(node_pointer /*p_nd*/, null_node_update_pointer) +apply_update(node_pointer, null_node_update_pointer) { } PB_DS_CLASS_T_DEC template inline void PB_DS_CLASS_C_DEC:: -apply_update(node_pointer p_nd, Node_Update_* /*p_update*/) +apply_update(node_pointer p_nd, Node_Update_*) { Node_Update_::operator()(node_iterator(p_nd, this), - const_node_iterator(0, this)); + node_const_iterator(0, this)); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp b/libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp index c48ba7c6e1a..739d2b18bf6 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,7 +34,7 @@ // warranty. /** - * @file priority_queue_base_dispatch.hpp + * @file detail/priority_queue_base_dispatch.hpp * Contains an pqiative container dispatching base. */ @@ -61,43 +61,54 @@ namespace __gnu_pbds { - namespace detail - { - - template - struct priority_queue_base_dispatch; - - template - struct priority_queue_base_dispatch + namespace detail + { + /// Specialization for pairing_heap. + template + struct container_base_dispatch<_VTp, Cmp_Fn, _Alloc, pairing_heap_tag, + null_type> { - typedef pairing_heap_< Value_Type, Cmp_Fn, Allocator> type; + /// Dispatched type. + typedef pairing_heap<_VTp, Cmp_Fn, _Alloc> type; }; - template - struct priority_queue_base_dispatch + /// Specialization for binomial_heap. + template + struct container_base_dispatch<_VTp, Cmp_Fn, _Alloc, binomial_heap_tag, + null_type> { - typedef binomial_heap_< Value_Type, Cmp_Fn, Allocator> type; + /// Dispatched type. + typedef binomial_heap<_VTp, Cmp_Fn, _Alloc> type; }; - template - struct priority_queue_base_dispatch + /// Specialization for rc_binary_heap. + template + struct container_base_dispatch<_VTp, Cmp_Fn, _Alloc, rc_binomial_heap_tag, + null_type> { - typedef rc_binomial_heap_< Value_Type, Cmp_Fn, Allocator> type; + /// Dispatched type. + typedef rc_binomial_heap<_VTp, Cmp_Fn, _Alloc> type; }; - template - struct priority_queue_base_dispatch + /// Specialization for binary_heap. + template + struct container_base_dispatch<_VTp, Cmp_Fn, _Alloc, binary_heap_tag, + null_type> { - typedef binary_heap_< Value_Type, Cmp_Fn, Allocator> type; + /// Dispatched type. + typedef binary_heap<_VTp, Cmp_Fn, _Alloc> type; }; - template - struct priority_queue_base_dispatch + /// Specialization for thin_heap. + template + struct container_base_dispatch<_VTp, Cmp_Fn, _Alloc, thin_heap_tag, + null_type> { - typedef thin_heap_< Value_Type, Cmp_Fn, Allocator> type; + /// Dispatched type. + typedef thin_heap<_VTp, Cmp_Fn, _Alloc> type; }; - - } // namespace detail + // @} group pbds + } // namespace detail } // namespace __gnu_pbds #endif // #ifndef PB_DS_PRIORITY_QUEUE_BASE_DS_DISPATCHER_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp index 19adc8edaad..669c00c29b8 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file rb_tree_map_/constructors_destructor_fn_imps.hpp * Contains an implementation for rb_tree_. */ @@ -50,7 +50,7 @@ copy_from_range(It first_it, It last_it) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME() +PB_DS_RB_TREE_NAME() { initialize(); PB_DS_ASSERT_VALID((*this)) @@ -58,7 +58,7 @@ PB_DS_CLASS_NAME() PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn) : +PB_DS_RB_TREE_NAME(const Cmp_Fn& r_cmp_fn) : base_type(r_cmp_fn) { initialize(); @@ -67,7 +67,7 @@ PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) : +PB_DS_RB_TREE_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) : base_type(r_cmp_fn, r_node_update) { initialize(); @@ -76,7 +76,7 @@ PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) : +PB_DS_RB_TREE_NAME(const PB_DS_CLASS_C_DEC& other) : base_type(other) { initialize(); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp index fe90b0a6a3f..40961edf81f 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file rb_tree_map_/debug_fn_imps.hpp * Contains an implementation for rb_tree_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp index 0ef925f079e..14e75328970 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp @@ -34,14 +34,14 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file rb_tree_map_/erase_fn_imps.hpp * Contains an implementation for rb_tree_. */ PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: -erase(const_key_reference r_key) +erase(key_const_reference r_key) { point_iterator it = this->find(r_key); if (it == base_type::end()) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp index 9378e156502..9203dd4d7a6 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp @@ -34,6 +34,6 @@ // warranty. /** - * @file find_fn_imps.hpp + * @file rb_tree_map_/find_fn_imps.hpp * Contains an implementation for rb_tree_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp index 0bf69736e81..0903e211427 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file info_fn_imps.hpp + * @file rb_tree_map_/info_fn_imps.hpp * Contains an implementation for rb_tree_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp index 55bd4ed1f0d..97dc8489ab1 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file rb_tree_map_/insert_fn_imps.hpp * Contains an implementation for rb_tree_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp index 3f24c762c07..b6f80b2b130 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,53 +34,54 @@ // warranty. /** - * @file node.hpp + * @file rb_tree_map_/node.hpp * Contains an implementation for rb_tree_. */ #ifndef PB_DS_RB_TREE_NODE_HPP #define PB_DS_RB_TREE_NODE_HPP -#include +#include namespace __gnu_pbds { namespace detail { - template + /// Node for Red-Black trees. + template struct rb_tree_node_ { public: - typedef Value_Type value_type; - typedef Metadata metadata_type; + typedef Value_Type value_type; + typedef Metadata metadata_type; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< rb_tree_node_< Value_Type, Metadata, - Allocator> >::other::pointer + _Alloc> >::other::pointer node_pointer; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< metadata_type>::other::reference metadata_reference; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< metadata_type>::other::const_reference - const_metadata_reference; + metadata_const_reference; - inline bool + bool special() const { return m_red; } - inline const_metadata_reference + metadata_const_reference get_metadata() const { return m_metadata; } - inline metadata_reference + metadata_reference get_metadata() { return m_metadata; } @@ -93,30 +94,30 @@ namespace __gnu_pbds } #endif - node_pointer m_p_left; - node_pointer m_p_right; - node_pointer m_p_parent; - value_type m_value; - bool m_red; - metadata_type m_metadata; + node_pointer m_p_left; + node_pointer m_p_right; + node_pointer m_p_parent; + value_type m_value; + bool m_red; + metadata_type m_metadata; }; - template - struct rb_tree_node_ + template + struct rb_tree_node_ { public: - typedef Value_Type value_type; - typedef null_node_metadata metadata_type; + typedef Value_Type value_type; + typedef null_type metadata_type; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< rb_tree_node_< Value_Type, - null_node_metadata, - Allocator> >::other::pointer + null_type, + _Alloc> >::other::pointer node_pointer; - inline bool + bool special() const { return m_red; } @@ -126,11 +127,11 @@ namespace __gnu_pbds { std::cout << PB_DS_V2F(m_value) <<(m_red? " " : " "); } #endif - node_pointer m_p_left; - node_pointer m_p_right; - node_pointer m_p_parent; - value_type m_value; - bool m_red; + node_pointer m_p_left; + node_pointer m_p_right; + node_pointer m_p_parent; + value_type m_value; + bool m_red; }; } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp index 7d46c95d7e0..a0e374b350c 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp @@ -34,30 +34,11 @@ // warranty. /** - * @file rb_tree_.hpp - * Contains an implementation for rb_tree_. + * @file rb_tree_map_/rb_tree_.hpp + * Contains an implementation for Red Black trees. */ -/* - * This implementation uses an idea from the SGI STL (using a @a header node - * which is needed for efficient iteration). - */ - -#ifdef PB_DS_DATA_TRUE_INDICATOR -#ifndef PB_DS_BIN_SEARCH_TREE_HPP__DATA_TRUE_INDICATOR -#define PB_DS_BIN_SEARCH_TREE_HPP__DATA_TRUE_INDICATOR -#include -#endif -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#ifndef PB_DS_BIN_SEARCH_TREE_HPP__DATA_FALSE_INDICATOR -#define PB_DS_BIN_SEARCH_TREE_HPP__DATA_FALSE_INDICATOR -#include -#endif -#endif #include -#include #include #include #include @@ -69,89 +50,78 @@ namespace __gnu_pbds { #define PB_DS_CLASS_T_DEC \ template + typename Node_And_It_Traits, typename _Alloc> #ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_CLASS_NAME rb_tree_data_ -#endif - -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_BASE_CLASS_NAME bin_search_tree_data_ -#endif +# define PB_DS_RB_TREE_NAME rb_tree_map +# define PB_DS_RB_TREE_BASE_NAME bin_search_tree_map +#endif #ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_CLASS_NAME rb_tree_no_data_ -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_BASE_CLASS_NAME bin_search_tree_no_data_ -#endif +# define PB_DS_RB_TREE_NAME rb_tree_set +# define PB_DS_RB_TREE_BASE_NAME bin_search_tree_set +#endif #define PB_DS_CLASS_C_DEC \ - PB_DS_CLASS_NAME + PB_DS_RB_TREE_NAME -#define PB_DS_BASE_C_DEC \ - PB_DS_BASE_CLASS_NAME +#define PB_DS_RB_TREE_BASE \ + PB_DS_RB_TREE_BASE_NAME -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_V2F(X) (X).first -#define PB_DS_V2S(X) (X).second -#define PB_DS_EP2VP(X)& ((X)->m_value) -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_V2F(X) (X) -#define PB_DS_V2S(X) Mapped_Data() -#define PB_DS_EP2VP(X)& ((X)->m_value.first) -#endif + /* + * @brief Red-Black tree. + * + * This implementation uses an idea from the SGI STL (using a + * @a header node which is needed for efficient iteration). + */ template - class PB_DS_CLASS_NAME : public PB_DS_BASE_C_DEC + typename _Alloc> + class PB_DS_RB_TREE_NAME : public PB_DS_RB_TREE_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; - typedef typename base_type::node_pointer node_pointer; + typedef PB_DS_RB_TREE_BASE base_type; + typedef typename base_type::node_pointer node_pointer; public: - typedef Cmp_Fn cmp_fn; - typedef Allocator allocator_type; - typedef typename Allocator::size_type size_type; - typedef typename Allocator::difference_type difference_type; - typedef typename base_type::key_type key_type; - typedef typename base_type::key_pointer key_pointer; - typedef typename base_type::const_key_pointer const_key_pointer; - typedef typename base_type::key_reference key_reference; - typedef typename base_type::const_key_reference const_key_reference; - typedef typename base_type::mapped_type mapped_type; - typedef typename base_type::mapped_pointer mapped_pointer; - typedef typename base_type::const_mapped_pointer const_mapped_pointer; - typedef typename base_type::mapped_reference mapped_reference; - typedef typename base_type::const_mapped_reference const_mapped_reference; - typedef typename base_type::value_type value_type; - typedef typename base_type::pointer pointer; - typedef typename base_type::const_pointer const_pointer; - typedef typename base_type::reference reference; - typedef typename base_type::const_reference const_reference; - typedef typename base_type::point_iterator point_iterator; - typedef typename base_type::const_iterator const_point_iterator; - typedef typename base_type::iterator iterator; - typedef typename base_type::const_iterator const_iterator; - typedef typename base_type::reverse_iterator reverse_iterator; + typedef rb_tree_tag container_category; + typedef Cmp_Fn cmp_fn; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; + typedef typename base_type::key_type key_type; + typedef typename base_type::key_pointer key_pointer; + typedef typename base_type::key_const_pointer key_const_pointer; + typedef typename base_type::key_reference key_reference; + typedef typename base_type::key_const_reference key_const_reference; + typedef typename base_type::mapped_type mapped_type; + typedef typename base_type::mapped_pointer mapped_pointer; + typedef typename base_type::mapped_const_pointer mapped_const_pointer; + typedef typename base_type::mapped_reference mapped_reference; + typedef typename base_type::mapped_const_reference mapped_const_reference; + typedef typename base_type::value_type value_type; + typedef typename base_type::pointer pointer; + typedef typename base_type::const_pointer const_pointer; + typedef typename base_type::reference reference; + typedef typename base_type::const_reference const_reference; + typedef typename base_type::point_iterator point_iterator; + typedef typename base_type::const_iterator point_const_iterator; + typedef typename base_type::iterator iterator; + typedef typename base_type::const_iterator const_iterator; + typedef typename base_type::reverse_iterator reverse_iterator; typedef typename base_type::const_reverse_iterator const_reverse_iterator; - typedef typename base_type::node_update node_update; + typedef typename base_type::node_update node_update; + PB_DS_RB_TREE_NAME(); - PB_DS_CLASS_NAME(); + PB_DS_RB_TREE_NAME(const Cmp_Fn&); - PB_DS_CLASS_NAME(const Cmp_Fn&); + PB_DS_RB_TREE_NAME(const Cmp_Fn&, const node_update&); - PB_DS_CLASS_NAME(const Cmp_Fn&, const node_update&); - - PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&); + PB_DS_RB_TREE_NAME(const PB_DS_CLASS_C_DEC&); void swap(PB_DS_CLASS_C_DEC&); @@ -164,7 +134,7 @@ namespace __gnu_pbds insert(const_reference); inline mapped_reference - operator[](const_key_reference r_key) + operator[](key_const_reference r_key) { #ifdef PB_DS_DATA_TRUE_INDICATOR _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) @@ -179,14 +149,14 @@ namespace __gnu_pbds } _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) return ins_pair.first.m_p_nd->m_value.second; -#else +#else insert(r_key); - return base_type::s_null_mapped; -#endif + return base_type::s_null_type; +#endif } inline bool - erase(const_key_reference); + erase(key_const_reference); inline iterator erase(iterator); @@ -202,20 +172,17 @@ namespace __gnu_pbds join(PB_DS_CLASS_C_DEC&); void - split(const_key_reference, PB_DS_CLASS_C_DEC&); - - protected: + split(key_const_reference, PB_DS_CLASS_C_DEC&); private: #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; + assert_valid(const char*, int) const; size_type - assert_node_consistent(const node_pointer, const char* file, - int line) const; -#endif + assert_node_consistent(const node_pointer, const char*, int) const; +#endif inline static bool is_effectively_black(const node_pointer); @@ -273,13 +240,8 @@ namespace __gnu_pbds #undef PB_DS_STRUCT_ONLY_ASSERT_VALID #undef PB_DS_CLASS_T_DEC #undef PB_DS_CLASS_C_DEC -#undef PB_DS_CLASS_NAME -#undef PB_DS_BASE_CLASS_NAME -#undef PB_DS_BASE_C_DEC -#undef PB_DS_V2F -#undef PB_DS_EP2VP -#undef PB_DS_V2S - +#undef PB_DS_RB_TREE_NAME +#undef PB_DS_RB_TREE_BASE_NAME +#undef PB_DS_RB_TREE_BASE } // namespace detail } // namespace __gnu_pbds - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp index 198caca8868..54c7b2396d7 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file split_join_fn_imps.hpp + * @file rb_tree_map_/split_join_fn_imps.hpp * Contains an implementation for rb_tree_. */ @@ -232,7 +232,7 @@ black_height(node_pointer p_nd) PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other) +split(key_const_reference r_key, PB_DS_CLASS_C_DEC& other) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp index 531d8e46e1c..e6f2d8974ff 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file traits.hpp + * @file rb_tree_map_/traits.hpp * Contains an implementation for rb_tree_. */ @@ -47,75 +47,51 @@ namespace __gnu_pbds { namespace detail { + /// Specialization. template - class Node_Update, - typename Allocator> - struct tree_traits< - Key, - Mapped, - Cmp_Fn, - Node_Update, - rb_tree_tag, - Allocator> : public bin_search_tree_traits< + template + class Node_Update, + typename _Alloc> + struct tree_traits + : public bin_search_tree_traits< Key, Mapped, Cmp_Fn, Node_Update, rb_tree_node_< - typename types_traits< - Key, - Mapped, - Allocator, - false>::value_type, - typename tree_node_metadata_selector< - Key, - Mapped, - Cmp_Fn, - Node_Update, - Allocator>::type, - Allocator>, - Allocator> + typename types_traits::value_type, + typename tree_node_metadata_dispatch::type, + _Alloc>, + _Alloc> { }; + /// Specialization. template - class Node_Update, - class Allocator> - struct tree_traits< + typename Cmp_Fn, + template + class Node_Update, + typename _Alloc> + struct tree_traits + : public bin_search_tree_traits< Key, - null_mapped_type, - Cmp_Fn, - Node_Update, - rb_tree_tag, - Allocator> : public bin_search_tree_traits< - Key, - null_mapped_type, + null_type, Cmp_Fn, Node_Update, rb_tree_node_< - typename types_traits< - Key, - null_mapped_type, - Allocator, - false>::value_type, - typename tree_node_metadata_selector< - Key, - null_mapped_type, - Cmp_Fn, - Node_Update, - Allocator>::type, - Allocator>, - Allocator> + typename types_traits::value_type, + typename tree_node_metadata_dispatch::type, + _Alloc>, + _Alloc> { }; } // namespace detail diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp index 35acb8f6bcd..5c9c05f2f10 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp @@ -34,40 +34,38 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file rc_binomial_heap_/constructors_destructor_fn_imps.hpp * Contains an implementation for rc_binomial_heap_. */ PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -rc_binomial_heap_() +rc_binomial_heap() { PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -rc_binomial_heap_(const Cmp_Fn& r_cmp_fn) : - PB_DS_BASE_C_DEC(r_cmp_fn) +rc_binomial_heap(const Cmp_Fn& r_cmp_fn) +: base_type(r_cmp_fn) { PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -rc_binomial_heap_(const PB_DS_CLASS_C_DEC& other) : - PB_DS_BASE_C_DEC(other) +rc_binomial_heap(const PB_DS_CLASS_C_DEC& other) +: base_type(other) { make_binomial_heap(); - base_type::find_max(); - PB_DS_ASSERT_VALID((*this)) } PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~rc_binomial_heap_() +~rc_binomial_heap() { } PB_DS_CLASS_T_DEC @@ -79,7 +77,6 @@ swap(PB_DS_CLASS_C_DEC& other) PB_DS_ASSERT_VALID(other) base_type::swap(other); - m_rc.swap(other.m_rc); PB_DS_ASSERT_VALID((*this)) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp index 638810bfb44..b7a1b58fe8d 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file rc_binomial_heap_/debug_fn_imps.hpp * Contains an implementation for rc_binomial_heap_. */ @@ -61,14 +61,14 @@ assert_valid(const char* __file, int __line) const return; } - const_node_pointer p_nd = next_2_pointer(base_type::m_p_root); + node_const_pointer p_nd = next_2_pointer(base_type::m_p_root); typename rc_t::const_iterator it = m_rc.end(); --it; while (p_nd != 0) { PB_DS_DEBUG_VERIFY(*it == p_nd); - const_node_pointer p_next = p_nd->m_p_next_sibling; + node_const_pointer p_next = p_nd->m_p_next_sibling; PB_DS_DEBUG_VERIFY(p_next != 0); PB_DS_DEBUG_VERIFY(p_nd->m_metadata == p_next->m_metadata); PB_DS_DEBUG_VERIFY(p_next->m_p_next_sibling == 0 || @@ -81,9 +81,9 @@ assert_valid(const char* __file, int __line) const } PB_DS_CLASS_T_DEC -typename PB_DS_CLASS_C_DEC::const_node_pointer +typename PB_DS_CLASS_C_DEC::node_const_pointer PB_DS_CLASS_C_DEC:: -next_2_pointer(const_node_pointer p_nd) +next_2_pointer(node_const_pointer p_nd) { if (p_nd == 0) return 0; @@ -100,9 +100,9 @@ next_2_pointer(const_node_pointer p_nd) } PB_DS_CLASS_T_DEC -typename PB_DS_CLASS_C_DEC::const_node_pointer +typename PB_DS_CLASS_C_DEC::node_const_pointer PB_DS_CLASS_C_DEC:: -next_after_0_pointer(const_node_pointer p_nd) +next_after_0_pointer(node_const_pointer p_nd) { if (p_nd == 0) return 0; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp index bf000625009..a8c619e5a1c 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file rc_binomial_heap_/erase_fn_imps.hpp * Contains an implementation for rc_binomial_heap_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp index c252b49ad8a..aae0a72c97c 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file rc_binomial_heap_/insert_fn_imps.hpp * Contains an implementation for rc_binomial_heap_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp index 845e6726db6..ea27c47ba6b 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file rc.hpp + * @file rc_binomial_heap_/rc.hpp * Contains a redundant (binary counter). */ @@ -45,37 +45,22 @@ namespace __gnu_pbds { namespace detail { - -#define PB_DS_CLASS_T_DEC \ - template - -#define PB_DS_CLASS_C_DEC \ - rc - - template + /// Redundant binary counter. + template class rc { private: - typedef Allocator allocator_type; + typedef _Alloc allocator_type; + typedef typename allocator_type::size_type size_type; + typedef _Node node; - typedef typename allocator_type::size_type size_type; + typedef typename _Alloc::template rebind __rebind_n; + typedef typename __rebind_n::other::pointer node_pointer; - typedef Node node; + typedef typename _Alloc::template rebind __rebind_np; - typedef - typename allocator_type::template rebind< - node>::other::pointer - node_pointer; - - typedef - typename allocator_type::template rebind< - node_pointer>::other::pointer - entry_pointer; - - typedef - typename allocator_type::template rebind< - node_pointer>::other::const_pointer - const_entry_pointer; + typedef typename __rebind_np::other::pointer entry_pointer; + typedef typename __rebind_np::other::const_pointer entry_const_pointer; enum { @@ -83,20 +68,18 @@ namespace __gnu_pbds }; public: - typedef node_pointer entry; + typedef node_pointer entry; + typedef entry_const_pointer const_iterator; - typedef const_entry_pointer const_iterator; - - public: rc(); - rc(const PB_DS_CLASS_C_DEC& other); + rc(const rc&); inline void - swap(PB_DS_CLASS_C_DEC& other); + swap(rc&); inline void - push(entry p_nd); + push(entry); inline node_pointer top() const; @@ -121,34 +104,33 @@ namespace __gnu_pbds #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; -#endif + assert_valid(const char*, int) const; +#endif #ifdef PB_DS_RC_BINOMIAL_HEAP_TRACE_ void trace() const; -#endif +#endif private: - node_pointer m_a_entries[max_entries]; - - size_type m_over_top; + node_pointer m_a_entries[max_entries]; + size_type m_over_top; }; - PB_DS_CLASS_T_DEC - PB_DS_CLASS_C_DEC:: + template + rc<_Node, _Alloc>:: rc() : m_over_top(0) { PB_DS_ASSERT_VALID((*this)) } - PB_DS_CLASS_T_DEC - PB_DS_CLASS_C_DEC:: - rc(const PB_DS_CLASS_C_DEC& other) : m_over_top(0) + template + rc<_Node, _Alloc>:: + rc(const rc<_Node, _Alloc>& other) : m_over_top(0) { PB_DS_ASSERT_VALID((*this)) } - PB_DS_CLASS_T_DEC + template inline void - PB_DS_CLASS_C_DEC:: - swap(PB_DS_CLASS_C_DEC& other) + rc<_Node, _Alloc>:: + swap(rc<_Node, _Alloc>& other) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) @@ -163,9 +145,9 @@ namespace __gnu_pbds PB_DS_ASSERT_VALID(other) } - PB_DS_CLASS_T_DEC + template inline void - PB_DS_CLASS_C_DEC:: + rc<_Node, _Alloc>:: push(entry p_nd) { PB_DS_ASSERT_VALID((*this)) @@ -174,9 +156,9 @@ namespace __gnu_pbds PB_DS_ASSERT_VALID((*this)) } - PB_DS_CLASS_T_DEC + template inline void - PB_DS_CLASS_C_DEC:: + rc<_Node, _Alloc>:: pop() { PB_DS_ASSERT_VALID((*this)) @@ -185,9 +167,9 @@ namespace __gnu_pbds PB_DS_ASSERT_VALID((*this)) } - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::node_pointer - PB_DS_CLASS_C_DEC:: + template + inline typename rc<_Node, _Alloc>::node_pointer + rc<_Node, _Alloc>:: top() const { PB_DS_ASSERT_VALID((*this)) @@ -195,24 +177,24 @@ namespace __gnu_pbds return *(m_a_entries + m_over_top - 1); } - PB_DS_CLASS_T_DEC + template inline bool - PB_DS_CLASS_C_DEC:: + rc<_Node, _Alloc>:: empty() const { PB_DS_ASSERT_VALID((*this)) return m_over_top == 0; } - PB_DS_CLASS_T_DEC - inline typename PB_DS_CLASS_C_DEC::size_type - PB_DS_CLASS_C_DEC:: + template + inline typename rc<_Node, _Alloc>::size_type + rc<_Node, _Alloc>:: size() const { return m_over_top; } - PB_DS_CLASS_T_DEC + template void - PB_DS_CLASS_C_DEC:: + rc<_Node, _Alloc>:: clear() { PB_DS_ASSERT_VALID((*this)) @@ -220,30 +202,30 @@ namespace __gnu_pbds PB_DS_ASSERT_VALID((*this)) } - PB_DS_CLASS_T_DEC - const typename PB_DS_CLASS_C_DEC::const_iterator - PB_DS_CLASS_C_DEC:: + template + const typename rc<_Node, _Alloc>::const_iterator + rc<_Node, _Alloc>:: begin() const { return& m_a_entries[0]; } - PB_DS_CLASS_T_DEC - const typename PB_DS_CLASS_C_DEC::const_iterator - PB_DS_CLASS_C_DEC:: + template + const typename rc<_Node, _Alloc>::const_iterator + rc<_Node, _Alloc>:: end() const { return& m_a_entries[m_over_top]; } #ifdef _GLIBCXX_DEBUG - PB_DS_CLASS_T_DEC + template void - PB_DS_CLASS_C_DEC:: + rc<_Node, _Alloc>:: assert_valid(const char* __file, int __line) const { PB_DS_DEBUG_VERIFY(m_over_top < max_entries); } -#endif +#endif #ifdef PB_DS_RC_BINOMIAL_HEAP_TRACE_ - PB_DS_CLASS_T_DEC + template void - PB_DS_CLASS_C_DEC:: + rc<_Node, _Alloc>:: trace() const { std::cout << "rc" << std::endl; @@ -251,12 +233,8 @@ namespace __gnu_pbds std::cerr << m_a_entries[i] << std::endl; std::cout << std::endl; } -#endif - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC - +#endif } // namespace detail } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp index 767bf108861..e4d67049108 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp @@ -34,12 +34,8 @@ // warranty. /** - * @file rc_binomial_heap_.hpp - * Contains an implementation for rc_binomial_heap_. - */ - -/* - * Redundant-counter binomial heap. + * @file rc_binomial_heap_/rc_binomial_heap_.hpp + * Contains an implementation for redundant-counter binomial heap. */ #include @@ -53,114 +49,92 @@ namespace __gnu_pbds namespace detail { #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ - rc_binomial_heap_ - -#define PB_DS_BASE_C_DEC \ - binomial_heap_base_ + rc_binomial_heap #define PB_DS_RC_C_DEC \ - rc + rc::node, _Alloc> - /** - * class description = "8y|\|0|\/|i41 h34p 74813"> - **/ - template - class rc_binomial_heap_ : public PB_DS_BASE_C_DEC + /// Base class for redundant-counter binomial heap. + template + class rc_binomial_heap + : public binomial_heap_base { - private: - typedef PB_DS_BASE_C_DEC base_type; - - typedef typename base_type::node_pointer node_pointer; - - typedef typename base_type::const_node_pointer const_node_pointer; - - typedef PB_DS_RC_C_DEC rc_t; + typedef binomial_heap_base + base_type; + typedef typename base_type::node_pointer node_pointer; + typedef typename base_type::node_const_pointer node_const_pointer; + typedef PB_DS_RC_C_DEC rc_t; public: + typedef Value_Type value_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; + typedef typename base_type::pointer pointer; + typedef typename base_type::const_pointer const_pointer; + typedef typename base_type::reference reference; + typedef typename base_type::const_reference const_reference; + typedef typename base_type::point_const_iterator point_const_iterator; + typedef typename base_type::point_iterator point_iterator; + typedef typename base_type::const_iterator const_iterator; + typedef typename base_type::iterator iterator; + typedef typename base_type::cmp_fn cmp_fn; + typedef typename base_type::allocator_type allocator_type; - typedef typename Allocator::size_type size_type; + rc_binomial_heap(); - typedef typename Allocator::difference_type difference_type; + rc_binomial_heap(const Cmp_Fn&); - typedef Value_Type value_type; + rc_binomial_heap(const PB_DS_CLASS_C_DEC&); - typedef typename base_type::pointer pointer; - - typedef typename base_type::const_pointer const_pointer; - - typedef typename base_type::reference reference; - - typedef typename base_type::const_reference const_reference; - - typedef typename base_type::const_point_iterator const_point_iterator; - - typedef typename base_type::point_iterator point_iterator; - - typedef typename base_type::const_iterator const_iterator; - - typedef typename base_type::iterator iterator; - - typedef typename base_type::cmp_fn cmp_fn; - - typedef typename base_type::allocator_type allocator_type; - - public: - - rc_binomial_heap_(); - - rc_binomial_heap_(const Cmp_Fn& r_cmp_fn); - - rc_binomial_heap_(const PB_DS_CLASS_C_DEC& other); - - ~rc_binomial_heap_(); + ~rc_binomial_heap(); void - swap(PB_DS_CLASS_C_DEC& other); + swap(PB_DS_CLASS_C_DEC&); inline point_iterator - push(const_reference r_val); + push(const_reference); void - modify(point_iterator it, const_reference r_new_val); + modify(point_iterator, const_reference); inline void pop(); void - erase(point_iterator it); + erase(point_iterator); inline void clear(); template size_type - erase_if(Pred pred); + erase_if(Pred); template void - split(Pred pred, PB_DS_CLASS_C_DEC& other); + split(Pred, PB_DS_CLASS_C_DEC&); void - join(PB_DS_CLASS_C_DEC& other); + join(PB_DS_CLASS_C_DEC&); #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; -#endif + assert_valid(const char*, int) const; +#endif #ifdef PB_DS_RC_BINOMIAL_HEAP_TRACE_ void trace() const; -#endif +#endif private: inline node_pointer - link_with_next_sibling(node_pointer p_nd); + link_with_next_sibling(node_pointer); void make_0_exposed(); @@ -169,15 +143,14 @@ namespace __gnu_pbds make_binomial_heap(); #ifdef _GLIBCXX_DEBUG - static const_node_pointer - next_2_pointer(const_node_pointer p_nd); + static node_const_pointer + next_2_pointer(node_const_pointer); - static const_node_pointer - next_after_0_pointer(const_node_pointer p_nd); -#endif + static node_const_pointer + next_after_0_pointer(node_const_pointer); +#endif - private: - rc_t m_rc; + rc_t m_rc; }; #include @@ -189,7 +162,6 @@ namespace __gnu_pbds #undef PB_DS_CLASS_C_DEC #undef PB_DS_CLASS_T_DEC -#undef PB_DS_BASE_C_DEC #undef PB_DS_RC_C_DEC } // namespace detail } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp index 09d637c7d58..13bf78e51fd 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file split_join_fn_imps.hpp + * @file rc_binomial_heap_/split_join_fn_imps.hpp * Contains an implementation for rc_binomial_heap_. */ @@ -47,11 +47,9 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other) PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) - make_binomial_heap(); + make_binomial_heap(); other.make_binomial_heap(); - base_type::split(pred, other); - base_type::find_max(); other.find_max(); @@ -69,9 +67,7 @@ join(PB_DS_CLASS_C_DEC& other) make_binomial_heap(); other.make_binomial_heap(); - base_type::join(other); - base_type::find_max(); other.find_max(); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp index 1fb3b8bd489..27b5bc4b97d 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file trace_fn_imps.hpp + * @file rc_binomial_heap_/trace_fn_imps.hpp * Contains an implementation for rc_binomial_heap_. */ @@ -46,7 +46,6 @@ PB_DS_CLASS_C_DEC:: trace() const { base_type::trace(); - m_rc.trace(); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp index 33aecdf5fcc..97533a34e45 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp @@ -41,85 +41,85 @@ #ifndef PB_DS_SAMPLE_RESIZE_POLICY_HPP #define PB_DS_SAMPLE_RESIZE_POLICY_HPP -// A sample resize policy. -class sample_resize_policy +namespace __gnu_pbds { -public: + /// A sample resize policy. + class sample_resize_policy + { + public: + // Size type. + typedef std::size_t size_type; - // Size type. - typedef std::size_t size_type; + // Default constructor. + sample_resize_policy(); - // Default constructor. - sample_resize_policy(); + // Copy constructor. + sample_range_hashing(const sample_resize_policy& other); - // Copy constructor. - sample_range_hashing(const sample_resize_policy& other); + // Swaps content. + inline void + swap(sample_resize_policy& other); - // Swaps content. - inline void - swap(sample_resize_policy& other); + protected: + // Notifies a search started. + inline void + notify_insert_search_start(); -protected: + // Notifies a search encountered a collision. + inline void + notify_insert_search_collision(); - // Notifies a search started. - inline void - notify_insert_search_start(); + // Notifies a search ended. + inline void + notify_insert_search_end(); - // Notifies a search encountered a collision. - inline void - notify_insert_search_collision(); + // Notifies a search started. + inline void + notify_find_search_start(); - // Notifies a search ended. - inline void - notify_insert_search_end(); + // Notifies a search encountered a collision. + inline void + notify_find_search_collision(); - // Notifies a search started. - inline void - notify_find_search_start(); + // Notifies a search ended. + inline void + notify_find_search_end(); - // Notifies a search encountered a collision. - inline void - notify_find_search_collision(); + // Notifies a search started. + inline void + notify_erase_search_start(); - // Notifies a search ended. - inline void - notify_find_search_end(); + // Notifies a search encountered a collision. + inline void + notify_erase_search_collision(); - // Notifies a search started. - inline void - notify_erase_search_start(); + // Notifies a search ended. + inline void + notify_erase_search_end(); - // Notifies a search encountered a collision. - inline void - notify_erase_search_collision(); + // Notifies an element was inserted. + inline void + notify_inserted(size_type num_e); - // Notifies a search ended. - inline void - notify_erase_search_end(); + // Notifies an element was erased. + inline void + notify_erased(size_type num_e); - // Notifies an element was inserted. - inline void - notify_inserted(size_type num_e); + // Notifies the table was cleared. + void + notify_cleared(); - // Notifies an element was erased. - inline void - notify_erased(size_type num_e); + // Notifies the table was resized to new_size. + void + notify_resized(size_type new_size); - // Notifies the table was cleared. - void - notify_cleared(); + // Queries whether a resize is needed. + inline bool + is_resize_needed() const; - // Notifies the table was resized to new_size. - void - notify_resized(size_type new_size); - - // Queries whether a resize is needed. - inline bool - is_resize_needed() const; - - // Queries what the new size should be. - size_type - get_new_size(size_type size, size_type num_used_e) const; -}; - -#endif + // Queries what the new size should be. + size_type + get_new_size(size_type size, size_type num_used_e) const; + }; +} +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp index 963c5530a46..ebc28b7cbc7 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp @@ -42,97 +42,96 @@ #ifndef PB_DS_SAMPLE_RESIZE_TRIGGER_HPP #define PB_DS_SAMPLE_RESIZE_TRIGGER_HPP -// A sample resize trigger policy. -class sample_resize_trigger +namespace __gnu_pbds { -public: + /// A sample resize trigger policy. + class sample_resize_trigger + { + public: + // Size type. + typedef std::size_t size_type; - // Size type. - typedef std::size_t size_type; + // Default constructor. + sample_resize_trigger(); - // Default constructor. - sample_resize_trigger(); + // Copy constructor. + sample_range_hashing(const sample_resize_trigger&); - // Copy constructor. - sample_range_hashing(const sample_resize_trigger& other); + // Swaps content. + inline void + swap(sample_resize_trigger&); - // Swaps content. - inline void - swap(sample_resize_trigger& other); + protected: + // Notifies a search started. + inline void + notify_insert_search_start(); -protected: + // Notifies a search encountered a collision. + inline void + notify_insert_search_collision(); - // Notifies a search started. - inline void - notify_insert_search_start(); + // Notifies a search ended. + inline void + notify_insert_search_end(); - // Notifies a search encountered a collision. - inline void - notify_insert_search_collision(); + // Notifies a search started. + inline void + notify_find_search_start(); - // Notifies a search ended. - inline void - notify_insert_search_end(); + // Notifies a search encountered a collision. + inline void + notify_find_search_collision(); - // Notifies a search started. - inline void - notify_find_search_start(); + // Notifies a search ended. + inline void + notify_find_search_end(); - // Notifies a search encountered a collision. - inline void - notify_find_search_collision(); + // Notifies a search started. + inline void + notify_erase_search_start(); - // Notifies a search ended. - inline void - notify_find_search_end(); + // Notifies a search encountered a collision. + inline void + notify_erase_search_collision(); - // Notifies a search started. - inline void - notify_erase_search_start(); + // Notifies a search ended. + inline void + notify_erase_search_end(); - // Notifies a search encountered a collision. - inline void - notify_erase_search_collision(); + // Notifies an element was inserted. the total number of entries in + // the table is num_entries. + inline void + notify_inserted(size_type num_entries); - // Notifies a search ended. - inline void - notify_erase_search_end(); + // Notifies an element was erased. + inline void + notify_erased(size_type num_entries); - // Notifies an element was inserted. the total number of entries in - // the table is num_entries. - inline void - notify_inserted(size_type num_entries); + // Notifies the table was cleared. + void + notify_cleared(); - // Notifies an element was erased. - inline void - notify_erased(size_type num_entries); + // Notifies the table was resized as a result of this object's + // signifying that a resize is needed. + void + notify_resized(size_type new_size); - // Notifies the table was cleared. - void - notify_cleared(); + // Notifies the table was resized externally. + void + notify_externally_resized(size_type new_size); - // Notifies the table was resized as a result of this object's - // signifying that a resize is needed. - void - notify_resized(size_type new_size); + // Queries whether a resize is needed. + inline bool + is_resize_needed() const; - // Notifies the table was resized externally. - void - notify_externally_resized(size_type new_size); + // Queries whether a grow is needed. + inline bool + is_grow_needed(size_type size, size_type num_entries) const; - // Queries whether a resize is needed. - inline bool - is_resize_needed() const; - - // Queries whether a grow is needed. - inline bool - is_grow_needed(size_type size, size_type num_entries) const; - -private: - - // Resizes to new_size. - virtual void - do_resize(size_type new_size); -}; - -#endif + private: + // Resizes to new_size. + virtual void + do_resize(size_type); + }; +} +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp index 9b3ba031c4b..b6c49aea69d 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp @@ -41,33 +41,33 @@ #ifndef PB_DS_SAMPLE_SIZE_POLICY_HPP #define PB_DS_SAMPLE_SIZE_POLICY_HPP -// A sample size policy. -class sample_size_policy +namespace __gnu_pbds { -public: + /// A sample size policy. + class sample_size_policy + { + public: + // Size type. + typedef std::size_t size_type; - // Size type. - typedef std::size_t size_type; + // Default constructor. + sample_size_policy(); - // Default constructor. - sample_size_policy(); + // Copy constructor. + sample_range_hashing(const sample_size_policy&); - // Copy constructor. - sample_range_hashing(const sample_size_policy& other); + // Swaps content. + inline void + swap(sample_size_policy& other); - // Swaps content. - inline void - swap(sample_size_policy& other); + protected: + // Given a __size size, returns a __size that is larger. + inline size_type + get_nearest_larger_size(size_type size) const; -protected: - - // Given a __size size, returns a __size that is larger. - inline size_type - get_nearest_larger_size(size_type size) const; - - // Given a __size size, returns a __size that is smaller. - inline size_type - get_nearest_smaller_size(size_type size) const; -}; - -#endif + // Given a __size size, returns a __size that is smaller. + inline size_type + get_nearest_smaller_size(size_type size) const; + }; +} +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp index dea307c2bdc..2383e962552 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file splay_tree_/constructors_destructor_fn_imps.hpp * Contains an implementation class for splay_tree_. */ @@ -50,7 +50,7 @@ copy_from_range(It first_it, It last_it) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME() +PB_DS_S_TREE_NAME() { initialize(); PB_DS_ASSERT_VALID((*this)) @@ -58,7 +58,7 @@ PB_DS_CLASS_NAME() PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn) : +PB_DS_S_TREE_NAME(const Cmp_Fn& r_cmp_fn) : base_type(r_cmp_fn) { initialize(); @@ -67,7 +67,7 @@ PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) : +PB_DS_S_TREE_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) : base_type(r_cmp_fn, r_node_update) { initialize(); @@ -76,7 +76,7 @@ PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_node_update) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC& other) : +PB_DS_S_TREE_NAME(const PB_DS_CLASS_C_DEC& other) : base_type(other) { initialize(); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp index 453567a0632..e6a4694b291 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file splay_tree_/debug_fn_imps.hpp * Contains an implementation class for splay_tree_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp index 22f8e68c440..9546321e6f0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp @@ -34,14 +34,14 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file splay_tree_/erase_fn_imps.hpp * Contains an implementation class for splay_tree_. */ PB_DS_CLASS_T_DEC inline bool PB_DS_CLASS_C_DEC:: -erase(const_key_reference r_key) +erase(key_const_reference r_key) { point_iterator it = find(r_key); if (it == base_type::end()) @@ -142,7 +142,7 @@ erase_node(node_pointer p_nd) if (p_l != 0) p_l->m_p_parent = p_target_r; PB_DS_ASSERT_VALID((*this)) - this->apply_update(p_target_r, (node_update* )this); + this->apply_update(p_target_r, (node_update*)this); } PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp index 9dfa926f402..6e1a4ef06e2 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp @@ -34,14 +34,14 @@ // warranty. /** - * @file find_fn_imps.hpp + * @file splay_tree_/find_fn_imps.hpp * Contains an implementation class for splay_tree_. */ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::point_iterator PB_DS_CLASS_C_DEC:: -find(const_key_reference r_key) +find(key_const_reference r_key) { node_pointer p_found = find_imp(r_key); if (p_found != base_type::m_p_head) @@ -50,9 +50,9 @@ find(const_key_reference r_key) } PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::const_point_iterator +inline typename PB_DS_CLASS_C_DEC::point_const_iterator PB_DS_CLASS_C_DEC:: -find(const_key_reference r_key) const +find(key_const_reference r_key) const { const node_pointer p_found = find_imp(r_key); if (p_found != base_type::m_p_head) @@ -63,7 +63,7 @@ find(const_key_reference r_key) const PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -find_imp(const_key_reference r_key) +find_imp(key_const_reference r_key) { _GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid(__FILE__, __LINE__);) @@ -83,7 +83,7 @@ find_imp(const_key_reference r_key) PB_DS_CLASS_T_DEC inline const typename PB_DS_CLASS_C_DEC::node_pointer PB_DS_CLASS_C_DEC:: -find_imp(const_key_reference r_key) const +find_imp(key_const_reference r_key) const { PB_DS_ASSERT_VALID((*this)) node_pointer p_nd = base_type::m_p_head->m_p_parent; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp index 636b9ab255e..8996903b016 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp @@ -34,6 +34,6 @@ // warranty. /** - * @file info_fn_imps.hpp + * @file splay_tree_/info_fn_imps.hpp * Contains an implementation. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp index 4e1179ead2f..2f895b5bffa 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file splay_tree_/insert_fn_imps.hpp * Contains an implementation class for splay_tree_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp index fbf398d04c9..111976d5500 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file node.hpp + * @file splay_tree_/node.hpp * Contains an implementation struct for splay_tree_'s node. */ @@ -45,7 +45,8 @@ namespace __gnu_pbds { namespace detail { - template + /// Node for splay tree. + template struct splay_tree_node_ { public: @@ -53,17 +54,17 @@ namespace __gnu_pbds typedef Metadata metadata_type; typedef - typename Allocator::template rebind< - splay_tree_node_ >::other::pointer + typename _Alloc::template rebind< + splay_tree_node_ >::other::pointer node_pointer; typedef - typename Allocator::template rebind::other::reference + typename _Alloc::template rebind::other::reference metadata_reference; typedef - typename Allocator::template rebind::other::const_reference - const_metadata_reference; + typename _Alloc::template rebind::other::const_reference + metadata_const_reference; #ifdef PB_DS_BIN_SEARCH_TREE_TRACE_ void @@ -75,7 +76,7 @@ namespace __gnu_pbds special() const { return m_special; } - inline const_metadata_reference + inline metadata_const_reference get_metadata() const { return m_metadata; } @@ -91,16 +92,16 @@ namespace __gnu_pbds metadata_type m_metadata; }; - template - struct splay_tree_node_ + template + struct splay_tree_node_ { public: typedef Value_Type value_type; - typedef null_node_metadata metadata_type; + typedef null_type metadata_type; typedef - typename Allocator::template rebind< - splay_tree_node_ >::other::pointer + typename _Alloc::template rebind< + splay_tree_node_ >::other::pointer node_pointer; inline bool diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp index b1523662c43..03568450941 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file splay_fn_imps.hpp + * @file splay_tree_/splay_fn_imps.hpp * Contains an implementation class for splay_tree_. */ @@ -56,32 +56,32 @@ splay(node_pointer p_nd) if (p_nd->m_p_parent->m_p_parent == base_type::m_p_head) { - base_type::rotate_parent(p_nd); - _GLIBCXX_DEBUG_ASSERT(p_nd == this->m_p_head->m_p_parent); + base_type::rotate_parent(p_nd); + _GLIBCXX_DEBUG_ASSERT(p_nd == this->m_p_head->m_p_parent); } else { - const node_pointer p_parent = p_nd->m_p_parent; - const node_pointer p_grandparent = p_parent->m_p_parent; + const node_pointer p_parent = p_nd->m_p_parent; + const node_pointer p_grandparent = p_parent->m_p_parent; #ifdef _GLIBCXX_DEBUG - const size_type total = + const size_type total = base_type::recursive_count(p_grandparent); - _GLIBCXX_DEBUG_ASSERT(total >= 3); -#endif + _GLIBCXX_DEBUG_ASSERT(total >= 3); +#endif - if (p_parent->m_p_left == p_nd && + if (p_parent->m_p_left == p_nd && p_grandparent->m_p_right == p_parent) splay_zig_zag_left(p_nd, p_parent, p_grandparent); - else if (p_parent->m_p_right == p_nd && + else if (p_parent->m_p_right == p_nd && p_grandparent->m_p_left == p_parent) splay_zig_zag_right(p_nd, p_parent, p_grandparent); - else if (p_parent->m_p_left == p_nd && + else if (p_parent->m_p_left == p_nd && p_grandparent->m_p_left == p_parent) splay_zig_zig_left(p_nd, p_parent, p_grandparent); - else + else splay_zig_zig_right(p_nd, p_parent, p_grandparent); - _GLIBCXX_DEBUG_ASSERT(total ==this->recursive_count(p_nd)); + _GLIBCXX_DEBUG_ASSERT(total ==this->recursive_count(p_nd)); } PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_nd) @@ -91,7 +91,7 @@ splay(node_pointer p_nd) PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -splay_zig_zag_left(node_pointer p_nd, node_pointer p_parent, +splay_zig_zag_left(node_pointer p_nd, node_pointer p_parent, node_pointer p_grandparent) { _GLIBCXX_DEBUG_ASSERT(p_parent == p_nd->m_p_parent); @@ -99,8 +99,8 @@ splay_zig_zag_left(node_pointer p_nd, node_pointer p_parent, PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_grandparent) - _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_left == p_nd && - p_grandparent->m_p_right == p_parent); + _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_left == p_nd && + p_grandparent->m_p_right == p_parent); splay_zz_start(p_nd, p_parent, p_grandparent); @@ -127,7 +127,7 @@ splay_zig_zag_left(node_pointer p_nd, node_pointer p_parent, PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -splay_zig_zag_right(node_pointer p_nd, node_pointer p_parent, +splay_zig_zag_right(node_pointer p_nd, node_pointer p_parent, node_pointer p_grandparent) { _GLIBCXX_DEBUG_ASSERT(p_parent == p_nd->m_p_parent); @@ -135,8 +135,8 @@ splay_zig_zag_right(node_pointer p_nd, node_pointer p_parent, PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_grandparent) - _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_right == p_nd && - p_grandparent->m_p_left == p_parent); + _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_right == p_nd && + p_grandparent->m_p_left == p_parent); splay_zz_start(p_nd, p_parent, p_grandparent); @@ -163,7 +163,7 @@ splay_zig_zag_right(node_pointer p_nd, node_pointer p_parent, PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -splay_zig_zig_left(node_pointer p_nd, node_pointer p_parent, +splay_zig_zig_left(node_pointer p_nd, node_pointer p_parent, node_pointer p_grandparent) { _GLIBCXX_DEBUG_ASSERT(p_parent == p_nd->m_p_parent); @@ -171,7 +171,7 @@ splay_zig_zig_left(node_pointer p_nd, node_pointer p_parent, PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_grandparent) - _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_left == p_nd && + _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_left == p_nd && p_nd->m_p_parent->m_p_parent->m_p_left == p_nd->m_p_parent); splay_zz_start(p_nd, p_parent, p_grandparent); @@ -199,14 +199,14 @@ splay_zig_zig_left(node_pointer p_nd, node_pointer p_parent, PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -splay_zig_zig_right(node_pointer p_nd, node_pointer p_parent, +splay_zig_zig_right(node_pointer p_nd, node_pointer p_parent, node_pointer p_grandparent) { _GLIBCXX_DEBUG_ASSERT(p_parent == p_nd->m_p_parent); _GLIBCXX_DEBUG_ASSERT(p_grandparent == p_parent->m_p_parent); PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_grandparent) - _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_right == p_nd && - p_nd->m_p_parent->m_p_parent->m_p_right == p_nd->m_p_parent); + _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_right == p_nd && + p_nd->m_p_parent->m_p_parent->m_p_right == p_nd->m_p_parent); splay_zz_start(p_nd, p_parent, p_grandparent); @@ -227,7 +227,7 @@ splay_zig_zig_right(node_pointer p_nd, node_pointer p_parent, if (p_c != 0) p_c->m_p_parent = p_grandparent; - base_type::update_to_top(p_grandparent, (node_update* )this); + base_type::update_to_top(p_grandparent, (node_update*)this); splay_zz_end(p_nd, p_parent, p_grandparent); } @@ -237,7 +237,7 @@ PB_DS_CLASS_C_DEC:: splay_zz_start(node_pointer p_nd, #ifdef _GLIBCXX_DEBUG node_pointer p_parent, -#else +#else node_pointer /*p_parent*/, #endif node_pointer p_grandparent) @@ -268,16 +268,14 @@ splay_zz_start(node_pointer p_nd, PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -splay_zz_end(node_pointer p_nd, node_pointer p_parent, +splay_zz_end(node_pointer p_nd, node_pointer p_parent, node_pointer p_grandparent) { if (p_nd->m_p_parent == base_type::m_p_head) base_type::m_p_head->m_p_parent = p_nd; - this->apply_update(p_grandparent, (node_update* )this); - this->apply_update(p_parent, (node_update* )this); - this->apply_update(p_nd, (node_update* )this); - + this->apply_update(p_grandparent, (node_update*)this); + this->apply_update(p_parent, (node_update*)this); + this->apply_update(p_nd, (node_update*)this); PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_nd) } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp index b6afa758eb8..4d67dba4d85 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp @@ -34,8 +34,8 @@ // warranty. /** - * @file splay_tree_.hpp - * Contains an implementation class for splay_tree_. + * @file splay_tree_/splay_tree_.hpp + * Contains an implementation class for splay trees. */ /* * This implementation uses an idea from the SGI STL (using a @a header node @@ -68,20 +68,6 @@ * */ -#ifdef PB_DS_DATA_TRUE_INDICATOR -#ifndef PB_DS_BIN_SEARCH_TREE_HPP__DATA_TRUE_INDICATOR -#define PB_DS_BIN_SEARCH_TREE_HPP__DATA_TRUE_INDICATOR -#include -#endif -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#ifndef PB_DS_BIN_SEARCH_TREE_HPP__DATA_FALSE_INDICATOR -#define PB_DS_BIN_SEARCH_TREE_HPP__DATA_FALSE_INDICATOR -#include -#endif -#endif - #include #include #include @@ -91,91 +77,75 @@ namespace __gnu_pbds { namespace detail { +#ifdef PB_DS_DATA_TRUE_INDICATOR +# define PB_DS_S_TREE_NAME splay_tree_map +# define PB_DS_S_TREE_BASE_NAME bin_search_tree_map +#endif + +#ifdef PB_DS_DATA_FALSE_INDICATOR +# define PB_DS_S_TREE_NAME splay_tree_set +# define PB_DS_S_TREE_BASE_NAME bin_search_tree_set +#endif + #define PB_DS_CLASS_T_DEC \ template - -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_CLASS_NAME splay_tree_data_ -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_CLASS_NAME splay_tree_no_data_ -#endif - -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_BASE_CLASS_NAME bin_search_tree_data_ -#endif - -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_BASE_CLASS_NAME bin_search_tree_no_data_ -#endif + typename Node_And_It_Traits, typename _Alloc> #define PB_DS_CLASS_C_DEC \ - PB_DS_CLASS_NAME + PB_DS_S_TREE_NAME -#define PB_DS_BASE_C_DEC \ - PB_DS_BASE_CLASS_NAME +#define PB_DS_S_TREE_BASE \ + PB_DS_S_TREE_BASE_NAME -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_V2F(X) (X).first -#define PB_DS_V2S(X) (X).second -#define PB_DS_EP2VP(X)& ((X)->m_value) -#endif -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_V2F(X) (X) -#define PB_DS_V2S(X) Mapped_Data() -#define PB_DS_EP2VP(X)& ((X)->m_value.first) -#endif - - // $p14y 7r33 7481. + /// Splay Tree. template - class PB_DS_CLASS_NAME : public PB_DS_BASE_C_DEC + typename Node_And_It_Traits, typename _Alloc> + class PB_DS_S_TREE_NAME : public PB_DS_S_TREE_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_S_TREE_BASE base_type; #ifdef _GLIBCXX_DEBUG typedef base_type debug_base; #endif - typedef typename base_type::node_pointer node_pointer; + typedef typename base_type::node_pointer node_pointer; public: - typedef Allocator allocator_type; - typedef typename Allocator::size_type size_type; - typedef typename Allocator::difference_type difference_type; - typedef Cmp_Fn cmp_fn; - typedef typename base_type::key_type key_type; - typedef typename base_type::key_pointer key_pointer; - typedef typename base_type::const_key_pointer const_key_pointer; - typedef typename base_type::key_reference key_reference; - typedef typename base_type::const_key_reference const_key_reference; - typedef typename base_type::mapped_type mapped_type; - typedef typename base_type::mapped_pointer mapped_pointer; - typedef typename base_type::const_mapped_pointer const_mapped_pointer; - typedef typename base_type::mapped_reference mapped_reference; - typedef typename base_type::const_mapped_reference const_mapped_reference; - typedef typename base_type::value_type value_type; - typedef typename base_type::pointer pointer; - typedef typename base_type::const_pointer const_pointer; - typedef typename base_type::reference reference; - typedef typename base_type::const_reference const_reference; - typedef typename base_type::point_iterator point_iterator; - typedef typename base_type::const_iterator const_point_iterator; - typedef typename base_type::iterator iterator; - typedef typename base_type::const_iterator const_iterator; - typedef typename base_type::reverse_iterator reverse_iterator; + typedef splay_tree_tag container_category; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; + typedef Cmp_Fn cmp_fn; + typedef typename base_type::key_type key_type; + typedef typename base_type::key_pointer key_pointer; + typedef typename base_type::key_const_pointer key_const_pointer; + typedef typename base_type::key_reference key_reference; + typedef typename base_type::key_const_reference key_const_reference; + typedef typename base_type::mapped_type mapped_type; + typedef typename base_type::mapped_pointer mapped_pointer; + typedef typename base_type::mapped_const_pointer mapped_const_pointer; + typedef typename base_type::mapped_reference mapped_reference; + typedef typename base_type::mapped_const_reference mapped_const_reference; + typedef typename base_type::value_type value_type; + typedef typename base_type::pointer pointer; + typedef typename base_type::const_pointer const_pointer; + typedef typename base_type::reference reference; + typedef typename base_type::const_reference const_reference; + typedef typename base_type::point_iterator point_iterator; + typedef typename base_type::const_iterator point_const_iterator; + typedef typename base_type::iterator iterator; + typedef typename base_type::const_iterator const_iterator; + typedef typename base_type::reverse_iterator reverse_iterator; typedef typename base_type::const_reverse_iterator const_reverse_iterator; - typedef typename base_type::node_update node_update; + typedef typename base_type::node_update node_update; - PB_DS_CLASS_NAME(); + PB_DS_S_TREE_NAME(); - PB_DS_CLASS_NAME(const Cmp_Fn&); + PB_DS_S_TREE_NAME(const Cmp_Fn&); - PB_DS_CLASS_NAME(const Cmp_Fn&, const node_update&); + PB_DS_S_TREE_NAME(const Cmp_Fn&, const node_update&); - PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&); + PB_DS_S_TREE_NAME(const PB_DS_CLASS_C_DEC&); void swap(PB_DS_CLASS_C_DEC&); @@ -191,7 +161,7 @@ namespace __gnu_pbds insert(const_reference r_value); inline mapped_reference - operator[](const_key_reference r_key) + operator[](key_const_reference r_key) { #ifdef PB_DS_DATA_TRUE_INDICATOR _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) @@ -203,20 +173,20 @@ namespace __gnu_pbds splay(ins_pair.first.m_p_nd); _GLIBCXX_DEBUG_ONLY(assert_valid(__FILE__, __LINE__);) return ins_pair.first.m_p_nd->m_value.second; -#else +#else insert(r_key); - return base_type::s_null_mapped; + return base_type::s_null_type; #endif } inline point_iterator - find(const_key_reference); + find(key_const_reference); - inline const_point_iterator - find(const_key_reference) const; + inline point_const_iterator + find(key_const_reference) const; inline bool - erase(const_key_reference); + erase(key_const_reference); inline iterator erase(iterator it); @@ -232,17 +202,17 @@ namespace __gnu_pbds join(PB_DS_CLASS_C_DEC&); void - split(const_key_reference, PB_DS_CLASS_C_DEC&); + split(key_const_reference, PB_DS_CLASS_C_DEC&); private: inline std::pair insert_leaf_imp(const_reference); inline node_pointer - find_imp(const_key_reference); + find_imp(key_const_reference); inline const node_pointer - find_imp(const_key_reference) const; + find_imp(key_const_reference) const; #ifdef _GLIBCXX_DEBUG void @@ -250,7 +220,7 @@ namespace __gnu_pbds void assert_special_imp(const node_pointer, const char* file, int line) const; -#endif +#endif void splay(node_pointer); @@ -295,12 +265,8 @@ namespace __gnu_pbds #undef PB_DS_ASSERT_BASE_NODE_CONSISTENT #undef PB_DS_CLASS_T_DEC #undef PB_DS_CLASS_C_DEC -#undef PB_DS_CLASS_NAME -#undef PB_DS_BASE_CLASS_NAME -#undef PB_DS_BASE_C_DEC -#undef PB_DS_V2F -#undef PB_DS_EP2VP -#undef PB_DS_V2S +#undef PB_DS_S_TREE_NAME +#undef PB_DS_S_TREE_BASE_NAME +#undef PB_DS_S_TREE_BASE } // namespace detail } // namespace __gnu_pbds - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp index fe4cfa57bf7..1fcfe798050 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file split_join_fn_imps.hpp + * @file splay_tree_/split_join_fn_imps.hpp * Contains an implementation class for splay_tree_. */ @@ -66,8 +66,8 @@ join(PB_DS_CLASS_C_DEC& other) base_type::m_p_head->m_p_parent = p_target_r; p_target_r->m_p_parent = base_type::m_p_head; - this->apply_update(p_target_r, (node_update* )this); + this->apply_update(p_target_r, (node_update*)this); base_type::join_finish(other); PB_DS_ASSERT_VALID((*this)) @@ -77,7 +77,7 @@ join(PB_DS_CLASS_C_DEC& other) PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other) +split(key_const_reference r_key, PB_DS_CLASS_C_DEC& other) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) @@ -103,7 +103,7 @@ split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other) other.m_p_head->m_p_parent = p_upper_bound; p_upper_bound->m_p_parent = other.m_p_head; p_upper_bound->m_p_left = 0; - this->apply_update(p_upper_bound, (node_update* )this); + this->apply_update(p_upper_bound, (node_update*)this); base_type::split_finish(other); PB_DS_ASSERT_VALID((*this)) diff --git a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp index cfedc35c8db..e5020ec92f0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file traits.hpp + * @file splay_tree_/traits.hpp * Contains an implementation for splay_tree_. */ @@ -47,64 +47,44 @@ namespace __gnu_pbds { namespace detail { - + /// Specialization. template - class Node_Update, - class Allocator> - struct tree_traits< - Key, - Mapped, - Cmp_Fn, - Node_Update, - splay_tree_tag, - Allocator> : public bin_search_tree_traits< - Key, - Mapped, - Cmp_Fn, - Node_Update, - splay_tree_node_< - typename types_traits< - Key, - Mapped, - Allocator, - false>::value_type, - typename tree_node_metadata_selector< - Key, - Mapped, - Cmp_Fn, - Node_Update, - Allocator>::type, - Allocator>, - Allocator> + typename Cmp_Fn, + template + class Node_Update, + typename _Alloc> + struct tree_traits + : public bin_search_tree_traits::value_type, + typename tree_node_metadata_dispatch::type, + _Alloc>, + _Alloc> { }; + /// Specialization. template + typename _Alloc_> class Node_Update, - class Allocator> - struct tree_traits - : public bin_search_tree_traits::value_type, - typename tree_node_metadata_selector< - Key, - null_mapped_type, - Cmp_Fn, - Node_Update, - Allocator>::type, - Allocator>, - Allocator> + typename _Alloc> + struct tree_traits + : public bin_search_tree_traits::value_type, + typename tree_node_metadata_dispatch::type, + _Alloc>, + _Alloc> { }; } // namespace detail diff --git a/libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp b/libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp index cfbfbb07285..cdb09d451d4 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2007, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,7 +34,7 @@ // warranty. /** - * @file standard_policies.hpp + * @file detail/standard_policies.hpp * Contains standard policies for containers. */ @@ -44,8 +44,8 @@ #include #include #include +#include #include -#include #include #include #include @@ -54,12 +54,14 @@ namespace __gnu_pbds { namespace detail { + /// default_hash_fn template struct default_hash_fn { typedef std::tr1::hash type; }; + /// default_eq_fn template struct default_eq_fn { @@ -71,11 +73,13 @@ namespace __gnu_pbds default_store_hash = false }; + /// default_comb_hash_fn struct default_comb_hash_fn { typedef __gnu_pbds::direct_mask_range_hashing<> type; }; + /// default_resize_policy template struct default_resize_policy { @@ -95,11 +99,13 @@ namespace __gnu_pbds typedef __gnu_pbds::hash_standard_resize_policy type; }; + /// default_update_policy struct default_update_policy { - typedef __gnu_pbds::move_to_front_lu_policy<> type; + typedef __gnu_pbds::lu_move_to_front_policy<> type; }; + /// default_probe_fn template struct default_probe_fn { @@ -116,21 +122,21 @@ namespace __gnu_pbds typedef typename cond_type::__type type; }; + /// default_trie_access_traits template - struct default_trie_e_access_traits; + struct default_trie_access_traits; - template - struct default_trie_e_access_traits > > + template + struct default_trie_access_traits > > { private: typedef std::basic_string > string_type; public: - typedef __gnu_pbds::string_trie_e_access_traits type; + typedef __gnu_pbds::trie_string_access_traits type; }; } // namespace detail } // namespace __gnu_pbds #endif // #ifndef PB_DS_STANDARD_POLICIES_HPP - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp index e6780516517..fe0b983265f 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file constructors_destructor_fn_imps.hpp + * @file thin_heap_/constructors_destructor_fn_imps.hpp * Contains an implementation for thin_heap_. */ @@ -51,8 +51,7 @@ copy_from_range(It first_it, It last_it) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -thin_heap_() : - m_p_max(0) +thin_heap() : m_p_max(0) { initialize(); PB_DS_ASSERT_VALID((*this)) @@ -60,9 +59,8 @@ thin_heap_() : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -thin_heap_(const Cmp_Fn& r_cmp_fn) : - PB_DS_BASE_C_DEC(r_cmp_fn), - m_p_max(0) +thin_heap(const Cmp_Fn& r_cmp_fn) +: base_type(r_cmp_fn), m_p_max(0) { initialize(); PB_DS_ASSERT_VALID((*this)) @@ -70,12 +68,13 @@ thin_heap_(const Cmp_Fn& r_cmp_fn) : PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -thin_heap_(const PB_DS_CLASS_C_DEC& other) : - PB_DS_BASE_C_DEC(other) +thin_heap(const PB_DS_CLASS_C_DEC& other) +: base_type(other) { initialize(); m_p_max = base_type::m_p_root; - for (node_pointer p_nd = base_type::m_p_root; p_nd != 0; p_nd = p_nd->m_p_next_sibling) + for (node_pointer p_nd = base_type::m_p_root; p_nd != 0; + p_nd = p_nd->m_p_next_sibling) if (Cmp_Fn::operator()(m_p_max->m_value, p_nd->m_value)) m_p_max = p_nd; @@ -95,7 +94,7 @@ swap(PB_DS_CLASS_C_DEC& other) PB_DS_CLASS_T_DEC PB_DS_CLASS_C_DEC:: -~thin_heap_() +~thin_heap() { } PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp index 0673675a63e..3eb85414291 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file debug_fn_imps.hpp + * @file thin_heap_/debug_fn_imps.hpp * Contains an implementation for thin_heap_. */ @@ -81,7 +81,7 @@ assert_max(const char* __file, int __line) const PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: -assert_node_consistent(const_node_pointer p_nd, bool root, +assert_node_consistent(node_const_pointer p_nd, bool root, const char* __file, int __line) const { base_type::assert_node_consistent(p_nd, root, __file, __line); diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp index fec0ce4762f..11b7d773f9b 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file erase_fn_imps.hpp + * @file thin_heap_/erase_fn_imps.hpp * Contains an implementation for thin_heap_. */ @@ -45,15 +45,11 @@ pop() { PB_DS_ASSERT_VALID((*this)) _GLIBCXX_DEBUG_ASSERT(!base_type::empty()); - _GLIBCXX_DEBUG_ASSERT(m_p_max != 0); node_pointer p_nd = m_p_max; - remove_max_node(); - base_type::actual_erase_node(p_nd); - PB_DS_ASSERT_VALID((*this)) } @@ -63,7 +59,6 @@ PB_DS_CLASS_C_DEC:: remove_max_node() { to_aux_except_max(); - make_from_aux(); } @@ -73,39 +68,29 @@ PB_DS_CLASS_C_DEC:: to_aux_except_max() { node_pointer p_add = base_type::m_p_root; - while (p_add != m_p_max) { node_pointer p_next_add = p_add->m_p_next_sibling; - add_to_aux(p_add); - p_add = p_next_add; } p_add = m_p_max->m_p_l_child; - while (p_add != 0) { node_pointer p_next_add = p_add->m_p_next_sibling; - - p_add->m_metadata = p_add->m_p_l_child == 0? - 0 : - p_add->m_p_l_child->m_metadata + 1; + p_add->m_metadata = p_add->m_p_l_child == 0 ? + 0 : p_add->m_p_l_child->m_metadata + 1; add_to_aux(p_add); - p_add = p_next_add; } p_add = m_p_max->m_p_next_sibling; - while (p_add != 0) { node_pointer p_next_add = p_add->m_p_next_sibling; - add_to_aux(p_add); - p_add = p_next_add; } } @@ -116,22 +101,18 @@ PB_DS_CLASS_C_DEC:: add_to_aux(node_pointer p_nd) { size_type r = p_nd->m_metadata; - while (m_a_aux[r] != 0) { _GLIBCXX_DEBUG_ASSERT(p_nd->m_metadata < rank_bound()); - if (Cmp_Fn::operator()(m_a_aux[r]->m_value, p_nd->m_value)) make_child_of(m_a_aux[r], p_nd); else - { + { make_child_of(p_nd, m_a_aux[r]); - p_nd = m_a_aux[r]; - } + } m_a_aux[r] = 0; - ++r; } @@ -150,7 +131,6 @@ make_child_of(node_pointer p_nd, node_pointer p_new_parent) m_a_aux[p_nd->m_metadata] == p_new_parent); ++p_new_parent->m_metadata; - base_type::make_child_of(p_nd, p_new_parent); } @@ -160,20 +140,15 @@ PB_DS_CLASS_C_DEC:: make_from_aux() { base_type::m_p_root = m_p_max = 0; - const size_type rnk_bnd = rank_bound(); - size_type i = 0; - while (i < rnk_bnd) { if (m_a_aux[i] != 0) - { + { make_root_and_link(m_a_aux[i]); - m_a_aux[i] = 0; - } - + } ++i; } @@ -190,7 +165,6 @@ remove_node(node_pointer p_nd) p_parent = base_type::parent(p_parent); base_type::bubble_to_top(p_nd); - m_p_max = p_nd; node_pointer p_fix = base_type::m_p_root; @@ -209,7 +183,6 @@ PB_DS_CLASS_C_DEC:: clear() { base_type::clear(); - m_p_max = 0; } @@ -222,11 +195,8 @@ erase(point_iterator it) _GLIBCXX_DEBUG_ASSERT(!base_type::empty()); node_pointer p_nd = it.m_p_nd; - remove_node(p_nd); - base_type::actual_erase_node(p_nd); - PB_DS_ASSERT_VALID((*this)) } @@ -237,46 +207,33 @@ PB_DS_CLASS_C_DEC:: erase_if(Pred pred) { PB_DS_ASSERT_VALID((*this)) - if (base_type::empty()) { PB_DS_ASSERT_VALID((*this)) - return 0; } base_type::to_linked_list(); - node_pointer p_out = base_type::prune(pred); - size_type ersd = 0; - while (p_out != 0) { ++ersd; - node_pointer p_next = p_out->m_p_next_sibling; - base_type::actual_erase_node(p_out); - p_out = p_next; } node_pointer p_cur = base_type::m_p_root; - m_p_max = base_type::m_p_root = 0; - while (p_cur != 0) { node_pointer p_next = p_cur->m_p_next_sibling; - make_root_and_link(p_cur); - p_cur = p_next; } PB_DS_ASSERT_VALID((*this)) - return ersd; } @@ -296,4 +253,3 @@ rank_bound() return (p_upper - g_a_rank_bounds); } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp index bbae8de91b6..d0ba860ed4f 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file find_fn_imps.hpp + * @file thin_heap_/find_fn_imps.hpp * Contains an implementation for thin_heap_. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp index f1195bdff4d..67b7f3a3a1a 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file insert_fn_imps.hpp + * @file thin_heap_/insert_fn_imps.hpp * Contains an implementation for thin_heap_. */ @@ -44,34 +44,22 @@ PB_DS_CLASS_C_DEC:: push(const_reference r_val) { PB_DS_ASSERT_VALID((*this)) - node_pointer p_nd = base_type::get_new_node_for_insert(r_val); - p_nd->m_metadata = 0; - p_nd->m_p_prev_or_parent = p_nd->m_p_l_child = 0; - if (base_type::m_p_root == 0) { p_nd->m_p_next_sibling = 0; - m_p_max = base_type::m_p_root = p_nd; - PB_DS_ASSERT_VALID((*this)) - return point_iterator(p_nd); } p_nd->m_p_next_sibling = base_type::m_p_root; - base_type::m_p_root->m_p_prev_or_parent = 0; - base_type::m_p_root = p_nd; - update_max(p_nd); - PB_DS_ASSERT_VALID((*this)) - return point_iterator(p_nd); } @@ -80,10 +68,8 @@ inline void PB_DS_CLASS_C_DEC:: make_root(node_pointer p_nd) { - p_nd->m_metadata = - p_nd->m_p_l_child == 0 ? - 0 : - 1 + p_nd->m_p_l_child->m_metadata; + p_nd->m_metadata = p_nd->m_p_l_child == 0 + ? 0 : 1 + p_nd->m_p_l_child->m_metadata; } PB_DS_CLASS_T_DEC @@ -92,16 +78,12 @@ PB_DS_CLASS_C_DEC:: make_root_and_link(node_pointer p_nd) { make_root(p_nd); - p_nd->m_p_prev_or_parent = 0; - p_nd->m_p_next_sibling = base_type::m_p_root; - if (base_type::m_p_root != 0) base_type::m_p_root->m_p_prev_or_parent = 0; base_type::m_p_root = p_nd; - update_max(p_nd); } @@ -115,7 +97,6 @@ fix(node_pointer p_y) if (p_y->m_p_prev_or_parent == 0) { fix_root(p_y); - return; } else if (p_y->m_metadata == 1&& p_y->m_p_next_sibling == 0) @@ -123,27 +104,22 @@ fix(node_pointer p_y) if (p_y->m_p_l_child != 0) { fix_sibling_rank_1_unmarked(p_y); - return; } fix_sibling_rank_1_marked(p_y); - p_y = p_y->m_p_prev_or_parent; } else if (p_y->m_metadata > p_y->m_p_next_sibling->m_metadata + 1) { _GLIBCXX_DEBUG_ASSERT(p_y->m_p_l_child != 0); - if (p_y->m_metadata != p_y->m_p_l_child->m_metadata + 2) { fix_sibling_general_unmarked(p_y); - return; } fix_sibling_general_marked(p_y); - p_y = p_y->m_p_prev_or_parent; } else if ((p_y->m_p_l_child == 0&& @@ -151,9 +127,7 @@ fix(node_pointer p_y) p_y->m_metadata == p_y->m_p_l_child->m_metadata + 3)) { node_pointer p_z = p_y->m_p_prev_or_parent; - fix_child(p_y); - p_y = p_z; } else @@ -167,9 +141,7 @@ PB_DS_CLASS_C_DEC:: fix_root(node_pointer p_y) { _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent == 0); - make_root(p_y); - PB_DS_ASSERT_NODE_CONSISTENT(p_y, true) } @@ -186,11 +158,8 @@ fix_sibling_rank_1_unmarked(node_pointer p_y) _GLIBCXX_DEBUG_ASSERT(p_y->m_p_next_sibling == 0); p_y->m_p_next_sibling = p_y->m_p_l_child; - p_y->m_p_next_sibling->m_p_prev_or_parent = p_y; - p_y->m_p_l_child = 0; - PB_DS_ASSERT_NODE_CONSISTENT(p_y, false) } @@ -201,9 +170,7 @@ fix_sibling_rank_1_marked(node_pointer p_y) { _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != 0); _GLIBCXX_DEBUG_ASSERT(p_y->m_p_l_child == 0); - p_y->m_metadata = 0; - PB_DS_ASSERT_NODE_CONSISTENT(p_y, false) } @@ -237,9 +204,7 @@ PB_DS_CLASS_C_DEC:: fix_sibling_general_marked(node_pointer p_y) { _GLIBCXX_DEBUG_ASSERT(p_y->m_p_prev_or_parent != 0); - --p_y->m_metadata; - PB_DS_ASSERT_NODE_CONSISTENT(p_y, false) } @@ -267,33 +232,24 @@ PB_DS_CLASS_C_DEC:: modify(point_iterator it, const_reference r_new_val) { PB_DS_ASSERT_VALID((*this)) - node_pointer p_nd = it.m_p_nd; - + node_pointer p_nd = it.m_p_nd; _GLIBCXX_DEBUG_ASSERT(p_nd != 0); const bool smaller = Cmp_Fn::operator()(r_new_val, p_nd->m_value); - p_nd->m_value = r_new_val; - if (smaller) { remove_node(p_nd); - p_nd->m_p_l_child = 0; - make_root_and_link(p_nd); - PB_DS_ASSERT_VALID((*this)) - return; } if (p_nd->m_p_prev_or_parent == 0) { update_max(p_nd); - PB_DS_ASSERT_VALID((*this)) - return; } @@ -309,9 +265,7 @@ modify(point_iterator it, const_reference r_new_val) p_y->m_p_next_sibling = p_nd->m_p_next_sibling; fix(p_y); - make_root_and_link(p_nd); - PB_DS_ASSERT_VALID((*this)) } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp index 96bb818894b..279cf6611eb 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file split_join_fn_imps.hpp + * @file thin_heap_/split_join_fn_imps.hpp * Contains an implementation for thin_heap_. */ @@ -48,47 +48,34 @@ split(Pred pred, PB_DS_CLASS_C_DEC& other) PB_DS_ASSERT_VALID(other) other.clear(); - if (base_type::empty()) { PB_DS_ASSERT_VALID((*this)) PB_DS_ASSERT_VALID(other) - return; } base_type::to_linked_list(); - node_pointer p_out = base_type::prune(pred); while (p_out != 0) { _GLIBCXX_DEBUG_ASSERT(base_type::m_size > 0); --base_type::m_size; - ++other.m_size; - node_pointer p_next = p_out->m_p_next_sibling; - other.make_root_and_link(p_out); - p_out = p_next; } PB_DS_ASSERT_VALID(other) - node_pointer p_cur = base_type::m_p_root; - m_p_max = 0; - base_type::m_p_root = 0; - while (p_cur != 0) { node_pointer p_next = p_cur->m_p_next_sibling; - make_root_and_link(p_cur); - p_cur = p_next; } @@ -105,18 +92,13 @@ join(PB_DS_CLASS_C_DEC& other) PB_DS_ASSERT_VALID(other) node_pointer p_other = other.m_p_root; - while (p_other != 0) { node_pointer p_next = p_other->m_p_next_sibling; - make_root_and_link(p_other); - p_other = p_next; } - base_type::m_size += other.m_size; - other.m_p_root = 0; other.m_size = 0; other.m_p_max = 0; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp index 9741ef9cf1c..fb30eb1b774 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp @@ -34,112 +34,79 @@ // warranty. /** - * @file thin_heap_.hpp + * @file thin_heap_/thin_heap_.hpp * Contains an implementation class for a thin heap. */ #ifndef PB_DS_THIN_HEAP_HPP #define PB_DS_THIN_HEAP_HPP -/* - * Thin heaps. - * Tarjan and Kaplan. - */ - #include #include #include #include -#include #include namespace __gnu_pbds { namespace detail { - #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ - thin_heap_ + thin_heap #ifdef _GLIBCXX_DEBUG -#define PB_DS_BASE_C_DEC \ - left_child_next_sibling_heap_ -#else -#define PB_DS_BASE_C_DEC \ - left_child_next_sibling_heap_ -#endif +#define PB_DS_BASE_T_P \ + +#else +#define PB_DS_BASE_T_P \ + +#endif /** - * class description = "t|-|i|\| h34p"> - **/ - template - class thin_heap_ : public PB_DS_BASE_C_DEC + * Thin heap. + * Base class for @ref priority_queue. + * + * See Tarjan and Kaplan. + */ + template + class thin_heap + : public left_child_next_sibling_heap PB_DS_BASE_T_P { - private: - typedef PB_DS_BASE_C_DEC base_type; + typedef typename _Alloc::template rebind::other __rebind_a; + typedef left_child_next_sibling_heap PB_DS_BASE_T_P base_type; protected: - typedef typename base_type::node node; - - typedef typename base_type::node_pointer node_pointer; - - typedef typename base_type::const_node_pointer const_node_pointer; + typedef typename base_type::node node; + typedef typename base_type::node_pointer node_pointer; + typedef typename base_type::node_const_pointer node_const_pointer; public: + typedef Value_Type value_type; + typedef Cmp_Fn cmp_fn; + typedef _Alloc allocator_type; + typedef typename _Alloc::size_type size_type; + typedef typename _Alloc::difference_type difference_type; - typedef typename Allocator::size_type size_type; + typedef typename __rebind_a::pointer pointer; + typedef typename __rebind_a::const_pointer const_pointer; + typedef typename __rebind_a::reference reference; + typedef typename __rebind_a::const_reference const_reference; - typedef typename Allocator::difference_type difference_type; + typedef typename base_type::point_iterator point_iterator; + typedef typename base_type::point_const_iterator point_const_iterator; + typedef typename base_type::iterator iterator; + typedef typename base_type::const_iterator const_iterator; - typedef Value_Type value_type; - - typedef - typename Allocator::template rebind< - value_type>::other::pointer - pointer; - - typedef - typename Allocator::template rebind< - value_type>::other::const_pointer - const_pointer; - - typedef - typename Allocator::template rebind< - value_type>::other::reference - reference; - - typedef - typename Allocator::template rebind< - value_type>::other::const_reference - const_reference; - - typedef - typename PB_DS_BASE_C_DEC::const_point_iterator - const_point_iterator; - - typedef typename PB_DS_BASE_C_DEC::point_iterator point_iterator; - - typedef typename PB_DS_BASE_C_DEC::const_iterator const_iterator; - - typedef typename PB_DS_BASE_C_DEC::iterator iterator; - - typedef Cmp_Fn cmp_fn; - - typedef Allocator allocator_type; - - public: inline point_iterator - push(const_reference r_val); + push(const_reference); void - modify(point_iterator it, const_reference r_new_val); + modify(point_iterator, const_reference); inline const_reference top() const; @@ -148,51 +115,50 @@ namespace __gnu_pbds pop(); void - erase(point_iterator it); + erase(point_iterator); inline void clear(); template size_type - erase_if(Pred pred); + erase_if(Pred); template void - split(Pred pred, PB_DS_CLASS_C_DEC& other); + split(Pred, PB_DS_CLASS_C_DEC&); void - join(PB_DS_CLASS_C_DEC& other); + join(PB_DS_CLASS_C_DEC&); protected: + thin_heap(); - thin_heap_(); + thin_heap(const Cmp_Fn&); - thin_heap_(const Cmp_Fn& r_cmp_fn); - - thin_heap_(const PB_DS_CLASS_C_DEC& other); + thin_heap(const PB_DS_CLASS_C_DEC&); void - swap(PB_DS_CLASS_C_DEC& other); + swap(PB_DS_CLASS_C_DEC&); - ~thin_heap_(); + ~thin_heap(); template void - copy_from_range(It first_it, It last_it); + copy_from_range(It, It); #ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; + assert_valid(const char*, int) const; void - assert_max(const char* file, int line) const; -#endif + assert_max(const char*, int) const; +#endif #ifdef PB_DS_THIN_HEAP_TRACE_ void trace() const; -#endif +#endif private: enum @@ -200,40 +166,38 @@ namespace __gnu_pbds max_rank = (sizeof(size_type) << 4) + 2 }; - private: - void initialize(); inline void - update_max(node_pointer p_nd); + update_max(node_pointer); inline void - fix(node_pointer p_nd); + fix(node_pointer); inline void - fix_root(node_pointer p_y); + fix_root(node_pointer); inline void - fix_sibling_rank_1_unmarked(node_pointer p_y); + fix_sibling_rank_1_unmarked(node_pointer); inline void - fix_sibling_rank_1_marked(node_pointer p_y); + fix_sibling_rank_1_marked(node_pointer); inline void - fix_sibling_general_unmarked(node_pointer p_y); + fix_sibling_general_unmarked(node_pointer); inline void - fix_sibling_general_marked(node_pointer p_y); + fix_sibling_general_marked(node_pointer); inline void - fix_child(node_pointer p_y); + fix_child(node_pointer); inline static void - make_root(node_pointer p_nd); + make_root(node_pointer); inline void - make_root_and_link(node_pointer p_nd); + make_root_and_link(node_pointer); inline void remove_max_node(); @@ -242,7 +206,7 @@ namespace __gnu_pbds to_aux_except_max(); inline void - add_to_aux(node_pointer p_nd); + add_to_aux(node_pointer); inline void make_from_aux(); @@ -251,27 +215,24 @@ namespace __gnu_pbds rank_bound(); inline void - make_child_of(node_pointer p_nd, node_pointer p_new_parent); + make_child_of(node_pointer, node_pointer); inline void - remove_node(node_pointer p_nd); + remove_node(node_pointer); inline node_pointer - join(node_pointer p_lhs, node_pointer p_rhs) const; + join(node_pointer, node_pointer) const; #ifdef _GLIBCXX_DEBUG void - assert_node_consistent(const_node_pointer p_nd, bool root, - const char* file, int line) const; + assert_node_consistent(node_const_pointer, bool, const char*, int) const; void - assert_aux_null(const char* file, int line) const; -#endif + assert_aux_null(const char*, int) const; +#endif - private: - node_pointer m_p_max; - - node_pointer m_a_aux[max_rank]; + node_pointer m_p_max; + node_pointer m_a_aux[max_rank]; }; enum @@ -338,7 +299,7 @@ namespace __gnu_pbds _GLIBCXX_DEBUG_ONLY(assert_node_consistent(_Node, _Bool, \ __FILE__, __LINE__);) -#define PB_DS_ASSERT_AUX_NULL(X) \ +#define PB_DS_ASSERT_AUX_NULL(X) \ _GLIBCXX_DEBUG_ONLY(X.assert_aux_null(__FILE__, __LINE__);) #include @@ -353,9 +314,9 @@ namespace __gnu_pbds #undef PB_DS_ASSERT_NODE_CONSISTENT #undef PB_DS_CLASS_C_DEC #undef PB_DS_CLASS_T_DEC -#undef PB_DS_BASE_C_DEC +#undef PB_DS_BASE_T_P } // namespace detail } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp index fc309d5c1ce..63a356414d1 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file trace_fn_imps.hpp + * @file thin_heap_/trace_fn_imps.hpp * Contains an implementation class for left_child_next_sibling_heap_. */ @@ -46,9 +46,7 @@ PB_DS_CLASS_C_DEC:: trace() const { std::cerr << std::endl; - std::cerr << "m_p_max " << m_p_max << std::endl; - base_type::trace(); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp index c182886ee1d..1279b4dca49 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,83 +34,62 @@ // warranty. /** - * @file node_metadata_selector.hpp + * @file tree_policy/node_metadata_selector.hpp * Contains an implementation class for trees. */ -#ifndef PB_DS_TREE_NODE_METADATA_SELECTOR_HPP -#define PB_DS_TREE_NODE_METADATA_SELECTOR_HPP +#ifndef PB_DS_TREE_NODE_METADATA_DISPATCH_HPP +#define PB_DS_TREE_NODE_METADATA_DISPATCH_HPP -#include +#include #include namespace __gnu_pbds { namespace detail { - - template - struct tree_metadata_helper - { - typedef typename Node_Update::metadata_type type; - }; + /// Tree metadata helper. + template + struct tree_metadata_helper; template - struct tree_metadata_helper< - Node_Update, - true> - { - typedef null_node_metadata type; - }; + struct tree_metadata_helper + { + typedef typename Node_Update::metadata_type type; + }; + template + struct tree_metadata_helper + { + typedef null_type type; + }; + + /// Tree node metadata dispatch. template - class Node_Update, - class Allocator> - struct tree_node_metadata_selector + typename Cmp_Fn, + template + class Node_Update, + typename _Alloc> + struct tree_node_metadata_dispatch { private: - typedef - dumconst_node_iterator< - Key, - Data, - Allocator> - dumconst_node_it; + typedef dumnode_const_iterator __it_type; + typedef Node_Update<__it_type, __it_type, Cmp_Fn, _Alloc> __node_u; + typedef null_node_update<__it_type, __it_type, Cmp_Fn, _Alloc> __nnode_u; enum { - null_update = - is_same< - Node_Update< - dumconst_node_it, - dumconst_node_it, - Cmp_Fn, - Allocator>, - null_tree_node_update< - dumconst_node_it, - dumconst_node_it, - Cmp_Fn, - Allocator> >::value + null_update = is_same<__node_u, __nnode_u>::value }; public: - typedef - typename tree_metadata_helper< - Node_Update< - dumconst_node_it, - dumconst_node_it, - Cmp_Fn, - Allocator>, - null_update>::type - type; + typedef typename tree_metadata_helper<__node_u, null_update>::type type; }; - } // namespace detail } // namespace __gnu_pbds -#endif // #ifndef PB_DS_TREE_NODE_METADATA_SELECTOR_HPP +#endif // #ifndef PB_DS_TREE_NODE_METADATA_DISPATCH_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp deleted file mode 100644 index 006a3eb0476..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp +++ /dev/null @@ -1,50 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file null_node_update_imp.hpp - * Contains an implementation of null_node_update. - */ - -PB_DS_CLASS_T_DEC -template -inline void -PB_DS_CLASS_C_DEC:: -swap(null_tree_node_update< Const_Node_Iterator_, Node_Iterator_, Cmp_Fn_, Allocator_>& /*other*/) -{ } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp index d3b27925f7e..84397f3dffc 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file order_statistics_imp.hpp + * @file tree_policy/order_statistics_imp.hpp * Contains forward declarations for order_statistics_key */ @@ -44,95 +44,75 @@ PB_DS_CLASS_C_DEC:: find_by_order(size_type order) { node_iterator it = node_begin(); - node_iterator end_it = node_end(); while (it != end_it) { node_iterator l_it = it.get_l_child(); - - const size_type o = (l_it == end_it)? - 0 : - l_it.get_metadata(); + const size_type o = (l_it == end_it)? 0 : l_it.get_metadata(); if (order == o) - return (*it); + return *it; else if (order < o) it = l_it; else { order -= o + 1; - it = it.get_r_child(); } } - return (PB_DS_BASE_C_DEC::end_iterator()); + return base_type::end_iterator(); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_iterator PB_DS_CLASS_C_DEC:: find_by_order(size_type order) const -{ - return (const_cast(this)->find_by_order(order)); -} +{ return const_cast(this)->find_by_order(order); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: -order_of_key(const_key_reference r_key) const +order_of_key(key_const_reference r_key) const { - const_node_iterator it = node_begin(); - - const_node_iterator end_it = node_end(); - - const cmp_fn& r_cmp_fn = - const_cast(this)->get_cmp_fn(); + node_const_iterator it = node_begin(); + node_const_iterator end_it = node_end(); + const cmp_fn& r_cmp_fn = const_cast(this)->get_cmp_fn(); size_type ord = 0; - while (it != end_it) { - const_node_iterator l_it = it.get_l_child(); + node_const_iterator l_it = it.get_l_child(); if (r_cmp_fn(r_key, this->extract_key(*(*it)))) it = l_it; else if (r_cmp_fn(this->extract_key(*(*it)), r_key)) { - - ord += (l_it == end_it)? - 1 : - 1 + l_it.get_metadata(); - + ord += (l_it == end_it)? 1 : 1 + l_it.get_metadata(); it = it.get_r_child(); } else { - ord += (l_it == end_it)? - 0 : - l_it.get_metadata(); - + ord += (l_it == end_it)? 0 : l_it.get_metadata(); it = end_it; } } - - return (ord); + return ord; } PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -operator()(node_iterator node_it, const_node_iterator end_nd_it) const +operator()(node_iterator node_it, node_const_iterator end_nd_it) const { - node_iterator l_child_it = node_it.get_l_child(); - const size_type l_rank =(l_child_it == end_nd_it)? 0 : l_child_it.get_metadata(); + node_iterator l_it = node_it.get_l_child(); + const size_type l_rank = (l_it == end_nd_it) ? 0 : l_it.get_metadata(); - node_iterator r_child_it = node_it.get_r_child(); - const size_type r_rank =(r_child_it == end_nd_it)? 0 : r_child_it.get_metadata(); + node_iterator r_it = node_it.get_r_child(); + const size_type r_rank = (r_it == end_nd_it) ? 0 : r_it.get_metadata(); - const_cast(node_it.get_metadata())= - 1 + l_rank + r_rank; + const_cast(node_it.get_metadata())= 1 + l_rank + r_rank; } PB_DS_CLASS_T_DEC diff --git a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp index b8c19a587f8..cb455da42d6 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp @@ -34,39 +34,29 @@ // warranty. /** - * @file sample_tree_node_update.hpp + * @file tree_policy/sample_tree_node_update.hpp * Contains a samle node update functor. */ #ifndef PB_DS_SAMPLE_TREE_NODE_UPDATOR_HPP #define PB_DS_SAMPLE_TREE_NODE_UPDATOR_HPP -// A sample node updator. -template -class sample_tree_node_update +namespace __gnu_pbds { + /// A sample node updator. + template + class sample_tree_node_update + { + typedef std::size_t metadata_type; -public: - - // Metadata type. - typedef std::size_t metadata_type; - -protected: - - // Default constructor. - sample_tree_node_update(); - - // Updates the rank of a node through a node_iterator node_it; end_nd_it is the end node iterator. - inline void - operator()(node_iterator node_it, const_node_iterator end_nd_it) const; - -}; + // Default constructor. + sample_tree_node_update(); + // Updates the rank of a node through a node_iterator node_it; + // end_nd_it is the end node iterator. + inline void + operator()(node_iterator node_it, node_const_iterator end_nd_it) const; + }; +} #endif // #ifndef PB_DS_SAMPLE_TREE_NODE_UPDATOR_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp index e4bd6564904..78cee868043 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,7 +34,7 @@ // warranty. /** - * @file tree_trace_base.hpp + * @file detail/tree_trace_base.hpp * Contains tree-related policies. */ @@ -43,82 +43,64 @@ #ifdef PB_DS_TREE_TRACE -#include -#include +#include +#include namespace __gnu_pbds { - namespace detail { - #ifdef PB_DS_TREE_TRACE #define PB_DS_CLASS_T_DEC \ - template< \ - class Const_Node_Iterator, \ - class Node_Iterator, \ - class Cmp_Fn, \ - bool Node_Based, \ - class Allocator> + template #define PB_DS_CLASS_C_DEC \ - tree_trace_base< \ - Const_Node_Iterator, \ - Node_Iterator, \ - Cmp_Fn, \ - Node_Based, \ - Allocator> + tree_trace_base -#define PB_DS_BASE_C_DEC \ - basic_tree_policy_base< \ - Const_Node_Iterator, \ - Node_Iterator, \ - Allocator> +#define PB_DS_TRACE_BASE \ + branch_policy - template - class tree_trace_base : private PB_DS_BASE_C_DEC + /// Tracing base class. + template + class tree_trace_base : private PB_DS_TRACE_BASE { public: void trace() const; private: - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_TRACE_BASE base_type; + typedef Node_CItr node_const_iterator; + typedef typename _Alloc::size_type size_type; - typedef Const_Node_Iterator const_node_iterator; - - typedef typename Allocator::size_type size_type; - - private: void - trace_node(const_node_iterator nd_it, size_type level) const; + trace_node(node_const_iterator, size_type) const; virtual bool empty() const = 0; - virtual const_node_iterator + virtual node_const_iterator node_begin() const = 0; - virtual const_node_iterator + virtual node_const_iterator node_end() const = 0; static void - print_node_pointer(Const_Node_Iterator nd_it, integral_constant); + print_node_pointer(Node_CItr, integral_constant); static void - print_node_pointer(Const_Node_Iterator nd_it, integral_constant); + print_node_pointer(Node_CItr, integral_constant); template static void - trace_it_metadata(Const_Node_Iterator nd_it, type_to_type); + trace_it_metadata(Node_CItr, type_to_type); static void - trace_it_metadata(Const_Node_Iterator, type_to_type); + trace_it_metadata(Node_CItr, type_to_type); }; PB_DS_CLASS_T_DEC @@ -127,83 +109,71 @@ namespace __gnu_pbds trace() const { if (empty()) - return; - + return; trace_node(node_begin(), 0); } PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: - trace_node(const_node_iterator nd_it, size_type level) const + trace_node(node_const_iterator nd_it, size_type level) const { if (nd_it.get_r_child() != node_end()) - trace_node(nd_it.get_r_child(), level + 1); + trace_node(nd_it.get_r_child(), level + 1); for (size_type i = 0; i < level; ++i) - std::cerr << ' '; + std::cerr << ' '; print_node_pointer(nd_it, integral_constant()); std::cerr << base_type::extract_key(*(*nd_it)); - typedef - type_to_type< - typename const_node_iterator::metadata_type> - m_type_ind_t; + typedef type_to_type + m_type_ind_t; trace_it_metadata(nd_it, m_type_ind_t()); std::cerr << std::endl; if (nd_it.get_l_child() != node_end()) - trace_node(nd_it.get_l_child(), level + 1); + trace_node(nd_it.get_l_child(), level + 1); } PB_DS_CLASS_T_DEC template void PB_DS_CLASS_C_DEC:: - trace_it_metadata(Const_Node_Iterator nd_it, type_to_type) + trace_it_metadata(Node_CItr nd_it, type_to_type) { - std::cerr << " (" << - static_cast(nd_it.get_metadata()) << ") "; + const unsigned long ul = static_cast(nd_it.get_metadata()); + std::cerr << " (" << ul << ") "; } PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: - trace_it_metadata(Const_Node_Iterator, type_to_type) + trace_it_metadata(Node_CItr, type_to_type) { } PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: - print_node_pointer(Const_Node_Iterator nd_it, integral_constant) - { - std::cerr << nd_it.m_p_nd << " "; - } + print_node_pointer(Node_CItr nd_it, integral_constant) + { std::cerr << nd_it.m_p_nd << " "; } PB_DS_CLASS_T_DEC void PB_DS_CLASS_C_DEC:: - print_node_pointer(Const_Node_Iterator nd_it, integral_constant) - { - std::cerr <<* nd_it << " "; - } + print_node_pointer(Node_CItr nd_it, integral_constant) + { std::cerr << *nd_it << " "; } #undef PB_DS_CLASS_T_DEC - #undef PB_DS_CLASS_C_DEC - -#undef PB_DS_BASE_C_DEC - +#undef PB_DS_TRACE_BASE #endif // #ifdef PB_DS_TREE_TRACE } // namespace detail - } // namespace __gnu_pbds #endif // #ifdef PB_DS_TREE_TRACE #endif // #ifndef PB_DS_TREE_TRACE_BASE_HPP - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp index b4de31fd0ca..b20181b8aef 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,83 +34,62 @@ // warranty. /** - * @file node_metadata_selector.hpp + * @file trie_policy/node_metadata_selector.hpp * Contains an implementation class for tries. */ -#ifndef PB_DS_TRIE_NODE_METADATA_SELECTOR_HPP -#define PB_DS_TRIE_NODE_METADATA_SELECTOR_HPP +#ifndef PB_DS_TRIE_NODE_METADATA_DISPATCH_HPP +#define PB_DS_TRIE_NODE_METADATA_DISPATCH_HPP -#include +#include #include namespace __gnu_pbds { namespace detail { - - template - struct trie_metadata_helper - { - typedef typename Node_Update::metadata_type type; - }; + /// Trie metadata helper. + template + struct trie_metadata_helper; template - struct trie_metadata_helper< - Node_Update, - true> - { - typedef null_node_metadata type; - }; + struct trie_metadata_helper + { + typedef typename Node_Update::metadata_type type; + }; + template + struct trie_metadata_helper + { + typedef null_type type; + }; + + /// Trie node metadata dispatch. template - class Node_Update, - class Allocator> - struct trie_node_metadata_selector + typename Cmp_Fn, + template + class Node_Update, + typename _Alloc> + struct trie_node_metadata_dispatch { private: - typedef - dumconst_node_iterator< - Key, - Data, - Allocator> - dumconst_node_it; + typedef dumnode_const_iterator __it_type; + typedef Node_Update<__it_type, __it_type, Cmp_Fn, _Alloc> __node_u; + typedef null_node_update<__it_type, __it_type, Cmp_Fn, _Alloc> __nnode_u; enum { - null_update = - is_same< - Node_Update< - dumconst_node_it, - dumconst_node_it, - Cmp_Fn, - Allocator>, - null_trie_node_update< - dumconst_node_it, - dumconst_node_it, - Cmp_Fn, - Allocator> >::value + null_update = is_same<__node_u, __nnode_u>::value }; public: - typedef - typename trie_metadata_helper< - Node_Update< - dumconst_node_it, - dumconst_node_it, - Cmp_Fn, - Allocator>, - null_update>::type - type; + typedef typename trie_metadata_helper<__node_u, null_update>::type type; }; - } // namespace detail } // namespace __gnu_pbds -#endif // #ifndef PB_DS_TRIE_NODE_METADATA_SELECTOR_HPP +#endif // #ifndef PB_DS_TRIE_NODE_METADATA_DISPATCH_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp deleted file mode 100644 index 65245e9dc99..00000000000 --- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp +++ /dev/null @@ -1,50 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 3, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. - -// Permission to use, copy, modify, sell, and distribute this software -// is hereby granted without fee, provided that the above copyright -// notice appears in all copies, and that both that copyright notice -// and this permission notice appear in supporting documentation. None -// of the above authors, nor IBM Haifa Research Laboratories, make any -// representation about the suitability of this software for any -// purpose. It is provided "as is" without express or implied -// warranty. - -/** - * @file null_node_update_imp.hpp - * Contains an implementation of null_node_update. - */ - -PB_DS_CLASS_T_DEC -template -inline void -PB_DS_CLASS_C_DEC:: -swap(null_trie_node_update< Const_Node_Iterator_, Node_Iterator_, E_Access_Traits_, Allocator_>& /*other*/) -{ } - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp index cb8e2474121..ff9595e94a0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file order_statistics_imp.hpp + * @file trie_policy/order_statistics_imp.hpp * Contains forward declarations for order_statistics_key */ @@ -44,35 +44,31 @@ PB_DS_CLASS_C_DEC:: find_by_order(size_type order) { if (empty()) - return (end()); + return end(); ++order; - node_iterator nd_it = node_begin(); while (true) { if (order > nd_it.get_metadata()) - return (++base_type::rightmost_it(nd_it)); + return ++base_type::rightmost_it(nd_it); const size_type num_children = nd_it.num_children(); - if (num_children == 0) - return (*nd_it); + return *nd_it; for (size_type i = 0; i < num_children; ++i) - { + { node_iterator child_nd_it = nd_it.get_child(i); - if (order <= child_nd_it.get_metadata()) - { + { i = num_children; - nd_it = child_nd_it; - } + } else order -= child_nd_it.get_metadata(); - } + } } } @@ -80,81 +76,70 @@ PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_iterator PB_DS_CLASS_C_DEC:: find_by_order(size_type order) const +{ return const_cast(this)->find_by_order(order); } + +PB_DS_CLASS_T_DEC +inline typename PB_DS_CLASS_C_DEC::size_type +PB_DS_CLASS_C_DEC:: +order_of_key(key_const_reference r_key) const { - return (const_cast(this)->find_by_order(order)); + const _ATraits& r_traits = + const_cast(this)->get_access_traits(); + + return order_of_prefix(r_traits.begin(r_key), r_traits.end(r_key)); } PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: -order_of_key(const_key_reference r_key) const -{ - const E_Access_Traits& r_traits = - const_cast(this)->get_e_access_traits(); - - return (order_of_prefix( - r_traits.begin(r_key), - r_traits.end(r_key))); -} - -PB_DS_CLASS_T_DEC -inline typename PB_DS_CLASS_C_DEC::size_type -PB_DS_CLASS_C_DEC:: -order_of_prefix(typename e_access_traits::const_iterator b, typename e_access_traits::const_iterator e) const +order_of_prefix(typename access_traits::const_iterator b, + typename access_traits::const_iterator e) const { if (empty()) - return (0); + return 0; - const E_Access_Traits& r_traits = - const_cast(this)->get_e_access_traits(); - - const_node_iterator nd_it = node_begin(); - - const_node_iterator end_nd_it = node_end(); + const _ATraits& r_traits = + const_cast(this)->get_access_traits(); + node_const_iterator nd_it = node_begin(); + node_const_iterator end_nd_it = node_end(); size_type ord = 0; while (true) { const size_type num_children = nd_it.num_children(); - if (num_children == 0) - { - const_key_reference r_key = - base_type::extract_key(*(*nd_it)); - - typename e_access_traits::const_iterator key_b = + { + key_const_reference r_key = base_type::extract_key(*(*nd_it)); + typename access_traits::const_iterator key_b = r_traits.begin(r_key); - typename e_access_traits::const_iterator key_e = + typename access_traits::const_iterator key_e = r_traits.end(r_key); - return ((base_type::less( key_b, key_e, b, e, r_traits))? - ord + 1 : - ord); - } - - const_node_iterator next_nd_it = end_nd_it; + return (base_type::less(key_b, key_e, b, e, r_traits)) ? + ord + 1 : ord; + } + node_const_iterator next_nd_it = end_nd_it; size_type i = num_children - 1; do - { - const_node_iterator child_nd_it = nd_it.get_child(i); + { + node_const_iterator child_nd_it = nd_it.get_child(i); if (next_nd_it != end_nd_it) ord += child_nd_it.get_metadata(); - else if (!base_type::less( - b, e, + else if (!base_type::less(b, e, child_nd_it.valid_prefix().first, child_nd_it.valid_prefix().second, r_traits)) next_nd_it = child_nd_it; - } + } while (i-- > 0); if (next_nd_it == end_nd_it) - return (ord); + return ord; nd_it = next_nd_it; } @@ -163,19 +148,13 @@ order_of_prefix(typename e_access_traits::const_iterator b, typename e_access_tr PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -operator()(node_iterator nd_it, const_node_iterator /*end_nd_it*/) const +operator()(node_iterator nd_it, node_const_iterator /*end_nd_it*/) const { const size_type num_children = nd_it.num_children(); - size_type children_rank = 0; - for (size_type i = 0; i < num_children; ++i) children_rank += nd_it.get_child(i).get_metadata(); - const_cast(nd_it.get_metadata()) =(num_children == 0)? 1 : children_rank; + const size_type res = (num_children == 0) ? 1 : children_rank; + const_cast(nd_it.get_metadata()) = res; } - -PB_DS_CLASS_T_DEC -PB_DS_CLASS_C_DEC:: -~trie_order_statistics_node_update() -{ } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp index ff2799e3e95..04771dd725e 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file prefix_search_node_update_imp.hpp + * @file trie_policy/prefix_search_node_update_imp.hpp * Contains an implementation of prefix_search_node_update. */ @@ -43,13 +43,10 @@ std::pair< typename PB_DS_CLASS_C_DEC::const_iterator, typename PB_DS_CLASS_C_DEC::const_iterator> PB_DS_CLASS_C_DEC:: -prefix_range(const_key_reference r_key) const +prefix_range(key_const_reference r_key) const { - const e_access_traits& r_traits = get_e_access_traits(); - - return (prefix_range( - r_traits.begin(r_key), - r_traits.end(r_key))); + const access_traits& r_traits = get_access_traits(); + return (prefix_range(r_traits.begin(r_key), r_traits.end(r_key))); } PB_DS_CLASS_T_DEC @@ -57,11 +54,10 @@ std::pair< typename PB_DS_CLASS_C_DEC::iterator, typename PB_DS_CLASS_C_DEC::iterator> PB_DS_CLASS_C_DEC:: -prefix_range(const_key_reference r_key) +prefix_range(key_const_reference r_key) { - return (prefix_range( - get_e_access_traits().begin(r_key), - get_e_access_traits().end(r_key))); + return (prefix_range(get_access_traits().begin(r_key), + get_access_traits().end(r_key))); } PB_DS_CLASS_T_DEC @@ -69,13 +65,13 @@ std::pair< typename PB_DS_CLASS_C_DEC::const_iterator, typename PB_DS_CLASS_C_DEC::const_iterator> PB_DS_CLASS_C_DEC:: -prefix_range(typename e_access_traits::const_iterator b, typename e_access_traits::const_iterator e) const +prefix_range(typename access_traits::const_iterator b, + typename access_traits::const_iterator e) const { const std::pair non_const_ret = const_cast(this)->prefix_range(b, e); - return (std::make_pair( - const_iterator(non_const_ret.first), + return (std::make_pair(const_iterator(non_const_ret.first), const_iterator(non_const_ret.second))); } @@ -84,14 +80,13 @@ std::pair< typename PB_DS_CLASS_C_DEC::iterator, typename PB_DS_CLASS_C_DEC::iterator> PB_DS_CLASS_C_DEC:: -prefix_range(typename e_access_traits::const_iterator b, typename e_access_traits::const_iterator e) +prefix_range(typename access_traits::const_iterator b, + typename access_traits::const_iterator e) { - Node_Iterator nd_it = node_begin(); - Node_Iterator end_nd_it = node_end(); - - const e_access_traits& r_traits = - get_e_access_traits(); + Node_Itr nd_it = node_begin(); + Node_Itr end_nd_it = node_end(); + const access_traits& r_traits = get_access_traits(); const size_type given_range_length = std::distance(b, e); while (true) @@ -100,17 +95,14 @@ prefix_range(typename e_access_traits::const_iterator b, typename e_access_trait return (std::make_pair(end(), end())); const size_type common_range_length = - PB_DS_BASE_C_DEC::common_prefix_len(nd_it, b, e, r_traits); + base_type::common_prefix_len(nd_it, b, e, r_traits); if (common_range_length >= given_range_length) - { + { iterator ret_b = this->leftmost_it(nd_it); - iterator ret_e = this->rightmost_it(nd_it); - return (std::make_pair(ret_b, ++ret_e)); - } - + } nd_it = next_child(nd_it, b, e, end_nd_it, r_traits); } } @@ -118,34 +110,30 @@ prefix_range(typename e_access_traits::const_iterator b, typename e_access_trait PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::node_iterator PB_DS_CLASS_C_DEC:: -next_child(node_iterator nd_it, typename e_access_traits::const_iterator b, typename e_access_traits::const_iterator e, node_iterator end_nd_it, const e_access_traits& r_traits) +next_child(node_iterator nd_it, typename access_traits::const_iterator b, + typename access_traits::const_iterator e, node_iterator end_nd_it, + const access_traits& r_traits) { const size_type num_children = nd_it.num_children(); - node_iterator ret = end_nd_it; - size_type max_length = 0; - for (size_type i = 0; i < num_children; ++i) { node_iterator pot = nd_it.get_child(i); - const size_type common_range_length = - PB_DS_BASE_C_DEC::common_prefix_len( pot, b, e, r_traits); + base_type::common_prefix_len(pot, b, e, r_traits); if (common_range_length > max_length) - { + { ret = pot; - max_length = common_range_length; - } + } } - return (ret); } PB_DS_CLASS_T_DEC inline void PB_DS_CLASS_C_DEC:: -operator()(node_iterator /*nd_it*/, const_node_iterator /*end_nd_it*/) const +operator()(node_iterator /*nd_it*/, node_const_iterator /*end_nd_it*/) const { } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp similarity index 67% rename from libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp rename to libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp index 2ecad89c9a7..59edfbb5760 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp @@ -34,56 +34,44 @@ // warranty. /** - * @file sample_trie_e_access_traits.hpp + * @file trie_policy/sample_trie_access_traits.hpp * Contains a sample probe policy. */ #ifndef PB_DS_SAMPLE_TRIE_E_ACCESS_TRAITS_HPP #define PB_DS_SAMPLE_TRIE_E_ACCESS_TRAITS_HPP -// A sample trie element-access traits. -class sample_trie_e_access_traits +namespace __gnu_pbds { + /// A sample trie element access traits. + struct sample_trie_access_traits + { + typedef std::size_t size_type; + typedef std::string key_type; -public: + typedef typename _Alloc::template rebind __rebind_k; + typedef typename __rebind_k::other::const_reference key_const_reference; + typedef std::string::const_iterator const_iterator; - // Size type. - typedef std::size_t size_type; + // Element type. + typedef char e_type; - // Key type. - typedef std::string key_type; + enum + { + max_size = 4 + }; - // Const key reference type. - typedef - typename Allocator::template rebind< - key_type>::other::const_reference - const_key_reference; + // Returns a const_iterator to the first element of r_key. + inline static const_iterator + begin(key_const_reference); - // Element const iterator type. - typedef std::string::const_iterator const_iterator; - - // Element type. - typedef char e_type; - - enum - { - max_size = 4 - }; - -public: - - // Returns a const_iterator to the first element of r_key. - inline static const_iterator - begin(const_key_reference r_key); - - // Returns a const_iterator to the after-last element of r_key. - inline static const_iterator - end(const_key_reference r_key); - - // Maps an element to a position. - inline static size_type - e_pos(e_type e); - -}; + // Returns a const_iterator to the after-last element of r_key. + inline static const_iterator + end(key_const_reference); + // Maps an element to a position. + inline static size_type + e_pos(e_type); + }; +} #endif // #ifndef PB_DS_SAMPLE_TRIE_E_ACCESS_TRAITS_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp index 8b2c6b591f7..6c97aee052a 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp @@ -34,39 +34,31 @@ // warranty. /** - * @file sample_trie_node_update.hpp + * @file trie_policy/sample_trie_node_update.hpp * Contains a samle node update functor. */ #ifndef PB_DS_SAMPLE_TRIE_NODE_UPDATOR_HPP #define PB_DS_SAMPLE_TRIE_NODE_UPDATOR_HPP -// A sample node updator. -template -class sample_trie_node_update +namespace __gnu_pbds { + /// A sample node updator. + template + class sample_trie_node_update + { + public: + typedef std::size_t metadata_type; -public: - - // Metadata type. - typedef std::size_t metadata_type; - -protected: - - // Default constructor. - sample_trie_node_update(); - - // Updates the rank of a node through a node_iterator node_it; end_nd_it is the end node iterator. - inline void - operator()(node_iterator node_it, const_node_iterator end_nd_it) const; - -}; + protected: + // Default constructor. + sample_trie_node_update(); + // Updates the rank of a node through a node_iterator node_it; + // end_nd_it is the end node iterator. + inline void + operator()(node_iterator, node_const_iterator) const; + }; +} #endif // #ifndef PB_DS_SAMPLE_TRIE_NODE_UPDATOR_HPP diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp index db912a008fa..2668a87d922 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp @@ -34,157 +34,121 @@ // warranty. /** - * @file trie_policy_base.hpp + * @file trie_policy/trie_policy_base.hpp * Contains an implementation of trie_policy_base. */ #ifndef PB_DS_TRIE_POLICY_BASE_HPP #define PB_DS_TRIE_POLICY_BASE_HPP -#include +#include namespace __gnu_pbds { namespace detail { - -#define PB_DS_CLASS_T_DEC \ - template< \ - class Const_Node_Iterator, \ - class Node_Iterator, \ - class E_Access_Traits, \ - typename Allocator> - -#define PB_DS_CLASS_C_DEC \ - trie_policy_base< \ - Const_Node_Iterator, \ - Node_Iterator, \ - E_Access_Traits, \ - Allocator> - -#define PB_DS_BASE_C_DEC \ - basic_tree_policy_base< \ - Const_Node_Iterator, \ - Node_Iterator, \ - Allocator> - - template - class trie_policy_base : public PB_DS_BASE_C_DEC + /// Base class for trie policies. + template + class trie_policy_base + : public branch_policy { + typedef branch_policy base_type; public: - - typedef E_Access_Traits e_access_traits; - - typedef Allocator allocator_type; - - typedef typename allocator_type::size_type size_type; - - typedef null_node_metadata metadata_type; - - typedef Const_Node_Iterator const_node_iterator; - - typedef Node_Iterator node_iterator; - - typedef typename const_node_iterator::value_type const_iterator; - - typedef typename node_iterator::value_type iterator; - - public: - - typedef typename PB_DS_BASE_C_DEC::key_type key_type; - - typedef - typename PB_DS_BASE_C_DEC::const_key_reference - const_key_reference; + typedef _ATraits access_traits; + typedef _Alloc allocator_type; + typedef typename allocator_type::size_type size_type; + typedef null_type metadata_type; + typedef Node_CItr node_const_iterator; + typedef Node_Itr node_iterator; + typedef typename node_const_iterator::value_type const_iterator; + typedef typename node_iterator::value_type iterator; + typedef typename base_type::key_type key_type; + typedef typename base_type::key_const_reference key_const_reference; protected: - virtual const_iterator end() const = 0; virtual iterator end() = 0; - virtual const_node_iterator + virtual node_const_iterator node_begin() const = 0; virtual node_iterator node_begin() = 0; - virtual const_node_iterator + virtual node_const_iterator node_end() const = 0; virtual node_iterator node_end() = 0; - virtual const e_access_traits& - get_e_access_traits() const = 0; + virtual const access_traits& + get_access_traits() const = 0; private: - typedef - std::pair< - typename e_access_traits::const_iterator, - typename e_access_traits::const_iterator> - prefix_range_t; - - typedef PB_DS_BASE_C_DEC base_type; + typedef typename access_traits::const_iterator e_const_iterator; + typedef std::pair prefix_range_t; protected: static size_type - common_prefix_len(node_iterator nd_it, typename e_access_traits::const_iterator b_r, typename e_access_traits::const_iterator e_r, const e_access_traits& r_traits); + common_prefix_len(node_iterator, e_const_iterator, + e_const_iterator, const access_traits&); static iterator - leftmost_it(node_iterator nd_it); + leftmost_it(node_iterator); static iterator - rightmost_it(node_iterator nd_it); + rightmost_it(node_iterator); static bool - less(typename e_access_traits::const_iterator b_l, typename e_access_traits::const_iterator e_l, typename e_access_traits::const_iterator b_r, typename e_access_traits::const_iterator e_r, const e_access_traits& r_traits); + less(e_const_iterator, e_const_iterator, e_const_iterator, + e_const_iterator, const access_traits&); }; + +#define PB_DS_CLASS_T_DEC \ + template + +#define PB_DS_CLASS_C_DEC \ + trie_policy_base + PB_DS_CLASS_T_DEC typename PB_DS_CLASS_C_DEC::size_type PB_DS_CLASS_C_DEC:: - common_prefix_len(node_iterator nd_it, typename e_access_traits::const_iterator b_r, typename e_access_traits::const_iterator e_r, const e_access_traits& r_traits) + common_prefix_len(node_iterator nd_it, e_const_iterator b_r, + e_const_iterator e_r, const access_traits& r_traits) { prefix_range_t pref_range = nd_it.valid_prefix(); - typename e_access_traits::const_iterator b_l = pref_range.first; - typename e_access_traits::const_iterator e_l = pref_range.second; + e_const_iterator b_l = pref_range.first; + e_const_iterator e_l = pref_range.second; - const size_type range_length_l = - std::distance(b_l, e_l); - - const size_type range_length_r = - std::distance(b_r, e_r); + const size_type range_length_l = std::distance(b_l, e_l); + const size_type range_length_r = std::distance(b_r, e_r); if (range_length_r < range_length_l) { std::swap(b_l, b_r); - std::swap(e_l, e_r); } size_type ret = 0; - while (b_l != e_l) { if (r_traits.e_pos(*b_l) != r_traits.e_pos(*b_r)) - return (ret); + return ret; ++ret; - ++b_l; - ++b_r; } - return (ret); + return ret; } PB_DS_CLASS_T_DEC @@ -193,9 +157,9 @@ namespace __gnu_pbds leftmost_it(node_iterator nd_it) { if (nd_it.num_children() == 0) - return (*nd_it); + return *nd_it; - return (leftmost_it(nd_it.get_child(0))); + return leftmost_it(nd_it.get_child(0)); } PB_DS_CLASS_T_DEC @@ -206,44 +170,38 @@ namespace __gnu_pbds const size_type num_children = nd_it.num_children(); if (num_children == 0) - return (*nd_it); + return *nd_it; - return (rightmost_it(nd_it.get_child(num_children - 1))); + return rightmost_it(nd_it.get_child(num_children - 1)); } PB_DS_CLASS_T_DEC bool PB_DS_CLASS_C_DEC:: - less(typename e_access_traits::const_iterator b_l, typename e_access_traits::const_iterator e_l, typename e_access_traits::const_iterator b_r, typename e_access_traits::const_iterator e_r, const e_access_traits& r_traits) + less(e_const_iterator b_l, e_const_iterator e_l, + e_const_iterator b_r, e_const_iterator e_r, + const access_traits& r_traits) { while (b_l != e_l) { if (b_r == e_r) - return (false); - - size_type l_pos = - r_traits.e_pos(*b_l); - size_type r_pos = - r_traits.e_pos(*b_r); + return false; + size_type l_pos = r_traits.e_pos(*b_l); + size_type r_pos = r_traits.e_pos(*b_r); if (l_pos != r_pos) return (l_pos < r_pos); ++b_l; ++b_r; } - - return (b_r != e_r); + return b_r != e_r; } #undef PB_DS_CLASS_T_DEC - #undef PB_DS_CLASS_C_DEC -#undef PB_DS_BASE_C_DEC - } // namespace detail } // namespace __gnu_pbds #endif // #ifndef PB_DS_TRIE_POLICY_BASE_HPP - diff --git a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp similarity index 88% rename from libstdc++-v3/include/ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp rename to libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp index 228a4a5dc32..c6d9c490136 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file string_trie_e_access_traits_imp.hpp + * @file trie_policy/trie_string_access_traits_imp.hpp * Contains a policy for extracting character positions from * a string for a vector-based PATRICIA tree */ @@ -53,7 +53,7 @@ e_pos(e_type e) PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_iterator PB_DS_CLASS_C_DEC:: -begin(const_key_reference r_key) +begin(key_const_reference r_key) { return (begin_imp(r_key, s_rev_ind)); } @@ -61,7 +61,7 @@ begin(const_key_reference r_key) PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_iterator PB_DS_CLASS_C_DEC:: -end(const_key_reference r_key) +end(key_const_reference r_key) { return (end_imp(r_key, s_rev_ind)); } @@ -69,7 +69,7 @@ end(const_key_reference r_key) PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_iterator PB_DS_CLASS_C_DEC:: -begin_imp(const_key_reference r_key, detail::false_type) +begin_imp(key_const_reference r_key, detail::false_type) { return (r_key.begin()); } @@ -77,7 +77,7 @@ begin_imp(const_key_reference r_key, detail::false_type) PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_iterator PB_DS_CLASS_C_DEC:: -begin_imp(const_key_reference r_key, detail::true_type) +begin_imp(key_const_reference r_key, detail::true_type) { return (r_key.rbegin()); } @@ -85,7 +85,7 @@ begin_imp(const_key_reference r_key, detail::true_type) PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_iterator PB_DS_CLASS_C_DEC:: -end_imp(const_key_reference r_key, detail::false_type) +end_imp(key_const_reference r_key, detail::false_type) { return (r_key.end()); } @@ -93,7 +93,7 @@ end_imp(const_key_reference r_key, detail::false_type) PB_DS_CLASS_T_DEC inline typename PB_DS_CLASS_C_DEC::const_iterator PB_DS_CLASS_C_DEC:: -end_imp(const_key_reference r_key, detail::true_type) +end_imp(key_const_reference r_key, detail::true_type) { return (r_key.rend()); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp b/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp index 143110c0ad9..79899857b0d 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file type_utils.hpp + * @file detail/type_utils.hpp * Contains utilities for handnling types. All of these classes are based on * Modern C++ by Andrei Alxandrescu. */ diff --git a/libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp b/libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp index 6d5a0783808..50db9b2bc90 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -34,14 +34,16 @@ // warranty. /** - * @file types_traits.hpp + * @file detail/types_traits.hpp * Contains a traits class of types used by containers. */ #ifndef PB_DS_TYPES_TRAITS_HPP #define PB_DS_TYPES_TRAITS_HPP -#include +#include +#include +#include #include #include @@ -49,34 +51,238 @@ namespace __gnu_pbds { namespace detail { - template - struct vt_base_selector - { - typedef value_type_base type; - }; - - template - struct types_traits - : public vt_base_selector::type - { - typedef typename Alloc::template rebind::other key_allocator; - typedef typename key_allocator::value_type key_type; - typedef typename key_allocator::pointer key_pointer; - typedef typename key_allocator::const_pointer const_key_pointer; - typedef typename key_allocator::reference key_reference; - typedef typename key_allocator::const_reference const_key_reference; - typedef typename Alloc::size_type size_type; - - // Extra value (used when the extra value is stored with each value). - typedef std::pair comp_hash; - - typedef integral_constant store_extra; - store_extra m_store_extra_indicator; - - typedef typename no_throw_copies::indicator no_throw_copies; - no_throw_copies m_no_throw_copies_indicator; + /// Primary template. + template + struct no_throw_copies + { + static const bool __simple = is_simple::value + && is_simple::value; + typedef integral_constant indicator; + }; + + /// Specialization. + template + struct no_throw_copies + { + typedef integral_constant::value> indicator; + }; + + + //@{ + /** + * Data properties computation. + */ + + /// Stored value. + template + struct stored_value + { + typedef _Tv value_type; + value_type m_value; + }; + + /// Stored hash. + template + struct stored_hash + { + typedef _Th hash_type; + hash_type m_hash; + }; + + /// Primary template for representation of stored data. + /// Two types of data can be stored: value and hash. + template + struct stored_data + : public stored_value<_Tv>, public stored_hash<_Th> + { }; + + /// Specialization for representation of stored data of just value type. + template + struct stored_data<_Tv, null_type> + : public stored_value<_Tv> + { }; + + /// Primary template. + template + struct type_base; + + /** + * Specialization of type_base for the case where the hash value + * is not stored alongside each value. + */ + template + struct type_base + { + public: + typedef typename _Alloc::size_type size_type; + + private: + typedef typename _Alloc::template rebind __rebind_m; + typedef typename __rebind_m::other __rebind_ma; + typedef std::pair __value_type; + typedef typename _Alloc::template rebind<__value_type> __rebind_v; + typedef typename __rebind_v::other __rebind_va; + + public: + typedef typename __rebind_ma::value_type mapped_type; + typedef typename __rebind_ma::pointer mapped_pointer; + typedef typename __rebind_ma::const_pointer mapped_const_pointer; + typedef typename __rebind_ma::reference mapped_reference; + typedef typename __rebind_ma::const_reference mapped_const_reference; + + typedef typename __rebind_va::value_type value_type; + typedef typename __rebind_va::pointer pointer; + typedef typename __rebind_va::const_pointer const_pointer; + typedef typename __rebind_va::reference reference; + typedef typename __rebind_va::const_reference const_reference; + + typedef stored_data stored_data_type; + }; + + /** + * Specialization of type_base for the case where the hash value + * is stored alongside each value. + */ + template + struct type_base + { + public: + typedef typename _Alloc::size_type size_type; + + private: + typedef typename _Alloc::template rebind __rebind_m; + typedef typename __rebind_m::other __rebind_ma; + typedef std::pair __value_type; + typedef typename _Alloc::template rebind<__value_type> __rebind_v; + typedef typename __rebind_v::other __rebind_va; + + public: + typedef typename __rebind_ma::value_type mapped_type; + typedef typename __rebind_ma::pointer mapped_pointer; + typedef typename __rebind_ma::const_pointer mapped_const_pointer; + typedef typename __rebind_ma::reference mapped_reference; + typedef typename __rebind_ma::const_reference mapped_const_reference; + + typedef typename __rebind_va::value_type value_type; + typedef typename __rebind_va::pointer pointer; + typedef typename __rebind_va::const_pointer const_pointer; + typedef typename __rebind_va::reference reference; + typedef typename __rebind_va::const_reference const_reference; + + typedef stored_data stored_data_type; + }; + + + /** + * Specialization of type_base for the case where the hash value + * is not stored alongside each value. + */ + template + struct type_base + { + public: + typedef typename _Alloc::size_type size_type; + typedef Key value_type; + + private: + typedef typename _Alloc::template rebind __rebind_m; + typedef typename __rebind_m::other __rebind_ma; + typedef typename _Alloc::template rebind __rebind_v; + typedef typename __rebind_v::other __rebind_va; + + public: + typedef typename __rebind_ma::value_type mapped_type; + typedef typename __rebind_ma::pointer mapped_pointer; + typedef typename __rebind_ma::const_pointer mapped_const_pointer; + typedef typename __rebind_ma::reference mapped_reference; + typedef typename __rebind_ma::const_reference mapped_const_reference; + + typedef typename __rebind_va::pointer pointer; + typedef typename __rebind_va::const_pointer const_pointer; + typedef typename __rebind_va::reference reference; + typedef typename __rebind_va::const_reference const_reference; + + typedef stored_data stored_data_type; + + static null_type s_null_type; + }; + + template + null_type + type_base::s_null_type; + + + /** + * Specialization of type_base for the case where the hash value + * is stored alongside each value. + */ + template + struct type_base + { + public: + typedef typename _Alloc::size_type size_type; + typedef Key value_type; + + private: + typedef typename _Alloc::template rebind __rebind_m; + typedef typename __rebind_m::other __rebind_ma; + typedef typename _Alloc::template rebind __rebind_v; + typedef typename __rebind_v::other __rebind_va; + + public: + typedef typename __rebind_ma::value_type mapped_type; + typedef typename __rebind_ma::pointer mapped_pointer; + typedef typename __rebind_ma::const_pointer mapped_const_pointer; + typedef typename __rebind_ma::reference mapped_reference; + typedef typename __rebind_ma::const_reference mapped_const_reference; + + typedef typename __rebind_va::pointer pointer; + typedef typename __rebind_va::const_pointer const_pointer; + typedef typename __rebind_va::reference reference; + typedef typename __rebind_va::const_reference const_reference; + + typedef stored_data stored_data_type; + + static null_type s_null_type; + }; + + template + null_type + type_base::s_null_type; + + + /// Type base dispatch. + template + struct type_dispatch + { + typedef type_base type; + }; + + /// Traits for abstract types. + template + struct types_traits + : public type_dispatch::type + { + private: + typedef no_throw_copies __nothrowcopy; + typedef typename _Alloc::template rebind::other __rebind_a; + + public: + typedef typename _Alloc::size_type size_type; + typedef typename __rebind_a::value_type key_type; + typedef typename __rebind_a::pointer key_pointer; + typedef typename __rebind_a::const_pointer key_const_pointer; + typedef typename __rebind_a::reference key_reference; + typedef typename __rebind_a::const_reference key_const_reference; + typedef std::pair comp_hash; + typedef integral_constant store_extra; + typedef typename __nothrowcopy::indicator no_throw_indicator; + + store_extra m_store_extra_indicator; + no_throw_indicator m_no_throw_copies_indicator; }; + //@} } // namespace detail } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp index 1641792b5fe..d1221413c66 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp @@ -34,14 +34,14 @@ // warranty. /** - * @file const_iterator.hpp + * @file unordered_iterator/const_iterator.hpp * Contains an iterator class used for const ranging over the elements of the - * table. + * table. */ // Const range-type iterator. class const_iterator_ : - public const_point_iterator_ + public point_const_iterator_ { @@ -51,7 +51,7 @@ public: typedef std::forward_iterator_tag iterator_category; // Difference type. - typedef typename Allocator::difference_type difference_type; + typedef typename _Alloc::difference_type difference_type; // Iterator's value type. typedef value_type_ value_type; @@ -99,7 +99,7 @@ public: protected: - typedef const_point_iterator_ base_type; + typedef point_const_iterator_ base_type; protected: @@ -109,7 +109,7 @@ protected: * of a table. * */ inline - const_iterator_(const_pointer_ p_value, PB_DS_GEN_POS pos, const PB_DS_CLASS_C_DEC* p_tbl) : const_point_iterator_(p_value), + const_iterator_(const_pointer_ p_value, PB_DS_GEN_POS pos, const PB_DS_CLASS_C_DEC* p_tbl) : point_const_iterator_(p_value), m_p_tbl(p_tbl), m_pos(pos) { } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp index 1aaa6824a83..52b90a511e0 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp @@ -51,7 +51,7 @@ public: typedef std::forward_iterator_tag iterator_category; // Difference type. - typedef typename Allocator::difference_type difference_type; + typedef typename _Alloc::difference_type difference_type; // Iterator's value type. typedef value_type_ value_type; diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp similarity index 89% rename from libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp rename to libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp index 1cda69bb834..257067a8952 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp @@ -34,7 +34,7 @@ // warranty. /** - * @file const_point_iterator.hpp + * @file unordered_iterator/point_const_iterator.hpp * Contains an iterator class returned by the tables' const find and insert * methods. */ @@ -42,7 +42,7 @@ class point_iterator_; // Const point-type iterator. -class const_point_iterator_ +class point_const_iterator_ { public: @@ -71,26 +71,26 @@ public: public: inline - const_point_iterator_(const_pointer p_value) : m_p_value(p_value) + point_const_iterator_(const_pointer p_value) : m_p_value(p_value) { } // Default constructor. inline - const_point_iterator_() + point_const_iterator_() : m_p_value(0) { } // Copy constructor. inline - const_point_iterator_(const const_point_iterator_& other) + point_const_iterator_(const point_const_iterator_& other) : m_p_value(other.m_p_value) { } // Copy constructor. inline - const_point_iterator_(const point_iterator_& other) + point_const_iterator_(const point_iterator_& other) : m_p_value(other.m_p_value) { } @@ -122,7 +122,7 @@ public: // Compares content to a different iterator object. inline bool - operator==(const const_point_iterator_& other) const + operator==(const point_const_iterator_& other) const { return (m_p_value == other.m_p_value); } @@ -136,7 +136,7 @@ public: // Compares content (negatively) to a different iterator object. inline bool - operator!=(const const_point_iterator_& other) const + operator!=(const point_const_iterator_& other) const { return (m_p_value != other.m_p_value); } diff --git a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp index e17a5bf1728..f74f03d7a48 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp @@ -109,7 +109,7 @@ public: // Compares content to a different iterator object. inline bool - operator==(const const_point_iterator_& other) const + operator==(const point_const_iterator_& other) const { return (m_p_value == other.m_p_value); } @@ -123,7 +123,7 @@ public: // Compares content (negatively) to a different iterator object. inline bool - operator!=(const const_point_iterator_& other) const + operator!=(const point_const_iterator_& other) const { return (m_p_value != other.m_p_value); } @@ -133,7 +133,7 @@ public: { } protected: - friend class const_point_iterator_; + friend class point_const_iterator_; friend class PB_DS_CLASS_C_DEC; diff --git a/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp b/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp index cefa3a10c22..1fa93035109 100644 --- a/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp +++ b/libstdc++-v3/include/ext/pb_ds/hash_policy.hpp @@ -53,20 +53,10 @@ namespace __gnu_pbds { - // A null hash function, indicating that the combining hash function - // is actually a ranged hash function. - struct null_hash_fn - { }; - - // A null probe function, indicating that the combining probe - // function is actually a ranged probe function. - struct null_probe_fn - { }; - #define PB_DS_CLASS_T_DEC template #define PB_DS_CLASS_C_DEC linear_probe_fn - // A probe sequence policy using fixed increments. + /// A probe sequence policy using fixed increments. template class linear_probe_fn { @@ -90,7 +80,7 @@ namespace __gnu_pbds #define PB_DS_CLASS_T_DEC template #define PB_DS_CLASS_C_DEC quadratic_probe_fn - // A probe sequence policy using square increments. + /// A probe sequence policy using square increments. template class quadratic_probe_fn { @@ -114,7 +104,7 @@ namespace __gnu_pbds #define PB_DS_CLASS_T_DEC template #define PB_DS_CLASS_C_DEC direct_mask_range_hashing - // A mask range-hashing class (uses a bit-mask). + /// A mask range-hashing class (uses a bit-mask). template class direct_mask_range_hashing : public detail::mask_based_range_hashing @@ -146,7 +136,7 @@ namespace __gnu_pbds #define PB_DS_CLASS_T_DEC template #define PB_DS_CLASS_C_DEC direct_mod_range_hashing - // A mod range-hashing class (uses the modulo function). + /// A mod range-hashing class (uses the modulo function). template class direct_mod_range_hashing : public detail::mod_based_range_hashing @@ -179,8 +169,8 @@ namespace __gnu_pbds #define PB_DS_CLASS_C_DEC hash_load_check_resize_trigger #define PB_DS_SIZE_BASE_C_DEC detail::hash_load_check_resize_trigger_size_base - // A resize trigger policy based on a load check. It keeps the - // load factor between some load factors load_min and load_max. + /// A resize trigger policy based on a load check. It keeps the + /// load factor between some load factors load_min and load_max. template class hash_load_check_resize_trigger : private PB_DS_SIZE_BASE_C_DEC { @@ -294,8 +284,8 @@ namespace __gnu_pbds #define PB_DS_CLASS_T_DEC template #define PB_DS_CLASS_C_DEC cc_hash_max_collision_check_resize_trigger - // A resize trigger policy based on collision checks. It keeps the - // simulated load factor lower than some given load factor. + /// A resize trigger policy based on collision checks. It keeps the + /// simulated load factor lower than some given load factor. template class cc_hash_max_collision_check_resize_trigger { @@ -395,8 +385,8 @@ namespace __gnu_pbds #define PB_DS_CLASS_T_DEC template #define PB_DS_CLASS_C_DEC hash_exponential_size_policy - // A size policy whose sequence of sizes form an exponential - // sequence (typically powers of 2. + /// A size policy whose sequence of sizes form an exponential + /// sequence (typically powers of 2. template class hash_exponential_size_policy { @@ -433,8 +423,8 @@ namespace __gnu_pbds #define PB_DS_CLASS_T_DEC #define PB_DS_CLASS_C_DEC hash_prime_size_policy - // A size policy whose sequence of sizes form a nearly-exponential - // sequence of primes. + /// A size policy whose sequence of sizes form a nearly-exponential + /// sequence of primes. class hash_prime_size_policy { public: @@ -469,7 +459,7 @@ namespace __gnu_pbds #define PB_DS_CLASS_C_DEC hash_standard_resize_policy - // A resize policy which delegates operations to size and trigger policies. + /// A resize policy which delegates operations to size and trigger policies. template, typename Trigger_Policy = hash_load_check_resize_trigger<>, bool External_Size_Access = false, diff --git a/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp b/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp index 54a67c6e563..e879b8088c9 100644 --- a/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp +++ b/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2007, 2009, 2010 +// Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -44,96 +44,86 @@ #include #include -#include +#include +#include namespace __gnu_pbds { - // A null type that means that each link in a list-based container - // does not actually need metadata. - struct null_lu_metadata - { }; + /** + * A list-update policy that unconditionally moves elements to the + * front of the list. A null type means that each link in a + * list-based container does not actually need metadata. + */ + template > + class lu_move_to_front_policy + { + public: + typedef _Alloc allocator_type; -#define PB_DS_CLASS_T_DEC template -#define PB_DS_CLASS_C_DEC move_to_front_lu_policy + // Metadata on which this functor operates. + typedef null_type metadata_type; - // A list-update policy that unconditionally moves elements to the - // front of the list. - template > - class move_to_front_lu_policy - { - public: - typedef Allocator allocator_type; - - // Metadata on which this functor operates. - typedef null_lu_metadata metadata_type; - - // Reference to metadata on which this functor operates. - typedef typename allocator_type::template rebind::other metadata_rebind; - typedef typename metadata_rebind::reference metadata_reference; - - // Creates a metadata object. - metadata_type - operator()() const; - - // Decides whether a metadata object should be moved to the front - // of the list. - inline bool - operator()(metadata_reference r_metadata) const; - - private: - static null_lu_metadata s_metadata; - }; - -#include + private: + typedef typename _Alloc::template rebind __rebind_m; -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC + public: + // Reference to metadata on which this functor operates. + typedef typename __rebind_m::other::reference metadata_reference; -#define PB_DS_CLASS_T_DEC template -#define PB_DS_CLASS_C_DEC counter_lu_policy + // Creates a metadata object. + metadata_type + operator()() const + { return s_metadata; } - // A list-update policy that moves elements to the front of the list - // based on the counter algorithm. - template > - class counter_lu_policy - : private detail::counter_lu_policy_base - { - public: - typedef Allocator allocator_type; + // Decides whether a metadata object should be moved to the front + // of the list. + inline bool + operator()(metadata_reference r_metadata) const + { return true; } - enum - { - max_count = Max_Count - }; + private: + static null_type s_metadata; + }; - typedef typename allocator_type::size_type size_type; + /** + * A list-update policy that moves elements to the front of the + * list based on the counter algorithm. + */ + template > + class lu_counter_policy + : private detail::lu_counter_policy_base + { + public: + typedef _Alloc allocator_type; + typedef typename allocator_type::size_type size_type; - // Metadata on which this functor operates. - typedef detail::counter_lu_metadata metadata_type; + enum + { + max_count = Max_Count + }; - // Reference to metadata on which this functor operates. - typedef typename Allocator::template rebind::other metadata_rebind; - typedef typename metadata_rebind::reference metadata_reference; + // Metadata on which this functor operates. + typedef detail::lu_counter_metadata metadata_type; - // Creates a metadata object. - metadata_type - operator()() const; + private: + typedef detail::lu_counter_policy_base base_type; + typedef typename _Alloc::template rebind __rebind_m; - // Decides whether a metadata object should be moved to the front - // of the list. - bool - operator()(metadata_reference r_metadata) const; + public: + // Reference to metadata on which this functor operates. + typedef typename __rebind_m::other::reference metadata_reference; - private: - typedef detail::counter_lu_policy_base base_type; - }; - -#include - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC + // Creates a metadata object. + metadata_type + operator()() const + { return base_type::operator()(max_count); } + // Decides whether a metadata object should be moved to the front + // of the list. + bool + operator()(metadata_reference r_data) const + { return base_type::operator()(r_data, max_count); } + }; } // namespace __gnu_pbds #endif diff --git a/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp b/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp index b6088e7d73a..8cd7a26db6a 100644 --- a/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp +++ b/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp @@ -48,38 +48,42 @@ namespace __gnu_pbds { - // A priority queue. - template, + /** + * @brief A priority queue composed of one specific heap policy. + * @ingroup pbds + */ + template, typename Tag = pairing_heap_tag, - typename Allocator = std::allocator > - class priority_queue - : public detail::priority_queue_base_dispatch::type + typename _Alloc = std::allocator > + class priority_queue + : public detail::container_base_dispatch<_Tv, Cmp_Fn, _Alloc, Tag>::type { - private: - typedef typename - detail::priority_queue_base_dispatch::type base_type; - public: - typedef Value_Type value_type; + typedef _Tv value_type; typedef Cmp_Fn cmp_fn; typedef Tag container_category; - typedef Allocator allocator_type; + typedef _Alloc allocator_type; typedef typename allocator_type::size_type size_type; typedef typename allocator_type::difference_type difference_type; - typedef typename allocator_type::template rebind::other value_rebind; - typedef typename value_rebind::reference reference; - typedef typename value_rebind::const_reference const_reference; - typedef typename value_rebind::pointer pointer; - typedef typename value_rebind::const_pointer const_pointer; + private: + typedef typename detail::container_base_dispatch<_Tv, Cmp_Fn, _Alloc, + Tag>::type + base_type; + typedef typename _Alloc::template rebind<_Tv> __rebind_v; + typedef typename __rebind_v::other __rebind_va; + + public: + typedef typename __rebind_va::reference reference; + typedef typename __rebind_va::const_reference const_reference; + typedef typename __rebind_va::pointer pointer; + typedef typename __rebind_va::const_pointer const_pointer; - typedef typename base_type::const_point_iterator const_point_iterator; typedef typename base_type::point_iterator point_iterator; - typedef typename base_type::const_iterator const_iterator; + typedef typename base_type::point_const_iterator point_const_iterator; typedef typename base_type::iterator iterator; + typedef typename base_type::const_iterator const_iterator; priority_queue() { } @@ -109,7 +113,7 @@ namespace __gnu_pbds virtual ~priority_queue() { } - priority_queue& + priority_queue& operator=(const priority_queue& other) { if (this != &other) @@ -126,4 +130,4 @@ namespace __gnu_pbds }; } // namespace __gnu_pbds -#endif +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp b/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp index ef445336137..d5df54f5877 100644 --- a/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp +++ b/libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp @@ -1,6 +1,7 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2008, 2009, 2010, 2011 +// Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -36,7 +37,7 @@ /** * @file tag_and_trait.hpp * Contains tags and traits, e.g., ones describing underlying - * data structures. + * data structures. */ #ifndef PB_DS_TAG_AND_TRAIT_HPP @@ -51,59 +52,91 @@ */ namespace __gnu_pbds { - // A trivial iterator tag. Signifies that the iterators has none of - // the STL's movement abilities. + /** @defgroup pbds Policy-Based Data Structures + * @ingroup extensions + * + * This is a library of policy-based elementary data structures: + * associative containers and priority queues. It is designed for + * high-performance, flexibility, semantic safety, and conformance + * to the corresponding containers in std (except for some points + * where it differs by design). + * + * For details, see: + * http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html + * + * @{ + */ + + /** + * @defgroup tags Tags + * @{ + */ + /// A trivial iterator tag. Signifies that the iterators has none of + /// the STL's movement abilities. struct trivial_iterator_tag { }; - // Prohibit moving trivial iterators. + /// Prohibit moving trivial iterators. typedef void trivial_iterator_difference_type; - // Signifies a basic invalidation guarantee that any iterator, - // pointer, or reference to a container object's mapped value type - // is valid as long as the container is not modified. + /** + * @defgroup invalidation_tags Invalidation Guarantees. + * @ingroup tags + * @{ + */ + + /** + * Signifies a basic invalidation guarantee that any iterator, + * pointer, or reference to a container object's mapped value type + * is valid as long as the container is not modified. + */ struct basic_invalidation_guarantee { }; - // Signifies an invalidation guarantee that includes all those of - // its base, and additionally, that any point-type iterator, - // pointer, or reference to a container object's mapped value type - // is valid as long as its corresponding entry has not be erased, - // regardless of modifications to the container object. + /** + * Signifies an invalidation guarantee that includes all those of + * its base, and additionally, that any point-type iterator, + * pointer, or reference to a container object's mapped value type + * is valid as long as its corresponding entry has not be erased, + * regardless of modifications to the container object. + */ struct point_invalidation_guarantee : public basic_invalidation_guarantee { }; - // Signifies an invalidation guarantee that includes all those of - // its base, and additionally, that any range-type iterator - // (including the returns of begin() and end()) is in the correct - // relative positions to other range-type iterators as long as its - // corresponding entry has not be erased, regardless of - // modifications to the container object. + /** + * Signifies an invalidation guarantee that includes all those of + * its base, and additionally, that any range-type iterator + * (including the returns of begin() and end()) is in the correct + * relative positions to other range-type iterators as long as its + * corresponding entry has not be erased, regardless of + * modifications to the container object. + */ struct range_invalidation_guarantee : public point_invalidation_guarantee { }; + //@} - /// A mapped-policy indicating that an associative container is a set. - // XXX should this be a trait of the form is_set ?? - struct null_mapped_type { }; - - + /** + * @defgroup ds_tags Data Structure Tag Hierarchy. + * @ingroup tags + * @{ + */ /// Base data structure tag. struct container_tag { }; - /// Basic string container, inclusive of strings, ropes, etc. - struct string_tag : public container_tag { }; - /// Basic sequence. struct sequence_tag : public container_tag { }; - /// Basic associative-container. - struct associative_container_tag : public container_tag { }; + /// Basic string container, inclusive of strings, ropes, etc. + struct string_tag : public sequence_tag { }; - /// Basic hash. - struct basic_hash_tag : public associative_container_tag { }; + /// Basic associative-container. + struct associative_tag : public container_tag { }; + + /// Basic hash structure. + struct basic_hash_tag : public associative_tag { }; /// Collision-chaining hash. struct cc_hash_tag : public basic_hash_tag { }; @@ -111,11 +144,11 @@ namespace __gnu_pbds /// General-probing hash. struct gp_hash_tag : public basic_hash_tag { }; - /// Basic tree. - struct basic_tree_tag : public associative_container_tag { }; + /// Basic branch structure. + struct basic_branch_tag : public associative_tag { }; /// tree. - struct tree_tag : public basic_tree_tag { }; + struct tree_tag : public basic_branch_tag { }; /// Red-black tree. struct rb_tree_tag : public tree_tag { }; @@ -127,13 +160,13 @@ namespace __gnu_pbds struct ov_tree_tag : public tree_tag { }; /// trie. - struct trie_tag : public basic_tree_tag { }; + struct trie_tag : public basic_branch_tag { }; /// PATRICIA trie. struct pat_trie_tag : public trie_tag { }; /// List-update. - struct list_update_tag : public associative_container_tag { }; + struct list_update_tag : public associative_tag { }; /// Basic priority-queue. struct priority_queue_tag : public container_tag { }; @@ -152,203 +185,238 @@ namespace __gnu_pbds /// Thin heap. struct thin_heap_tag : public priority_queue_tag { }; + //@} + //@} - /// Base traits type for containers. - template - struct container_traits_base; + /** + * @defgroup traits Traits + * @{ + */ + /** + * @brief Represents no type, or absence of type, for template tricks. + * + * In a mapped-policy, indicates that an associative container is a set. + * + * In a list-update policy, indicates that each link does not need + * metadata. + * + * In a hash policy, indicates that the combining hash function + * is actually a ranged hash function. + * + * In a probe policy, indicates that the combining probe function + * is actually a ranged probe function. + */ + struct null_type { }; + + + /// Primary template, container traits base. + template + struct container_traits_base; + + /// Specialization, cc hash. template<> struct container_traits_base { - typedef cc_hash_tag container_category; - typedef point_invalidation_guarantee invalidation_guarantee; + typedef cc_hash_tag container_category; + typedef point_invalidation_guarantee invalidation_guarantee; enum { - order_preserving = false, - erase_can_throw = false, - split_join_can_throw = false, - reverse_iteration = false - }; - }; - - template<> - struct container_traits_base - { - typedef gp_hash_tag container_category; - typedef basic_invalidation_guarantee invalidation_guarantee; - - enum - { - order_preserving = false, + order_preserving = false, erase_can_throw = false, split_join_can_throw = false, reverse_iteration = false }; }; + /// Specialization, gp hash. + template<> + struct container_traits_base + { + typedef gp_hash_tag container_category; + typedef basic_invalidation_guarantee invalidation_guarantee; + + enum + { + order_preserving = false, + erase_can_throw = false, + split_join_can_throw = false, + reverse_iteration = false + }; + }; + + /// Specialization, rb tree. template<> struct container_traits_base { - typedef rb_tree_tag container_category; - typedef range_invalidation_guarantee invalidation_guarantee; + typedef rb_tree_tag container_category; + typedef range_invalidation_guarantee invalidation_guarantee; enum { - order_preserving = true, - erase_can_throw = false, + order_preserving = true, + erase_can_throw = false, split_join_can_throw = false, - reverse_iteration = true + reverse_iteration = true }; }; + /// Specialization, splay tree. template<> struct container_traits_base { - typedef splay_tree_tag container_category; - typedef range_invalidation_guarantee invalidation_guarantee; + typedef splay_tree_tag container_category; + typedef range_invalidation_guarantee invalidation_guarantee; enum { - order_preserving = true, - erase_can_throw = false, - split_join_can_throw = false, - reverse_iteration = true + order_preserving = true, + erase_can_throw = false, + split_join_can_throw = false, + reverse_iteration = true }; }; + /// Specialization, ov tree. template<> struct container_traits_base { - typedef ov_tree_tag container_category; - typedef basic_invalidation_guarantee invalidation_guarantee; + typedef ov_tree_tag container_category; + typedef basic_invalidation_guarantee invalidation_guarantee; enum { - order_preserving = true, - erase_can_throw = true, - split_join_can_throw = true, - reverse_iteration = false + order_preserving = true, + erase_can_throw = true, + split_join_can_throw = true, + reverse_iteration = false }; }; + /// Specialization, pat trie. template<> struct container_traits_base { - typedef pat_trie_tag container_category; - typedef range_invalidation_guarantee invalidation_guarantee; + typedef pat_trie_tag container_category; + typedef range_invalidation_guarantee invalidation_guarantee; enum { - order_preserving = true, - erase_can_throw = false, - split_join_can_throw = true, - reverse_iteration = true + order_preserving = true, + erase_can_throw = false, + split_join_can_throw = true, + reverse_iteration = true }; }; + /// Specialization, list update. template<> struct container_traits_base { - typedef list_update_tag container_category; - typedef point_invalidation_guarantee invalidation_guarantee; + typedef list_update_tag container_category; + typedef point_invalidation_guarantee invalidation_guarantee; enum { - order_preserving = false, - erase_can_throw = false, + order_preserving = false, + erase_can_throw = false, split_join_can_throw = false, - reverse_iteration = false + reverse_iteration = false }; }; - + /// Specialization, pairing heap. template<> struct container_traits_base { - typedef pairing_heap_tag container_category; - typedef point_invalidation_guarantee invalidation_guarantee; + typedef pairing_heap_tag container_category; + typedef point_invalidation_guarantee invalidation_guarantee; enum { - order_preserving = false, - erase_can_throw = false, + order_preserving = false, + erase_can_throw = false, split_join_can_throw = false, - reverse_iteration = false + reverse_iteration = false }; }; + /// Specialization, thin heap. template<> struct container_traits_base { - typedef thin_heap_tag container_category; - typedef point_invalidation_guarantee invalidation_guarantee; + typedef thin_heap_tag container_category; + typedef point_invalidation_guarantee invalidation_guarantee; enum { - order_preserving = false, - erase_can_throw = false, + order_preserving = false, + erase_can_throw = false, split_join_can_throw = false, - reverse_iteration = false + reverse_iteration = false }; }; + /// Specialization, binomial heap. template<> struct container_traits_base { - typedef binomial_heap_tag container_category; - typedef point_invalidation_guarantee invalidation_guarantee; + typedef binomial_heap_tag container_category; + typedef point_invalidation_guarantee invalidation_guarantee; enum { - order_preserving = false, - erase_can_throw = false, + order_preserving = false, + erase_can_throw = false, split_join_can_throw = false, - reverse_iteration = false + reverse_iteration = false }; }; + /// Specialization, rc binomial heap. template<> struct container_traits_base { - typedef rc_binomial_heap_tag container_category; - typedef point_invalidation_guarantee invalidation_guarantee; + typedef rc_binomial_heap_tag container_category; + typedef point_invalidation_guarantee invalidation_guarantee; enum { - order_preserving = false, - erase_can_throw = false, + order_preserving = false, + erase_can_throw = false, split_join_can_throw = false, - reverse_iteration = false + reverse_iteration = false }; }; + /// Specialization, binary heap. template<> struct container_traits_base { - typedef binary_heap_tag container_category; - typedef basic_invalidation_guarantee invalidation_guarantee; + typedef binary_heap_tag container_category; + typedef basic_invalidation_guarantee invalidation_guarantee; enum { - order_preserving = false, - erase_can_throw = false, + order_preserving = false, + erase_can_throw = false, split_join_can_throw = true, - reverse_iteration = false + reverse_iteration = false }; }; - /// container_traits + /// Container traits. // See Matt Austern for the name, S. Meyers MEFC++ #2, others. template - struct container_traits + struct container_traits : public container_traits_base { - typedef Cntnr container_type; - typedef typename Cntnr::container_category container_category; - typedef container_traits_base base_type; + typedef Cntnr container_type; + typedef typename Cntnr::container_category container_category; + typedef container_traits_base base_type; typedef typename base_type::invalidation_guarantee invalidation_guarantee; enum @@ -359,6 +427,17 @@ namespace __gnu_pbds reverse_iteration = base_type::reverse_iteration }; }; + //@} + + + namespace detail + { + /// Dispatch mechanism, primary template for associative types. + template + struct container_base_dispatch; + } // namespace __detail + //@} } // namespace __gnu_pbds #endif diff --git a/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp b/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp index 4af1adbde70..4df9df1df2a 100644 --- a/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp +++ b/libstdc++-v3/include/ext/pb_ds/tree_policy.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -44,61 +44,54 @@ #include #include #include -#include +#include namespace __gnu_pbds { - // A null node updator, indicating that no node updates are required. - template - struct null_tree_node_update - { }; - #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ - tree_order_statistics_node_update + tree_order_statistics_node_update -#define PB_DS_BASE_C_DEC \ - detail::basic_tree_policy_base +#define PB_DS_BRANCH_POLICY_BASE \ + detail::branch_policy - // Functor updating ranks of entrees. - template - class tree_order_statistics_node_update : private PB_DS_BASE_C_DEC + /// Functor updating ranks of entrees. + template + class tree_order_statistics_node_update : private PB_DS_BRANCH_POLICY_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_BRANCH_POLICY_BASE base_type; public: - typedef Cmp_Fn cmp_fn; - typedef Allocator allocator_type; - typedef typename allocator_type::size_type size_type; - typedef typename base_type::key_type key_type; - typedef typename base_type::const_key_reference const_key_reference; + typedef Cmp_Fn cmp_fn; + typedef _Alloc allocator_type; + typedef typename allocator_type::size_type size_type; + typedef typename base_type::key_type key_type; + typedef typename base_type::key_const_reference key_const_reference; - typedef size_type metadata_type; - typedef Const_Node_Iterator const_node_iterator; - typedef Node_Iterator node_iterator; - typedef typename const_node_iterator::value_type const_iterator; - typedef typename node_iterator::value_type iterator; + typedef size_type metadata_type; + typedef Node_CItr node_const_iterator; + typedef Node_Itr node_iterator; + typedef typename node_const_iterator::value_type const_iterator; + typedef typename node_iterator::value_type iterator; // Finds an entry by __order. Returns a const_iterator to the // entry with the __order order, or a const_iterator to the // container object's end if order is at least the size of the // container object. inline const_iterator - find_by_order(size_type order) const; + find_by_order(size_type) const; // Finds an entry by __order. Returns an iterator to the entry // with the __order order, or an iterator to the container // object's end if order is at least the size of the container // object. inline iterator - find_by_order(size_type order); + find_by_order(size_type); // Returns the order of a key within a sequence. For exapmle, if // r_key is the smallest key, this method will return 0; if r_key @@ -106,32 +99,33 @@ namespace __gnu_pbds // return 1; if r_key is a key larger than the largest key, this // method will return the size of r_c. inline size_type - order_of_key(const_key_reference r_key) const; + order_of_key(key_const_reference) const; private: // Const reference to the container's value-type. - typedef typename base_type::const_reference const_reference; + typedef typename base_type::const_reference const_reference; // Const pointer to the container's value-type. - typedef typename base_type::const_pointer const_pointer; + typedef typename base_type::const_pointer const_pointer; + + typedef typename _Alloc::template rebind::other __rebind_m; - typedef typename allocator_type::template rebind::other metadata_rebind; // Const metadata reference. - typedef typename metadata_rebind::const_reference const_metadata_reference; + typedef typename __rebind_m::const_reference metadata_const_reference; // Metadata reference. - typedef typename metadata_rebind::reference metadata_reference; + typedef typename __rebind_m::reference metadata_reference; - // Returns the const_node_iterator associated with the tree's root node. - virtual const_node_iterator + // Returns the node_const_iterator associated with the tree's root node. + virtual node_const_iterator node_begin() const = 0; // Returns the node_iterator associated with the tree's root node. virtual node_iterator node_begin() = 0; - // Returns the const_node_iterator associated with a just-after leaf node. - virtual const_node_iterator + // Returns the node_const_iterator associated with a just-after leaf node. + virtual node_const_iterator node_end() const = 0; // Returns the node_iterator associated with a just-after leaf node. @@ -146,7 +140,7 @@ namespace __gnu_pbds // Updates the rank of a node through a node_iterator node_it; // end_nd_it is the end node iterator. inline void - operator()(node_iterator node_it, const_node_iterator end_nd_it) const; + operator()(node_iterator, node_const_iterator) const; virtual ~tree_order_statistics_node_update(); @@ -156,7 +150,7 @@ namespace __gnu_pbds #undef PB_DS_CLASS_T_DEC #undef PB_DS_CLASS_C_DEC -#undef PB_DS_BASE_C_DEC +#undef PB_DS_BRANCH_POLICY_BASE } // namespace __gnu_pbds diff --git a/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp b/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp index fc452104f75..8fd4900b133 100644 --- a/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp +++ b/libstdc++-v3/include/ext/pb_ds/trie_policy.hpp @@ -1,6 +1,7 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011 +// Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -48,33 +49,27 @@ namespace __gnu_pbds { - // A null node updator, indicating that no node updates are required. - template - struct null_trie_node_update - { }; +#define PB_DS_CLASS_T_DEC \ + template -#define PB_DS_CLASS_T_DEC \ - template +#define PB_DS_CLASS_C_DEC \ + trie_string_access_traits -#define PB_DS_CLASS_C_DEC \ - string_trie_e_access_traits - - // Element access traits for string types. + /// Element access traits for string types. template::__min, - typename String::value_type Max_E_Val = detail::__numeric_traits::__max, + typename String::value_type Min_E_Val = detail::__numeric_traits::__min, + typename String::value_type Max_E_Val = detail::__numeric_traits::__max, bool Reverse = false, - typename Allocator = std::allocator > - struct string_trie_e_access_traits + typename _Alloc = std::allocator > + struct trie_string_access_traits { public: - typedef typename Allocator::size_type size_type; - typedef String key_type; - typedef typename Allocator::template rebind::other key_rebind; - typedef typename key_rebind::const_reference const_key_reference; + typedef typename _Alloc::size_type size_type; + typedef String key_type; + typedef typename _Alloc::template rebind __rebind_k; + typedef typename __rebind_k::other::const_reference key_const_reference; enum { @@ -82,7 +77,9 @@ namespace __gnu_pbds }; // Element const iterator type. - typedef typename detail::__conditional_type::__type const_iterator; + typedef typename detail::__conditional_type::__type const_iterator; // Element type. typedef typename std::iterator_traits::value_type e_type; @@ -96,108 +93,113 @@ namespace __gnu_pbds PB_DS_STATIC_ASSERT(min_max_size, max_size >= 2); // Returns a const_iterator to the first element of - // const_key_reference agumnet. + // key_const_reference agumnet. inline static const_iterator - begin(const_key_reference); + begin(key_const_reference); // Returns a const_iterator to the after-last element of - // const_key_reference argument. + // key_const_reference argument. inline static const_iterator - end(const_key_reference); + end(key_const_reference); // Maps an element to a position. inline static size_type e_pos(e_type e); private: + inline static const_iterator + begin_imp(key_const_reference, detail::false_type); inline static const_iterator - begin_imp(const_key_reference, detail::false_type); + begin_imp(key_const_reference, detail::true_type); inline static const_iterator - begin_imp(const_key_reference, detail::true_type); + end_imp(key_const_reference, detail::false_type); inline static const_iterator - end_imp(const_key_reference, detail::false_type); - - inline static const_iterator - end_imp(const_key_reference, detail::true_type); + end_imp(key_const_reference, detail::true_type); static detail::integral_constant s_rev_ind; }; -#include +#include #undef PB_DS_CLASS_T_DEC #undef PB_DS_CLASS_C_DEC #define PB_DS_CLASS_T_DEC \ - template + template #define PB_DS_CLASS_C_DEC \ - trie_prefix_search_node_update + trie_prefix_search_node_update -#define PB_DS_BASE_C_DEC \ - detail::trie_policy_base +#define PB_DS_TRIE_POLICY_BASE \ + detail::trie_policy_base - // A node updator that allows tries to be searched for the range of - // values that match a certain prefix. - template - class trie_prefix_search_node_update : private PB_DS_BASE_C_DEC + /// A node updator that allows tries to be searched for the range of + /// values that match a certain prefix. + template + class trie_prefix_search_node_update : private PB_DS_TRIE_POLICY_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_TRIE_POLICY_BASE base_type; public: - typedef typename base_type::key_type key_type; - typedef typename base_type::const_key_reference const_key_reference; + typedef typename base_type::key_type key_type; + typedef typename base_type::key_const_reference key_const_reference; // Element access traits. - typedef E_Access_Traits e_access_traits; + typedef _ATraits access_traits; // Const element iterator. - typedef typename e_access_traits::const_iterator const_e_iterator; + typedef typename access_traits::const_iterator a_const_iterator; - // Allocator type. - typedef Allocator allocator_type; + // _Alloc type. + typedef _Alloc allocator_type; // Size type. - typedef typename allocator_type::size_type size_type; - typedef detail::null_node_metadata metadata_type; - typedef Const_Node_Iterator const_node_iterator; - typedef Node_Iterator node_iterator; - typedef typename const_node_iterator::value_type const_iterator; - typedef typename node_iterator::value_type iterator; + typedef typename allocator_type::size_type size_type; + typedef null_type metadata_type; + typedef Node_Itr node_iterator; + typedef Node_CItr node_const_iterator; + typedef typename node_iterator::value_type iterator; + typedef typename node_const_iterator::value_type const_iterator; // Finds the const iterator range corresponding to all values // whose prefixes match r_key. std::pair - prefix_range(const_key_reference) const; + prefix_range(key_const_reference) const; // Finds the iterator range corresponding to all values whose // prefixes match r_key. std::pair - prefix_range(const_key_reference); + prefix_range(key_const_reference); // Finds the const iterator range corresponding to all values // whose prefixes match [b, e). std::pair - prefix_range(const_e_iterator, const_e_iterator) const; + prefix_range(a_const_iterator, a_const_iterator) const; // Finds the iterator range corresponding to all values whose // prefixes match [b, e). std::pair - prefix_range(const_e_iterator, const_e_iterator); + prefix_range(a_const_iterator, a_const_iterator); protected: // Called to update a node's metadata. inline void - operator()(node_iterator node_it, const_node_iterator end_nd_it) const; + operator()(node_iterator node_it, node_const_iterator end_nd_it) const; private: + node_iterator + next_child(node_iterator, a_const_iterator, a_const_iterator, + node_iterator, const access_traits&); + // Returns the const iterator associated with the just-after last element. virtual const_iterator end() const = 0; @@ -206,16 +208,16 @@ namespace __gnu_pbds virtual iterator end() = 0; - // Returns the const_node_iterator associated with the trie's root node. - virtual const_node_iterator + // Returns the node_const_iterator associated with the trie's root node. + virtual node_const_iterator node_begin() const = 0; // Returns the node_iterator associated with the trie's root node. virtual node_iterator node_begin() = 0; - // Returns the const_node_iterator associated with a just-after leaf node. - virtual const_node_iterator + // Returns the node_const_iterator associated with a just-after leaf node. + virtual node_const_iterator node_end() const = 0; // Returns the node_iterator associated with a just-after leaf node. @@ -223,12 +225,8 @@ namespace __gnu_pbds node_end() = 0; // Access to the cmp_fn object. - virtual const e_access_traits& - get_e_access_traits() const = 0; - - node_iterator - next_child(node_iterator, const_e_iterator, const_e_iterator, - node_iterator, const e_access_traits&); + virtual const access_traits& + get_access_traits() const = 0; }; #include @@ -236,31 +234,32 @@ namespace __gnu_pbds #undef PB_DS_CLASS_C_DEC #define PB_DS_CLASS_C_DEC \ - trie_order_statistics_node_update + trie_order_statistics_node_update - // Functor updating ranks of entrees. - template - class trie_order_statistics_node_update : private PB_DS_BASE_C_DEC + /// Functor updating ranks of entrees. + template + class trie_order_statistics_node_update : private PB_DS_TRIE_POLICY_BASE { private: - typedef PB_DS_BASE_C_DEC base_type; + typedef PB_DS_TRIE_POLICY_BASE base_type; public: - typedef E_Access_Traits e_access_traits; - typedef typename e_access_traits::const_iterator const_e_iterator; - typedef Allocator allocator_type; - typedef typename allocator_type::size_type size_type; - typedef typename base_type::key_type key_type; - typedef typename base_type::const_key_reference const_key_reference; + typedef _ATraits access_traits; + typedef typename access_traits::const_iterator a_const_iterator; + typedef _Alloc allocator_type; + typedef typename allocator_type::size_type size_type; + typedef typename base_type::key_type key_type; + typedef typename base_type::key_const_reference key_const_reference; - typedef size_type metadata_type; - typedef Const_Node_Iterator const_node_iterator; - typedef Node_Iterator node_iterator; - typedef typename const_node_iterator::value_type const_iterator; - typedef typename node_iterator::value_type iterator; + typedef size_type metadata_type; + typedef Node_CItr node_const_iterator; + typedef Node_Itr node_iterator; + typedef typename node_const_iterator::value_type const_iterator; + typedef typename node_iterator::value_type iterator; // Finds an entry by __order. Returns a const_iterator to the // entry with the __order order, or a const_iterator to the @@ -282,7 +281,7 @@ namespace __gnu_pbds // return 1; if r_key is a key larger than the largest key, this // method will return the size of r_c. inline size_type - order_of_key(const_key_reference) const; + order_of_key(key_const_reference) const; // Returns the order of a prefix within a sequence. For exapmle, // if [b, e] is the smallest prefix, this method will return 0; if @@ -290,15 +289,22 @@ namespace __gnu_pbds // will return 1; if r_key is a key larger than the largest key, // this method will return the size of r_c. inline size_type - order_of_prefix(const_e_iterator, const_e_iterator) const; + order_of_prefix(a_const_iterator, a_const_iterator) const; + + protected: + // Updates the rank of a node through a node_iterator node_it; + // end_nd_it is the end node iterator. + inline void + operator()(node_iterator, node_const_iterator) const; private: - typedef typename base_type::const_reference const_reference; - typedef typename base_type::const_pointer const_pointer; + typedef typename base_type::const_reference const_reference; + typedef typename base_type::const_pointer const_pointer; - typedef typename Allocator::template rebind::other metadata_rebind; - typedef typename metadata_rebind::const_reference const_metadata_reference; - typedef typename metadata_rebind::reference metadata_reference; + typedef typename _Alloc::template rebind __rebind_m; + typedef typename __rebind_m::other __rebind_ma; + typedef typename __rebind_ma::const_reference metadata_const_reference; + typedef typename __rebind_ma::reference metadata_reference; // Returns true if the container is empty. virtual bool @@ -313,17 +319,17 @@ namespace __gnu_pbds virtual iterator end() = 0; - // Returns the const_node_iterator associated with the trie's root node. - virtual const_node_iterator + // Returns the node_const_iterator associated with the trie's root node. + virtual node_const_iterator node_begin() const = 0; // Returns the node_iterator associated with the trie's root node. virtual node_iterator node_begin() = 0; - // Returns the const_node_iterator associated with a just-after + // Returns the node_const_iterator associated with a just-after // leaf node. - virtual const_node_iterator + virtual node_const_iterator node_end() const = 0; // Returns the node_iterator associated with a just-after leaf node. @@ -331,25 +337,15 @@ namespace __gnu_pbds node_end() = 0; // Access to the cmp_fn object. - virtual e_access_traits& - get_e_access_traits() = 0; - - protected: - // Updates the rank of a node through a node_iterator node_it; - // end_nd_it is the end node iterator. - inline void - operator()(node_iterator, const_node_iterator) const; - - // Destructor. - virtual - ~trie_order_statistics_node_update(); + virtual access_traits& + get_access_traits() = 0; }; #include #undef PB_DS_CLASS_T_DEC #undef PB_DS_CLASS_C_DEC -#undef PB_DS_BASE_C_DEC +#undef PB_DS_TRIE_POLICY_BASE } // namespace __gnu_pbds diff --git a/libstdc++-v3/scripts/make_graph.py b/libstdc++-v3/scripts/make_graph.py index 61e18be4768..88b8d38fdf8 100755 --- a/libstdc++-v3/scripts/make_graph.py +++ b/libstdc++-v3/scripts/make_graph.py @@ -227,23 +227,28 @@ class png_maker: return self.__mmap_re.sub('\nmmap_\n', cntnr) def make(self, res, of_name): - theme.output_format = 'png' + theme.output_format = 'svg' theme.output_file = of_name theme.scale_factor = 2 -# theme.default_font_size = 5 + theme.default_font_family = "Gill Sans Std" + theme.default_line_width = 0.5 + theme.default_font_size = 7 theme.use_color = 1 theme.reinitialize() y_tick_interval = self.__get_y_tics(res) - xaxis = axis.X(format = '/a90/hL%d', +# xaxis = axis.X(format = '/a90/hL%d', + xaxis = axis.X(format = "/a-50{}%d", tic_interval = 200, label = res.x_label) - yaxis = axis.Y(format = '%.2e', +# yaxis = axis.Y(format = '%.2e', + yaxis = axis.Y(format = "/a-50{}%.2e", tic_interval = y_tick_interval, label = res.y_label) legend_lines = len(res.cntnr_list) legend_vloc = 50 + (legend_lines * 10) + legend_hloc = -0 ar = area.T(x_axis = xaxis, y_axis = yaxis, - legend = legend.T(loc=(0,-legend_vloc), + legend = legend.T(loc=(legend_hloc,-legend_vloc), frame_line_style=None, inter_row_sep=2), size=(240,110)) @@ -554,7 +559,8 @@ def main(doc_dir, res_dir, test_infos_f_name, test_name, build_name): res_gtr = res_getter(test_infos_f_name) res = res_gtr.get(res_dir, test_name) png_mkr = png_maker() - png_of_name = doc_dir + '/' + test_name + '_' + build_name + '.png' +# png_of_name = doc_dir + '/' + test_name + '_' + build_name + '.png' + png_of_name = doc_dir + '/' + test_name + '_' + build_name + '.svg' print png_of_name png_mkr.make(res, png_of_name) diff --git a/libstdc++-v3/scripts/run_doxygen b/libstdc++-v3/scripts/run_doxygen index e227ce17b95..48b17249737 100644 --- a/libstdc++-v3/scripts/run_doxygen +++ b/libstdc++-v3/scripts/run_doxygen @@ -313,6 +313,10 @@ for f in *__detail_*; do newname=`echo $f | sed 's/__detail_/__detail::/'` mv $f $newname done +for f in *__gnu_pbds_detail_*; do + newname=`echo $f | sed 's/detail_/detail::/'` + mv $f $newname +done for f in *__parallel_*; do newname=`echo $f | sed 's/__parallel_/__parallel::/'` mv $f $newname diff --git a/libstdc++-v3/testsuite/data/make_graph_test_infos.xml b/libstdc++-v3/testsuite/data/make_graph_test_infos.xml index cffc3a03937..0c2da1b3099 100644 --- a/libstdc++-v3/testsuite/data/make_graph_test_infos.xml +++ b/libstdc++-v3/testsuite/data/make_graph_test_infos.xml @@ -85,7 +85,6 @@ - diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc index bdc423a26b3..ba593f23541 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc @@ -123,7 +123,7 @@ int main() acc["a"][160] = 142; // Verify the number of accounts that "a" holds. - accounts_t::const_point_iterator it = acc.find("a"); + accounts_t::point_const_iterator it = acc.find("a"); assert(it != acc.end()); assert(it->second.size() == 2); diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc index 24ebe2e2898..b516bb7853c 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -62,7 +62,7 @@ some_op_sequence(Cntnr& r_c) typedef typename Cntnr::const_iterator const_iterator; for (const_iterator it = r_c.begin(); it != r_c.end(); ++it) - cout <<* it << endl; + cout << *it << endl; assert(!r_c.empty()); assert(r_c.size() == 10); diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc index 3d2cf14db3c..07c74e64300 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc @@ -80,19 +80,19 @@ int main() { { // Perform operations on a collision-chaining hash set. - cc_hash_table c; + cc_hash_table c; some_op_sequence(c); } { // Perform operations on a general-probing hash set. - gp_hash_table c; + gp_hash_table c; some_op_sequence(c); } { // Perform operations on a red-black tree set. - tree c; + tree c; some_op_sequence(c); } @@ -100,7 +100,7 @@ int main() // Perform operations on a splay tree set. tree< int, - null_mapped_type, + null_type, less, splay_tree_tag> c; some_op_sequence(c); @@ -110,7 +110,7 @@ int main() // Perform operations on a splay tree set. tree< int, - null_mapped_type, + null_type, less, ov_tree_tag> c; some_op_sequence(c); @@ -118,7 +118,7 @@ int main() { // Perform operations on a list-update set. - list_update c; + list_update c; some_op_sequence(c); } diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc index e9f33b11305..e752242faf4 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc @@ -125,8 +125,8 @@ main() typedef cc_hash_table< string, - null_mapped_type, - null_hash_fn, + null_type, + null_type, equal_to, simple_string_ranged_hash_fn> set_t; diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc index 406ab8e0c15..a29756fd05a 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc @@ -71,10 +71,10 @@ typedef pair< unsigned int, unsigned int> interval; // Functor updating maximal endpoints of entries. Algorithm taken from // "Introduction to Algorithms" by Cormen, Leiserson, and Rivest. -template + typename _Alloc> struct intervals_node_update { public: @@ -88,8 +88,8 @@ public: bool overlaps(const interval& r_interval) { - Const_Node_Iterator nd_it = node_begin(); - Const_Node_Iterator end_it = node_end(); + Node_CItr nd_it = node_begin(); + Node_CItr end_it = node_end(); while (nd_it != end_it) { @@ -99,7 +99,7 @@ public: return true; // Get the const node iterator of the node's left child. - Const_Node_Iterator l_nd_it = nd_it.get_l_child(); + Node_CItr l_nd_it = nd_it.get_l_child(); // Calculate the maximal endpoint of the left child. If the // node has no left child, then this is the node's maximal @@ -122,7 +122,7 @@ protected: // updated; end_nd_it is a const node iterator to a just-after leaf // node. inline void - operator()(Node_Iterator nd_it, Const_Node_Iterator end_nd_it) + operator()(Node_Itr nd_it, Node_CItr end_nd_it) { // The left maximal endpoint is 0 if there is no left child. const unsigned int l_max_endpoint =(nd_it.get_l_child() == end_nd_it)? @@ -138,10 +138,10 @@ protected: max((*nd_it)->second, max(l_max_endpoint, r_max_endpoint)); } - virtual Const_Node_Iterator + virtual Node_CItr node_begin() const = 0; - virtual Const_Node_Iterator + virtual Node_CItr node_end() const = 0; virtual @@ -186,7 +186,7 @@ int main() // Test a red-black tree. some_op_sequence(tree< interval, - null_mapped_type, + null_type, less, rb_tree_tag, intervals_node_update>()); @@ -194,7 +194,7 @@ int main() // Test an ordered-vector tree. some_op_sequence(tree< interval, - null_mapped_type, + null_type, less, ov_tree_tag, intervals_node_update>()); @@ -202,7 +202,7 @@ int main() // Test a splay tree. some_op_sequence(tree< interval, - null_mapped_type, + null_type, less, splay_tree_tag, intervals_node_update>()); diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc index 584574030b1..68ef8b7438f 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc @@ -57,7 +57,7 @@ using namespace __gnu_pbds; typedef tree< int, - null_mapped_type, + null_type, less, rb_tree_tag, // This policy updates nodes' metadata for order statistics. diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc index 28c895680e3..06ae5399cc9 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc @@ -53,12 +53,12 @@ using namespace __gnu_pbds; typedef string dna_t; // Following is an element access traits for a DNA string. -struct dna_string_e_access_traits +struct dna_string_access_traits { public: typedef size_t size_type; typedef dna_t key_type; - typedef const key_type& const_key_reference; + typedef const key_type& key_const_reference; typedef char e_type; typedef string::const_iterator const_iterator; @@ -70,12 +70,12 @@ public: // Returns a const_iterator to the firstelement of r_key. inline static const_iterator - begin(const_key_reference r_key) + begin(key_const_reference r_key) { return r_key.begin(); } // Returns a const_iterator to the after-lastelement of r_key. inline static const_iterator - end(const_key_reference r_key) + end(key_const_reference r_key) { return r_key.end(); } // Maps an element to a position. @@ -99,7 +99,7 @@ public: }; // A PATRICIA trie with DNA string element-access traits. -typedef dna_string_e_access_traits traits_type; +typedef dna_string_access_traits traits_type; typedef trie trie_type; int main() diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc index 98b99a76abc..09e025aff79 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc @@ -52,8 +52,8 @@ using namespace __gnu_pbds; // A PATRICIA trie with a prefix-search node-updator type. Note that // since the node updator is trie_prefix_search_node_update, then the // container includes its method prefix_range. -typedef null_mapped_type mapped_type; -typedef string_trie_e_access_traits<> cmp_fn; +typedef null_type mapped_type; +typedef trie_string_access_traits<> cmp_fn; typedef pat_trie_tag tag_type; typedef trie. + +/** + * @file hash_data_map_rand.cc + * Contains a random-operation test for maps and sets, separated out. + */ + +#define PB_DS_REGRESSION +//#define PB_DS_REGRESSION_TRACE + +#include +#include +#include +#include + +#ifndef ITERATIONS +# define ITERATIONS 100 +#endif + +#ifndef KEYS +# define KEYS 200 +#endif + +// Debug version of the rand regression tests, based on hash_data_map_rand + +// 1 +// Simplify things by unrolling the typelist of the different +// container types into individual statements. +// +// Unroll the typelist represented by priority_queue_types, from +// regression/common_type.hpp. This is just a compile-time list of 5 +// hash tables, with different policies for the type of table +// (gp_hash, cc_hash), for the resize policies and probe functions. +using namespace __gnu_pbds::test::detail; +using namespace __gnu_pbds; +typedef __gnu_pbds::test::basic_type basic_type; +typedef __gnu_cxx::throw_allocator_random allocator_type; +typedef std::equal_to equal_type; + + +typedef __gnu_pbds::test::direct_mod_range_hashing_t_ + cprobe_type1; + +typedef __gnu_pbds::test::direct_mask_range_hashing_t_ + cprobe_type2; + + +typedef __gnu_pbds::test::quadratic_probe_fn_t_ + probe_type1; + +typedef __gnu_pbds::test::linear_probe_fn_t_ + probe_type2; + + +typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_ + trigger_type1; + +typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_ + trigger_type2; + +typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_ + trigger_type3; + +typedef __gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_ + trigger_type4; + +typedef __gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_ + trigger_type5; + + +typedef hash_standard_resize_policy<__gnu_pbds::test::hash_prime_size_policy_t_, trigger_type1, false, unsigned long> resize_type1; + +typedef hash_standard_resize_policy<__gnu_pbds::test::hash_exponential_size_policy_t_, trigger_type2, true, unsigned long> + resize_type2; + +typedef hash_standard_resize_policy<__gnu_pbds::test::hash_exponential_size_policy_t_, trigger_type5, false, unsigned long> + resize_type3; + + + +// gp_hash 1 +typedef gp_hash_table + gp_hash_type1; + +// gp_hash 2 +typedef gp_hash_table + gp_hash_type2; + + +// cc_hash 1 +typedef cc_hash_table + cc_hash_type1; + +// cc_hash 2 +typedef cc_hash_table + cc_hash_type2; + +// cc_hash 3 +typedef cc_hash_table + cc_hash_type3; + +// 2 +// Specialize container_rand_regression_test for specific container +// type and test function. + +#ifdef SPECIALIZE +// For testing one specific container type. +typedef cc_hash_type1 test_type; + +void debug_break_here() { } + +namespace __gnu_pbds { + namespace test { + namespace detail { + + template<> + void + container_rand_regression_test::operator()() + { + } + } + } +} +#endif + +int +main() +{ + // Set up the test object. + size_t sd = 1303948889; + rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true); + + // 1 + // Determine the problem container, function that fails. + test(gp_hash_type1()); + test(gp_hash_type2()); + + test(cc_hash_type1()); + test(cc_hash_type2()); + test(cc_hash_type3()); + +#ifdef SPECIALIZE + // 2 + // With specified problem container set test_type typedef + // appropriately above. Then, specialize operator()(), also + // above. Finally, run this below. + using namespace std; + test_type obj; + test(obj); +#endif + + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_no_data_map_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_no_data_map_rand_debug.cc new file mode 100644 index 00000000000..8729f4142f8 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_no_data_map_rand_debug.cc @@ -0,0 +1,189 @@ +// { dg-require-time "" } +// This can take long on simulators, timing out the test. +// { dg-options "-D_GLIBCXX_DEBUG -DITERATIONS=5" { target simulator } } +// { dg-options "-D_GLIBCXX_DEBUG" } +// { dg-timeout-factor 2.0 } + +// -*- C++ -*- + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 3, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this library; see the file COPYING3. If not see +// . + +/** + * @file hash_data_map_rand.cc + * Contains a random-operation test for maps and sets, separated out. + */ + +#define PB_DS_REGRESSION +//#define PB_DS_REGRESSION_TRACE + +#include +#include +#include +#include + +#ifndef ITERATIONS +# define ITERATIONS 100 +#endif + +#ifndef KEYS +# define KEYS 200 +#endif + +// Debug version of the rand regression tests, based on hash_data_map_rand + +// 1 +// Simplify things by unrolling the typelist of the different +// container types into individual statements. +// +// Unroll the typelist represented by priority_queue_types, from +// regression/common_type.hpp. This is just a compile-time list of 5 +// hash tables, with different policies for the type of table +// (gp_hash, cc_hash), for the resize policies and probe functions. +using namespace __gnu_pbds::test::detail; +using namespace __gnu_pbds; +typedef __gnu_pbds::test::basic_type basic_type; +typedef __gnu_cxx::throw_allocator_random allocator_type; +typedef std::equal_to equal_type; + + +typedef __gnu_pbds::test::direct_mod_range_hashing_t_ + cprobe_type1; + +typedef __gnu_pbds::test::direct_mask_range_hashing_t_ + cprobe_type2; + + +typedef __gnu_pbds::test::quadratic_probe_fn_t_ + probe_type1; + +typedef __gnu_pbds::test::linear_probe_fn_t_ + probe_type2; + + +typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_ + trigger_type1; + +typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_ + trigger_type2; + +typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_ + trigger_type3; + +typedef __gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_ + trigger_type4; + +typedef __gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_ + trigger_type5; + + +typedef hash_standard_resize_policy<__gnu_pbds::test::hash_prime_size_policy_t_, trigger_type1, false, unsigned long> resize_type1; + +typedef hash_standard_resize_policy<__gnu_pbds::test::hash_exponential_size_policy_t_, trigger_type2, true, unsigned long> + resize_type2; + +typedef hash_standard_resize_policy<__gnu_pbds::test::hash_exponential_size_policy_t_, trigger_type5, false, unsigned long> + resize_type3; + + + +// gp_hash 1 +typedef gp_hash_table + gp_hash_type1; + +// gp_hash 2 +typedef gp_hash_table + gp_hash_type2; + + +// cc_hash 1 +typedef cc_hash_table + cc_hash_type1; + +// cc_hash 2 +typedef cc_hash_table + cc_hash_type2; + +// cc_hash 3 +typedef cc_hash_table + cc_hash_type3; + +// 2 +// Specialize container_rand_regression_test for specific container +// type and test function. + +#ifdef SPECIALIZE +// For testing one specific container type. +typedef cc_hash_type1 test_type; + +void debug_break_here() { } + +namespace __gnu_pbds { + namespace test { + namespace detail { + + template<> + void + container_rand_regression_test::operator()() + { + } + } + } +} +#endif + +int +main() +{ + // Set up the test object. + size_t sd = 1303948889; + rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true); + + // 1 + // Determine the problem container, function that fails. + test(gp_hash_type1()); + test(gp_hash_type2()); + + test(cc_hash_type1()); + test(cc_hash_type2()); + test(cc_hash_type3()); + +#ifdef SPECIALIZE + // 2 + // With specified problem container set test_type typedef + // appropriately above. Then, specialize operator()(), also + // above. Finally, run this below. + using namespace std; + test_type obj; + test(obj); +#endif + + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc index 8bd77816c02..e91a753ebbf 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc @@ -32,7 +32,7 @@ // warranty. /** - * @file lu_data_map_rand_regression_test.cpp + * @file list_update_data_map_rand.cc * Contains a random-operation test for maps and sets. */ diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand_debug.cc new file mode 100644 index 00000000000..bfb2ed4484e --- /dev/null +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand_debug.cc @@ -0,0 +1,116 @@ +// { dg-require-time "" } +// { dg-options "-D_GLIBCXX_DEBUG" } +// { dg-timeout-factor 2.0 } + +// -*- C++ -*- + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 3, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this library; see the file COPYING3. If not see +// . + +/** + * @file list_update_data_map_rand_debug.cc + * Contains a random-operation test for maps and sets, separated out. + */ + +#define PB_DS_REGRESSION +//#define PB_DS_REGRESSION_TRACE + +#include +#include +#include +#include + +// Debug version of the rand regression tests, based on list_update_data_map. + +// 1 +// Simplify things by unrolling the typelist of the different +// container types into individual statements. +// +// Unroll the typelist represented by list_update_types, from +// regression/common_type.hpp. This is just a compile-time list of +// list_update types, with different policies for the type of +// update (lu_move_to_front_policy, lu_counter_policy). + +using namespace __gnu_pbds::test::detail; +using namespace __gnu_pbds; +typedef __gnu_pbds::test::basic_type basic_type; +typedef __gnu_cxx::throw_allocator_random allocator_type; +typedef std::equal_to equal_type; + +typedef __gnu_pbds::test::lu_move_to_front_policy_t_ policy_type1; + +typedef __gnu_pbds::test::lu_counter_policy_t_ + policy_type2; + + +typedef list_update + list_type1; + +typedef list_update + list_type2; + +// 2 +// Specialize container_rand_regression_test for specific container +// type and test function. + +#ifdef SPECIALIZE +// For testing one specific container type. +typedef list_type1 test_type; + +void debug_break_here() { } + +namespace __gnu_pbds { + namespace test { + namespace detail { + + template<> + void + container_rand_regression_test::operator()() + { + } + + } + } +} +#endif + +int +main() +{ + // Set up the test object. + size_t sd = 1303948889; + rand_reg_test test(sd, 50, 10, .2, .6, .2, .001, .25, true); + + // 1 + // Determine the problem container, function that fails. + test(list_type1()); + test(list_type2()); + +#ifdef SPECIALIZE + // 2 + // With specified problem container set test_type typedef + // appropriately above. Then, specialize operator()(), also + // above. Finally, run this below. + using namespace std; + test_type obj; + test(obj); +#endif + + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_no_data_map_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_no_data_map_rand_debug.cc new file mode 100644 index 00000000000..c39eb0df311 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_no_data_map_rand_debug.cc @@ -0,0 +1,116 @@ +// { dg-require-time "" } +// { dg-options "-D_GLIBCXX_DEBUG" } +// { dg-timeout-factor 2.0 } + +// -*- C++ -*- + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 3, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this library; see the file COPYING3. If not see +// . + +/** + * @file list_update_data_map_rand_debug.cc + * Contains a random-operation test for maps and sets, separated out. + */ + +#define PB_DS_REGRESSION +//#define PB_DS_REGRESSION_TRACE + +#include +#include +#include +#include + +// Debug version of the rand regression tests, based on list_update_data_map. + +// 1 +// Simplify things by unrolling the typelist of the different +// container types into individual statements. +// +// Unroll the typelist represented by list_update_types, from +// regression/common_type.hpp. This is just a compile-time list of +// list_update types, with different policies for the type of +// update (lu_move_to_front_policy, lu_counter_policy). + +using namespace __gnu_pbds::test::detail; +using namespace __gnu_pbds; +typedef __gnu_pbds::test::basic_type basic_type; +typedef __gnu_cxx::throw_allocator_random allocator_type; +typedef std::equal_to equal_type; + +typedef __gnu_pbds::test::lu_move_to_front_policy_t_ policy_type1; + +typedef __gnu_pbds::test::lu_counter_policy_t_ + policy_type2; + + +typedef list_update + list_type1; + +typedef list_update + list_type2; + +// 2 +// Specialize container_rand_regression_test for specific container +// type and test function. + +#ifdef SPECIALIZE +// For testing one specific container type. +typedef list_type1 test_type; + +void debug_break_here() { } + +namespace __gnu_pbds { + namespace test { + namespace detail { + + template<> + void + container_rand_regression_test::operator()() + { + } + + } + } +} +#endif + +int +main() +{ + // Set up the test object. + size_t sd = 1303948889; + rand_reg_test test(sd, 50, 10, .2, .6, .2, .001, .25, true); + + // 1 + // Determine the problem container, function that fails. + test(list_type1()); + test(list_type2()); + +#ifdef SPECIALIZE + // 2 + // With specified problem container set test_type typedef + // appropriately above. Then, specialize operator()(), also + // above. Finally, run this below. + using namespace std; + test_type obj; + test(obj); +#endif + + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc new file mode 100644 index 00000000000..dda99151716 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc @@ -0,0 +1,142 @@ +// { dg-require-time "" } +// This can take long on simulators, timing out the test. +// { dg-options "-D_GLIBCXX_DEBUG -DITERATIONS=5" { target simulator } } +// { dg-options "-D_GLIBCXX_DEBUG" } +// { dg-timeout-factor 2.0 } + +// -*- C++ -*- + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 3, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this library; see the file COPYING3. If not see +// . + +/** + * @file priority_queue_rand_debug.cc + * Contains a random-operation test for priority queues. + */ + +#define PB_DS_REGRESSION +//#define PB_DS_REGRESSION_TRACE + +#include +#include +#include +#include + +#ifndef ITERATIONS +# define ITERATIONS 500 +#endif + +#ifndef KEYS +# define KEYS 1000 +#endif + +// Debug version of the rand regression tests, based on priority_queue_rand + +// 1 +// Simplify things by unrolling the typelist of the different +// container types into individual statements. +// +// Unroll the typelist represented by priority_queue_types, from +// regression/common_type.hpp. This is just a compile-time list of 5 +// priority_queue types, with different policies for the type of priority_queue +// (pairing_heap_tag, binomial_heap_tag, rc_binomial_heap_tag, +// binary_heap_tag, thin_heap_tag). + +using namespace __gnu_pbds::test::detail; +using namespace __gnu_pbds; +typedef __gnu_pbds::test::basic_type basic_type; +typedef __gnu_cxx::throw_allocator_random allocator_type; + +// pairing_heap_tag +typedef priority_queue, + pairing_heap_tag, allocator_type> + priority_queue_type1; + +// binomial_heap_tag +typedef priority_queue, + binomial_heap_tag, allocator_type> + priority_queue_type2; + +// rc_binomial_heap_tag +typedef priority_queue, + rc_binomial_heap_tag, allocator_type> + priority_queue_type3; + +// binary_heap_tag +typedef priority_queue, + binary_heap_tag, allocator_type> + priority_queue_type4; + +// thin_heap_tag +typedef priority_queue, + thin_heap_tag, allocator_type> + priority_queue_type5; + + +// 2 +// Specialize container_rand_regression_test for specific container +// type and test function. + +#ifdef SPECIALIZE +// For testing one specific container type. +typedef priority_queue_type4 test_type; + +void debug_break_here() { } + +namespace __gnu_pbds { + namespace test { + namespace detail { + + template<> + void + container_rand_regression_test::operator()() + { + + } + + } + } +} +#endif + +int +main() +{ + // Set up the test object. + size_t sd = 1304368293; + rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .1, .2, .001, 1, true); + + // 1 + // Determine the problem container, function that fails. + test(priority_queue_type1()); + test(priority_queue_type2()); + test(priority_queue_type3()); + test(priority_queue_type4()); + test(priority_queue_type5()); + +#ifdef SPECIALIZE + // 2 + // With specified problem container set test_type typedef + // appropriately above. Then, specialize operator()(), also + // above. Finally, run this below. + using namespace std; + test_type obj; + test(obj); +#endif + + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_data_map_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_data_map_rand_debug.cc new file mode 100644 index 00000000000..934d96d0bc7 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_data_map_rand_debug.cc @@ -0,0 +1,144 @@ +// { dg-require-time "" } +// This can take long on simulators, timing out the test. +// { dg-options "-D_GLIBCXX_DEBUG -DITERATIONS=5" { target simulator } } +// { dg-options "-D_GLIBCXX_DEBUG" } +// { dg-timeout-factor 2.0 } + +// -*- C++ -*- + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 3, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this library; see the file COPYING3. If not see +// . + +/** + * @file tree_data_map_rand_debug.cc + * Contains a random-operation test for maps and sets, separated out. + */ + +#define PB_DS_REGRESSION +//#define PB_DS_REGRESSION_TRACE + +#include +#include +#include +#include + +#ifndef ITERATIONS +# define ITERATIONS 100 +#endif + +#ifndef KEYS +# define KEYS 200 +#endif + +// Debug version of the rand regression tests, based on tree_data_map. + +// 1 +// Simplify things by unrolling the typelist of the different +// container types into individual statements. +// +// Unroll the typelist represented by tree_types, from +// regression/common_type.hpp. This is just a compile-time list of 6 +// tree types, with different policies for the type of tree +// (ov_tree_tag, rb_tree_tag, splay_tree_tag) and for the node +// update (null_node_update, tree_order_statistics_node_update) + +using namespace __gnu_pbds::test::detail; +using namespace __gnu_pbds; +typedef __gnu_pbds::test::basic_type basic_type; +typedef __gnu_cxx::throw_allocator_random allocator_type; + +// ov_tree_tag +typedef tree, + ov_tree_tag, null_node_update, + allocator_type> ov_tree_type1; + +typedef tree, + ov_tree_tag, tree_order_statistics_node_update, + allocator_type> ov_tree_type2; + +// rb_tree_tag +typedef tree, + rb_tree_tag, null_node_update, + allocator_type> rb_tree_type1; + +typedef tree, + rb_tree_tag, tree_order_statistics_node_update, + allocator_type> rb_tree_type2; + +// splay_tree_tag +typedef tree, + splay_tree_tag, null_node_update, + allocator_type> splay_tree_type1; + +typedef tree, + splay_tree_tag, tree_order_statistics_node_update, + allocator_type> splay_tree_type2; + + +// 2 +// Specialize container_rand_regression_test for specific container +// type and test function. + +#ifdef SPECIALIZE +// For testing one specific container type. +typedef ov_tree_type2 test_type; + +void debug_break_here() { } + +namespace __gnu_pbds { + namespace test { + namespace detail { + + template<> + void + container_rand_regression_test::operator()() + { + } + + } + } +} +#endif + +int +main() +{ + // Set up the test object. + size_t sd = 1303948889; + rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true); + + // 1 + // Determine the problem container, function that fails. + test(ov_tree_type1()); + test(ov_tree_type2()); + test(rb_tree_type1()); + test(rb_tree_type2()); + test(splay_tree_type1()); + test(splay_tree_type2()); + +#ifdef SPECIALIZE + // 2 + // With specified problem container set test_type typedef + // appropriately above. Then, specialize operator()(), also + // above. Finally, run this below. + using namespace std; + test_type obj; + test(obj); +#endif + + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_no_data_map_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_no_data_map_rand_debug.cc new file mode 100644 index 00000000000..146fc1f1ce8 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_no_data_map_rand_debug.cc @@ -0,0 +1,144 @@ +// { dg-require-time "" } +// This can take long on simulators, timing out the test. +// { dg-options "-D_GLIBCXX_DEBUG -DITERATIONS=5" { target simulator } } +// { dg-options "-D_GLIBCXX_DEBUG" } +// { dg-timeout-factor 2.0 } + +// -*- C++ -*- + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 3, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this library; see the file COPYING3. If not see +// . + +/** + * @file tree_data_map_rand_debug.cc + * Contains a random-operation test for maps and sets, separated out. + */ + +#define PB_DS_REGRESSION +//#define PB_DS_REGRESSION_TRACE + +#include +#include +#include +#include + +#ifndef ITERATIONS +# define ITERATIONS 100 +#endif + +#ifndef KEYS +# define KEYS 200 +#endif + +// Debug version of the rand regression tests, based on tree_data_map. + +// 1 +// Simplify things by unrolling the typelist of the different +// container types into individual statements. +// +// Unroll the typelist represented by tree_types, from +// regression/common_type.hpp. This is just a compile-time list of 6 +// tree types, with different policies for the type of tree +// (ov_tree_tag, rb_tree_tag, splay_tree_tag) and for the node +// update (null_node_update, tree_order_statistics_node_update) + +using namespace __gnu_pbds::test::detail; +using namespace __gnu_pbds; +typedef __gnu_pbds::test::basic_type basic_type; +typedef __gnu_cxx::throw_allocator_random allocator_type; + +// ov_tree_tag +typedef tree, + ov_tree_tag, null_node_update, + allocator_type> ov_tree_type1; + +typedef tree, + ov_tree_tag, tree_order_statistics_node_update, + allocator_type> ov_tree_type2; + +// rb_tree_tag +typedef tree, + rb_tree_tag, null_node_update, + allocator_type> rb_tree_type1; + +typedef tree, + rb_tree_tag, tree_order_statistics_node_update, + allocator_type> rb_tree_type2; + +// splay_tree_tag +typedef tree, + splay_tree_tag, null_node_update, + allocator_type> splay_tree_type1; + +typedef tree, + splay_tree_tag, tree_order_statistics_node_update, + allocator_type> splay_tree_type2; + + +// 2 +// Specialize container_rand_regression_test for specific container +// type and test function. + +#ifdef SPECIALIZE +// For testing one specific container type. +typedef ov_tree_type2 test_type; + +void debug_break_here() { } + +namespace __gnu_pbds { + namespace test { + namespace detail { + + template<> + void + container_rand_regression_test::operator()() + { + } + + } + } +} +#endif + +int +main() +{ + // Set up the test object. + size_t sd = 1303948889; + rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true); + + // 1 + // Determine the problem container, function that fails. + test(ov_tree_type1()); + test(ov_tree_type2()); + test(rb_tree_type1()); + test(rb_tree_type2()); + test(splay_tree_type1()); + test(splay_tree_type2()); + +#ifdef SPECIALIZE + // 2 + // With specified problem container set test_type typedef + // appropriately above. Then, specialize operator()(), also + // above. Finally, run this below. + using namespace std; + test_type obj; + test(obj); +#endif + + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_data_map_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_data_map_rand_debug.cc new file mode 100644 index 00000000000..5d7ada8c9de --- /dev/null +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_data_map_rand_debug.cc @@ -0,0 +1,131 @@ +// { dg-require-time "" } +// This can take long on simulators, timing out the test. +// { dg-options "-D_GLIBCXX_DEBUG -DITERATIONS=5" { target simulator } } +// { dg-options "-D_GLIBCXX_DEBUG" } +// { dg-timeout-factor 2.0 } + +// -*- C++ -*- + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 3, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this library; see the file COPYING3. If not see +// . + +/** + * @file trie_data_map_rand_debug.cc + * Contains a random-operation test for maps and sets, separated out. + */ + +#define PB_DS_REGRESSION +//#define PB_DS_REGRESSION_TRACE + +#include +#include +#include +#include + +#ifndef ITERATIONS +# define ITERATIONS 100 +#endif + +#ifndef KEYS +# define KEYS 200 +#endif + +// Debug version of the rand regression tests, based on trie_no_data_map. + +// 1 +// Simplify things by unrolling the typelist of the different +// container types into individual statements. +// +// Unroll the typelist represented by tree_types, from +// regression/common_type.hpp. This is just a compile-time list of 6 +// tree types, with different policies for the type of tree +// (pat_trie_tag) and for the node +// update (null_node_update, trie_order_statistics_node_update, +// trie_order_staticstics_node_update, trie_prefix_search_node_update) + +using namespace __gnu_pbds::test::detail; +using namespace __gnu_pbds; +typedef __gnu_pbds::test::basic_type basic_type; +typedef __gnu_cxx::throw_allocator_random allocator_type; +typedef __gnu_pbds::trie_string_access_traits + etraits_type; + +// pat_trie_tag +typedef trie + trie_type1; + +typedef trie + trie_type2; + +typedef trie + trie_type3; + + +// 2 +// Specialize container_rand_regression_test for specific container +// type and test function. + +#ifdef SPECIALIZE +// For testing one specific container type. +typedef trie_type1 test_type; + +void debug_break_here() { } + +namespace __gnu_pbds { + namespace test { + namespace detail { + + template<> + void + container_rand_regression_test::operator()() + { + + } + } + } +} +#endif + +int +main() +{ + // Set up the test object. + size_t sd = 1303948889; + rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true); + + // 1 + // Determine the problem container, function that fails. + test(trie_type1()); + test(trie_type2()); + test(trie_type3()); + +#ifdef SPECIALIZE + // 2 + // With specified problem container set test_type typedef + // appropriately above. Then, specialize operator()(), also + // above. Finally, run this below. + using namespace std; + test_type obj; + test(obj); +#endif + + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_no_data_map_rand_debug.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_no_data_map_rand_debug.cc new file mode 100644 index 00000000000..b075e5b5d8f --- /dev/null +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_no_data_map_rand_debug.cc @@ -0,0 +1,131 @@ +// { dg-require-time "" } +// This can take long on simulators, timing out the test. +// { dg-options "-D_GLIBCXX_DEBUG -DITERATIONS=5" { target simulator } } +// { dg-options "-D_GLIBCXX_DEBUG" } +// { dg-timeout-factor 2.0 } + +// -*- C++ -*- + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 3, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this library; see the file COPYING3. If not see +// . + +/** + * @file trie_data_map_rand_debug.cc + * Contains a random-operation test for maps and sets, separated out. + */ + +#define PB_DS_REGRESSION +//#define PB_DS_REGRESSION_TRACE + +#include +#include +#include +#include + +#ifndef ITERATIONS +# define ITERATIONS 100 +#endif + +#ifndef KEYS +# define KEYS 200 +#endif + +// Debug version of the rand regression tests, based on trie_no_data_map. + +// 1 +// Simplify things by unrolling the typelist of the different +// container types into individual statements. +// +// Unroll the typelist represented by tree_types, from +// regression/common_type.hpp. This is just a compile-time list of 6 +// tree types, with different policies for the type of tree +// (pat_trie_tag) and for the node +// update (null_node_update, trie_order_statistics_node_update, +// trie_order_staticstics_node_update, trie_prefix_search_node_update) + +using namespace __gnu_pbds::test::detail; +using namespace __gnu_pbds; +typedef __gnu_pbds::test::basic_type basic_type; +typedef __gnu_cxx::throw_allocator_random allocator_type; +typedef __gnu_pbds::trie_string_access_traits + etraits_type; + +// pat_trie_tag +typedef trie + trie_type1; + +typedef trie + trie_type2; + +typedef trie + trie_type3; + + +// 2 +// Specialize container_rand_regression_test for specific container +// type and test function. + +#ifdef SPECIALIZE +// For testing one specific container type. +typedef trie_type1 test_type; + +void debug_break_here() { } + +namespace __gnu_pbds { + namespace test { + namespace detail { + + template<> + void + container_rand_regression_test::operator()() + { + + } + } + } +} +#endif + +int +main() +{ + // Set up the test object. + size_t sd = 1303948889; + rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true); + + // 1 + // Determine the problem container, function that fails. + test(trie_type1()); + test(trie_type2()); + test(trie_type3()); + +#ifdef SPECIALIZE + // 2 + // With specified problem container set test_type typedef + // appropriately above. Then, specialize operator()(), also + // above. Finally, run this below. + using namespace std; + test_type obj; + test(obj); +#endif + + return 0; +} diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc index e1c7d9ec8df..f80c77b8a2e 100644 --- a/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc +++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -77,7 +77,7 @@ main(int argc, char* a_p_argv[]) erase_test tst(b, vn, vs, vm); typedef __gnu_test::tracker_allocator alloc_t; { - typedef hash_common_types, alloc_t>::performance_tl tl_t; + typedef hash_common_types, alloc_t>::performance_tl tl_t; tl_t tl; __gnu_cxx::typelist::apply(tst, tl); diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc index 8c0181e9868..50423db3d79 100644 --- a/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc +++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc @@ -60,9 +60,10 @@ main(int argc, char* a_p_argv[]) try { xml_test_performance_formatter fmt("Size", "Memory (bytes)"); - typedef __gnu_test::tracker_allocator callocator_type; - typedef __gnu_test::tracker_allocator sallocator_type; - typedef std::basic_string, callocator_type> string_t; + typedef __gnu_test::tracker_allocator allocator_type; + typedef std::char_traits traits_type; + typedef std::basic_string string_t; + typedef std::less cmp_type; typedef std::vector > vec_t; vec_t a_v(vm); @@ -72,18 +73,20 @@ main(int argc, char* a_p_argv[]) vec_t::const_iterator b = a_v.begin(); test_t tst(b, vn, vs, vm); { - typedef pq_common_types, callocator_type>::performance_tl pq_tl_t; + typedef pq_common_types::performance_tl pq_tl_t; pq_tl_t tl; __gnu_cxx::typelist::apply(tst, tl); } { - typedef native_priority_queue, sallocator_type> native_pq_t; + typedef native_priority_queue native_pq_t; tst(native_pq_t()); } { - typedef native_priority_queue, sallocator_type> native_pq_t; + typedef native_priority_queue native_pq_t; tst(native_pq_t()); } } diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc index 95806685ba1..eab8950a9f4 100644 --- a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc +++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -61,7 +61,7 @@ main(int argc, char* a_p_argv[]) { typedef tree_order_statistics_test< true> test_t; test_t tst(vn, vs, vm); - typedef tree_common_types, __gnu_pbds::tree_order_statistics_node_update>::performance_tl tl_t; + typedef tree_common_types, __gnu_pbds::tree_order_statistics_node_update>::performance_tl tl_t; tl_t tl; __gnu_cxx::typelist::apply(tst, tl); } diff --git a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join_timing.cc b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join_timing.cc index c10fe01cd65..a9423e2576a 100644 --- a/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join_timing.cc +++ b/libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join_timing.cc @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -62,7 +62,7 @@ main(int argc, char* a_p_argv[]) typedef tree_split_join_test test_t; test_t tst(vn, vs, vm); - typedef tree_common_types::performance_tl tl_t; + typedef tree_common_types::performance_tl tl_t; tl_t tl; __gnu_cxx::typelist::apply(tst, tl); } diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp index 562f418fa22..c95812207c2 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -49,15 +49,15 @@ namespace __gnu_pbds typename Data, class Hash_Fn = typename __gnu_pbds::detail::default_hash_fn::type, class Eq_Fn = std::equal_to, - class Allocator = std::allocator > > + typename _Alloc = std::allocator > > struct hash_common_types { private: - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_< - Allocator, + _Alloc, 1, 8, 1, 2, false> @@ -65,7 +65,7 @@ namespace __gnu_pbds typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_< - Allocator, + _Alloc, 1, 8, 1, 2, true> @@ -73,7 +73,7 @@ namespace __gnu_pbds typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_< - Allocator, + _Alloc, 1, 8, 1, 1, false> @@ -81,37 +81,34 @@ namespace __gnu_pbds typedef __gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_< - Allocator, + _Alloc, 1, 2, false> no_access_half_max_col_check_check_resize_trigger_policy; typedef __gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_< - Allocator, + _Alloc, 1, 2, true> access_half_max_col_check_check_resize_trigger_policy; - typedef __gnu_pbds::test::linear_probe_fn_t_ lin_p_t; + typedef __gnu_pbds::test::linear_probe_fn_t_ lin_p_t; - typedef __gnu_pbds::test::quadratic_probe_fn_t_ quad_p_t; + typedef __gnu_pbds::test::quadratic_probe_fn_t_ quad_p_t; typedef typename __gnu_cxx::typelist::create4< __gnu_pbds::detail::false_type, - __gnu_pbds::test::direct_mask_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>, no_access_half_load_check_resize_trigger_policy, - __gnu_pbds::test::hash_exponential_size_policy_t_< - Allocator> >::type + __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type performance_cc_policy0; typedef typename __gnu_cxx::typelist::create4< __gnu_pbds::detail::false_type, - __gnu_pbds::test::direct_mod_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc>, no_access_half_load_check_resize_trigger_policy, __gnu_pbds::test::hash_prime_size_policy_t_>::type performance_cc_policy1; @@ -119,18 +116,15 @@ namespace __gnu_pbds typedef typename __gnu_cxx::typelist::create4< __gnu_pbds::detail::false_type, - __gnu_pbds::test::direct_mask_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>, no_access_one_load_check_resize_trigger_policy, - __gnu_pbds::test::hash_exponential_size_policy_t_< - Allocator> >::type + __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type performance_cc_policy2; typedef typename __gnu_cxx::typelist::create4< __gnu_pbds::detail::false_type, - __gnu_pbds::test::direct_mod_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc>, no_access_one_load_check_resize_trigger_policy, __gnu_pbds::test::hash_prime_size_policy_t_ >::type performance_cc_policy3; @@ -138,69 +132,57 @@ namespace __gnu_pbds typedef typename __gnu_cxx::typelist::create4< __gnu_pbds::detail::true_type, - __gnu_pbds::test::direct_mask_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>, no_access_half_load_check_resize_trigger_policy, - __gnu_pbds::test::hash_exponential_size_policy_t_< - Allocator> >::type + __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type performance_cc_policy4; typedef typename __gnu_cxx::typelist::create4< __gnu_pbds::detail::false_type, - __gnu_pbds::test::direct_mask_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>, no_access_half_max_col_check_check_resize_trigger_policy, - __gnu_pbds::test::hash_exponential_size_policy_t_< - Allocator> >::type + __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type performance_cc_policy5; typedef typename __gnu_cxx::typelist::create4< __gnu_pbds::detail::false_type, - __gnu_pbds::test::direct_mask_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>, access_half_max_col_check_check_resize_trigger_policy, - __gnu_pbds::test::hash_exponential_size_policy_t_< - Allocator> >::type + __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type regression_cc_policy0; typedef typename __gnu_cxx::typelist::create4< __gnu_pbds::detail::false_type, - __gnu_pbds::test::direct_mask_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>, access_half_load_check_resize_trigger_policy, - __gnu_pbds::test::hash_exponential_size_policy_t_< - Allocator> >::type + __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type regression_cc_policy1; typedef typename __gnu_cxx::typelist::create4< __gnu_pbds::detail::true_type, - __gnu_pbds::test::direct_mod_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc>, no_access_half_load_check_resize_trigger_policy, - __gnu_pbds::test::hash_prime_size_policy_t_ >::type + __gnu_pbds::test::hash_prime_size_policy_t_>::type regression_cc_policy2; typedef typename __gnu_cxx::typelist::create5< __gnu_pbds::detail::false_type, lin_p_t, - __gnu_pbds::test::direct_mask_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>, no_access_half_load_check_resize_trigger_policy, - __gnu_pbds::test::hash_exponential_size_policy_t_< - Allocator> >::type + __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type performance_gp_policy0; typedef typename __gnu_cxx::typelist::create5< __gnu_pbds::detail::false_type, quad_p_t, - __gnu_pbds::test::direct_mod_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc>, no_access_half_load_check_resize_trigger_policy, __gnu_pbds::test::hash_prime_size_policy_t_ >::type performance_gp_policy1; @@ -209,8 +191,7 @@ namespace __gnu_pbds typename __gnu_cxx::typelist::create5< __gnu_pbds::detail::false_type, quad_p_t, - __gnu_pbds::test::direct_mod_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc>, access_half_load_check_resize_trigger_policy, __gnu_pbds::test::hash_prime_size_policy_t_>::type regression_gp_policy0; @@ -219,11 +200,9 @@ namespace __gnu_pbds typename __gnu_cxx::typelist::create5< __gnu_pbds::detail::true_type, lin_p_t, - __gnu_pbds::test::direct_mask_range_hashing_t_< - Allocator>, + __gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc>, access_half_load_check_resize_trigger_policy, - __gnu_pbds::test::hash_exponential_size_policy_t_< - Allocator> >::type + __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> >::type regression_gp_policy1; typedef @@ -260,8 +239,7 @@ namespace __gnu_pbds { private: typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 0>::type + typename __gnu_cxx::typelist::at_index::type store_hash_indicator; enum @@ -269,19 +247,13 @@ namespace __gnu_pbds store_hash = store_hash_indicator::value }; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 1>::type + typedef typename __gnu_cxx::typelist::at_index::type comb_hash_fn; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 2>::type + typedef typename __gnu_cxx::typelist::at_index::type trigger_policy; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 3>::type + typedef typename __gnu_cxx::typelist::at_index::type size_policy; public: @@ -292,12 +264,10 @@ namespace __gnu_pbds Hash_Fn, Eq_Fn, comb_hash_fn, - __gnu_pbds::hash_standard_resize_policy< - size_policy, - trigger_policy, - false>, + __gnu_pbds::hash_standard_resize_policy, store_hash, - Allocator> + _Alloc> type; }; @@ -306,8 +276,7 @@ namespace __gnu_pbds { private: typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 0>::type + typename __gnu_cxx::typelist::at_index::type store_hash_indicator; enum @@ -315,19 +284,13 @@ namespace __gnu_pbds store_hash = store_hash_indicator::value }; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 1>::type + typedef typename __gnu_cxx::typelist::at_index::type comb_hash_fn; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 2>::type + typedef typename __gnu_cxx::typelist::at_index::type trigger_policy; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 3>::type + typedef typename __gnu_cxx::typelist::at_index::type size_policy; public: @@ -338,12 +301,10 @@ namespace __gnu_pbds Hash_Fn, Eq_Fn, comb_hash_fn, - __gnu_pbds::hash_standard_resize_policy< - size_policy, - trigger_policy, - true>, + __gnu_pbds::hash_standard_resize_policy, store_hash, - Allocator> + _Alloc> type; }; @@ -351,9 +312,7 @@ namespace __gnu_pbds struct no_access_generic_gp_hash_table_t { private: - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 0>::type + typedef typename __gnu_cxx::typelist::at_index::type store_hash_indicator; enum @@ -361,24 +320,16 @@ namespace __gnu_pbds store_hash = store_hash_indicator::value }; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 1>::type + typedef typename __gnu_cxx::typelist::at_index::type probe_fn; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 2>::type + typedef typename __gnu_cxx::typelist::at_index::type comb_probe_fn; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 3>::type + typedef typename __gnu_cxx::typelist::at_index::type trigger_policy; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 4>::type + typedef typename __gnu_cxx::typelist::at_index::type size_policy; public: @@ -390,12 +341,10 @@ namespace __gnu_pbds Eq_Fn, comb_probe_fn, probe_fn, - __gnu_pbds::hash_standard_resize_policy< - size_policy, - trigger_policy, - false>, + __gnu_pbds::hash_standard_resize_policy, store_hash, - Allocator> + _Alloc> type; }; @@ -403,9 +352,7 @@ namespace __gnu_pbds struct access_generic_gp_hash_table_t { private: - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 0>::type + typedef typename __gnu_cxx::typelist::at_index::type store_hash_indicator; enum @@ -413,24 +360,16 @@ namespace __gnu_pbds store_hash = store_hash_indicator::value }; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 1>::type + typedef typename __gnu_cxx::typelist::at_index::type probe_fn; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 2>::type + typedef typename __gnu_cxx::typelist::at_index::type comb_probe_fn; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 3>::type + typedef typename __gnu_cxx::typelist::at_index::type trigger_policy; - typedef - typename __gnu_cxx::typelist::at_index< - Policy_Tl, 4>::type + typedef typename __gnu_cxx::typelist::at_index::type size_policy; public: @@ -442,12 +381,10 @@ namespace __gnu_pbds Eq_Fn, comb_probe_fn, probe_fn, - __gnu_pbds::hash_standard_resize_policy< - size_policy, - trigger_policy, - true>, + __gnu_pbds::hash_standard_resize_policy, store_hash, - Allocator> + _Alloc> type; }; @@ -512,19 +449,15 @@ namespace __gnu_pbds class Comb_Probe_Fn_TL, class Eq_Fn = std::equal_to, - class Allocator = - std::allocator< - std::pair< - const Key, - Data> > > + typename _Alloc = std::allocator > > struct ranged_hash_common_types { private: - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_< - Allocator, + _Alloc, 1, 8, 1, 2, false> @@ -532,7 +465,7 @@ namespace __gnu_pbds typedef __gnu_pbds::test::hash_load_check_resize_trigger_t_< - Allocator, + _Alloc, 1, 8, 1, 1, false> @@ -541,14 +474,14 @@ namespace __gnu_pbds typedef __gnu_pbds::hash_standard_resize_policy< __gnu_pbds::test::hash_exponential_size_policy_t_< - Allocator>, + _Alloc>, no_access_half_load_check_resize_trigger_policy> mask_half_resize_policy_t; typedef __gnu_pbds::hash_standard_resize_policy< __gnu_pbds::test::hash_exponential_size_policy_t_< - Allocator>, + _Alloc>, no_access_one_load_check_resize_trigger_policy> mask_one_resize_policy_t; @@ -567,18 +500,14 @@ namespace __gnu_pbds template struct half_resize_policy_selector; - template - struct half_resize_policy_selector< - __gnu_pbds::test::direct_mask_range_hashing_t_< - Allocator_> > + template + struct half_resize_policy_selector<__gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc_> > { typedef mask_half_resize_policy_t type; }; - template - struct half_resize_policy_selector< - __gnu_pbds::test::direct_mod_range_hashing_t_< - Allocator_> > + template + struct half_resize_policy_selector<__gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc_> > { typedef mod_half_resize_policy_t type; }; @@ -586,18 +515,14 @@ namespace __gnu_pbds template struct one_resize_policy_selector; - template - struct one_resize_policy_selector< - __gnu_pbds::test::direct_mask_range_hashing_t_< - Allocator_> > + template + struct one_resize_policy_selector<__gnu_pbds::test::direct_mask_range_hashing_t_<_Alloc_> > { typedef mask_one_resize_policy_t type; }; - template - struct one_resize_policy_selector< - __gnu_pbds::test::direct_mod_range_hashing_t_< - Allocator_> > + template + struct one_resize_policy_selector<__gnu_pbds::test::direct_mod_range_hashing_t_<_Alloc_> > { typedef mod_one_resize_policy_t type; }; @@ -609,13 +534,11 @@ namespace __gnu_pbds __gnu_pbds::cc_hash_table< Key, Data, - __gnu_pbds::null_hash_fn, + __gnu_pbds::null_type, Eq_Fn, Comb_Hash_Fn, - typename one_resize_policy_selector< - typename Comb_Hash_Fn::comb_fn>::type, - false, - Allocator> + typename one_resize_policy_selector::type, + false, _Alloc> type; }; @@ -632,14 +555,13 @@ namespace __gnu_pbds __gnu_pbds::gp_hash_table< Key, Data, - __gnu_pbds::null_hash_fn, + __gnu_pbds::null_type, Eq_Fn, Comb_Probe_Fn, - __gnu_pbds::null_probe_fn, - typename half_resize_policy_selector< - typename Comb_Probe_Fn::comb_fn>::type, + __gnu_pbds::null_type, + typename half_resize_policy_selector::type, false, - Allocator> + _Alloc> type; }; @@ -658,16 +580,15 @@ namespace __gnu_pbds }; template, - class Allocator = - std::allocator > + typename _Alloc = std::allocator > class lu_common_types { private: - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; - typedef __gnu_pbds::test::move_to_front_lu_policy_t_ mtf_u; + typedef __gnu_pbds::test::lu_move_to_front_policy_t_ mtf_u; - typedef __gnu_pbds::test::counter_lu_policy_t_ cnt_5_u; + typedef __gnu_pbds::test::lu_counter_policy_t_<_Alloc, 5> cnt_5_u; typedef typename __gnu_cxx::typelist::create1::type lu_policy0; @@ -687,20 +608,17 @@ namespace __gnu_pbds public: typedef - __gnu_pbds::list_update + __gnu_pbds::list_update type; }; typedef - typename __gnu_cxx::typelist::transform< - lu_policies, + typename __gnu_cxx::typelist::transform::type lu_types; typedef - typename __gnu_cxx::typelist::at_index< - lu_types, - 0>::type + typename __gnu_cxx::typelist::at_index::type min_lu_type; public: @@ -711,12 +629,12 @@ namespace __gnu_pbds }; template, - template - class Node_Update = __gnu_pbds::null_tree_node_update, - class Allocator = std::allocator > > + typename _Alloc_> + class Node_Update = __gnu_pbds::null_node_update, + typename _Alloc = std::allocator > > struct tree_common_types { private: @@ -727,7 +645,7 @@ namespace __gnu_pbds Cmp_Fn, __gnu_pbds::ov_tree_tag, Node_Update, - Allocator> + _Alloc> ov_tree_assoc_container_t; typedef @@ -737,7 +655,7 @@ namespace __gnu_pbds Cmp_Fn, __gnu_pbds::rb_tree_tag, Node_Update, - Allocator> + _Alloc> rb_tree_assoc_container_t; typedef @@ -747,7 +665,7 @@ namespace __gnu_pbds Cmp_Fn, __gnu_pbds::splay_tree_tag, Node_Update, - Allocator> + _Alloc> splay_tree_assoc_container_t; public: @@ -773,19 +691,19 @@ namespace __gnu_pbds template::type, + class _ATraits = + typename __gnu_pbds::detail::default_trie_access_traits::type, class Tag = __gnu_pbds::pat_trie_tag, - template - class Node_Update = __gnu_pbds::null_trie_node_update, - class Allocator = std::allocator > + template + class Node_Update = __gnu_pbds::null_node_update, + typename _Alloc = std::allocator > class trie_common_types { private: - typedef __gnu_pbds::trie type; + typedef __gnu_pbds::trie type; public: typedef typename __gnu_cxx::typelist::create1::type performance_tl; diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp index 9ee5c4dd7d5..b7650451f13 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -139,7 +139,7 @@ namespace __gnu_pbds const std::string node_update_str = make_xml_tag("Node_Update", "value",(tree_supports_order_statistics::value ? - "tree_order_statistics_node_update" : "null_tree_node_update")); + "tree_order_statistics_node_update" : "null_node_update")); return make_xml_tag("type", "value", "tree", category_str + node_update_str); } @@ -239,7 +239,7 @@ namespace __gnu_pbds else if (trie_supports_prefix_search::value) s = "trie_prefix_search_node_update"; else - s = "null_trie_node_update"; + s = "null_node_update"; std::string node_s = make_xml_tag("Node_Update", "value", s); return make_xml_tag("type", "value", "trie", category_s + node_s); } diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp index ed3747fa1c5..9f3e6bdf9ba 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp @@ -54,7 +54,7 @@ namespace __gnu_pbds struct lu_policy_string_form; template<> - struct lu_policy_string_form + struct lu_policy_string_form { static std::string name() @@ -64,12 +64,12 @@ namespace __gnu_pbds desc() { return make_xml_tag("Update_Policy", "value", - "move_to_front_lu_policy"); + "lu_move_to_front_policy"); } }; - template - struct lu_policy_string_form > + template + struct lu_policy_string_form > { static std::string name() @@ -82,7 +82,7 @@ namespace __gnu_pbds static std::string desc() { - return (make_xml_tag("Update_Policy", "value", "counter_lu_policy", + return (make_xml_tag("Update_Policy", "value", "lu_counter_policy", "Max_Count", Max_Count)); } }; diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp index 15cbbfda51f..cb874d28b58 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp @@ -53,8 +53,8 @@ namespace __gnu_pbds template struct probe_fn_string_form; - template - struct probe_fn_string_form > + template + struct probe_fn_string_form > { static std::string name() @@ -65,8 +65,8 @@ namespace __gnu_pbds { return make_xml_tag("Probe_Fn", "value", "linear_probe_fn"); } }; - template - struct probe_fn_string_form > + template + struct probe_fn_string_form > { static std::string name() @@ -78,7 +78,7 @@ namespace __gnu_pbds }; template<> - struct probe_fn_string_form<__gnu_pbds::null_probe_fn> + struct probe_fn_string_form<__gnu_pbds::null_type> { static std::string name() @@ -86,7 +86,7 @@ namespace __gnu_pbds static std::string desc() - { return make_xml_tag("Probe_Fn", "value", "null_probe_fn"); } + { return make_xml_tag("Probe_Fn", "value", "null_type"); } }; } // namespace detail diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp index d2b61facb2e..65655d71387 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp @@ -55,9 +55,9 @@ namespace __gnu_pbds template struct size_policy_string_form; - template + template struct size_policy_string_form< - __gnu_pbds::test::hash_exponential_size_policy_t_ > + __gnu_pbds::test::hash_exponential_size_policy_t_<_Alloc> > { static std::string name() diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp index 80c1abe54aa..a6322798988 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp @@ -56,7 +56,7 @@ namespace __gnu_pbds value = __gnu_pbds::detail::is_same< typename Tree_Cntnr::node_update, __gnu_pbds::tree_order_statistics_node_update< - typename Tree_Cntnr::const_node_iterator, + typename Tree_Cntnr::node_const_iterator, typename Tree_Cntnr::node_iterator, typename Tree_Cntnr::cmp_fn, typename Tree_Cntnr::allocator_type> >::value diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp index fc9cacc630a..925be58d47f 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp @@ -56,9 +56,9 @@ namespace __gnu_pbds value = __gnu_pbds::detail::is_same< typename Tree_Cntnr::node_update, __gnu_pbds::trie_order_statistics_node_update< - typename Tree_Cntnr::const_node_iterator, + typename Tree_Cntnr::node_const_iterator, typename Tree_Cntnr::node_iterator, - typename Tree_Cntnr::e_access_traits, + typename Tree_Cntnr::access_traits, typename Tree_Cntnr::allocator_type> >::value }; }; diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp index 20c52101015..b73335e0aab 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp @@ -56,9 +56,9 @@ namespace __gnu_pbds value = __gnu_pbds::detail::is_same< typename Tree_Cntnr::node_update, __gnu_pbds::trie_prefix_search_node_update< - typename Tree_Cntnr::const_node_iterator, + typename Tree_Cntnr::node_const_iterator, typename Tree_Cntnr::node_iterator, - typename Tree_Cntnr::e_access_traits, + typename Tree_Cntnr::access_traits, typename Tree_Cntnr::allocator_type> >::value }; }; diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp index be4fe264fa5..0d98fea7feb 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp @@ -53,15 +53,15 @@ namespace __gnu_pbds template struct trigger_policy_string_form; - template struct trigger_policy_string_form< __gnu_pbds::test::hash_load_check_resize_trigger_t_< - Allocator, + _Alloc, Min_Load_Nom, Min_Load_Denom, Max_Load_Nom, @@ -95,13 +95,13 @@ namespace __gnu_pbds } }; - template struct trigger_policy_string_form< __gnu_pbds::test::cc_hash_max_collision_check_resize_trigger_t_< - Allocator, + _Alloc, Load_Nom, Load_Denom, External_Access> > diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp index a2655fe759d..bcee0a8eb03 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp @@ -47,11 +47,11 @@ namespace __gnu_pbds namespace test { template, - class Allocator = std::allocator > + typename _Alloc = std::allocator > class native_set : public PB_DS_BASE_C_DEC { private: - typedef std::set::other> base_type; + typedef std::set::other> base_type; public: typedef native_tree_tag container_category; diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp index d7825ac63fa..35e7ddd152a 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp @@ -109,11 +109,11 @@ namespace __gnu_pbds { return (""); } static std::string - name(__gnu_pbds::null_mapped_type) + name(__gnu_pbds::null_type) { return ("set"); } static std::string - desc(__gnu_pbds::null_mapped_type) + desc(__gnu_pbds::null_type) { return (""); } public: diff --git a/libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp b/libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp index 86db029e22b..14d20dc08bb 100644 --- a/libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp +++ b/libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp @@ -46,33 +46,33 @@ namespace __gnu_pbds { namespace test { - template + template struct direct_mask_range_hashing_t_ - : public __gnu_pbds::direct_mask_range_hashing + : public __gnu_pbds::direct_mask_range_hashing { - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef __gnu_pbds::direct_mask_range_hashing base_type; }; - template + template struct direct_mod_range_hashing_t_ - : public __gnu_pbds::direct_mod_range_hashing + : public __gnu_pbds::direct_mod_range_hashing { - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef __gnu_pbds::direct_mod_range_hashing base_type; }; - template struct hash_load_check_resize_trigger_t_ : public __gnu_pbds::hash_load_check_resize_trigger + typename _Alloc::size_type> { - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef __gnu_pbds::hash_load_check_resize_trigger base_type; inline @@ -87,15 +87,15 @@ namespace __gnu_pbds }; }; - template struct cc_hash_max_collision_check_resize_trigger_t_ : public __gnu_pbds::cc_hash_max_collision_check_resize_trigger + typename _Alloc::size_type> { - typedef typename Allocator::size_type size_type; + typedef typename _Alloc::size_type size_type; typedef __gnu_pbds::cc_hash_max_collision_check_resize_trigger base_type; inline @@ -113,30 +113,30 @@ namespace __gnu_pbds struct hash_prime_size_policy_t_ : public __gnu_pbds::hash_prime_size_policy { }; - template + template struct hash_exponential_size_policy_t_ - : public __gnu_pbds::hash_exponential_size_policy + : public __gnu_pbds::hash_exponential_size_policy { }; - template + template struct linear_probe_fn_t_ - : public __gnu_pbds::linear_probe_fn + : public __gnu_pbds::linear_probe_fn { }; - template + template struct quadratic_probe_fn_t_ - : public __gnu_pbds::quadratic_probe_fn + : public __gnu_pbds::quadratic_probe_fn { }; - template - struct counter_lu_policy_t_ - : public __gnu_pbds::counter_lu_policy + template + struct lu_counter_policy_t_ + : public __gnu_pbds::lu_counter_policy { - typedef __gnu_pbds::counter_lu_policy base_type; + typedef __gnu_pbds::lu_counter_policy base_type; }; - struct move_to_front_lu_policy_t_ - : public __gnu_pbds::move_to_front_lu_policy<> + struct lu_move_to_front_policy_t_ + : public __gnu_pbds::lu_move_to_front_policy<> { }; } // namespace test } // namespace __gnu_pbds diff --git a/libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp b/libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp index cc79b3eeca1..b486c8c9c90 100644 --- a/libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp +++ b/libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp @@ -46,19 +46,19 @@ namespace __gnu_pbds namespace test { template, - class Allocator = std::allocator > + typename _Alloc = std::allocator > struct pq_common_types { private: - typedef __gnu_pbds::priority_queue pairing_heap_t; + typedef __gnu_pbds::priority_queue pairing_heap_t; - typedef __gnu_pbds::priority_queue binomial_heap_t; + typedef __gnu_pbds::priority_queue binomial_heap_t; - typedef __gnu_pbds::priority_queue rc_binomial_heap_t; + typedef __gnu_pbds::priority_queue rc_binomial_heap_t; - typedef __gnu_pbds::priority_queue binary_heap_t; + typedef __gnu_pbds::priority_queue binary_heap_t; - typedef __gnu_pbds::priority_queue thin_heap_t; + typedef __gnu_pbds::priority_queue thin_heap_t; typedef typename __gnu_cxx::typelist::create5::type all_tl; diff --git a/libstdc++-v3/testsuite/util/native_type/native_hash_map.hpp b/libstdc++-v3/testsuite/util/native_type/native_hash_map.hpp index 6fa3667f309..acfa584c6c1 100644 --- a/libstdc++-v3/testsuite/util/native_type/native_hash_map.hpp +++ b/libstdc++-v3/testsuite/util/native_type/native_hash_map.hpp @@ -50,7 +50,7 @@ namespace __gnu_pbds { #define PB_DS_BASE_C_DEC \ std::tr1::__unordered_map >::other, Cache_Hash> + typename _Alloc::template rebind >::other, Cache_Hash> template::type, typename Eq_Fn = std::equal_to, typename Less_Fn = std::less, - typename Allocator = std::allocator, bool Cache_Hash = false + typename _Alloc = std::allocator, bool Cache_Hash = false > class native_hash_map : public PB_DS_BASE_C_DEC { diff --git a/libstdc++-v3/testsuite/util/native_type/native_hash_multimap.hpp b/libstdc++-v3/testsuite/util/native_type/native_hash_multimap.hpp index 8273edf36d6..8008a0e89bf 100644 --- a/libstdc++-v3/testsuite/util/native_type/native_hash_multimap.hpp +++ b/libstdc++-v3/testsuite/util/native_type/native_hash_multimap.hpp @@ -49,7 +49,7 @@ namespace __gnu_pbds namespace test { #define PB_DS_BASE_C_DEC \ - std::tr1::unordered_multimap + std::tr1::unordered_multimap template::type, class Eq_Fn = std::equal_to, class Less_Fn = std::less, - class Allocator = std::allocator > + typename _Alloc = std::allocator > class native_hash_multimap : public PB_DS_BASE_C_DEC { private: @@ -66,7 +66,7 @@ namespace __gnu_pbds public: typedef native_hash_tag container_category; - typedef Allocator allocator; + typedef _Alloc allocator; typedef typename base_type::iterator iterator; typedef typename base_type::const_iterator const_iterator; diff --git a/libstdc++-v3/testsuite/util/native_type/native_hash_set.hpp b/libstdc++-v3/testsuite/util/native_type/native_hash_set.hpp index d3f45962493..dac0c11eab9 100644 --- a/libstdc++-v3/testsuite/util/native_type/native_hash_set.hpp +++ b/libstdc++-v3/testsuite/util/native_type/native_hash_set.hpp @@ -50,14 +50,14 @@ namespace __gnu_pbds { #define PB_DS_BASE_C_DEC \ std::tr1::__unordered_set::other, Cache_Hash> + typename _Alloc::template rebind::other, Cache_Hash> template::type, typename Eq_Fn = std::equal_to, typename Less_Fn = std::less, - typename Allocator = std::allocator, bool Cache_Hash = false + typename _Alloc = std::allocator, bool Cache_Hash = false > class native_hash_set : public PB_DS_BASE_C_DEC { diff --git a/libstdc++-v3/testsuite/util/native_type/native_map.hpp b/libstdc++-v3/testsuite/util/native_type/native_map.hpp index 29170cae8e9..0fae6b15c1c 100644 --- a/libstdc++-v3/testsuite/util/native_type/native_map.hpp +++ b/libstdc++-v3/testsuite/util/native_type/native_map.hpp @@ -50,10 +50,10 @@ namespace __gnu_pbds { #define PB_DS_BASE_C_DEC \ std::map >::other > +typename _Alloc::template rebind >::other > template, - class Allocator = std::allocator > + typename _Alloc = std::allocator > class native_map : public PB_DS_BASE_C_DEC { private: diff --git a/libstdc++-v3/testsuite/util/native_type/native_multimap.hpp b/libstdc++-v3/testsuite/util/native_type/native_multimap.hpp index 4bda5562d1f..c29bfb68e57 100644 --- a/libstdc++-v3/testsuite/util/native_type/native_multimap.hpp +++ b/libstdc++-v3/testsuite/util/native_type/native_multimap.hpp @@ -48,10 +48,10 @@ namespace __gnu_pbds { #define PB_DS_BASE_C_DEC \ std::multimap >::other> + typename _Alloc::template rebind >::other> template, - class Allocator = std::allocator > + typename _Alloc = std::allocator > class native_multimap : public PB_DS_BASE_C_DEC { private: @@ -60,10 +60,10 @@ namespace __gnu_pbds public: typedef native_tree_tag container_category; - typedef Allocator allocator; + typedef _Alloc allocator; typedef - typename Allocator::template rebind< + typename _Alloc::template rebind< std::pair >::other::const_reference const_reference; diff --git a/libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp b/libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp index dad913fa0ab..b2c79410340 100644 --- a/libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp +++ b/libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp @@ -51,21 +51,21 @@ namespace __gnu_pbds { namespace detail { - template + template struct base_seq { private: - typedef typename Allocator::template rebind value_rebind; + typedef typename _Alloc::template rebind value_rebind; public: typedef std::vector type; }; - template - struct base_seq + template + struct base_seq { private: - typedef typename Allocator::template rebind value_rebind; + typedef typename _Alloc::template rebind value_rebind; public: typedef std::deque type; @@ -76,20 +76,20 @@ namespace __gnu_pbds { }; #define PB_DS_CLASS_C_DEC \ - native_priority_queue + native_priority_queue #define PB_DS_BASE_C_DEC \ - std::priority_queue::type, Cmp_Fn> + std::priority_queue::type, Cmp_Fn> template, - typename Allocator = std::allocator > + typename _Alloc = std::allocator > class native_priority_queue : public PB_DS_BASE_C_DEC { private: typedef PB_DS_BASE_C_DEC base_type; - typedef typename Allocator::template rebind value_rebind; + typedef typename _Alloc::template rebind value_rebind; public: typedef Value_Type value_type; diff --git a/libstdc++-v3/testsuite/util/native_type/native_set.hpp b/libstdc++-v3/testsuite/util/native_type/native_set.hpp index c9f448bf16e..c4909c726f3 100644 --- a/libstdc++-v3/testsuite/util/native_type/native_set.hpp +++ b/libstdc++-v3/testsuite/util/native_type/native_set.hpp @@ -48,10 +48,10 @@ namespace __gnu_pbds namespace test { #define PB_DS_BASE_C_DEC \ - std::set::other> + std::set::other> template, - class Allocator = std::allocator > + typename _Alloc = std::allocator > class native_set : public PB_DS_BASE_C_DEC { private: diff --git a/libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp b/libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp index e31abe106e6..b4b07ea2755 100644 --- a/libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp +++ b/libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp @@ -53,35 +53,35 @@ namespace __gnu_pbds { return (static_cast(i)); } }; - template > + template > struct hash_set_tl_t { typedef typename __gnu_pbds::test::hash_common_types< Key, - __gnu_pbds::null_mapped_type, + __gnu_pbds::null_type, int_hash, std::equal_to, - Allocator>::performance_min_tl + _Alloc>::performance_min_tl type; }; - template > + template > struct lu_set_tl_t { typedef typename __gnu_pbds::test::lu_common_types< Key, - __gnu_pbds::null_mapped_type, + __gnu_pbds::null_type, std::equal_to< Key>, - Allocator>::performance_min_tl + _Alloc>::performance_min_tl type; }; template > + typename _Alloc = std::allocator > struct hash_mmap_tl_t { private: @@ -104,7 +104,7 @@ namespace __gnu_pbds hash_fn_t, std::equal_to< Key>, - Allocator>::performance_min_tl + _Alloc>::performance_min_tl type; }; @@ -119,7 +119,7 @@ namespace __gnu_pbds template > + typename _Alloc = std::allocator > struct tree_mmap_tl_t { private: @@ -132,8 +132,8 @@ namespace __gnu_pbds Cntnr_T, std::less< Key>, - __gnu_pbds::null_tree_node_update, - Allocator>::performance_min_tl + __gnu_pbds::null_node_update, + _Alloc>::performance_min_tl type; }; @@ -146,65 +146,65 @@ namespace __gnu_pbds type; }; - template + template struct hash_hash_mmap_tl_t { private: - typedef typename hash_set_tl_t::type sec_tl_t; + typedef typename hash_set_tl_t::type sec_tl_t; public: - typedef typename hash_mmap_tl_t::type type; + typedef typename hash_mmap_tl_t::type type; }; - template + template struct tree_hash_mmap_tl_t { private: - typedef typename hash_set_tl_t::type sec_tl_t; + typedef typename hash_set_tl_t::type sec_tl_t; public: - typedef typename tree_mmap_tl_t::type type; + typedef typename tree_mmap_tl_t::type type; }; - template + template struct tree_lu_mmap_tl_t { private: - typedef typename lu_set_tl_t::type sec_tl_t; + typedef typename lu_set_tl_t::type sec_tl_t; public: - typedef typename tree_mmap_tl_t::type type; + typedef typename tree_mmap_tl_t::type type; }; - template + template struct hash_lu_mmap_tl_t { private: - typedef typename lu_set_tl_t::type sec_tl_t; + typedef typename lu_set_tl_t::type sec_tl_t; public: - typedef typename hash_mmap_tl_t::type type; + typedef typename hash_mmap_tl_t::type type; }; } // namespace detail - template + template struct mmap_tl_t { private: typedef - typename detail::hash_hash_mmap_tl_t::type + typename detail::hash_hash_mmap_tl_t::type hh_mmap_tl_t; typedef - typename detail::hash_lu_mmap_tl_t::type + typename detail::hash_lu_mmap_tl_t::type hl_mmap_tl_t; typedef - typename detail::tree_hash_mmap_tl_t::type + typename detail::tree_hash_mmap_tl_t::type th_mmap_tl_t; typedef - typename detail::tree_lu_mmap_tl_t::type + typename detail::tree_lu_mmap_tl_t::type tl_mmap_tl_t; public: diff --git a/libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp b/libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp index a553afeaba3..298443d3145 100644 --- a/libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp +++ b/libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp @@ -48,7 +48,7 @@ namespace __gnu_pbds typedef __gnu_pbds::test::hash_common_types< int, - __gnu_pbds::null_mapped_type>::tl + __gnu_pbds::null_type>::tl hash_set_tl_t; template @@ -72,7 +72,7 @@ namespace __gnu_pbds typedef __gnu_pbds::test::tree_common_types< int, - __gnu_pbds::null_mapped_type>::tl + __gnu_pbds::null_type>::tl tree_set_tl_t; template diff --git a/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp b/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp index 7e3f95bfc0c..18d2c6badce 100644 --- a/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp +++ b/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp @@ -60,7 +60,7 @@ namespace __gnu_pbds operator()(std::size_t resolution) { size_t not_found_count = 0; - typedef typename Cntnr::const_point_iterator iterator_type; + typedef typename Cntnr::point_const_iterator iterator_type; for (std::size_t i = 0; i < resolution; ++i) { iterator_type end = m_r_container.end(); diff --git a/libstdc++-v3/testsuite/util/regression/common_type.hpp b/libstdc++-v3/testsuite/util/regression/common_type.hpp index 37705bc2d7d..bcfc3bcd9fe 100644 --- a/libstdc++-v3/testsuite/util/regression/common_type.hpp +++ b/libstdc++-v3/testsuite/util/regression/common_type.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2008, 2009, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -64,13 +64,13 @@ namespace test } }; - typedef __gnu_pbds::string_trie_e_access_traits e_access_traits_t; + typedef __gnu_pbds::trie_string_access_traits access_traits_t; template struct tree_types { private: - typedef typename tree_common_types, __gnu_pbds::null_tree_node_update, alloc_type>::regression_tl no_order_statistics_tl_t; + typedef typename tree_common_types, __gnu_pbds::null_node_update, alloc_type>::regression_tl no_order_statistics_tl_t; typedef typename tree_common_types, __gnu_pbds::tree_order_statistics_node_update, alloc_type>::regression_tl order_statistics_tl_t; @@ -84,11 +84,11 @@ namespace test struct trie_types { private: - typedef typename trie_common_types::regression_tl no_updates_tl_t; + typedef typename trie_common_types::regression_tl no_updates_tl_t; - typedef typename trie_common_types::regression_tl order_statistics_tl_t; + typedef typename trie_common_types::regression_tl order_statistics_tl_t; - typedef typename trie_common_types::regression_tl prefix_search_tl_t; + typedef typename trie_common_types::regression_tl prefix_search_tl_t; public: typedef typename __gnu_cxx::typelist::append::type>::type tl_t; @@ -160,32 +160,27 @@ namespace test }; - namespace detail - { - - }; - typedef vector_adaptor vector_type; typedef __gnu_cxx::typelist::create1::type vector_tl_t; // Associative types. - typedef tree_types::tl_t tree_set_tl_t; - typedef tree_types::min_tl_t min_tree_set_tl_t; + typedef tree_types::tl_t tree_set_tl_t; + typedef tree_types::min_tl_t min_tree_set_tl_t; typedef tree_types::tl_t tree_map_tl_t; typedef tree_types::min_tl_t min_tree_map_tl_t; - typedef hash_types::tl_t hash_set_tl_t; - typedef hash_types::min_tl_t min_hash_set_tl_t; + typedef hash_types::tl_t hash_set_tl_t; + typedef hash_types::min_tl_t min_hash_set_tl_t; typedef hash_types::tl_t hash_map_tl_t; typedef hash_types::min_tl_t min_hash_map_tl_t; - typedef lu_types::tl_t lu_set_tl_t; - typedef lu_types::min_tl_t min_lu_set_tl_t; + typedef lu_types::tl_t lu_set_tl_t; + typedef lu_types::min_tl_t min_lu_set_tl_t; typedef lu_types::tl_t lu_map_tl_t; typedef lu_types::min_tl_t min_lu_map_tl_t; - typedef trie_types::tl_t trie_set_tl_t; - typedef trie_types::min_tl_t min_trie_set_tl_t; + typedef trie_types::tl_t trie_set_tl_t; + typedef trie_types::min_tl_t min_trie_set_tl_t; typedef trie_types::tl_t trie_map_tl_t; typedef trie_types::min_tl_t min_trie_map_tl_t; } // namespace test diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h index ca443321216..48823bf04d0 100644 --- a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h +++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h @@ -75,7 +75,7 @@ namespace detail typedef typename cntnr::size_type size_type; typedef regression_test_traits test_traits; typedef typename test_traits::key_type key_type; - typedef typename test_traits::const_key_reference const_key_reference; + typedef typename test_traits::key_const_reference key_const_reference; typedef typename test_traits::value_type value_type; typedef typename test_traits::native_type native_type; typedef twister_rand_gen gen; diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc index 0f158664853..7cc724a95f5 100644 --- a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc +++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc @@ -131,7 +131,7 @@ assignment_operator() try { p_c = new Cntnr(); - * p_c =* m_p_c; + *p_c = *m_p_c; std::swap(p_c, m_p_c); } catch(__gnu_cxx::forced_error&) @@ -379,12 +379,12 @@ it_constructor_imp(__gnu_pbds::pat_trie_tag) switch(get_next_sub_op(2)) { case 0: - p_c = new Cntnr(m_p_c->get_e_access_traits()); + p_c = new Cntnr(m_p_c->get_access_traits()); m_native_c.clear(); break; case 1: p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), - m_p_c->get_e_access_traits()); + m_p_c->get_access_traits()); break; default: PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c); @@ -450,7 +450,7 @@ basic_cmp_(const Cntnr& r_c, const native_type& r_native_c) m_alloc.set_probability(0); const key_type k = native_key; m_alloc.set_probability(1); - typename cntnr::const_point_iterator found_it = r_c.find(k); + typename cntnr::point_const_iterator found_it = r_c.find(k); PB_DS_THROW_IF_FAILED(found_it != r_c.end(), test_traits::native_val_to_string(*it), &r_c, &r_native_c); @@ -482,7 +482,7 @@ cmp_(const Cntnr& r_c, const native_type& r_native_c) prefix_search = test_traits::prefix_search, has_mapped = !__gnu_pbds::detail::is_same< typename Cntnr::mapped_type, - __gnu_pbds::null_mapped_type>::value + __gnu_pbds::null_type>::value }; order_preserving_cmp_imp(r_c, r_native_c, @@ -960,16 +960,16 @@ operator()() break; case 1: PB_DS_RUN_MTHD(copy_constructor) - break; + break; case 2: PB_DS_RUN_MTHD(it_constructor) - break; + break; case 3: PB_DS_RUN_MTHD(assignment_operator) - break; + break; case 4: PB_DS_RUN_MTHD(split_join) - break; + break; case 5: resize(); break; @@ -1072,8 +1072,8 @@ insert() m_alloc.set_probability(0); value_type v = test_traits::generate_value(m_g, m_m); m_alloc.set_probability(m_tp); - const_key_reference r_k = test_traits::extract_key(v); - typename cntnr::const_point_iterator found_it = m_p_c->find(r_k); + key_const_reference r_k = test_traits::extract_key(v); + typename cntnr::point_const_iterator found_it = m_p_c->find(r_k); const bool existed = (found_it != m_p_c->end()); const std::pair ins_ret = m_p_c->insert(v); @@ -1113,7 +1113,7 @@ subscript() enum { no_data = __gnu_pbds::detail::is_same< - typename Cntnr::const_key_reference, + typename Cntnr::key_const_reference, typename Cntnr::const_reference>::value }; @@ -1161,7 +1161,7 @@ subscript_imp(__gnu_pbds::detail::true_type) m_alloc.set_probability(0); value_type v = test_traits::generate_value(m_g, m_m); m_alloc.set_probability(m_tp); - (*m_p_c)[v] = __gnu_pbds::null_mapped_type(); + (*m_p_c)[v] = __gnu_pbds::null_type(); m_native_c.insert(test_traits::native_value(v)); } catch(__gnu_cxx::forced_error&) @@ -1431,9 +1431,9 @@ key_defs() { typedef typename Cntnr::key_type test_key_type; typedef typename Cntnr::key_reference test_key_reference; - typedef typename Cntnr::const_key_reference test_const_key_reference; + typedef typename Cntnr::key_const_reference test_key_const_reference; typedef typename Cntnr::key_pointer test_key_pointer; - typedef typename Cntnr::const_key_pointer test_const_key_pointer; + typedef typename Cntnr::key_const_pointer test_key_const_pointer; } PB_DS_CLASS_T_DEC @@ -1443,9 +1443,9 @@ mapped_defs() { typedef typename Cntnr::mapped_type test_mapped_type; typedef typename Cntnr::mapped_reference test_mapped_reference; - typedef typename Cntnr::const_mapped_reference test_const_mapped_reference; + typedef typename Cntnr::mapped_const_reference test_mapped_const_reference; typedef typename Cntnr::mapped_pointer test_mapped_pointer; - typedef typename Cntnr::const_mapped_pointer test_const_mapped_pointer; + typedef typename Cntnr::mapped_const_pointer test_mapped_const_pointer; } PB_DS_CLASS_T_DEC @@ -1490,7 +1490,7 @@ PB_DS_CLASS_C_DEC:: iterator_defs() { typedef typename Cntnr::point_iterator test_point_iterator; - typedef typename Cntnr::const_point_iterator const_test_point_iterator; + typedef typename Cntnr::point_const_iterator const_test_point_iterator; typedef typename Cntnr::iterator test_iterator; typedef typename Cntnr::const_iterator const_test_iterator; } @@ -1507,7 +1507,7 @@ PB_DS_CLASS_C_DEC:: node_iterator_defs(__gnu_pbds::detail::true_type) { typedef typename Cntnr::node_iterator test_node_iterator; - typedef typename Cntnr::const_node_iterator test_const_node_iterator; + typedef typename Cntnr::node_const_iterator test_node_const_iterator; } PB_DS_CLASS_T_DEC @@ -1571,7 +1571,7 @@ void PB_DS_CLASS_C_DEC:: policy_defs(__gnu_pbds::pat_trie_tag) { - typedef typename Cntnr::e_access_traits e_access_traits; + typedef typename Cntnr::access_traits access_traits; } @@ -1690,7 +1690,7 @@ void PB_DS_CLASS_C_DEC:: policy_access(__gnu_pbds::pat_trie_tag) { - typename Cntnr::e_access_traits& r_t = m_p_c->get_e_access_traits(); + typename Cntnr::access_traits& r_t = m_p_c->get_access_traits(); assert(&r_t); } @@ -1706,7 +1706,8 @@ split_join() split_join = container_traits::order_preserving }; - return (split_join_imp(__gnu_pbds::detail::integral_constant())); + typedef __gnu_pbds::detail::integral_constant __true_type; + return split_join_imp(__true_type()); } PB_DS_CLASS_T_DEC @@ -1788,7 +1789,7 @@ it_copy() PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c); - typename cntnr::const_point_iterator const_find_it(it); + typename cntnr::point_const_iterator const_find_it(it); PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c); @@ -1799,14 +1800,14 @@ it_copy() { typename cntnr::const_iterator const_it = m_p_c->end(); - typename cntnr::const_point_iterator const_find_it(const_it); + typename cntnr::point_const_iterator const_find_it(const_it); PB_DS_THROW_IF_FAILED(const_find_it == const_it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(const_find_it != const_it), "", m_p_c, &m_native_c); } { typename cntnr::point_iterator find_it = m_p_c->end(); - typename cntnr::const_point_iterator const_find_it(find_it); + typename cntnr::point_const_iterator const_find_it(find_it); PB_DS_THROW_IF_FAILED(find_it == const_find_it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(find_it != const_find_it), "", m_p_c, &m_native_c); } @@ -1824,7 +1825,7 @@ it_assign() PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c); - typename cntnr::const_point_iterator const_find_it; + typename cntnr::point_const_iterator const_find_it; const_find_it = it; PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c); @@ -1837,7 +1838,7 @@ it_assign() { typename cntnr::const_iterator const_it = m_p_c->end(); - typename cntnr::const_point_iterator const_find_it; + typename cntnr::point_const_iterator const_find_it; const_find_it = const_it; PB_DS_THROW_IF_FAILED(const_find_it == const_it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(const_find_it != const_it), "", m_p_c, &m_native_c); @@ -1845,7 +1846,7 @@ it_assign() { typename cntnr::point_iterator find_it = m_p_c->end(); - typename cntnr::const_point_iterator const_find_it; + typename cntnr::point_const_iterator const_find_it; const_find_it = find_it; PB_DS_THROW_IF_FAILED(find_it == const_find_it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(find_it != const_find_it), "", m_p_c, &m_native_c); @@ -1895,7 +1896,7 @@ rev_it_copy_imp(__gnu_pbds::detail::true_type) PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c); - typename cntnr::const_point_iterator const_find_it(it); + typename cntnr::point_const_iterator const_find_it(it); PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c); @@ -1923,7 +1924,7 @@ rev_it_assign_imp(__gnu_pbds::detail::true_type) PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c); - typename cntnr::const_point_iterator const_find_it; + typename cntnr::point_const_iterator const_find_it; const_find_it = it; PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c); PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c); diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp index 5f230495236..936fbf5fcac 100644 --- a/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp +++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp @@ -1,6 +1,7 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2010, 2011 +// Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -62,7 +63,10 @@ namespace detail double ep, double cp, double mp, bool d) : m_sd(seed), m_n(n), m_m(m), m_tp(tp), m_ip(ip), m_ep(ep), m_cp(cp), m_mp(mp), m_disp(d) - { } + { + if (m_disp) + xml_test_rand_regression_formatter(seed, n, m, tp, ip, ep, cp, mp); + } template void @@ -107,27 +111,22 @@ namespace detail double ep = 0.2; double cp = 0.001; double mp = 0.25; - bool disp = false; // show progress + bool disp = true; // show progress try { detail::verify_params(sd, n, m, tp, ip, ep, cp, mp, disp); } - catch (__gnu_pbds::test::illegal_input_error&) + catch(__gnu_pbds::test::illegal_input_error&) { detail::usage(name); return -1; } - catch (...) + catch(...) { return -2; }; - // XXX RAII, constructor takes bool for display - xml_test_rand_regression_formatter* p_fmt = 0; - if (disp) - p_fmt = new xml_test_rand_regression_formatter(sd, n, m, tp, ip, ep, cp, mp); - try { detail::rand_reg_test tst(sd, n, m, tp, ip, ep, cp, mp, disp); @@ -136,13 +135,9 @@ namespace detail catch (...) { std::cerr << "Test failed with seed " << sd << std::endl; - if (disp) - delete p_fmt; throw; } - if (disp) - delete p_fmt; return 0; } @@ -152,8 +147,9 @@ namespace detail usage(const std::string& name) { using namespace std; - cerr << "usage: " << name << " ['t' | 'f']" << - endl << endl; + cerr << "usage: " << name + << " ['t' | 'f']" + << endl << endl; cerr << "This test performs basic regression tests on various associative containers." "For each container, it performs a sequence of operations. At each iteration, it does " diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc index e929f3533fe..19cc3906eb1 100644 --- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc +++ b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc @@ -643,7 +643,7 @@ PB_DS_CLASS_C_DEC:: iterator_defs() { typedef typename Cntnr::point_iterator test_point_iterator; - typedef typename Cntnr::const_point_iterator const_test_point_iterator; + typedef typename Cntnr::point_const_iterator const_test_point_iterator; typedef typename Cntnr::iterator test_iterator; typedef typename Cntnr::const_iterator const_test_iterator; } @@ -744,14 +744,14 @@ it_copy() { typename cntnr::const_iterator const_it = m_p_c->end(); - typename cntnr::const_point_iterator const_find_it(const_it); + typename cntnr::point_const_iterator const_find_it(const_it); _GLIBCXX_THROW_IF(const_find_it != const_it, "", m_p_c, &m_native_c); _GLIBCXX_THROW_IF(!(const_find_it == const_it), "", m_p_c, &m_native_c); } { typename cntnr::iterator it = m_p_c->end(); - typename cntnr::const_point_iterator const_find_it1(it); + typename cntnr::point_const_iterator const_find_it1(it); _GLIBCXX_THROW_IF(const_find_it1 != it, "", m_p_c, &m_native_c); _GLIBCXX_THROW_IF(!(const_find_it1 == it), "", m_p_c, &m_native_c); @@ -760,7 +760,7 @@ it_copy() _GLIBCXX_THROW_IF(!(find_it1 == it), "", m_p_c, &m_native_c); typename cntnr::point_iterator find_it = m_p_c->end(); - typename cntnr::const_point_iterator const_find_it(find_it); + typename cntnr::point_const_iterator const_find_it(find_it); _GLIBCXX_THROW_IF(find_it != const_find_it, "", m_p_c, &m_native_c); _GLIBCXX_THROW_IF(!(find_it == const_find_it), "", m_p_c, &m_native_c); } @@ -780,7 +780,7 @@ it_assign() _GLIBCXX_THROW_IF(const_it != it, "", m_p_c, &m_native_c); _GLIBCXX_THROW_IF(!(const_it == it), "", m_p_c, &m_native_c); - typename cntnr::const_point_iterator const_find_it; + typename cntnr::point_const_iterator const_find_it; const_find_it = it; _GLIBCXX_THROW_IF(const_find_it != it, "", m_p_c, &m_native_c); _GLIBCXX_THROW_IF(!(const_find_it == it), "", m_p_c, &m_native_c); @@ -793,7 +793,7 @@ it_assign() { typename cntnr::const_iterator const_it = m_p_c->end(); - typename cntnr::const_point_iterator const_find_it; + typename cntnr::point_const_iterator const_find_it; const_find_it = const_it; _GLIBCXX_THROW_IF(const_find_it != const_it, "", m_p_c, &m_native_c); _GLIBCXX_THROW_IF(!(const_find_it == const_it), "", m_p_c, &m_native_c); @@ -801,7 +801,7 @@ it_assign() { typename cntnr::point_iterator find_it = m_p_c->end(); - typename cntnr::const_point_iterator const_find_it; + typename cntnr::point_const_iterator const_find_it; const_find_it = find_it; _GLIBCXX_THROW_IF(find_it != const_find_it, "", m_p_c, &m_native_c); _GLIBCXX_THROW_IF(!(find_it == const_find_it), "", m_p_c, &m_native_c); diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp index 37f8d51af74..227f60b19db 100644 --- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp +++ b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp @@ -1,6 +1,7 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2008, 2009, 2010, 2011 +// Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -60,7 +61,10 @@ namespace detail double dp, double ep, double cp, double mp, bool d) : m_sd(seed), m_n(n), m_m(m), m_tp(tp), m_ip(ip), m_dp(dp), m_ep(ep), m_cp(cp), m_mp(mp), m_disp(d) - { } + { + if (m_disp) + xml_test_rand_regression_formatter(seed, n, m, tp, ip, ep, cp, mp); + } template void @@ -100,14 +104,14 @@ namespace detail // Sane defaults. size_t n = iter; size_t m = keys; - size_t sd = 0; // 0 = time-determined arbitrary + size_t sd = twister_rand_gen::get_time_determined_seed(); double tp = 0.2; double ip = 0.6; double dp = 0.1; double ep = 0.2; double cp = 0.001; double mp = 1; - bool disp = false; // show progress + bool disp = true; // show progress try { @@ -123,13 +127,6 @@ namespace detail return -2; }; - xml_test_rand_regression_formatter* p_fmt = 0; - if (sd == 0) - sd = twister_rand_gen::get_time_determined_seed(); - if (disp) - p_fmt = new xml_test_rand_regression_formatter(sd, n, m, tp, ip, dp, - ep, cp, mp); - try { detail::rand_reg_test tst(sd, n, m, tp, ip, dp, ep, cp, mp, disp); @@ -138,13 +135,9 @@ namespace detail catch(...) { std::cerr << "Test failed with seed " << sd << std::endl; - if (disp) - delete p_fmt; - return -1; + throw; } - if (disp) - delete p_fmt; return 0; } diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp index 38761a1778e..f8f5bae0d25 100644 --- a/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp +++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp @@ -47,58 +47,58 @@ namespace __gnu_pbds namespace detail { - template + template struct native_key_type; - template + template struct native_key_type< basic_type, - Allocator> + _Alloc> { typedef std::string type; static type - native_key(typename Allocator::template rebind< + native_key(typename _Alloc::template rebind< basic_type>::other::const_reference r_key) { return (std::string(r_key)); } }; - template + template struct native_key_type< std::pair< Hd, Tl>, - Allocator> + _Alloc> { - typedef typename native_key_type< Hd, Allocator>::type hd_type; + typedef typename native_key_type< Hd, _Alloc>::type hd_type; - typedef typename native_key_type< Tl, Allocator>::type tl_type; + typedef typename native_key_type< Tl, _Alloc>::type tl_type; typedef std::pair< hd_type, tl_type> type; static type - native_key(typename Allocator::template rebind< std::pair >::other::const_reference r_key) + native_key(typename _Alloc::template rebind< std::pair >::other::const_reference r_key) { return (std::make_pair( - native_key_type::native_key(r_key.first), - native_key_type::native_key(r_key.second))); + native_key_type::native_key(r_key.first), + native_key_type::native_key(r_key.second))); } }; template + typename _Alloc> struct native_type_traits_base; - template + template struct native_type_traits_base< Native_Key_Type, Key_Type, basic_type, - Allocator> + _Alloc> { public: typedef std::map< Native_Key_Type, std::string> type; @@ -111,20 +111,20 @@ namespace __gnu_pbds } static typename type::value_type - native_value(typename Allocator::template rebind< std::pair >::other::const_reference r_val) + native_value(typename _Alloc::template rebind< std::pair >::other::const_reference r_val) { return (std::make_pair( - native_key_type::native_key(r_val.first), + native_key_type::native_key(r_val.first), std::string(r_val.second))); } }; - template + template struct native_type_traits_base< Native_Key_Type, Key_Type, - __gnu_pbds::null_mapped_type, - Allocator> + __gnu_pbds::null_type, + _Alloc> { public: typedef std::set< Native_Key_Type> type; @@ -137,10 +137,10 @@ namespace __gnu_pbds } static typename type::value_type - native_value(typename Allocator::template rebind< + native_value(typename _Alloc::template rebind< Key_Type>::other::const_reference r_val) { - return (native_key_type::native_key( + return (native_key_type::native_key( r_val)); } }; @@ -148,16 +148,16 @@ namespace __gnu_pbds #define PB_DS_NATIVE_KEY_TYPE_C_DEC \ native_key_type< \ Key_Type, \ - Allocator> + _Alloc> #define PB_DS_BASE_C_DEC \ native_type_traits_base< \ typename PB_DS_NATIVE_KEY_TYPE_C_DEC::type, \ Key_Type, \ Data_Type, \ - Allocator> + _Alloc> - template + template struct native_type_traits : public PB_DS_BASE_C_DEC { typedef typename PB_DS_BASE_C_DEC::type type; @@ -165,7 +165,7 @@ namespace __gnu_pbds typedef typename type::key_type key_type; static typename PB_DS_NATIVE_KEY_TYPE_C_DEC::type - native_key(typename Allocator::template rebind< + native_key(typename _Alloc::template rebind< Key_Type>::other::const_reference r_key) { return (PB_DS_NATIVE_KEY_TYPE_C_DEC::native_key(r_key)); diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp index a4a768e5e1c..6074f38cd72 100644 --- a/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp +++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp @@ -101,7 +101,7 @@ namespace detail // Only associative containers. typedef typename Cntnr::key_type key_type; - typedef typename Cntnr::const_key_reference const_key_reference; + typedef typename Cntnr::key_const_reference key_const_reference; typedef typename native_type::key_type native_key_type; enum @@ -149,12 +149,12 @@ namespace detail generate_value(Gen& r_gen, size_t max) { return PB_DS_TYPE_TRAITS_C_DEC::generate_value(r_gen, max); } - static const_key_reference + static key_const_reference extract_key(const_reference r_val) { return type_traits_base::extract_key(r_val); } static native_key_type - native_key(const_key_reference r_key) + native_key(key_const_reference r_key) { return native_type_traits_base::native_key(r_key); } static native_value_type @@ -174,7 +174,7 @@ namespace detail { return to_string(r_val); } static std::string - key_to_string(const_key_reference r_key) + key_to_string(key_const_reference r_key) { return to_string(r_key); } static std::string @@ -182,7 +182,7 @@ namespace detail { return to_string(r_native_val); } static bool - prefix_match(const_key_reference r_key, const std::string& r_native_key) + prefix_match(key_const_reference r_key, const std::string& r_native_key) { const size_t len = std::min(r_key.length(), r_native_key.length()); const std::string substr = r_native_key.substr(0, len); diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp index c7ce5f7a314..4c3f7cabe77 100644 --- a/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp +++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp @@ -51,11 +51,11 @@ namespace __gnu_pbds { typedef Cntnr cntnr; typedef typename cntnr::key_type key_type; - typedef typename cntnr::const_key_reference const_key_reference; + typedef typename cntnr::key_const_reference key_const_reference; typedef typename cntnr::value_type value_type; typedef typename cntnr::const_reference const_reference; typedef typename cntnr::mapped_type mapped_type; - typedef typename cntnr::const_mapped_reference const_mapped_reference; + typedef typename cntnr::mapped_const_reference mapped_const_reference; template static key_type @@ -67,7 +67,7 @@ namespace __gnu_pbds generate_value(Gen& r_gen, size_t max) { return generate_value(r_gen, max, value_type()); } - static const_key_reference + static key_const_reference extract_key(const_reference r_val) { return extract_key_imp(r_val); } @@ -82,7 +82,7 @@ namespace __gnu_pbds template static value_type - generate_value(Gen& r_gen, size_t max, __gnu_pbds::null_mapped_type) + generate_value(Gen& r_gen, size_t max, __gnu_pbds::null_type) { return basic_type(r_gen, max); } template @@ -96,11 +96,11 @@ namespace __gnu_pbds std::pair) { return std::make_pair(basic_type(gen, max), basic_type(gen, max)); } - static const_key_reference + static key_const_reference extract_key_imp(basic_type_const_reference r_val) { return r_val; } - static const_key_reference + static key_const_reference extract_key_imp(pair_type_const_reference r_val) { return r_val.first; } }; diff --git a/libstdc++-v3/testsuite/util/testsuite_containers.h b/libstdc++-v3/testsuite/util/testsuite_containers.h index 24133cdc587..001c9c86598 100644 --- a/libstdc++-v3/testsuite/util/testsuite_containers.h +++ b/libstdc++-v3/testsuite/util/testsuite_containers.h @@ -56,7 +56,7 @@ namespace __gnu_test template::is_allocator_aware::value> struct allocator_aware_types { - // Allocator-aware requirements (table 82) + // _Alloc-aware requirements (table 82) typedef _Tp test_type; typedef typename test_type::allocator_type allocator_type; };

%KPAvMrOL`Aq8_`_CF!+uI3 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 literal 9557 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_local.png b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_subscript_timing_test_find_local.png index c693ed3869b7047bf872cc6d84dc02a819e6e0c0..7e4d7fadc62a31bbcf230a4f074cc3d3b056cff5 100644 GIT binary patch literal 33148 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�zhR0+=#|lzUO9Yky@j$h}<=r&1FI~A${+i3>IOj{{Bl%$1kCnt3_o-I1QfZYX81K!k?yX@pxID@F%-Wc1VOJ5g0 zLWPS|DEVnt)VK5B5MqS-amkF}TO|H#DYZo5!{loCnm}>dOkv6PKtSrzMXnE1o9_;7 zhW;Mdrtckt9y>@IBAq^w`TRtT5JXXfx(3rs9x1;0&x)XXBd0sU~N>snBFQFX=So4nZf7UwUrE|H@ zGy~748MtAucr;^|c@WVcCCr52BL=BA?Z>Y64s>Scm-@UUZzNUE8gYOP>>PuwlgA7w0%k2N1P#ShkB@$HKjf)cRtM#0B9QUNOaA4qT5$ zzu=)3wAxNjuk+#0JvQ#NkL@ygEl0)(;uV>eO)r9py}4*@J9dp{9 zb>6>-Z^d1Zj$gz9f9%n_UE@c>S+;W=(FZ;PBPGJo#3CAo@mew!=Ax+M+kxi>zlrXQ z=XbV9&amPW$*v1NXCIDS^XXl_Mc=eVqHnS@Y0g~gOtW{lRj+ihH3f-YeECHEfYUve zhX0Juq+PidM6R9p9m*))#2D^U!4!0+y8*l%3sKzAPT0#B2?=oSKMaAU&EJg49 zaGK=88qGRRD(D)Re|@*d2F#t2?n6m06}UmctLfYmK`OsrA9Fzmh$a9HnXsGBM>-RZ zCjs63ikI|8_-ikm#Qx&keCb1OD6tlAoYq|{`R;N zOtKenm-9=?U-atuS;Q}&sAf3Sir?^rT9et>PwPO%3B*t={+N`8I;tb~COw+iB8iRd zlFTsMq(*L%QOeZifd6?eW3%ZVePI@F45cYaWV7t1*65L3o`bgt?57or_ zi(jk*W8@kFe_gPxnzPC+D{!gisC2ey6Q>VAkeogu||to?e=;fW@mbq-8DwnY2V z*d#edS+?iS6D>cZj-tUNYs+mCeOL6OP14th^YA`xZ?YD7Y=%$u;;n!>aI}yR?+*l$ zEo|@MkPB*59{adAy>Fwqed!V>3_r59s$8Vz(N2A|lH&w7LEMhDym3QQzTu*k@9qNC zicTYo1rza!u@ZqEdR8I^E|A4430=^R+Z%g2M6F}l(^~JWeHy9GH^bQjt>^rKf=@GL z;?n3{wxZd{W%-|DCYM?gYZnP@uu1gQohdGtr%QVx)Ziw47xN{o+6!saHK}jwJjH zKG1>O<@IEN^eWVjJ00soGn3NCXhNfBDVrM>RkFvCiu zC)SqLIXnEv?Ku3W?lY7`Z~I>Uy_y z6Httyu{7a0rj}1MbK)uN2htVq<@9N~5@!r;vK(5&4Ht4U!QPO4@7rJ!CbDPw2NKe3 zv;2i!;mL^mD9UT7MAo5Rok^DQ9=zcP>=Aim=h(fQHoe;)o|ln@0PP|!dQ7&OKky;@ zJnmyqLL41_qr{0~CCgKJcIC%ib2-##a&@^-hvfx=#@&V7=E2SB=l7j{whA-E&Ac$YBUwzysx@y z7O$inc;#gMb>hMf_&xs*T-m*)AOG)s;s5^z4WItMYlA*ro_mbBXcdIpcVj97(9;US za#-W8M1uzMumA0XsEPkMyiwFG!dEvNCJwwj|Ejy~zE5eP9S-9viI8W|Hdcjkq3?6| z33;0>c?Ts``^eT=(xViUM?Qf^v4LP0#gq{#jkzk^p^uPzT3Gw={UIh=vAWRnsmjEG z%zOr+P4Pmv%_Yu-v-XA;zl4$#0Q#Vu`;ZX8@N36opzj;ju$&G&>d0IrTo~ujW1Qm` zMlv_Ltfx!fKC~MaOWtfhy6<&SS`6gUiTR5q>Qcw|nOh8X;2a#BVa~!elcko_rWy`2h$YjQZ@4|sLP8wOvc{|4(VZL`=br#?9Zg-k)nq1%Q zw}sFqWdMlR?RTK6xle{oUsntb>+h*LX#jEm6=0$qY)+*CTHZ?$eG47$E$jXG-?K@! z;Vr73(ZB)OU})mg)h1gf(+k@2_i0b9;OTRBd&3$>9Wza1wbQCyva6cEV)ASJOR(7d z(N~>`({}5Dg&rQTzTqAn<3OiI74@z5s-QL3*22RMkNw)fx22ZTLDn#yVYI1Uk*+uN zvQ)PNGY)^VbS739T6v=&@$Ic8_b{Lw(QPLrw4l=Eqr$L&Ic*L$VHrDzu(@#Z)E3Ni1>Pn5&X ze<}>5N!j%@pRLFqp(_>k0ipc%`>kqkxmIU&0{55a*p;@!p~17Eq5xFX6`(Lm*fpmE zpwp@Wjk5|sSLJ7GbTnGRl58g_-w|FL@nxb09iU!u-NJf^0ek!oP2$RBcM*??KUSk(lifG>!(>fvdXt;~F&czL=ks z3@8LPbcFMRhAT@=CHe&^aivpvfj;ye4|I7?gR9AB3Ml0jP#T#unJx91YE4TxA}>ZSAIYilD2#o8(QMbu98w)Xr z+Qf&N6Q%|v~Bj^LQBHO8x>E!cZ;WB&S#%l zA6Eo=re@1Jzh>amX#R=^u-jgMDEHAnRD9#^1=+O`7xRro|9krpvXETR49jp`N2??P zz8iYO&px6>X{Yz$iHCzH!TsZ-tTB%IDug#5g-vEUFIbJH`u%Vd=*PmoAhjlAVU*n@ z$OxR-zQ&Hoi4F9o$TGc0&jiwh>6bIw+{m3vHLKP1dl50KC`;0H_)a|caTsf_>c`D3 z?1v-Q+pA2F|4_7tFjoM<_gjQd#0VKbzCjJcIw~OU$y1O^RvR}!(VRS4@O-xP-kXtd zrT|@uaPaRO(b{a}ZmhG*%ZFa-$X-^LU^1V93Q|8PNX$XghN^@)cMcMOKhBW&6Dr{y zX4|&<#lUHH0*Br`87Ce;b~t>9;bQGte?sslwBn%GcP8{oT&=Z?(OJRN{Glbf_$JZI z8L)D;pFohkQ>Z^7p8k&}I&q1OrS}KUE_Tgx!S&N!KYypF!1Hi1KR>5SP2@|K;b_WH zX@@3O?$2&QRo?^*89-51fQZt5(Oa&Hb=&kJ~8B{)vFA(zFtSF$=|xZ zGT*+x8zVgx8tctKAtgEzLJx($pCTF#_2K?OUDDvILuz@J)qCHYcBuDl{A}O&Tjd=T zdr}$nkuT5DsmbD^H4me1>%ct*c1Hf8n}9n_ISVuBJ#CtEhx;#9H55f2Zs1?81@J8QOSoJ+|{51%P=5*hrW)LK?ECe&b4*Eoq~p78g=7u+{t zIz{V$o@i-RNm%Q{Yab51M@4zT0rZ7n>E^4p<)4w%-QoN|3I@)6SA;s=>q9;TsvlIQ z$K%V9{;TYHB-*bHwSAM+?quLT{idA7L&(HVK$Z}gL6kdHjJI^atI1n$u*Z{bXy^?j)C{Nax2vIYE zc5sXbKC^Gb`{N2d9?yoEn4@;x>S*jZ;vlfQ??*lQW|d9vWirOMXYr#-pM&$kW0Tmi zvd?|Dsk!?%ITlW(xC&8I_oIz#~7Mq0^&MmQ6_CB|DaDRi5#^mm&iXO@taY~qYAPJHGb5)g+oaL`DDvVa;M0~> z`Hc-MaJwXsUzRI7HkjV;7>me1Jy2f%_IVFI1I)vK6dE_wwLc#ab_NJoX#NMU2R~~w zp?>`Vwtd5l?9_cg^=!a0>t?KXN_l9oc-o#*I)2L~Bx??=s z;x=Dsz3k(m-qfQ68v&GiAs&dDuse5N(ni@**)JUq1{?7;mp06bkA!CNCDo1+tPb*r zmD9WBp_|O<_xxN?ChL(=*LeEA1>tD?);5FIB5sL&$qhEZTDI@o|Bl8~QBXKeR9@u-bRcKtBpv|88(6D0ze)CdxW_*?ea$=3z;6v5}1I`~~a0+|1XQCF(ZU zjq*zLmw!-M+;&v2btg0Zro9B#ya+4~Qx<}EF^LCJPVgwY3Qw6EnibOk{SgCDfJ&`y z1hrN8&1=<8`KZ>;MTG;K&mRD*SPu}fPuGmraLsy7Inx-pIO$ow9K&izD6N}aNPNJ! z<_PCowukDRIxf&NzRF=MXxHQY!^~-{Azdgc12m4Tf(Uxqrk7=xr|OqR8kmZ2NvSv(U?uW)Bg6z!wP z!H@%Nd-H+!k?{1dgX#{|@P&k5QZbYn`_v2``#jQI5WWH_-}WONYi6m|@90TUiuUO- zyqV6oh20k6dG%t-me@3oaO;JB$yci0c9qpl+D@v8hmr?a;|h!YQQ^>OQM9*VeS`vX z$1*G5k1qI4^?-FWG+b8pyC8?*2;NI8$6{!%$?%>Y^h~Yx=LAPc7yheI&jEjgi0HM+ z??U!-IYdn1VvrJe)~F^lw(Eq9ZgZlMh2@wgMo-IsagmpBU8{6_DWWUcKhSiyTRSp4 zUMGqD?2v-yx-uzPm3?a)2Wz@)AxUI);*o9Rp~npt65!r}2zdg@kqf+Bg-d-i12OZ;=MsIx6q| zdP78lEibK$|1{0e(bP%1zR1SJ*>@kBGjCCzPV|&?HQ1OXIQPtDE! z=OT}P78vo>PQWuuy5AIM8Vm7JG;ay$rbH;4(*OtS9Thzyd?0{wy?BK>)(TGqc%0Di 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 iNd3Pbw@~f}{!opI^i*sAi7-+ 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 literal 8499 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