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 | 392 ++--- .../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 | 277 ++-- .../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 | 68 +- .../pb_ds/detail/binary_heap_/entry_pred.hpp | 68 +- .../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 | 85 +- .../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 | 151 +- .../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} | 85 +- .../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 | 77 +- .../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 | 111 +- .../constructors_destructor_fn_imps.hpp | 2 +- .../pb_ds/detail/container_base_dispatch.hpp | 209 ++- .../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 | 152 +- .../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 | 51 +- .../detail/hash_fn/sample_range_hashing.hpp | 61 +- .../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 | 246 ++- .../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} | 64 +- .../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 | 322 ++-- .../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 | 139 +- .../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 | 482 +++--- .../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 | 162 +- .../resize_policy/sample_resize_trigger.hpp | 185 ++- .../resize_policy/sample_size_policy.hpp | 58 +- .../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 | 160 +- .../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 | 85 +- .../tree_policy/null_node_update_imp.hpp | 50 - .../tree_policy/order_statistics_imp.hpp | 58 +- .../tree_policy/sample_tree_node_update.hpp | 46 +- .../ext/pb_ds/detail/tree_trace_base.hpp | 114 +- .../trie_policy/node_metadata_selector.hpp | 85 +- .../trie_policy/null_node_update_imp.hpp | 50 - .../trie_policy/order_statistics_imp.hpp | 93 +- .../prefix_search_node_update_imp.hpp | 62 +- ...aits.hpp => sample_trie_access_traits.hpp} | 78 +- .../trie_policy/sample_trie_node_update.hpp | 48 +- .../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 | 264 +++- .../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 | 166 +- .../include/ext/pb_ds/priority_queue.hpp | 50 +- .../include/ext/pb_ds/tag_and_trait.hpp | 293 ++-- .../include/ext/pb_ds/tree_policy.hpp | 82 +- .../include/ext/pb_ds/trie_policy.hpp | 234 ++- 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, 9230 insertions(+), 10178 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 76afc47d46fd..9c1cc0396e4d 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 b564f1cff41f..7e75cc71d21a 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 e17773370d10..8247b60a91aa 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 920a4cd4acf6..6332dc199090 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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 EANFa+t^fc4 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/cc_hash_random_int_find_timing_test_local.png index 4f578c65b1ea26bb94ad1a75c4e30d9a054ef87e..40404c87518e00b14dc433de6c1c06a489a7321e 100644 GIT binary patch literal 48189 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 literal 8534 zc-qBzXH-+s)@=mo(yJg{I*1TKihwi$snSen8jv7e=|w=As1!vY5FkOC2!vimYN$d0 zX`wd-DWOY8$d`EUcgMYNydQ7eKW~p@npN z0RR#Z0C1_6l9Vu$%tILt0FVMq49v9w!~p~Vpa1|I0KfnMc%lUa0)S8e5Doxh06;v^ z2?YY6PyiGTfMNhpJTVpy1i+yHI2-`S0N{AyQVbA)fdVja00slV;0Z_oJP?3~0`PDE z9s|JRiNHi?0v2I0AsSE2LmW^b5Do-lfIvJkEy039flxRQiUC6LL>2@m914WPfp82E zjwg~L#A2X83>=8T05Nz1N5WDd9ty<6fp`oMk0(+l)<7UlU`e2bCsshrM1Uq>5f%^Q>W=@bEdH-{ z_`mAl|JINHTOs~$4fww-@qc;X|7ODf#lruM#{a|q|1=zfUT_mWsGjM9y#W9kCgS_j z@NDQG!X&ScHps`!6YAp+@p1%co0;(GJoWVU@pkZXe&)lcAR~9ZR<0rfjGE7e&Q5#V4&mn*wZmy)reA8@gNx)6Mts8(< zW=fiJ0OS%IpJXdZ)EKjUG~3&=E=>?OKWf}mbW52Yq7wCj^{2T;PAl8nFO7}gBAG_9 z`mgqXYP0@!fi$TP-s%LEEkC~Ac^8BbgmnaVZOJ~MVX(}Y#6BsDy)jB6HBlUY6hk91 z*~N_|kup~TnUtn}<>HZ&bkwu<9Mp#@Vp(8hLzw93ayoBan(=BoaX_$?w-5uC|Id1) z<+r8vt7WHsjxRc?%t_G#iHQcEYI6`P?JSy?(Ox?eJP(iA^YiSFl4Z!KQ60KJi?>oSu%WwxwF2&&@9Qg>fK zz!oM`p-k0@_ZMW5H&BN1js?O+#SM4tK+{>MPj^E&*(^=Dvv)5$1$tLYNcL4FL+Gy< z%H69%E6D)T%IX(xme3T(>v=8QG-iXHro*m%#w10hP`M^uZQ#Wvt^S zV%Fcqpzmj%hTVDB*c(wEMA4=E_!41lhtBY9lGG|Cq2+g5+H*I71P_=RL8(8ZDh)%StIFqKVW2bO#o?Ug-XNk=~vu=k9ZR*kcB_~dq|HwiLTEq*5a z`+AQH;34UJ-3~u$j-N{3LN7F4Zj)Qpxj6#BY7|MYgf?dT+%7yc((jZVqMZsDceN>~BIEusyKRu# z&oo@U;bkQxy8K!ElioBa$?LX3LzfrAmH~U;$JAdWpa3YWvSx`8RDL(?!l_pDfbHuB z;{Z&krY`1d{Bpwm%?)v+*7bzom!YbbYMv=sd*G}50~e7Q2j>^jn~O?m?&Gg}9*ES7 zRKMk0*Ins9Y}b_jl^N%u?DCSzZ~>9lyk z@gv{Z0@Y|L@+r;gy5t|4l@gy1UEh`)yq_B;$Z#07!SLxK0 zP&IR?6O!sCnc6>>(=Cqe3p4UhIb%CUf1sxhX0{BviNDl%fn3;V`+~f|`KCbk!So>g z;7bXV9&PNJ0qD~Qu+h{FB(3j^Bwkp*D1LRcPwdS2;g=ba1zJOx!{@Z|F6v6h&L9E* zf%Xu+uQ8Aev%=pupF?}^20B`^u~Vs!5-+F-9A z84bPPaFC-iFefW)+s&xKquO{!pla1w%BZSZT=MI7*6*1O)i&YHoZBPKU zR{L*BphE6yl-5qQtAjQd=aOKS85M|r@cigVe@+a$TDZ5Rdx^Xtmtw@`{yx|5ecpT5 zR`Na+_pkPQqw2iKbg@l7b3;el)nfiJ!XlO#yN7@YHf}`y(QsgRd9p}p_Xx`c7bDoc zYno2yjnSj-$At`W|g%Y zg{O(eDJ(F{$jYvM+?L(6cpSCH#5vz5oRfwPi}b)9Uo({ zbU7EO3LNNli)eC}=I#sXJyz4r}OMS{4&kc zZBMVvDQ+sQ45sFY@jkeQ%HBM>DjdC_?{XVS7a5t;|ezN5T6c>XO`JX9oQ z+kRYIuO*Gm(&J9aYaY9INyp}f;IU}!4M^<%wn{m29T8b`#jM&OG*DJ3cAq`qBggj4 zWTn}yShq95X4$WwEY0jS`zkGMwc2YcPMNV#TQ@_h!j@!8R#@Yd-nFt=ah4*&xu$l| z5uEgbY|!^v!^@2~dV9c+dZmwPkIG7lUh5Wg1&?~0Rc3A2v3j2*Jd1&~bRRT61TCt3 z*zA0Q$#H9*Z$Q2@r0DvZVwufL0U67sfVdk^+WRG)B1e<&RJJ*%X53heo_uSrw$&in z`aGS@lHYvlU_aziTWT8J$oEWMi5Jw&yEoiR2V3VaZ{e8T) zYUiBm5xKuK!tok+&0}e9hJ~5MZ=w>n7DTLR6Uxg|=_sE?3-y0?wsi>Jp%w8T2jp{Y z=Zqx@S)BoP7FoBh`N^pR_lC_1m1FkI&7RfrHthoysO30K7*Kaaa5Bm!e(Y zVI~2`HpibMm#ei-D?=l$n`HjS)$M*sY7(9VoX4@xkFH})#{q&o$8@G^H($n+HFvUO zB?7W->G?t~T7pna5Ik-f6Z~IT9p2cm_s~$hI%8*l> z*y1=g?sX{dYOiG>?}b(IpMqXWHnsCWl&O1-sATrT;l!|{5b2TR>o^V_;82j%6~_WL zmi`lOCW(1!!CZl>anjuH9H}Hq(l&#O#l*yfizQubwY=`9HH@Cz8Lpkz*fHKL1e ze6YJDY0d6_r2Vue?ea#gKD&$Uf@;yAl>Ro~gPV>i?E4Gp%lUg*4flLz_8q3@v`Du+ zR~{!J5H7)M3|Yoc%9hH4)?2XJlc&86z}+b~V`I=**6Ui2;6hQ`TZO2c(m1f4p5iEy1vdfXa4nE zACi2?>o`tJCS|${uy#sXRr1M?PR9*~Efi;hVq$A3)M+R*gm9+C&5fPv4KfrOS8XHh zTI7^}%~Yq-4IS4kKWq$xKl*xK`yub;bHq3rZlZ1*bnziXKkbyGX)`ol5T#Z$+~Oe3 zJ?(qU^_x8~`pBI5IM$C#BEu<9>`ejtQ~veA%Ifz!{%a=i?Xh6nR6Fm$mbS0$UKyW2 zu^=X_RPb6ox&7gIGpqRY{0Q`c{NM|-A7ebrR)U;F`!<~zOBbo%!Fx&K7`{?QvU zip|_urFSCf8b8UKLZ!JOcFfqK%8#P8Wfl%8K=OwR9NP|)0Y}#I=TCOmn|$`ARbAM@ z-AkuMw7G{;CbP7SlfOs;e!?vc&l?)3lk=PF%%;!SudR^SN2LahVQD9W=B?%LW7(@G zLCd3@Ub~GEt0~PP(%g&tMY6p)e(UF?t^I}%8$b?;A?dN_?6)*?(WbouC%0xvzf+b_ zyH4KIye>yJ^$84d_hq|vU^2xDvvsIQrLZyliWX30x?6lpLUPUNuK#ug;kHYGiO1+G zdXK&}_o)SFVeu~LCE33}^8f3ng!q8?|LT0}KQYbG+GyyRt4T=-IiPcHh?6tx0y8S! zjuz%+K(8Z)xexvNWIRWvS4~JXKuu;1?N|@Rt?3SVrJre6L|cRTP?JyXQp=yy)DAso zZ#y6vK6nxG*^e1l^@p9ZZ}J`mI!FUH$N;N~CwxIhN%9Jyn!sZ^f>C3BFj~sk$BoMA zlk-|7e_Y?bxMBYF%>nqr)TYWh;YhwBe&7ZQ)EfJ*dHb2l$kEAr-OjgKeBa9lOFg)- z|LkScWSzhi6UsGzuUk}*-csF7?;~J$zl09PGq)&6*63-m=f4 zl8h>M*o$U6OfI~ZVx14IrYCnz_D$(5l&~ySub-Wj4dhu zo;;HQsx#z|n^*0f&n*9L+oD`yG)w!D9(e<`Z>8s?4WBoEBSKC&ov z6I|;;je{@Z3izk}Vfy)@=>9K{JGPX1%ibd2yr8MPn`9Ls%kGh9K5i+l?V0tbVsKo6 zNPG!^rYm-fP+Dn8IhB^vk!C|JFu^3*r0nL)M<|zt0@-`~#Hb3Ob0NB}+-p zT%6;-J9mGbo$XIQ%{KjJYWa=&0w0ro;T4~-VfEsi1oHgm=RPH;+y1Lul(CUbC&A9{ zHH1k%RFMlS9B!bLI*#2UrHmzYY}ocz8gue;?9?{E1#wE7utjx7SiLsZ`&L`GWYvBW zQloSU{llI!rLvJ%7F@q?@&fYjRTw)mNg%8X?}K5A!(LRz7di(z`>u@ve- zJ^4d?<1ek^O0EaEc??b_clQl$?1L*%78UE$Wc89RmPBcron&fTvQ9x8+wbHy%2Oy887oFfX2CT!E-+NRm zgEuAHnAC7QYtv3Y%LfZS@P2vZ@=CqGjPnnuVzgus?Pgy{s&t#Gue7+eY5 zWwsiUm}#a%0} z$kgheo)BKF@MLy;gGi!Vf$O`f=b6`XN<0huB@q2Zdd>A76HGBEDn7r89SbRaSl@!o zDEWCn9a(#S)h_$ZBC!*94ok$4T%|J-KG1KaBopqa0J+rHEOt~!N($p~&ldMaGQDOb zCAl_TIU@(&`%(?`V~6zaOUJKwfy4dl3{625hUnb+^&f$YXm43Zc}G)TH}bD{+P*(e ze#c@%Rq*jNJzii@^!K2$a=)04Cc1(4ba1EhT9a=5CkD1Rp;4VcYZ12NR=M0?iIn~> z2@Jt`nj@K?t0hoDAG-tqkZ|Gu{K|@UqLi2xQXDF5mqf5)=Wa%^?yZ8Aswt$gNnFBH zfs`Ri6U*p^G@la==vv(AgMcpv43=4Fdw71X4@X?h8(5(Ogz76GEkE~_N1?8W)7q6p z^&`)W{Hp#D#`XG}JTz54PZO`JUz(HCU-8T`2nQ=2Du$@&JF!Nn%}F*wX_nC{KCl5; zU8^Lb$)M=Nu@`LMJ&*870$54Ol@Q$LSmh(k|3eek?s|^_E9kUFx$+nvl18fh*_U2M zUxZogDS0Hv`QR|)7C&@t<4dTVzRu+&>EZFX>yqC4lw5uNlQvA4;lyp@!C|<=?K!1l zcFZs%9Zn=Izba&>QxYNOdBq-PWU;E&&hEW0u$Zm^x_-*Y23;F{8wFM}_`eI55v{%9 z`Xmy88{PFMd!y(hudL%_%Ky%7E01JfSn@1m;PCs9qD7BjmSX;81Xb~hijR*G>z?S6 zVG~b5bE5*5RdK&5CSjmZgC`$VM~Ve2C4%}?f9X{j*TU-<0lQzs3S!^HyfTq@kCBq9I>VY+y460A@xm7ZMg z6Lsda@+8{gxnF|O&f{Ym#(}mAWf=-T6Pz6~EkEh)@>MlUrYx6sBRMh2-&YU6@5-ui zT-=X3kMV{X$--O}L1xcK1?XHqr^VN_$lp>H=?VFkc@R#+)W5V(M{@NDia5F&_}WV{OMl2ithC@ z95}E(J`3)+c2j@lUJx_v+|Vg_bv09bDX}L|O${yiav*B#H;J@7hZm5h@G&@(M`<6UaIo3n)|1N!*;V*fSPc+auTQh8Jwcf zbwh=sPD@kM1_8U2D-!mfvww{F1k)Bk>uWm&&@120m#%j>&qJH2=JGIO;;^78WH zwsEv`voLeE;&yVi{&px%g@i*8BW zXEzycOIIVAVijkPE##U|T#V2TQ(g+gPhE=`6#skTUCF!F1-t}2QRVyp&0i<(^~k{0 zALr16Nu$ZQM2lXh@jo$H1}Z5j6(SG_R0alyilRCPj8KmM{>Ly3erWeQr(^8qY`Z>a zCpTg(bGgE#opEpK$KDFcI4(x2`4^*q@%U6`(*8K4c+gW~&Q#)gM94Tzt;ZjfcNhj-lS7jQxA5EN{kNv%7tr~&|g|YV_ zj9{7&U-;a7;2};9oO(Vq#bQZB--jE<up+V-Ay*)?=#+FC25^Ak?}H(oPY+*M>=^KRHjgF1Uk zoEonbiSWB5cLqsFJ`ykThdj91VO^hdkn37^Bi>VM3u9@jvd7U|af4C*F*6JNT@fk!P4J!Z>~JYMu#)@%<9xICO23~|Bq zzPQtS>uMg!(&L?FEIw+!Qe$TvT3;{x35Wc%$I$pVaYWbHI|x3Cb%?;F`gWgn@J~2Z zBGqLiOtB}5G-6};Tm1{fa?le^jnlGZ5Y!`0T7W6rGLit)kDH7+g4(CeD53(XM#)Cy zDc#*nmTd1JjD#<7>J(zRCz2DWL0kyE>y%zMzy&xcbV|9I9yTbcq zjZ0Qe?n%^n1+kWV{ScY$y(S;v_~%p1%Z_NpL)>ss2dGm-8UufIMYJH~PeRwz;~fu@ z$L@sL{!A4b1_rQt+qnaNX;p z_9yH;MEb%RCGLp} zP;4oarFzQ~g=*iX8eKP|_-H|(j+KtkPy$-qM!Z(-=_3doMryM%)3( zF_bQ7Cw;LyDK*y?a2JM_#YnC}!77WdqMcC0D*G1ugx6T)kh9njHL$jxQKUf)qwJ_Z z3Gr;jdt)?-Mcq@(@6x_hkuE^z_VQq`$z$(V5(@#6+t$#{#bw*P;EsaGYK*K;QWQxp zI18)QBmOZy@hCw6xH$H^lRmnqm+m{i{m1&I%HFz3Ffm!OR$}Z0NlW@gAGmn>ad=eh zMg9uv=F&QZkwRPFmFoUzR88gnktE@FDb|>;$%UOsMVw-wbKY4Z`9zMK0H+AE5y+IljCec9Le*Zr;Kv$Xqozb-m)c%F~xA75QP zi3L603obb1&8|JrY$2bb_}ERAHC|pV2TlL99#xo?yxqy;08%!vKTD6$8|4GaImQbV z)sR*MX?5NNJZrJGR@O|i_2>iJ3-gGz}vz{>F`(!&&d~%ub%59{S_?wVJlWx(QO!UZW z8gaDb%Jw`lR40_A;ELc_#F4(M8gYZs(Q^9}S8Qkkqhc0Pb<^EX>$)(9XCt1VgjIwx z^no4O%?;%U^%3sNDMJqP`CKQB2c>b1d(|dwVoH7d>^BK(34A@#RV}n*M8%s~&$%3Q zW|EQpkXDr4DB!s@M7etj_dC=-u;B85IlASgg?s->7u-t*x~lN#H{lA)k&H&?&(B|( z|FAjlqYHwB0gno!=Bd4DlRT?^DeUB)cZS}a12ET5>xQPNK~-OmW{TnUiRMKxZ)k~@ zmH)|FPpQ?fc!oifpa&1%qovlak!-0T*4~AlwGL%t%wCkY!Kw&)nliUU*Mn=;cQqe= z{wYvx&yosyjNmbBa6UO+?OLW0aW;LYVxkD4T`Qkv;^tA2q(7TB2~z9(Ok*K2TE84f z{RgN6Uw9Kofy2vuaiEW7rT;P=&40e`UMB3U4P`v!>m$F`fDXPoxTCt3Qrp21pg>Av zk0VkDN}jG9r{{1ecMq6Pba=~e`3p&U+)=GdH^p!>^1_{=)0rlpW#N4d!y5?GncJuY zd5vX%qW({zj8_4-FFp3A@T7cpH~0pe(^&c;n%MEr=!$F@5LC&VVP~!QUMBr+lsun~ zSBN=z@DLa)P_O*WCL&P3nE&;$(NXJ_@#9RdVhn|g>q3Lerp`rEse=Gh7Mh+&tU3gy z!~wby8`}4%eH6CK7yVi0uXBx1U4#XH;(xlbb zW0j}Wmf$Gpc7ub3oG(k0tjRUPL4pzzDsu9{-~CgRX#Ls_Lp3kuNoQW)_&?PnW~Q$|oGi%>qU?^NcJHK@QVqTNo^7K0>G2K>ibA{^CM!uGkSL^tg2kUY zW%@2_fZPs}vT1b_uUwz3n;|13x9`u_I}sAHNj^d+*AFYF<9QRAB=?yUh~Q09bB~4a zCjNq$XwSosaNmKz7F=)qVmpE>OMPDB*yiPogBR#$mVRDHcy0)t$* z{qflu2gUM&LA~QxwbkGxAdR*}%M0f*^dF_T2*Z(T4;FI~M_a^)gk?4fFG zBQ9O1*2`yD$sGpJO(iNvmdY;<$NiQS=>pG{YJ3cvJ!8{(rYB6;pNL@9&-HWV&YgGL zK2FHIP?1Yk5BV;Q#+yl~uu~jXR8Fx;KV0x}nXhvYP&fnt@oKGnTe9=!#ojlk zw#G)&j*pkZjtlzRwgz~S^lX}N{ipL~nAH;)k&q6mmR2xLc$k@9Qb1{Yk>_Y6-r5?@;Q8DosB5$Pt7Wh$=9q3COKfHM4!QQfjd%1kA zPfysOHh~MX)BpPr8mtn`n?Ce92lN=zm5mTLItxQT!2Ppx9{BT0>Sbdm^% z!Bi>A=?nlg|1s~`k;8o50gc|=7WV#7%5?Cf{@5u}5n-Wo<}90!-Unfvy-)nuzal-Z zZkV%Tek0%NsTdXM{&*K1biEqkDJdzbd1=z*9%-E&;HhkCYTCr@=g{W>T`RXTUI00h|6?Me)RZ5#ruvI2Au!+Ya1->bubjU;u+l7hlzt#p0xUiQIk0xX3c6)bs=_%~{>V^*zvrD$N} zKlaD+`q}`%t>DrtUkGm4+U4*y!2FBptx00VPl(~p60^)KeQ){QQu%bRO0w?;l5e{R zP!5Eg76}L!z)}@oU?dyGEo0TKt&z_cm zX#a*XVP-@r@#HX6l5(v46z6>loi57oIhk9*;cK3YQc@`UE|eK;kMM(+G~;J~DS?(w z-2ElPJoTQOH#qLUVxSLTG|FP*p-Z;UtiZ5 zkFE@kcy*B7xaJe6*sxGK(g9HD--(hW55Wdl$`6;3$D1RGER%`+K#+)Li?_?NN(#H$ z!FZAStX6@FkK=Nig!^2LjbGry#WXiS_!2(btstM|Vwvyg-!pe9fDGNE92TtB2*vWR zYN4L2`eMTP4Am2r8fMB!YdfNq9wARU z9$ryzQ;zrUWXsmNP*we3BKMZ;R`B5m2FL5=+xo>_8juB4v!2rNr*a#8*KL1ye+fy3 zaM zj9N7k8OmGs`1%1LVv2mujgai#ZF%K}F4`Lp>$@4eetE;R2=VOXNG*W^7 zPzVH4RasfN2B&%mc%a^J)N=)vXVU)p ze%RBb&EIEu>W2YcF_Qa9DmRvPr6hGOt3`v1^t+Lf#FE5NXIml}t{gI1!8kYCx0st0 z-Pfz@c|!pJ{5+<=w9#6}A?FtVy?pUEa>HBFKX|%ID_ye6V98o*QjN{VR9xu#BeNvL zl0BZXltROj=hLk1G!-ae7okbcg;PMuBu#}H?H_p6|LCz@!ALdjw2!niSvp;jt>8Zw z`CUh$I24L4>PrxgwL%`o#cFVD8jY_*elgV|?75}FA?8+4*eXU+`fL?KlW{%JRQENo z1^{(BG<5XZSPqGw3b9m80e7CtVO6@ThlS2X_LI-J&rmxu)(AMwK#fK*m-inIrw8hzqenOfu)&>SMqf zy1gIz%GYKg0wCmYy5Rc#&6!@+fSrN4#Y@FsuRYLA4D2Vs@EI85o$oA?JrnV_nr!A^ zqG*^7`lTHaM`EG%AK!Q7ufGt5X;N49ginU?+%C_qnj1vRm!&lo>g39PLMvmhJ(#P# zv)mrZ3@~!|$?%s+(ceEhWl>8L8ZlEvN>{v#bMidhynFKoCR9Yoi*k*#hhM>~8?kUF z#l!@A5XRglb-VRwbD`cA5)uNy_QS=}-PKW?R*3QoWyj>X9U4BZwB|wbgbb8A zBmtE9qCOSqri4&D2eSdFTxsa58hc~IyWU$^UN zWIj-G?bMLMF2$u*-WI;5#HSUfC~C!{7P16Hm!X@1Y;EBQTbNZvDy+Wp3u;$LS{NUD z?x)hVon6YMdZ*1SRi}ySyvLTYS#kr0$R9 z{F;7d@{8L<$KL8ceaHw^A!YcAC4@x%3-KbL%bi1wZNFxLQW~_7{Dnii`x_Q~>BLsw z;QY;J;mWn3Ixrd-?e8~VV+enp&G`E};bs3bG-*JAuXqgV%9`Ly?kNx98%Y!PsVdSE z&`fslI@IH9>ytoEHatAPGSg*t6~`r-0Ca*9*nNw1q&eAh$ycCrp{+NwgWs(#-aiz9 zD7`G_!+r05`Fu9|{BY6l0qCOyKMWiBm(pq9m=Jns?9O;Gjg|TsW1u*U{?aY4l2f$F zkTC;mRXMMA64Ux@B)B1gKp^JRjehMW{VMaf0`G@@0m1M5Oe1#b{ z{SXrkp%p;1@5@ln&28JlF=^7kOJRIe6tD|Q@lC;LJGI_%N_FP*=VoSRpxoSCy3*dK zW}+Y;T+G_vVzPPQ5lUq;YeE!F6wSKC&{mh898#`#=d)E7eIuw8uUsvsE&4teyh}Ba z+l|*b86*3Z2NwYMLFyh^lSq=^KrcH?$u{HatMU94Tdq*3^rllE zR~#=4+)^BRzW3`y+~*XxDe&R8Gd?~Z!jlcl7WpOn3S7KiqeCpAe@s?6|Cw@DR>Z)= zd!nHHg<5*qyDIY@fdmQd!=7K7j8DEtr+yrar;6^fl~Xe1F5&c-Ratvs%OEnJNGZQP z3}-6U8WE?2yEmn~c%c5d@AA<(0P&>~NA6zGymH;3%l1E2PCDBjWofo8zgD%OM_PUB zH%*6d#yG1@yhqZ|V*ne+QVTy?T;R%>0C#Ej%pjcd=&PWV6@NXBT3|z_mzW(!9vnon_)x1Twgl z$_#CnS0asK-fp_Q6_?(%WGuc-34VQyOlDrIbZ8zOHyz9mzxBnQ_vR7vU(H&}Bh^rb zD$bAYA?1b8>0Gp_{v-}!iwr%|jLOaE3Ds48*6?~lkVO@_(}B;NYdV<`j-|0uFD6sA zYJYNa^~`TQR#>R@Y(y-sFHkqStDUZ}V+Z3N+RvTjg1fgoc~tc#4uNeLqo$LA@`m{Z zdc}va?@+*cO4yz6jBRp2;Ts~J`xHR?7HzQ_{8EKUK%0^M`-}!vcSNlIPQy~6xanKn2~tJOrA9XIfTW+As6<@hB7mr zeWfm;2mMA{po9g}g4Gw>;uu%)8DHc2g14*wI8>NTK4Ljr(d(gfE8>@Zgg|wEeDDVO zJiivJyO5dByyw*YuwralVtad?Sc9rcZcb`EAIid|UEKivc<_~e_9XwyxRx69d--;# zYu)iuXR6-K4|b#PkVuhHXoaeTP|CdJBIDDL#~Zhg4HD!*@Iw3aN|-k}r+#HXmbgz= zoA1SL766_81?i${J>BZhz0XiOn-{oXbtDw&$t$zTkb5TLG}cH=t1&UPtwHl1+=XX4 zTx~x@LIhCyGw&Qb2kQ>z!M>MAul}YwwBx!ou7*Px)(bSI*59UnuHb8P&87`l%c%D{ zTB`Kyn*SlWv~n$_ZycN0jf*Rxkgvy>fk=ko2`rf8f9rLvN11DI_ZgGDzqKCsvD-9IEH`So#Gsymr(bFZYNMpFzJ;0ccG8#K($;S%-ZZXF zM#&F+Vf&UN))ImlAa>p(?(R|_*SDAu+JNWsA z`s0pk$>7(gfRpyVj;J`Bg@%)ni@oV-4Z$bxKR78=I&-yw{kJR@9Pi0NAerGy!C6g* zh%=V87oCo#93Zqc`rqDlxF-quDlkt_MV055Xw!$Em&k!ylaPSb0wFjR8rp0o$Z7Vj zjW8iqenY#=eKiANzCr^va-j2l19>D(0H-T7GtPw+jDw6(r6~tZ6$(ncL&m&(T{e1E zGS61catP7Lv8U7}pCG;-N2Hta(d0a*i+_&FjSPH#ywj={{v+V&QZ}~6Bj9q(J%BT( zL#><>Hk>9oxJjj$Hyz2US8iAbc;7c4W-86Ll#^aO`0f18T~hGQ=ehi`JZ-s> z6C$=1C{*u!Uga|0TUCK*ix#=2#DdJIC|rJ!O0qFmdalgXb^r1>`k_IfQX6U={fiTH zvj9adiezXC)|h+?KBYb;)J074LKmqHDi`$Szx;X5Z|whTh$sV96>}Mn(}Ts+$H^oI z?{|9hAQsa0O)BaAU^R{yxBb)BnsB>^?Ic^#nbFj*1jeq>3{in|8DiRz9YP7z^LV5i zB(t?gqC4sqiB*St#p~s>hLiQaY&?AYKq&O$^DkJX1jSUM^4l_ZH&si>fX<$^PD1W| zRA^{bWK6^LW~zx~8PGKQ{@qh~+v0sf0CtcYC`smAnzjd8uHh5Gw@P zcCrS@XQLq1SXA8aa(^FbZ|Vom(R}?;vRni{o@eHT4c)W&tvE~xNvFkbk5^G-Y*c$0 z>wR&10s+~xUNw(nQdM76ITJuh&ET%6;#Xhw6I^)yaRyi}9CtbUm0RKW(m#iIZ0Z26 z)dQn1_sp;V0i3y=+qk7c!SX(%BmQ|Jv9l;e>D@*Vys4kt<}ni9mY9gqYZ1!BWZ>`r z?6t;Z=-4F>();4wQ7}I?YdCbgQx59KGP`35e*A-F21*DiP~o8Y9@NxBmXINh!%3iM z@g3vK<40zpFD1K6ewo{mELl639hh|fhNZecI7h|LhMIsv6n-t3H_oT^rdo)5?D}}u zNw<&n4u567KQ%l1dUiJ3CK9*Sf?rGDa$#IIVV^)HW8^`l+^})r{O|a75uZix20$@4 zLBJsY`T+#Xvo7_=6qb#~(+qjycfp^k$&Ns+5E;HgYZ(tw8Cm5N->3L8hLEZ|E=JwZ zn=HS)eu`8wfIjq2hN}dhSD~s(gcOAR9-a&-@cg1}$JwEo+MJz>MNg>e>|dIG+zSPe z`l;Gxyf71JTROgg!L8^G>JE*3{5~B;&a>pV^t2T)c5zd#8Pz&`>#BQgeAGIByunhL z`r6UC+o)A6=2+>;u)%qCI*OEo8|ckOM?l&-33PVFCo;{PF@RgE;074ow$V@tgh)_ zO#QcFNJso%y$nh9ZJ#9PXADS-at-uTgufsULNAW;jTzmxhR~}m`~RFQG`bNdS?!}r z$5IJ?sd!flxBC426;gx$4Zm9Y%ePey^L3Y5ib?->Er9OHb6Z{}Y*7DK7WFI|z^T}k zrwiSRQXUcz)$W7Ag291^*JbqM@gLUXkZGz0xZ`vuso6f**6A$FmU_F{;U_G1;#a;PV-l9MS z&HXKS5z7$308Z0c=ecv@WeSH_H5cy+fo2KLF?^$ybj#XE-d3W_zd?>pWW+FxJ?QZn z_sOOiJQn(mUdpB~Rrcp(FZhO=m^P^Z4ZjUl1u1C$geDT7lN1C5%Qj$Vd;7{BaMiRA z+u1>~?YFz7>+0es-3I?sWF(6?E%(pd(y3VH+Ve^jjt}m!HY*#(Iv30QRs%x|O&+Cm z2*8J1Q>~gQam5_-=4148^S|eT8hR=EI;eO{u8BB#tt7&^>$Alw;h9aGJwu1$jTFB^ zs>wg3O(6b=dh8Bm0#*&@-&CzuhuK1d%M%(J+UqvgO_f*X?~5~-Y{R2UCgZ~iK_v$D zhh)KO--IT|&JDSKoAQb~Gu4jt(HxE=s@p4f86azN=R~U|uxnMPFq>eOPT{cMf+ZmZ zV6A`maYhx$X_1^-FQyom1Fjas4(96>4@D7+xG4e3fym)Hicmp|-WVQ5NzZx-jL?pF zibO8SLq#2rSXc`ySgvZ9!5vef;L@W9uuh#X(Ku4{DEmwmUNBecKwOcnPB#aq>!GE( zK5Jj)ZcaCy?3ddfXgE7or)a_9-7aTa!zSz5R=gCrHUx~4Ytm4$XeH7d@!x#4(-Kzj z4SIoSO)7IJXMi&1-be2^VjnaPeWBY+Uc_XnUZbzz;a3eFo(f{PE&pp=3}G;s07#D3 zNdV5R8|TSFJ4h)`TnKbL$m8=*e}lo#JR$}y*<>h|89Yr(e!s)~d&%ksIVEoX^^3C4 zh6gpG+^E@e?QB%aNz~>~K84YDSy@>T_nr6?PYPVeLYYvEY*HTMmXEOe;@w-v35?KE zWnDx`=I33FNj$LDb1dyiVz&22_tRIOk_klA*uiU>1uCRZz~H4)m{q@Iq;ebGUIFIo zX}&$^sn3OWod=JQ%%Ue{-vYH&KaxNbUBRY|ilfQ}xfJ4=tOgy0yaA}c_qcw^*Uo$J z3m09~0y!0x3ZO%AL)lX8pZk+}DHi&O)y2mg_h+iysD$jVH2|>Ib(*UwiEMV@r_lPw zxj-W9~y{KWw!07>QlG;5tL$f@}qvT^s$y(=7V({8HlEjugg zjz>`=ehwiIKTN9yTSTOjxh+Se9xG~{=!s}Hf)V};rYB-QUw7~@kizkFF{x*AQK6A5 zn+15EWdPA6$tWmhy08dBI|5)zg+Q?c>TJaRoBOu=!fn)amMa&rX5=bJ@kcL>j6Gb{#EV=@VxXao_@ppKAW)hRdhIR;wtuGljIq}}O?Yyexz7XcMZWME=q;?Tgr zEcg&9TyUVg7czN0lPNz+*vzsn>$*Sx(|R-&k?I-RVh8sXd$lb<@rTja*toWp@^uw$x4T@Rx8?BZMVsu7_;jYpGfip{lEKH1(l5$X zatKJ!u}O+e07i(ZioMtwWAu}jMw9}QSVQEQjTwcy3aQMREHh*Cl2?Eia+mHFOo+F4 z#Os0*hPd9ouC!ZyFG>WgM>uPNkUa-R@YUt^{4W!f{R`XL zu-fT*4pM@7CrHk813AnuYy$cUD!&}~bU<+jl%Z+_H_aR=tD$M{U*e+rKG))o_(Nq^ zL<#IA`kWc*`YkEP-uHU991Gj^!(eSte;S8gIS)1|yL(4h*Ln$nrKBh4F(umoWE4|h z+Kc!o^r!MHCv`;- zJhhp$2l_x$0J(HBt}>Tz-J!JM*Q_Qq!@+VPBBzo!-B3X=cLo1MWFxX!i$Hf($JRHS zn+5@r2WKHE9D0{g2d2=?5>NGq`r6JZc2Sie^{HrKia+$q_#)8B6od-Mhk|2p(|jN; zMN(rjdUGH}tkL^qO|l9~=ph@drP^+w5{E9~8KLq)g67)P7xsr5(5webAXDUxy;ncI z)gO!vcMpe&q`$P`Z*^L3^EueQjy);$q3;TrB%%+JCW({BH@{OQb3Qd+z!;&=c+p8j zEE0`-okV^ABhTDPnI23a{QP&Ng<&V-pWeTDg;EnQbN=%1Ylb^#60C^=2}rB_dAkdF z0wpV~Ij9^iD)<&7^8c*Hn$nYDSaI_zoQqN_B;$IwZwN%E(QmlfWgWv~ZtBKjbU@-$ zl2+BkiZ89-epR|t+s)P~GAhQ#&CPbU+}*|Am8Y}wv8C6%l@bNNe9N;ul@2xZ<;TlK zCu*qg_rxxr`^kD^tM}n)x&}kd3uuqB>x878*|=NT8~1op59i}jW%^a$-%gdelusjDkO1!T8)aUCrkFj7goRuys4G~4T(5bC|SP-tQNF!AF z!a3{P4FkC~dmf}SmcM$4IB(~5yB%T|c3cqoD?5&>41tIP0@e_4u{)_Q`h4oCj8?+; z`8P2yM?9#+(fc#pD*B`im*jMa2665Sjf7I~R`)&T_v&A1ECQ93uwt8D&e7=$9Mg1@ zk%fw+rVC^KcN30|oZIl)UUutg`^2Opp#CzY?P33b6M>fu`2DDpj}(8zlu7AgLtNpz z)y>kN5{ww6IR($(Y8-2*Il4dIEk9hZ#|^t}z)GY(hK4dWdF+u@0$;kBBQF;=SPLZb zLCfJtttX1KZzNO9>qCJ`%3(t<&>fV3I!eXFz^L;qatIfjWlD+6`NH+m7Ukx<8cr#p z{;Kcq`<(qW0qf5f;>$r#4=I4Wm-+!;PJM}kn^wZfS}4o7M$=sLN9W&i%M;5BwqHBq zai5>4N2UY?PT z3o`#(6egHP`FAw%YqYE`BHHa>QiSvK367I?BA(a)7fzRF1i@Rw->fTiO8$HRMGC4( za^-ZLC*uEc#2T*JMVe&#*h)k%XIbUlFfSR(z{bR~wN8q_nK@`N5wy})lxO0oeC`c} z#wk#r)mAj}F;}GN0BuCrvNwj(!gjhm)1~7hy8Gcm8iC~X%6)ev@qCu3hwabigHo-6 zff^vG3y(TK;fw(pw%Rh%<4x=5iy0jkVsE0b zQ)Xk%Kga~e2oFP;k`NtTHV=Q?kxwy_ZrN)oVUQHy+6bw}QEi;{^Z%wQtRDaM@I)Eu^avgG3KlO0laDyf>jw^@P41HZgLsy zLHyR@(4IhEawLG&>vI7Q&qbNRPsilFbHBXhDuSW_eR(KPQMaAC`Y$ve6tm}@KQGJO zZrb~U{KxX;C-YL9Kga%Ch0+#qm-BFUHJw;;%3A*y#T_+c@je2y#c;2_JRzmEYL(9h z={`%d&YA`6!@vNz6JThYg|ZX%c>|{>!UD1{zl*UU1f2~rl{CzR%ver!c2ZaO4~2@| zCR7YVy|zv+I25W_>mE9DF>wME^ncg7h$-;=OVUMsw!v$73p%l41+O8ZNL|52;K8Q( z+2?O{JnU>|Jb0qWxNi3Wa@qDcT3TdrH8~1t9UX0uSnq=MF?Jqep~t>p$_V?|+C#&T zs$VX*J(!s$?P1sh(BpsC(BeMg8W^b`~LPq!|EfN*& zBDz4NS4Uei?={p>ShD~89 z`B8B!!K+oVCALKyRHS`^0l^$2<`760auX`Gj>mgjL*ZPQQt$iW^n>fw2s(C=BZ6no za&5Qa_wU3sPfS4wLBBhm0gKuo>}m6W{S_*Zq1+9DdikWG@mUvixxzM!%b-r5=X_Q# zdn`yXsC>KmQJ5FgtPcMVabzIsACWblIEI+c+ZJyWVM597(327nCwp{HXwu8h)9{*J zTQ)3b)N8WqMA7eR0}<+1i;?VCIQgNVgo7r0m6 zqLCWV=_C!SEtM<2%SZR>TN|GqBpS4moxclc8@QqGR)&0dU4`%{|I3P}{OlX>#n0IT zj`a*M9LZ9NFey%w$}HcDPgxriUgo(^ccka6%%6XRVM%N8!*LH; zI@aVMw#c;brrGl56MOqJor`gjn$eqEbm&DgOuQ5>H3N)(HA9*f8tXF84DJb;E1}Fz z1jv^kNH?SP?QL@FO6k7OGz0+i7dOG}3=hGHCym=#^K}4zN1Y5mtj9@#-?h*AuC`&^ zIik`aMqX-+pt!+I>+r{uN^G668ONEag(<>9kuU$~qILS4CW}dk@ylSZ$>=qk>L?fG zq9Rhg`J{5cD?#{?ig$lpZ@rjlOIzz99k6&71HT-t*0;GB2}5qr*$=clV@!MBF4U}c zX8oP-YO@@-L zDnY29Qp`0gx`@t&9;iR|qJRVyYLxQvvgdstr)eA9(VYljB`)}_MNOk5f`7#a`XEqi z57(<$ngTl6)ahxInBmI)?9Uqe+0!5~ufu(+?R*j@gF5@8_UpCiCq01m(E`T&0mo=8 z=DF{ke$^O;xmY>%d2pr+giyy4XdLmfnWZ+rI@`g-?I9{a8ibkV<4=Ya%1VDKtu~>K&swnOS0`9!bP}3pjN@|HUScylG}w$3%(tXe^Cb-R378a;+Ld1ACZK zp!w2|-ah$lPKGpkkK+~6+AQgInp6Jq-s7<*q zw;eB5o`MTlP58rNM`Y3(-L|Jq6L9~s7M>BqluK! zbiaINe%U!I&w95;B(ph~nq3cQ)HVUn39I{R6oIp93?>Y1We>1T};z{NQ8VzT0g z<-T6QuyEHI@EJB#&J^{~Ei-JaMwbRYsC~ZLN>$Zs-cso~0MMhRR^RPo>Voi(-`h^t zR;n^cp`Ig674Irm4c(CF7r~>o$3ADga@)eSpD5P+sN)5JgaK#zb2e9NSNmstG5d8w zM%XysCTUr1AnZJxRiL5c>hLrimMwBzh|~Fj^NL?Tjl}71PL1Y`5Z^EFlMWfhc}A^q zo1K@PPcYLg{4qH^s+Ti0wv+H8B*2(e`v4L5IxR*Ap|E1;G_FrNYs?x4x+-XXrr%ev zkLwk@TqyO{BQcP7-Tswep>nv;NSs0Dw>3nmsHCKn?Ppa*sf9VuA%edX2Swe?F`^Mv zi$2@=w>V_D`KV2-2&nm2NMt<5{yu=6k-(>uY#Catqa=Fsy*mO%f{cM2XVGXrDuO44 z7FKFoPf~llba^d1bh-;Z#fXPOmpxLr2(XFh)sZVu4jT5dq)>-CI_&kPei8=R#2$0& zzDAMe?Zl$VUv3--pMdnL@`>+YyZ4k3>SaCnyy5Y2P+n^C*!4xWpKW5U8EiIcle{=D z391sOQb(D!c(v&=arptkoh%`$Q<4A3!I#gx-|6dCY5uu01c{&T-Ce-}irpFuWrND! zFG02Uo;TBjIIrS>%H{S3)L{}TIH9&hNu>N;f)0F2s2kIxW*R-N(NOx4Ez|zwQ!${C zS?Hq0yEx@Fn=*3$rry1gIfU|)Tg6bU1bGDnTN(H@slLac!rzLCM4jS?-rNS3ku$(} zL*}p+v2rc?aAyl@Qo&7dopxd(lW*nNh^mDu`&~?Abp};erV_`3|1rI)ZiU(0cv!r&S8FJ zrqRusM{mYPNmAL!vjllT%fsonmiq|4o6GTgK*AF&L+B;5EK7h$7#68*N%06 zIz7!FVEL$*o+8gB;%Fu27Y#pESG|9ZE*ul}B$XY@EyPv2TMm=%olxV*#;t_kMX-{elDHD4lU$< zTb*x`EBoniw&Y@?KM4ec|67~gbh)sh)wk70nR_PGG)iTWuHF3~>y19ETVfWicUO{k z%GWH~-Wd^%9K2D^!h+(W^&#tsBg7GwB5cL0<=O~y$K+X^^2Tc5!>z-^N+>}Tv*qJn zMSGz8?fGBLCN}CnwEaYMo&$Dopb~cVm2E%Z!dgR3*A+)NS0r>lf>q$6bAiT~r3_01 zaM2!S1*${(M=iQlXb#>b`Il{<(V$*&{ugJ*AzgGR*Jqc5D(} zr}3wF|64|aPc5`Rc5U5teX>6KCR21$_~px&&~!I2uw zQ53b1R)khwmNxA_G?noROSRiC)%4$M`62S$%V|duBc}T)`RS_uba}U;>%4(lO^q0) zvaY zBlx_7G`;9db;zhAI7Y2If0d@ccf6i?$@6;PCb0>*E!aui%@)PP+^QqF?y40D_p=a> z@D~lrXB!>t0up^G727iNS;hC=!8BrC3x7U@MMT(zV&K)8M_c?%8@4Z>-<>G=`Re6M zo%QcP4Pu6H9@dT9|MhF$zCDrnfKoR3HDQz%Ol07~Sf2}*u_cwfqbM~Lgx{h&zlBJW zCg6e-$xBJ@#NeX3(9sfG-s1`*{o(jdm{R$z$6mW`t;!??^9l_s1z3tM@7PY z4KvdROLjR;C3UT)W)ZwlBbtBf2W&FKNeYcyeFXrt2ITXECEK4rucE?9-GG7$H(W;n z;tDO%Dsbuw$6McjgR7Avjr{j_u3XYWqnn;bibMDv!D#;Te0Vb?zY#Ws;Sb5D{*7L` z@7W{+6^>R?E!!T(^+sLKoDnVbbrOmdsHQsddG62LzWu4-BuJEUvffAj zZ&rb`Y%2sKl!4Ue{-n>^9q<*`fX!aZoG;eQQv}3QSQWzFw}vcCvBumu%e^EmPzKw^ zOCP}7G;eI<>85c`N4Wi)P>-E+G=h*J3Fur{gDBBSP`OcQ;d5gB3Q{XT6T+tvwKo6| zSz-?gsrEiuQ~ftJfkVz?+`@BPOMzrEn%i$-gAFh(R-g?7erUmPd7C3RD(t*$e+qkD}SPgX2X~Dv=spxta zF#Z4lG2RmCWrT%=Z78dS;)Y|=%=?*XY2$G-DzBmbLOJhXr%%#`yn*kcfqW=Fpq-s}2@A=S86#a`jTZ*h2s7CryB#XEor>K}$2 zap8DU9%sL*iFf@LDkr}IgNeh_x1!}@F<-!bsYe|zK)F%#bzw+cC{L9@~8if!$3 z1S`)13276Gce$aNc3~0!j=^P9)ap@GD0@eN6d|8q`9L5#RPJm0zb)z=gd6~tQwMMF z_er6gLGo!dbfHf9FsuJI;2)|cGD+%OkgYgLN#eA?pzG@w$pXXw+uYvuprnQR#?7MO zygJ~`|6L0(UWcSH$%sfGsTut5pa2!ER3moe!m9NDT}L=1N#~>r-`fyEtE_DC-!A`! zC#Kp?n`dRWw0rWFv1h^Xwgmgq|MONoQ%PqD%(Bx~kPa0pk;WMcQRovWpm4@54KZR^ zIh!bU{%;fv9!k1C9-tCT5gm_E7zt*l&IKguE%}-6|GR6vMB8}rf0rb;8^6)(3g*Wd zyd(Swy;>L2wYvop^A%1TGO?}bKxk1%;JX~stP5`)`?(Er|F@l9lx^hBaL zKxiXD^4SUD@M-OC{=E!*Q*K@bXk6ih58nUA+Yrap<6pe{43viKkCsfD@Jjkkj-m<` zW(=k-e0TI&nmtYqG2B=3)4_iq8!yXL+v1D7QVefn0uxwRH5$HF?t5VFU(c#|BoZyiNR!n7Qw z!<9I2d1bO<0=hK8YoVYOhvb*RTA0AV_*M8OEo1n4zoLl#{t~BxutF#|4ASzH?3&2y z7+m`a>P(WF-6^1wLIrIV^+2!iMNFWWWQs<;6c#aTUpwFM>&ihCP}GtBANJles);Xt zA57>)zxNSO3ka2twwgvN9cXX27bW9)YDB_Udnc&e;{9;M(FU_2kt@t8_LDq zZAI>W^@diK*eyS)TzqK)`uEnQd6>H2EF{bta+ieGm&ebYWY#p$M$ui0IF!epl(jW; zeaPD=jB0zxuqqsGrNKMlC`QUnqQbhN)BHc9CBdCuPd5e0SwUO?oY67Jxx!Lq)^s!Q zsFLR~D-y(__*i@Vt3_S+Sif2d+aOD_&Ohy$^ApL+q&o z`m;oul{YOP|72dR?Kekis%qMoC$v;hO6oUImBW*I$B}uqu769APoS3*?95Wv5S)f6 zK2YO`S+7hVoX9eYFpV4euN4B(rhjGw{c`Vn)c~IAyiQI|7RZm-?>lIjW!@Ofbu|&< zWrvE4P?(Z?lPvTM?nzV?RvVeJ?~WS8*F-u;-@pXX+0%@0B3NbF-5u?n3}t3rW@9`* zeE3jARD5k3osSEYBXwO|);9~c>IUnV7bGPmyY-3tD#A*L$7OhU96d(@r_E|Au?DYd zks8QS^kte+(IEhfs#{+6%Hh`_@AS(@54 zW<|Ao(Nkt`tsXsk)Q-PAuf8gihYc0DbdT7cvzq?yT3pphKf!a=7|XD`AZQ;S{<80 zE=m^niqo8FvOI{*koFl+k?HXGnbp6A(b3TqZsmv*ZcEjx@85YuM0QRJw;Dv`8dyXu zKVD*BgmZHo_1)<2Ub8_1$v36^r3+jJ-lvb%ds)%mrfy>n%lPK>3GNZIwA@Wr8hYOS zS_=lcNo)Ob>%BZRLLFKfYG5M(_RuI!gp1M@hnS#u<{A&`ic*!&J{;|&HrDE9>#yw} ze7q^;;+ZEOh?XMi%ZsmwEh#>O*DNAKjjI{DTx^OVzDflAP@aN0h3N4kvw71S7`_Y} zx-weh;YcV(I4~v*ted;=d`u{wsGuYk1LTR#w~K)fQp2JqB?J9Ou-ks`POzZQaGLGI zd2Rvl;>tvMC=Egbs=^R%sfR3amW{ziiQAEtK4%w4{qrx<#H=Sv=_j6k6f!B<;kv)Q zFu6W>UOP4UMDl+|)w=ol^=|XgjK`Knn4$_0vf3wE(?nnVmlXG+E8lR5fi=*t-yh}j zaH_za$u?pS#u0fK{xQ^LG9r@U%1akR3Yg?NRQi;T-bn%ks=|~m6+OT7Qyp@PRKzr} zF1WoZc&-5W)?Ejb4jQ}@eBD>n5M=)=2`1Y9uS7FS$Xt}KC}3lVnMVn;(@=^od^lWE z^~7&<8a&+}(`;IofIpFOHHkfp*&&CLZvx((38mlZkVS^ zcBHz7lC^HFs&~{vkW>vt19sz9L*K0trDO9d&u?K}2@bMZ!r78Fy4j-d99yTpyN%sv z;FN#vY4l^@{jv$XGrpA7dws$;m{c7A;iY|WV@eQQ4i9tY*pm7Ztrc`@gjALZL%rZl z?gB_9F=-><=jZNw%_!ajX9p5RNe1Cm%4J|G)qrlML?(2ntLb^Bp4kThS}ZD-~X8y^g8|0eMGRY&YehsLhE z{Tp{Pef-@PudAH6f%tqia4@HY*UWbj7R8MCScb9^_+s2{NThlkX?r zoO@L$SK5BMzO~gd83AIWykL4Sl%YiNdl4Qsw*DZ}iodV8*c3C;6qx&xcK@SU<>-$v z+>h52RfCb&jbVYGz+QB7XU*q4|cCbjBM~^6wUjSDxM~xk<57I{38V#PA@;3ANQdZ%1?@k59_2!wEE$r$0 zMH=vjCd`dr^H+$@r}{`0$!;C7$Ce*q{BLxvSh0Z6FV?=AAG{E10y|k6lY**DL$}Gp z*NIulD<#DQZEf+Gta=AnAj(`3q9kJ{=JDK}J$NU_1HVi0%*=%6L=KtCfRY)FHbR1s zK`04mq#Z<`%==fMyk6&ERueND?c5hQEkhX*A`+a;0Yg7+EaiUBw$g^shM3B1t-NTl z&E(hHrFhcx{NK)>#Q=zIZ{)3KJ3Bd4&ecY(?f%08c1&VSyr$Ld59jgnRV^_eU|`u&3zm$ z6GU9nJN^CrqxuL3*AWLdMjon~&qQuSN^KM|$1;NvLzA+n4K9kSw3*9G%_r7*+ z2TnP}b56E~A5-&arg&b%j+@)9UArZ{87mjCzN!$77@kSsQB^qUc(hZ~8TE_y7NTa) z@#|#r4b>Ku#O1-TiVDvr$|0j5Hnq2UmimD)l&~|e!Zx`K3eO-n`JABD$fW;ZX`U#r zgAwaF9&M3?%VUE<;pl|quk;F{6jfw7Va*MsVk@GR5her98``|*j3}VB@PL`UAU46> ztgZV|&S$@?5yB=cT;FiZxSKi>@GT?>wCvM^5A_dY-{d&NS2`I?XUbKu|7be7n@)!EJ)Jc?=Z7Ey zu9FJ8Sm73Uj#;>zHY$1~lX!TtJzW=2)w2Jam6*^9s=Ny1&z54}&?EO$PkP_lMW;Sg zj(M93jTaS4lApcu{==6PHj>0ucKE8!*qg}sjJ{z(=QydDb!0!hsrA7^CodOB2t%IA zv^7!L>}t8OGutrM;IruCI`ICFjDWxfs}FxqK7ziuCp11ZAfUIX5W^eh@uD}+^+n3h zK-D?ww97eY%H znj0Gf&zD@DlTDE+QYQCpg@t_v-GnmNr*;g=f|18*{vXga*foj_%doI80x@J@UBo5Z z+~9-cmw@ZQVu#MSp5v`aOyl`(vzQB!ipd=a4=MQE=+ADj?#{3IRPaQFGjsc11ltNI zeZPk*e7iYQz#xT9QLWx*amcOIrc0B1T=U0oFiN8Aqy_!PYUPP{I#ZuAP*!eQ#aHA( zs`{ywPRFX#zkmNoDXy`lMGneL{vGV=`{c9Oc2N5G!{{%oklH7SiiV*2`?2pd^CI?h zC>LRb9W4H)1d-%MhGQ05<1SA(3K(vfzv=GEjb(83{kihqF(nl9W71aPjv1C}x-C+n zH7xJoAf8)a>C^2Zd&WGiAh{!b{j9hxL`bar#9LKb1%M`3=qeIOO5w!7rHIgfW~Z-D zA9;58fj}e)H?#qu#!~uiPnyvi--W8`{FpFX`Nx&!7}y*P<};+!;M!&zOa$AjcT6CrFc-m7{kHJ+yfPwENyMTrShfON@Jes25rv6j z_OH|)b^XFC&id8yivhDZ!ZyFcQaI$WhPFHy4vL z0LC3?A^blM_yzhY&VYFuwbdqrIcbvz8pUR5dGbIavQ~45+pA8Xe!lG7XaN+e#nQA8 zQ%2!t2vQFYH8TaDgof#aCnu%Z9s@`*Yml&UfJc~LPoZt?yD_3gCsSxIl z=ALhUep)nO<)fr$3v`;Qaj38*vaO1?%cI$bWfM1F8hJSjB4PA)8!7zxg$TmzhwX$* zAIp!w=QP8@&fZ;~AE(|@ydWa;gSEG`L6JumE7A!F`@0C-lKD3~gq8(KqpoS)eU|Ut zM5+%WI(k+t`UzJ2%L_RFFN(i!YN|;`?rhF{{+oOAIo+qqpq&|!A-Ro@+{A%@xpP(R zR7Kp?N?uH1V<%2f?j%r5H*{jZh+DUM1zXM(8ie8GUB`)VB$M+=J-$kDIe};B+F5u4 zL9V}zEzSo!G|tl7Mjuytk}8KTEAoy!UCW-VfYYzWD&mt5Hc^p);OxGH5gsN9;Yo}}lL zA0UBuAGA!nShX}1yAegNW;6yGnCxRmsnwE|dbBgEGW$h0du)+NDL{3u!%@7wmPF<_ z_Svx~rCRU3_|nMVzkegStXe|$b_0f$j_0TAT!SZ#M@W_{{YIHL89q|H((e^RN+G4- z7Q*h6Rr6noC;Au=PprYRq>cVv1|?2@^Oqi(ot2qo&uXrLR+u%+MH~#OpB?R3@jSoa z44(V;l(-C#Ce@NdoDLt>eEK#?ST-C{_sf1nPfo9`ZDGECIM#qY+cIFne@J!NTmIF2 zezbGGOQc$3>MJczEQwgIIp^2IY0e!mAOQ_O+CClc;fBp=RQ~FG>r2h53~>rcj!y-` z0b{J_q;!SByQaG z?gq0e;}SuY7_;IaxzInKHC!#RQw0g8q~0XnlY;HvA&}_im~+z~$n2kwBlxUOdS54e z1b$?&ruqJ&%k30PnL5&z$RvQrBS{(NWQfENL6J7|!-IRg+@!Sc+Y3!C@C8=H-TQe* zj+E*-Y2MU%zdLpBSm7|-r7{tBizpY|X1+Q01oxzJ6H>RgJ!!cd)G{;2E1N@*t;hMI ztTumT(cjWZ610NoP=PyRzL#jvaY42Pi+)($O`0x@vmY@O=c?zS~^6nwRnnp$)I0O1eUe}S=XUCo6@|X1$N?% zL*Ah){cEN+5ZI0YVV}jSc^`y> z&T*v`;pR@w;E7t-!tC=4o<=>`)9=~t$~tf%W9h8i|Ple-7#%tIXG8`Ep1cV_~vg&jX%mOU}O3Q z#QfT?`6Yd5fJU+FVq4^5_}V*j{aypW2U(wm6yYjF#C}tt%E#(34{HK?y2hdNGjUNq z+?;Pd-tw6Edg@I~qx*ffP6a?Fjnx@q3ea*f#dy3%(`nRJ0O(ZFFDHT<$}zLI06*-r zeU6sK{I~<_fiK0i1@3glPk#2}@ix`9gU)C5m^@m>pTVGzGY>8kK2~y2`r+YWl8}(l zX?s2Jtyn?RO5w|iw)Vg+kWV8Zy_U;g{h{Mace8X6tJY_KK1&eEo0I7EfUtkTi}SEB zx5*E_n!;kq-#f@NT#(-u;+h8zY*Mt2NRFs^8wn5t@XC1nNj z-+yEBa5goCF|48;q;ZpTx1>^cDWW>{4(l0hm2bF<#@eYw=cOj~M&%jmJ=N{)7X|Oj z+ULQ$w@ue$-;PDUfrm9DNK`k9TA;|MMIXPJ}l#_t2sP^WN^Iv_r zNL)s3e%a*O8Hs#d!>eicMb8;-X$hviVhEp$Ylf^d@GhQ_Y72%a9?u2DYoK%Y&$g<4 znuxM1AAd9}#S+eACK0OEuoSH*SpA#n4My}`($m_OzrpGUK?`F zuVy=~3dS3wPm1gxFYEMT)9t|iK=B(71||<0X$&=>=H2BKZnO0}!bHNLBy0xwAni8V zO=KamyFYn~5m`4_8>=O^AKbl{#?g(BaZ(UXi!iC*HmC?cdfd25R0Li(DonOti|J3W z`$T9=eAT9G2V8(O1_3`#TF>Hft|5KD>iBT%@-*eNJ`% z2FQrW;Ezbq3bfBWW7*rcR89fX8;t`UdSpq$%FvyDWqMZ+6@FhmPgpn7Y8*t_}x z015xqUdnd-*;e!G=By_~GJReE!=LiF41H`2`~6lZ@5g%<{QjASjyBCgvkG?;-pjV{(2;3es@M5jWiL??nYx4c{sb;T&n1zQw`-gokX>a%Oedy?M zRjr4&VP+?PHit5bt3zGmlw7a-^7`u8X8R@;D!Yx93<|Gwzfq`j?$08!q0eNgX-Uk& zLH&JwAE4Ghd2Y$RIyomsmD|CXluHY=^mb>oUC2_bN_7(&J}c`rbNEam>wV3f*lW;- z!qTQUkEh;|thDlocAeYoF=5+g>CXh)VMZ)om7>veL9<>v@eJJfeWIKdOA4lIvvgmw ze3-rJXB`gBV=k>#!-R5p=YLivQkDd3T4~eqE!yL==^rubsx9{443N*rINtW?evKKd zK>eZ^*^NArW=dfvt!zhMRJ1B5l#_iav=l%Zqig!(35@M^!gufauw|)X#Q-y+BKfVKuXvhz719nbG{MiN zYu6A&hLs;q6l~eU!+Uaaa);Z~2hBu&7GyRK{bghK`T9)@PCR-$_KnGug2Szv0Lm5w zbxs?wIk;n#%Qq@i&}9CYu@RvxYs*%?7usT(0x4D_5{5IMneRer&g2n+e<^JNXBFsW z!5(X1aRnOcCz7Icz%sA@1hDs_XAz2v+Z^V!;0y|hQEOqjb^$C>cqWE__I-jTC9{f*U7QwMPlAX_!bV3Od;R90(a9!1>2TII(kH+c zTC2tQc+nU0sj+7vA;5DQgv*V;4}hCg96fEYd2dpeT7hJ7m3&wug$CpnV3_GnG_RUe zWC(Eznxt&+=oIKa6 z$&g7_hN`;VqZHez&EE?e7(ft7!OIrf{VH^gkK-G6YHo6#ec#Zj2##l()@*%%hy&gl zu9NFx$z?7gBK1Df_UR;AMwATc+tPw|TtU$2ytO+&6rYjziZGZ0gc#7xdgPd>&?kRy zDElzHx!*A~Ga^DKyJUY4mJlJV^1o{VYD&jnIEQz}UR-PJH?8}8#Fuy(*+tKGH8&!C z27$qpq~@e`P~1FKYIcvFVGzwOaKh2)BKWg4t%-%3OpDH0yL1lftOY2R~PH+a< z(LS0kfcl7Lz4KuTj59IW=k+>?ZspX!9IJS(eaZ4NizI7@;*vf+CIu>{7$(G}m&ckfLK9p^XI z)Pb~ktOfcXA%@;99J%sMYBwm455!|;`^Sblk58_r-$DpYSOFX_ik|8SR|l3^+g|cPiod``6HF}5ui%dRFgVHsx9WyidFpR)oXR%PW1z}pL^p$Pue)|(|l~aj=s?EioU&IK3|XV^1toOz8coh@A)!s zHu_`7(Bo~~URfzzHvD*&w9~hsTFpjYg8$~*V(i{+Yz}<4;r;srQ1Kj`F0vd9a}H^Vb(_BGId|At9J)akVn4 z`KsYIPG24ihI_~L1rM`chBaVRZr0!bSxIVKAed*k(nre`2*qX9T<-W~3LMn|p6b9E znUtS$j4>Z)ckLkT$R>fT?jI-Gsd5rHNRoNf0Mz6RbAp9P6)LbXAEF-Q$#;-B}&d9xRTw?1nMJv^dl}Qb4#rDz^-kmLa&3~0@%Xvy6vTGII=1q-qg*l zX#ZD#YMneOlH`$~(_j9h!0W#%clM;hN#ZWHJ2Za#_u6n(W;z!Sefjq2XP5eS)KYj0 z=k7)p`E?WUyG`tpP11+x+|Sh_yVZ$tNaQoZKi$t-K;AzuG(S@_+y=i(eKp65%J^V- z04WTeGQp>|RS0`4(z@Ini0x zJL|DsKY72+md5X4!$1v(b)iHVIA1RS?Cpn44CNSOIkAE2Zfo(HguOe&`pFwE<}ww_ zc|RXmLAbpM@2MDq)W}9(2-C7~(zeUS%~g!MK7QV@aI6&j zP+&8R_WKD%P^JE1n`rm@6QO@gMfb2myORARK6W?fYB~bZR>ecX7jB3}=>uQRCk)TV zCvPVtD^uZ5ST`*Y%%9Lrn(IJa!iz!GV@X396-PRlz*AKRzT&U1{Dq-D_k1aB?GOkB z#ptfEdq*B|3=MN)PozoiZtO`a_(rm2btdUyU4$QaNw>@}2Pxk0xbfJHb)iwZ+DN?n z{b&Uwo&ocI1`(=~Lt50DE@9(Wmw&_%xXzfKgH%A?u)k->Ap3fe@7Jl)4d!$ss6$V= zEo$?3Te}l1h5_~hb6-7m0qYc*R=Q-TzSJc>LZM2E@rVr0r9g~i6fmRiGs+b9>IgPV zjuvaBt3BE_+;_V9WEN?|n8+r&FEN)fxV>Y39gWz0lO$Nj;cZov6h~Md80NM6V)5Nb zghe%3BK_?Nc1gi3S{i58z?@zb-5mYeuiah%7+j8)UJQ6dV!-bnFP7fC)mbGKQx{FY zt_lN3){ha zOv;}X+gZFL-#0{uLvaT+Jq09HCgX#YW^R8#H~oq|=11zHC$>5B-_u52hE2v(wUntbYWo7zW-dcKD|vqPMl+P5O`_K#(RC*P9p?c+)hk5bLr_=!Il{ z>+<||CI{&&%Lnv0r4~BbKV!LuM_%JrlRM|uZW_r;-{EI<35S$ifHUS2Wm(RU2}|pZ zai6CV+~ZTSX(uld@4uRZMVBC}?EEr+p2k@>g>neSfk2?Yce?F1;Y~J>v!#h^lF@MG z52=oAlx?Z%a^3HF4dGVGEtBs7$;RV8ok#6tiZRW_zA{+05yl3W$JHZixyz`*qbU&U z{iY>;dzxv$V_@i5ZvJ^Rev~1nJ(bd1DV-!(TBe&V(^@C6KfW|aCFKA7YG0B|mIuv^ zlm<1jZPK-@hU;6|d!KCHRKa9>7Gcxsj`y~2-7XEyHfgHCI47+kt!z;zUyC2xGk@uH z^RdrJcmj~^ z^??PcTW@uLKvEatVX5TE+_e2HbWLb1;fT?M7?$v+UnB_<-ETdErZsr!*vL76o|IfB zi%AHuKaIEZXgD;mD4~V+aH8hdzm}A|9>6(S8rH5B%wwtMT}F5mhv5q%m5PzQgA*D5 z)K7D+#Mg9N;HFeJ8&iuhxAOj}a_Nfv#|iQhIC|bFWmX^>VOJ=5bH*S>RL@U@<4vT& zG{s|ApZGtxU#F408IU~Nc{az#dv*Pyr*(8wi5{&9@-4>D0zcT_gW_JO$&wEtZs;8< zO|-3Zg48GcQr3kxJpNC|Z{d)To*NAywO!1 zV9mXV8=o!}vLEffa!)22$tAQh(_vp|bi@c6Ng*qY&ICW*m|=5F{@J0Kp74XQf|yLn z5-xT}{WZ^=K#n@Tc7R6dD(Fq(PU_yX2x3PG{;IEQomU_HoR|LZ?K@wok4aiT1Q`Om zL_`RgK6ZTey5CrxugdwrnZ8S;2*Ka@mofb@l1TQ2Huac3zp}oo^E7z>J!($qtwgFp z^PU#jTy#AXp5g362F?c_%9uTG-jztb6?AZ<48+-Ac7pfe3Ld|Uebdb%i*8QxTMA}oDX zGw8sFcFt~w6o11+$rM_Ae+k7g+mncEL)@8z{rE?&c()C$KtiM+>77V?%FuIEJ

f<7bk3LCEKYMer!@?59K@v1R&D zPj8T_LW7s%#@m3m!Q(M{@ErDkAs{!hIVw}iCJU_i)l5w~;!>&bv`(a$_#L0y;1%EO zG%mw&0x&`A?g&vt4NO41mak@~^WjzNHlse|N}4WSvLG*!_fhhMO*W7lRdOeext!)Z zbo}*-b?sGOuvSi1sv-7zIt4Nk>5kI2kDRKpj>aR4;Ai#6A8Wz>U*S<)!#P)@tZOf( z=2nIQCd<&6PxPfxU}I)k>0^e)-CE?)$y?Ve-#p1!uhr$n{}BZn(+8J-0UJ`6kt74$ z0jzNMoh+2GtDPwxB#_By#Ih$7Cl{0`kW+x%!4{Ra%p!Cvc zp6F6Yv9Ndd*fjDHiVsxIVxM>AjdHW6@*mHRpd@fO`YxzE#>#istx!b##xtsGrsG!2 zwl)75&$OQs0B_QOnui9b0vF82WuvpBd;B;Jb19$ Ai?+{p!3p;W3gt9JMDnB9- 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 z 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 literal 8445 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 YQWul;U+WSk{g+}+*%m)?87YrTKL zyVoKlS(8l8nZ2L=dCts4sjJFiqLHG(z`$TC$V+R&z`#+#z`zcnAVJ@upVAM2{zGv6 zsGyAk4L=lf5cD;wlf0fQbo;q~f3P2!vb~^hlDNs}x@kFDx_O$oSipFCda_$P*t(jT zI9aeex>#kOiju;>P{SxlOKE%M9Ors^y|b8$Jgc=%3|o~hBEtO?2{R>=C7%@kLl>q? zht=&JiUzJc98Gjk(EPqkv|@b_$nBsVm8qQ}@uSDY-9Rm>!hB*PT7awZoPmO6UZzlO z>%zmBw<<26ulv72Q&?ru089Aacwkm$ zosysKf5V(9{l4nIF{sXZVe;Qd`mVd#^S`}(s{a4)i({m5afj^4SYLhrZ!>xt(~%U$ z2~yml+=T|+=f?jVrP2rOpPY7GA&Bm_v*iymmP@7=Yu*3*NuJa+;iUX_^X*chNR(ne z*Ir=lGR-lbC5D(ctRLV^`_O-1(B~fp+6L=4o^}zieBQpgy+tYj{Q4{~TWS2(yEF35 z)1t8Ni1f*9|PqAo*JwndrLlToKQ-=~A^fpNq}D9k35e?MV%EX5_K@q6v-w z)uw&iZ2AqcjU8@fQ`%rd=DFPgeyTL!1E~dkl@#(}XQo+MU+5@2-w6#(ZqOt6vE}Lv z2?qSA&yYo+l*w(8SEfK6{%Xy*NEYkmae^Ot-arJpK9GwWuqQU>)yeMeY zT8?d@6S1>?{;B?5q(MeTMx#&*(?hhH_Vf@Rf|M$O!>=B@vM6;zVqVb)KMYSRF5OE- zj8+Gj`MTGFFlcrm@V%MQ3B*E0WybYv@7X9YZ1q?o;xIDM2hehli2pl?MN9@w zRc~*r_iHU(p-8^;{FXOaGj1fS;YvFkGU^Bdq8A_mNt90u2+zTxm=IZtqPeLBw;1GD z@HtIYI>2szF~u{ zMtrmJlP(+?lFF=Q7l}pjrNj5`)H|mb$?C!ip8!V9FAA4dog6tFMqt?Nl%Nt;zA9&c zS=y-z*0I5wDz1&lcjOy~#Oj0Xgzv({=IeT%7!{2s3JMGw94@g;Hu9B*E6hkRv-Nvv z>0YE!L~*T|diDkZr`JcK-7nnQIUvx<#Q@cssMUB5`1DlasL6G2{9;OpV@xRE+3Ony z=ftLjay+?^;?3#GlTMIA3Iku8$H`*SXv5HEmrTDrMFN1b)63V_*9mvKz+fniXKv{E z;YuP|#M7bDcCJFku+8hjKv#Euf(8#0hm`ct{pIoIJJ^RrQo05%4K}bK;>rqjIrw9S zNSGe^{c@5uNmLc41$;NskNJYL!{**&Hr*=VP2*a?6LQeS)_{cT?r0{P^;5KNk-#0D zxb!w+0XwGwV4`K7T@t;3_B;=qr@Qr%vVSBDAt+;J;244Yjx*&CX2NWwTN$(@E#` zjwj3yc4GnAkE*6+0hKTyd82hrMM|dJr+xz3SIN`)ftd_?2`4M$%tFw#h^ZAk?(qza zdn&tOiv_e~cguCFyU7alYAprSas($I&Nq5SP9HYexZ})YuyIM?a@1!QhKRGth!GLW zO6(leq!;1%0PgFC{k%a-TvRldqKSq8#^UW9=3Mu)@vIy#HJ$~D`QG~FEi~wf>dIH~e$qqp z^77x2>G% z?4{(X`cMumA--{fnl}Uf3=e#|J@LC7Vie%FU%XxphDT0cjbS6q1c4cBVV6@x`1ziC z7X(;fW!3f2ALYx7+uhSMGclpYb)%qYS?51{xuzGC1Ca4XVwdu%KCK&d_pLnI1>?fDKT{+%%z8O2%a0~iB)&sI+_yKkaZN*m9TrET*Yq4>6U|2j2FF@Z-xD_FDAsQo4>DJkn6 zg|OQ^@_k9ReO}#w7j-{)y%bgL=fd;>a%Zo*=O6znjJw;eUb#bKGtuc4hBnmuM zEqZAm`6}&X$>y^UWcudh+{!*%U5zN+Uw-HgPlJUqfoH4jD-!qXp{<`;4eP#Y?B|L3 z%9h#a`Yike>j2#A!SUKNv*1Vdu5v_)tcDqd?^>-ZDDk zO3jn_`iI)h{K|dx+>P=PPIxa$5JC(1Fl4lDVY5r}i&Dd5!y{vW;kB&;{+vG}SaCXC z1-r7M-UrS|Tj~Ota%-GYbps{vyPecRNL3~*xrXMsMPf!fjS=`RUD!J5RX))B+jFdR zka5#E+9CZjWhGR-!=TmhTIqH$j@i7q4o}|&BR}`BXo!}!$0HDYRzK9momY6j}f&5@bb!H5mdk3iZyesL6 z_1~FZjX3^147;vji9jRxfRP6+AC$nrz)I8QF!9jr^>S6HTvv23la!91Mf*QG` z3?08BArF4}SH7w2ZN=wQ5^?v;`Nl$>t??_Jft@c8d--qX&}w{vp;Py}C`QA2)&SFL zBS*K+-+ZV-%n3o@FRinR1c@3HNCp@0jpzD)1QcqzV8qnPt)}9jO=Ab~m!oVm+p(6-JDB(`c|v+Lu>qC$gYj%)(^T`jOQGY!qD(f3ZTi%kbiQr`VkdZqLU zS{j;oo1h5TqnsF_UELvc?ExwGcY&qULkXE?j^rtqOkI~8vWa%G3n8Juh3AWmSL1}; z5B-FkH+zRUI-gx|WX<)>xu>)`N_aVbKqkn61bo^zEx)S4q&Mo*ktKorC$$M{`>(R) zcV<_!W2~K326aC^!+pqvhbPtNwG$Y2usiPRfLH@RaM1_MJ|}Q zeQz@ZuD`svD0A8Bk2@(7Ym|9R(wva9Ru))baGte*=Px@nTrsr{25rL|b%CM-xu)4o zXfz3lk*>97YH2pHSm9*Bhb2&ejDSN#)4smFHFDeRjrsugQ3)}}>HZ4AYAb+OZm9va z!TG^9!KQE;;rzNRL%b~W!W|M!o!j}j?hSD*9biwOLfhf^`&+-!A%QN(M+4CD`gk<` z_Ix#=9Rvb_Bpg;+Zd_|71Z1Oug~ALs)xzoogL%LVI5`k59ah8oknv-D!~h19e#7yV zS$}NiUugHVgN21HWmL_Xzu)YOQCQ<*ox=2%3E1SyDuh%%ccGE?DjT+vQ?cd-ky!Aj z54CK>U~UhkAV>B{O_!)N{w}NCwf19*)TAsH4WU{`Hg|PqLX3y?4O&5Ib*{>G!m^dz z+*1Q(XD>ZL5j?Q?>*SB`&SP$Z@csdPiJ345-tGiDgCCU^GrtvKVp0b<65$TPL$NZ*2y&+C_$gxZ+OpRtl1@H?+Aj>3 zdg2Hs_lSHBO{o)JO+xl#k>IdjEDT7}OY7-K8<&~aq&w`l|KqhY$@~kH zr;JaR8Xd&|E7>+=IPXC>VwkGv{`xZQ?jJzura zKl4lHskOOzgqBpci20*_Fso|xS4Q&;XeXyI`%ofgTLia zhVwx(M{y`sMK)EG4kRh)yJ#Ttz>+YKO<-;*SV^V`l_9%SEKy&2@u$ttn4T}s14-1@ zp`7q3HeSTY6mIHvlE76c75XwZI6^VZ1>QGD%jXG?9aSR5^OJ@J^;7UmMoIi2(WVp= zfs9w~O}E*An5wQ{ClF|R6pKqVp6KYFUG|4D$#QnRhB z1@!4cC^GhKL)gHJnvEz`bC5vrmFoLVY;%nncZK6DOS;*a&(c}29B}%hb6nf(ELEN*x@~Q`(}AT}UlFGuMXSeG&6^e}KBw zCgnR}@5>^n!MYuRYKDgzx(M6Ux4)o-K8R>RG8pS!5;+6`aFU*m#9;CXzR7H{n3WUu z>u>M|jV1;$+HAeOFR`NbS( z+$*Lz19-rc8X&AL5wqejtdW5HWqagX0u7|#5A&_woRa1Hy>hznOp&yztaF=d(JHV@NncF8O%dZt|H?M&;tyFqM6cvx1oQ1Lmj}1FeHL3Y@&=FfJ7|+&qiGyc# zD0=}}~X@&Ozb^3m;cE;5dm?wtzrZOx-Tl3Z)Fi<;Fv}nJi(YPgL6{|m z@tJ25=)6i9k#EM*(#t^u+U{zWOUX&{pgPG1q(RIa$%6uTcb1Grqztr#7f$-0l`yab zET35yOH{J4C`3G1;W!;v+ftO$Su-2W2I7M~@u7s3D1xXUq&%9=;^3m6*h|1Luo>+M z^$vHPQ013`61w|A5^M&idx+Wjcvr*uj}2hWW;)Dt(-0|URY>_X+|Y-ceTdEQ)({(c zPH~E=d|P~Cn7mG^b%tPGz4Wwdq8@s(q0fYZZ&KxXI`SY9Cv9%Z;9ciUEq}Ugdpxg zgvQ-;ur)aAAnlw^e$^AnbLHc~Pk48(UP~;0Y+kqulQuzHp2@#%rIuq^R1c4j4fjwg z`c-!Ld$fVEJ?UYye=Sy;1f-yA5Q5BcuvD^D4RY&8P$9y@Wix8KAA)j=L-m4P5{yTy z7)wbm45ZV+!J(Rj@%#7h3(!{0DIqNU*lNCDDxA=QM~}@|qeSO~Lo2O%cf3%$1hwsW z_?*?EGnZwZffWx|0ixEiL+5b!WF|-+miyFVndH7~r_yc3=(+dtF7qIotZd%tq{As0 zY7ow-90UlHTDH9%xOmld-}wvhYc>H|hJM1n9x1UO?vNBpI) zdImoQu~1U*+|F_-%Sb604pA|dT^PZf}S2tHJW7R!c;v`SS)g3HSq@Lhl1J%#@9X zK~y_9a2bzpuinjdd5gRi0j^pB;ve#RblsmMIM>YYFL8%)sL{T+-_BX6`r1KCAx9bS zR#w5neC;Pg@@Pct23->qjw>}5BQ8y?t@t=NIAVdX&rwi>eo`YWO{TVv<;3TiaVAC1 zbxU+`LUQWFzV7!z95?xJ7f=ZPQlgycQ7D&?w+huja!--hA2Kl&n3SUTGoK={*pwS> zIj5y8f=To8@(fp&moK5kSgtz|Pk}#{m(67+yAM^b25A`?ie~qtSrM?07S8)HS*Dd> z{$6a=uIHA?79)6@Bxfr zS`vRLK?0Q3TcJ!qjCFoF!qM63dA6Fsy~GgXOWU`(6+q2=u|ckdeia@-nNb0L%GKh0 z0PqQpH?=_$GPJ9QGRjjL`9gjA<*Q=5o1_YH7W?D)iJ~yo5s6E(ytW@hrT-<%Y=xok zRS+z^%N!Vh9<;yz)#vuO3>k}@xYeX50yfjmH0yn^X-_tc@_8+$t`x7K_cs>EFNj>m z*SD|A5Vrz`pOSiw4lBhY-#8o(z}18q9b{wK0>-ybXPu3T6SmGWP>bGSTx}XYQZ@>8 z*jm-5GUIt-WVMHcRrvEDZ^8LNIfJg;3Q14p+fNvQ1AB?4>{mxBbSH8+} ztrO}v7sg|`7;edg6!Vv?n+B|NDk@R@MCSRk%_}2a6!7v$1_K?%Q<(UmK+RiaQLkZ$ z_eWHhS9ZudUT9p>)8fW{m&E0;L)c3WO^lWA@9rW+KS`D)%GXU z0uD|Bd?L#P*Dp+5lkpH?|QF|K{6hFLcx_%)-TgI{>v!yWm?w_8pkEV*1&IH!{Y74Tn$u>4NFerqt_YY@&MIJBK zv+$#Lk*FJD(stMg1`^6U3HHU%{@sFm6_v(P>|JOeGa+^GD?QuaaqFylLcwK@}hT@H#S5%+}W}B4Q?>+6ivSxIK3b!UB`h)2x}c zQITj;iq>!Tc*lN*`~oiucRg-G3;;KtuM|Pe2c4zN-jk<&CDbG_e~3W6QnnODEL-z4 zI4LC=nE0Yka1ys?N0~= zE}AN;ES-4RxPy!JpBqswMmP-ndBc~&$g)AEu0Exj>8yG+K3yS*#uIsBzOT@J^W5&b zH=f|I+ICQ5=V6djt?S$;Z=pN_`w6xHX;S;s&?f7`Z|V1}(wXCu0UD>Tfy^{e5o2Fr z5EXr%KbS6^`x?SNeyJEG->GZhM;`$R)i zpu7s?0A`e^*BoHDS3b?D0Prm-4px}|1Ea|%-qGdvaHdifKv-flxF~oe49~_TGdxwF z9)&O>7&}J~_mx6`b5zgD0@3o-gXO#qY$UJds~HlT?AJ62yCJlW>a8`^nU+pF5weyy-%_Zll=7MtcQ^xNXo(jG7c4{+v4y+EuEEDce;@gI^_+yM2sh>H^ z{`v!Mq-)|yXabm~VFT~3PBAz*Mg4T&O!Qzse*8Edn2dL#gV-n!i|Y z8~Cyr!@>WhGr)gb*!^(dIPk^Yt|tPs(BpJjNNlU(!wyJZ$K{;9azn~Uav^~+?%H0= zbzpu{6HXxA)TnF(g`zI7|7N+SN*-&7kcuXG%P8+%4uwUnjqoj#0_{b$HbB4cK|csr z(gWZ>(05M?aVjWf&`kd#E$Zj*9~l`Dfu&St2!qGE72L=<*7wCG&=7x*yqI%mUI`|W zbNVBrrfWx?qOvIaq6IIvY@X9+7Jq~$h{hv#xK(h&_5hWTx4$bq1Dv zPuTY%MP+o0FmU#_{@qJBI#I(~i#yBYt2EIO2nPkiprH=cyIK1oL; zXJhY2G0QL>ZxhD359VT%^(h>#H_8@l8On1^SwxEn-=0!ZTyQd?;}>9w_7|KjcFzKG z-jL9C$#=*>`8G4)nVlIO<2a8Is zxTK^$g!_ZEsYS_G(OZnUr?Q!GaY7Zlojh=;>8}tb2*nPzxC!msrEnqvN}oBa${%w= zjTD@+jcX6l_~zfL+YDzmK@m~%v$rQpj&QnFK&d!$wI%W%Z2fZLvfztey7H(1Tnl{u zQqSJdF|NJ|Jk5HWnPS_y3Kd>>Ms{Ru$~uXc>uD*u1WJE_p{^mwL%}(d!`~mIC+CIy z#e*dJ9jx!>k$SSR=cFnzk~exH@$vAwq0*8m;>rH31va5$G6NjH%qG8?vVj-D@4C5J0?zc^o9tfZR?^*z7RUvoj zeM#q19A>rdy@xoIT8-TU7%?Sb+Cq9F2S3C*xYQKZU03jW0n;wQ10iuymZ*LXg{(xc zSGygtqk<;|js&%^afcrpEW1Hd6>DEZ;D?2%B2rS3dJTA;uKfPi24?;MIG?=Wm$PrQ&TF@>m$^clay4K1Lc+O1%y{?`D))k zS~A#NZVy3gJ`rjgWR;<=0JX$xQ9=3qOhMT=`-ojN>Ahg63z2#d!?pBK1hpL`X4g3z zGek=}56HTE1$U0xw_i%ZT^X1bE~B~ZIvNQw?|avNIp8+Y7XNVAX!2^kS1gOMT*!t= z?Y>D%vd4sl0WsLp1+2I?UO++l#UAS2Z`#}11ph5PSWjC%Li5nKXfYlq6Lcx;g#SJK zHeqgp0eu%~4T-iuxa@H1Z{8Ia8IB1?y>lVDBJ!qcNKQXWd@h8q!psJ36d^#Por3xU z4Z+p+(ADtG(OmY^{eAh>^|jlBH0EF$i%!<#{k>hQ^H%@v&!0b|JTY*};M{s;<%ZRB z6p5*Vb&he6&&j%3m-RB{r+sY_t2HT*uYybkoBI9YtK){p$CiQxv~MQNsW_zbq%)&4 zRb!As2D_gY8O=hPy7Xcd%Yte71B%d`LnSbAQI?#mxR%1~#*9zSZ8D)SKR-5eL5_tC z9dz7sy{(S?*RT73t~=pE5tQujluoHECs{Eccg_Yt0ko!#3nv~e?UQj@jjGkBPwuh} zYb5=CaZ9Fjd7RF#qWE{Uxin-l%izzyAEkzp>20B7@}iOmc)l)C$?k{hrrM^-hd=np ztMfr?O$thwASwfPGdg64Q5oy#vi!>ytUuOe)kEDhwDRsrTze^Zaj}Y(Do&?JiQ=0* z3lxnKyDZGodnidH|dH3X6XIn^r zJ|g#`N4WR=Wjly3EBvDc=yY>7JiU7~8WJpv4P|G_<)YBS+|%$7ECsORgU6AsVMR};TF&b!f-vv{L4ixvCG%o>-Vd93qwp@v?-VY%skR^QRR!{_GE zuuw~;=))gaHDS$JX6a!(d}p}b81H5tGs`k0x-~L-8p?_iMLOL_;BdUJOD2yp1C@^R zz~6E&?CDQTdIF3jv_e(5A>MBgly5rtzdmOs{dZ}yY9NM+`IB-}>BrzQMB;g0YX7I( zxW>w!jrBevWAl^6`X$v|VE|i?J<-sW@`%-|UX53jPIr83pu=lQgK^!?aiNuzGfqEd z1x_F0vQQ*8k@FrNgVkXDb!&LiN)%dZt9PJG@754wzQNVQUjAIef}I1D$}H9)!Pf`V z1FtKKXUh&A?bZY60ziV(x=GJXDy5KO-u@#!!X{9h$D-O?@o`#B)u8U{6@jXj*RoWG zaxl)!HeV}Vl7V5X$IBJ8vW`b1QBUjl`u+ z3C<&ioiae)KSMnxj*4o8CH?^}+;ZSBXgc@wXnlzZe0#a8FxKQ&9R?<-#IcdJZjfSm z0L_rkvC+y0{!;1{WVL0X7b~XO2>RWhd#hye4lO}*m_a2=`e3RU_R6On%J_9QGts4a zKGBwAS#0x7&SsI@-KX{w^C8XsVbn zbt-&`P3Qits1N$!?c?PN9>-4m4_hMSSWpu?WE}Y#y=oNrq*+rx`K_X_x4z4krA5nK`CUXXIYww+cj}5we)9GIM ze1h+P(B0mF0l!`yH@d?)2-&{;&fy?!c;Vz+)q9OFMM({Z(yziOG8yor3_10v zwxIim2bF(#YvjF`>&b7o+SV*?Rt5_7W-11CkCQLY!)Ks1`)j*f)!3saJqzBy`(Efe zbJjE|Ru~gnOhAzTQ?S#g`S9fB`FVflD6s89*3r-P@p5d(vFS2HiOqww6h}%3hP=05 z>d~3IEQ>-R2|BcZhpRmfogdOs9+;%O@^w_I+S>1+_Cze;V7R#6DkkS8uR$7?ev6ep zC&trsKr)IhN6COTHb&Z&&~rRF?rM7jFOQDqy?&#^*k)f$CZ8?g&Tv{G)R129Plq-a z@4C=FB00>hyjBr42q-hf)5{yl-6P=7Khyq^K`t@={5@R82N;#WTL6XFxCjgq?na$T zBX2yi>8G1jMn>b@XVSC_Ddq_EcdlftyU*Tp5hf@mKeb|;E(AQl@9*I^#&^vxLa=0t z&`Vr?A#hf9jK=Sy^H>3Ofy=89OdJ1pqv+7=4s5~QB) z&fZw-_o7|L4<(T=|Ab$PezZ`&cf#;sH{B8e@`nnZo}G1`mzCy$#ay=KmvV$$d4Ud) z@K5zvJJRRdRLaB$7O${KKM#+6YoIeBc~6{zM-t7Q5v;6uq9VY9i<`eYCgLFCbKPGU ziGB7%x0s;u%i68HT5;?5|hwQusWM;k#HbJ714cE2*c|oV)7JsUY4zP4bC>$ z{$P^RGv4WS&aq%*cWGMYOcn2%&2LW{ii8OVoNiF5d#odH&nxQ*#>Q%E^xQj%u*PFL zy+4oQxkaZA%f|4*i9XfSrR&9`Dr@X2w4N@>{>EW!G-UqT%)rZ=3T>4Y^HnCFT)z#F za0o>eF*&Gm;nAw|e$Ju$V3#8e$7tG4Ka6^tn7ihk&0=0=@WZ7y1QER^mB|FGjr|17 zFk5bR4qRjPspaHK!u23Omb*tck-!-P0Ac$_s`=SiTBAojM+{A8mqYZ98dqBHq9K0k zcz>cqy(zm!p3XA^)xX(5D?UpnDT&k;p2jsQuBn>J3Dmr*;r4B zH0i~qi^NO17Ak2pNkN~-n!E>|r2L@jg2<*@Rp7W#V__)!IAF2b<~{dxb96Ucrd4{{ zywZ#i&7sE>&6dZ>9RDY%Rlk*yLin2{-p&FHS#xs@P#(r2M*7B1n#ggsp)r zOCPxUX_amjEpava?0tp*@+RoIiveZlr2weeq&G1!xdONcelU*r64aWCfur9-eaDpf zqJ2BSFq^+WS#LP!^|ajN99o(m@VL2HZ+itRpC}q#g;BUW4sVZNVyLex`n9N}?NM7f zV@3twuP+@9`=VX1_P;afSG|#-?eP@Gi4d2a;as&-aS@N>K~hrEMTXyPDC4^tJV8Vn z-BlNqC6w}91x!hzM*ea)ie$TXkQK34`1!@PIqvlpSUbJWKG^a;gm`x4kvt+ix`nFA zoM~*aiP;Y-3tuK<m|Bk;|T(F8hdwUy62bcA6{MLuT{UKsEM0AT<$FClTT!Rd923E^H%wy@MviApp>?9f6}=2*`wYc3J`OV7$ldM8#>r)PM=4| zV2`_HSx!m=t%`mV5*|n?l8uOkDD054(-Z>St6X0MAR}NBt!0MVzJZqztsp;4H^hqX zypzE#B#?;-$AiCRTKcnKz{pMqltgOOGP#RGz^6()z9HKt1q2^$6G`Ce~duU6J2 z>Hqi?+;GKxaAg!6BQY(p22vm#1Ke|UXx?vz#&K77OPiHC4d2^eUoCLEDji?zVYq%9 z-Ki(23^!zPKB1Pq&yf@gj@z0S3MONm5~h`t2B$M=&_H`F6}$GY&%e1>SEB~1E0#OB zpKAtoSO+R7Q}!(dIFD6lWR=7oi@9#0cI&-+Lmu&>#Qqd&q05}-9 z`jNJkRd)Lg6C4o+1t3=tK0DqLi2)<1L&=3Y?atb+j1*`i`_tln)OEVFG&RT$t9lR!ooTEXZQ{+TYlH-gvy zsOD{~4(|0N)fTl|1|?)9wxu^J3`}BRo5Z($-)NpQ@iE?uW+L zk~**)UQO%2I02KrHtb0DGk z%($JHWc<(mebEH&ZEbiljqPJcXYJ!fRSNl6sE(q8U4w*#s0wBGOjv#xZvCkmRL21(&cem+_!>8sGvW~@b z^LTPkwW5c^UzHWHlwvI}!SKk*D-ToN6^uc%8N*V9ai@Zs|e$h=yv#SRNT7|;m7Q?AuxauWL6E4cUa1~&N zVU!CtxU8JkSM=}2VL%9v@YApov8`sL<|HtoC(dhyy>~?UzG&lV5N={zJRX1+U00&| zdP0UZDe#w#r1rDfAWG2X&d3O~(2$-U9=zc&$OX@Jot&J|moq<7bgWy`1Z_%kSt$dY zl?yz(W&KcvHtNDbR7 zv~!TG)(&;kh$*Oy%DIkSb#Fn$V@Iyt0WSh4qe@c|NQn=d@RHK~CLc)S)vCm0z3kLy zNDdqZ{+*dvd+&DJ;C*yv82If2BABjut#(4Z)$C%kZ|3ati#A*z85L<^9c&)#C7cr% zcDX-Ih&{ndR6HiD5DYhEjep^zYE2%NOfOrrmIn+s>w;zzE- zh;J}_IxEgPd;!UWu$S+Hmf9`jVZ^lI14eX3WC_FfiQj8t;|Gy^a{|&kEGz8aD41OGb{p+TOlm74MQesfthNsSeTP*P)D zSY`-yU68SQPbjg}p{pvydrviA|KF8RQH1=q*KUO@Z{$x_lNVb92{N*>0jcwX=rPDi zbxf6cR4F^j?9-?UIjykERR5V>xKdLDdGd{mNN_-!iN`3Bz}>|uqsz|N4GPw=(Lj5A zQ+V^n!GYeN>FMd74JSbwTH2lyk0%L1kuTD+vOc+Dz8+2B{*hkifCur=KS*DdmpPU` z6~CE0q~JblRUtIy&e}@$cbyYNjZKsu)GGoB*M&q2k#KkPkYEz@)h&qrt|A~#I6}IV zk4IK2?c^X=0G|IjNIJF{(!=>ayX7x3nJCoQlkaM=+{o`dt(zQPqoh zUlsw_S2iUSY(%N}*HM+}N9P0YdrK%!H=1aZi8av#qn)1!;X7K4dy#`cVZaXpst}Zf z8!$0*^hPXN{P?s^zz*Qq4HdZp#&5vsg1T7a}kO*DZ;>N;8PkR^-KH2u>h z-N}7N{?EQS`jlK2bF{&kK(b0<*6HOQ8mhm@PfL<4IA*S8Tk2M{q8|H%KUi=rH~W+8 z(6rNl))C(MF+c~8!log4O!?07-z33<`vy2dSYAWTHpu5-8%eOk>_L<~&?vFR*;Mue zZl(ES~DnZCZAay6ESEefx>1IiboQRA~=`?T!=o zFHY=6ZSpaMY?cm-b!ESPZGF*wCX%-vjl{g~Yqmo$?fg33++)XB&;jl^eQuTV$>*Ub zhE1-;|9cT;b0p;fBO>VuMk@MA?yY!UdGNL~)u&_}u>U>G+4th%xOQT^qw%)=b4tVL%mW}if@<~c$-y1qWn~g1}8Rizr1s2SQ^&X0Te~p z&&zFtPZW|8h-f&|wn!hf;ge@<8FVTP()|4W2Xe&yTa+xlq|IBrDoCoZA7QccVqf1AcXa4;^Ix2gCoWV_I2k$bs2M%MaT{LN_b?q<$-PE)02 zEhW4!R8g@{4j-Zh7$|O6h{~J(cWYBzlu{E_-@r*(dNHWo)lKbhh_Y$-}WSf`3L`g}zgtCUo)^2F)pR>dKCb(*L;^T9nn3pN1PBK*G zP{`^(1A)};PFDm}bA@NHflveS-Ld^W89We4G)cSs$u zd4QQ;&a(nRPjY^}Q5U+%w3a<#Wr=I>!ufqoK`eOqMI`z983ij8yD{vuO37djd)y>$ zi(xlXD9@xq9c918;n!btU#iOoxzD%Xb>jh17xYGKX-VPEU{tuKZP3bL9(3LB5C6`) z6Zwh(rmb4KNm|bt{)A*4F?&BFVZNOgUu)nX3hKH@DO9G_ekNqmt1%Mcx zl1By8k$$*&S_`%2OU4yE(wx)1FbhR^8W0FcdAa$Y@1PQP9!uAAZo$6b9Eu&B3Bx zBkFtqQMCL{qfR+z-}Z^?6j;hsed5*yQmTd`VFs+W zdDl|p`H&sDA^Etrs*RE)My+${xy!e#@`80LDS2JC2aWh_XGdo%3|oKO&X!wetycIX z71-fi;C-bs)#SI2=NvwhND`aKw@@@1+iSMG$?}4u6Bf?8Jz1*tpSx9IOvr6B6F-sa z)+Sz=!zKq4cq)Fzut>sGLfvZJzdIsI)6c8!-~JUXZ9yJX+1nK^#_Bb-PO>Te{n1svJ4bAEie zW1$I7=oHTO$5G=bi;vc`IxEZQ5_+W@AEz_6tR zG@9=QbN|+bgX;Q~9g7BI=02W%@pC!GBErZ_b!1l-78R;an?tY9`Hil zeyrFVUp|B@Iz-`lXNIu5*MJj+OP>H&fo7IVKl|x2MJG@6%}vDrQTG(eqqE{R+Q6co z$-bon181O7X97=+llI3A+@71GIqS8Km)V(LI#wX4G}BeFo-;7W&mfPlAGM}qi{HoA z+cIj^m`|SP2RxR|b@)GZ3^8R-;qBFZf%!wF<$r@9KatvhzCDrO=`xbeMnp$1YC4Dk zo1EzTyC&=M%5MX9Z&=t&VbezeZCU8iScEkpXt`9XQfi4lo! zi*ooj5gtCZYVf-YF3 zr+?%9ychT3Q!TwToNGwi;VC5v4u$`FvQebG?w&$}?ce%&60q4)4MB6CXQZ&DD+!Yz zJ{j}z+{D#FuznHXTeZnJU1_^w#k9qiz_-_7)K>bnI3BC<^*x=ZyOD3L?%J60jixR?(cEa5|!w*magx0j?@DMqv04QiS;mZe5 z3T&Ot#HGzEz#e!>ev(6VSV8{koYSaO=`eCRkXhFmlZ#J@JaCIhA!qMqx^%b~8;Zi@ zFus5P?sh!yd=yQo?c?tb-#^zi7Q-Wd+M8PW=l4C0c ztzA}*iindd&>4v%6ELd(I{8C!slmQ=vNQ0FM8CoAAZ2z>0hPvqO7gVrJn(qMGei4k zq5tCSlY0__3eG$A>VhB|`Q8XvbQ)b)GelNkPslu|Mps?KOu=um7p^)O_=&YZwn{pb zflympo0SRWEA@55#M6LKXbly^l`2A{#0~^lbN{9@pOA%e0@0$;VbOLU?a^Zu zU}|e8Df@OqI(3lUp_7f}0PH~1(}Ky!ka6%grNxOKSE_e91jK}d$ zfz+PF({XJ|$J1%4*v2uk$y0-*Rmg(BZK)T?24q zsKViE2xAWHl|mMyvJ@J%yWRSa*Ua;t-C@=5=JvKS%v4_kc1Qmod;cBO)EB;wq6wi_ z5v(-nq6lbcQi6&~6HpM44kA%{=txVzg4hrQA+(?%y=my71W*tNMWjO@NN)jY0RqX{ z`TWlBd*;lXnKN@|?jLvN&TJ-R@3r?@>s{~ryw9_;vZDIubEHr-@1QNOET@fYqd2=X zwi(8IgTt{lj__pgA=JZfZ#u>_>|iO6QedySw~~6*f4;Lzu_=5aY`r1aS*Fa|!HgP` z^FDfit>&IZR;bI!h+w_k-ma&pNy2)bX4wntj+5fj-?Xctgf-^J7%oaWgvH}aV@}4g z_n}$?M91^(|B;8O7IRe@KUc_;)7fIWq`S)s9 zXPIJPF2FEo%%-@!uPyr$`Cd$i_Log8yqq35Y(Kmohdi9g@hGjG->LK%h9xE^t04fj z$JhQ33q%S-ViQ#lVw^WkSN})O!$j8Ynwx6x^a840>+~%V2x~h1MzR96 zCsSi*^ySZzvuU0{b1tset&}dX@rj1R9ULYLimb{aizSdI=qs*&E8PCjz5xM%0}@kW zaHm|J@)@1T!-OaZTcla`?RPPZO(Bk|#=TeeX;h=k2escj=O`0f#NJD`^BJ3iRu@;8 zL?){Dcme~Tu?`~bsyvUn^n`!cv{Ba;o2XH2yENihWs&G5H+zraQjw6!rwb7~KLkuy z?+^GYHtzlXRXtg#8M!tlLZh|vdDMaK7qm3J)wa}~cWcF7)QJ_pMd@sFP zBOpI)65FeA;PWR}T3Ed(^wYSOn|WIa9dU@2mAbMxS&prDpHfV?mk z78dg_d!uEJO$|ZgUe(01CfWhGgQ{4+(XtNEyQfo;)V1L47pELT5N?i?wQ6KUtx3jm z-bC;eMJ$kPSJr#6On$%0IBhH@e6wSduIg>)f_cF;>|JdA$EM82;%?fdR{z&mnFXxZ z=itQ10(;z8p+%7@f#};_zsz;2G@{Iv@lqJKH=xl0ScbaX&`q@N=(tjPUo_XfA~sRiZEBBP?K?JTR)^dm92k@xg4ZDV=DH zHe+XxP=>R0eZ{nkA;a6UhYbZ_yP(1v>SOp2`(h$lJs5fQ&qKpbLT*hM=Eq&zX!v>z zM`&@L&~oTm1aq^U_=zDYZ}_-q_(t;|Oz3h!DFC?h*>NzNU~=t(NhUxK-Fz!i&yhYz zCKIl(KkL_&R;$mg&LM?Q3@{xJLQIIQUfX~~LEHx(43Kg@zHJw!8pS%ej8!0&9{tMD ziJ*EdTqgBeY*!4&p5!CR1!L0Z|5Y@hX}fzEkCy%jJcUnHLtq=LZ)|H6MHwBq@prv8 zF5U5_y$Y%wr8f~_DBivu^%D7fE9j*=Pt*ygVboNbTT!!5nRX%PbsZEx^N}Fv(!3(~4hPJum$vZ`q+9)5(cyfOmBUoXkTr5X zModErITOLYD?frI4@ce~N;OB1S~DNLs$v&4Xb)gE@uPSc?xt1`J*&(>9W`sR>9}Ri z_pvZv*SPvYN~PhH=rux+mQdjod!CmVjqTrYrJQ09ju*}(LDJdidln#_C?anpax-A& z#MM?eCB?3>hR^4&eyD)-8^3S_(W$#x&*oLbm%g^IoH(g<9Nv>&yV-A~ctizY8MD=8 z=3?*yn!f8xS!kj1gzm0hZ7@n!=$17}5Bd2R6S1pbgLEWW1=AH?*YyuP6)5i~>aitP z6!D;(CB@4wmqQ*vH{i_JW>v1;-*30K1ioTZAL<&uV?pdB++-UI0N-quRC7HGdoOi5 z_KKt{T^FwuT-Imu7G9-|U~A^Q*VRfnl|(cKTayl9wPe@-_5 zI5A?8HQpPf=6JRb8yaqb!E_%0l6Mz>XSXNniA7X&TRBEl`T}X$901mgk1Zgx<;&FR z!_#3hmF~j&O6DHld6;!0rkEyKX-lw8S(HfdgfHDCPJ1`D>2OX_^W*KmYW?)XJi0}B zo$Ph4?%&LRkh0-iT3i;HFSIB9*3+PlTFn|4hOQO_=0NZ2bbofl%6+*1ln+K{7NuWw z265O(IW+N|Bd1vtZs;10NsIN5TbCB zu{-=U0YnUrUh(r|SJ_LO7}3zhA^}+wEhp;QAMRd2pm6zOSjvI05`)%lRzhSJx zQ{xp@M|9%W8^g?;ThSlUL^K!DGA=`8i7rKXbebN8^vrS(?cs@Ru| zT?{HZKFY2q3n#R_J%c4p$A~qC_M~5(>DoFnyf^&B>1o|ltrn2qS%jfA-IzH!+)&W0 zKOpN8s12-B&l8y+tw)v%?217Tia+@~raUH9@tc^O?BXR|@KwlDb?mE9bDanV5^S-3 z^R_gPD2EsTMs>~4*mRC2!`3s7TY%gK@_%OnG8(fv;u5!(sv*`2K&dMCS>?t30I*ce z^Y5_VUwqFsd#2dh-4K8BJ4C3kUgZ7qd5fuN`=HUU{_B$svJ(KK(rnEo-CI@qwV|`p z!+d>KJ^GBafF<}()MHeEt94cx;8Zv@xBl6GNf)gq8J{%6J}#|1lBk)z_toBz9$$5B z@EkRcD^ANFc3>l`6AxXz6K2mjgd|mNMXtdFJ=aGC`6;*}H(AHc7xBA^^0RWev8yHwb zl^861Pj|h6GTGPP_;NI#xOeH*;rl5KS#Rb^Q05Ew-rBhH|8}-+zdO6;yZu{Fhq}?q zw+;*4UKA4xTm5DPqaSYFphn+pUfuO_4%7>YI2RtF?rFz$@pg@3M#|_4@w-T|5NG7& zrpiYRY!mE~7{#tf7QQQepIbAWL2?yOo3gS{*j`u|xx$UUNdIFBL9zxhd2mc7WWA_% zEsy&oh(tR{Zb+uJ7`R_6pxTe{SKS-=8?PE71;7n_dhg$iUO2${+>(>?+2NL#o<95r zu=Whb5{0y>2nx{v3-7M0DWCb0IMFUSkyIs6_^3J^y&##9xZ%8HBS0uVv7r~O_=1Od zxU5$$4qm6dJL0nVD_*jU+A2otE6?ezUHsxvOQ*dkcAWZB;ZyzoT#6J+Vu0;2r>fEU zshzN$G5Gd#j<~h^6WocI@Xa#-^E%-eF&Li%W-*EiZt0TsfnZ zx#026m7g~MRHJz(_&i+j&cX2MLFO948q^fLB?3~@5iz^%C$DA+2)O4R?2$cXt>mI-Z*XdNlC)CUaTZa zYPEVQ5(2=cU)R-zbnFp>Me~Zm4x48|$72FAjNY7OksK}Re;#*3w2Zf2Un%FG4jCpF z-Xl7vB4z;SB?U1+f>=m%oRhq5M>%@N*CV{M)vG;^8fGig>+4VoG^*Cw8AE<1d_oM| zqq}w{`X&Y}ubAp&%m8-#&F8-$ir~5*CU844wX11IhB;Y)bFEw>PU+RP@oE9%dB&%_ z*vGw@y>Eroyv;ZCYo=ccMW!k_w@CZ4d`Kk4?_uS$pM#}Vv#tuO$4uRpz7umnt127oHiJ81A&g%L(OI;D0Y5G<7IX5qv)VV(eNPYX7|kGW84jwu#_nzeHZXiu;7_%r8sh(55Vn0 zdRksM)~9w*nTNHJmjFHAaE`!C@fg_iUT@`H`CVlrcak{bnmknX$K+5WnEdYJg}Smk zi4$cHOv;N7KDucXSIO+H(arWeV@LBBJciP@BBvVl9JRbBT5(@l`A{BZ4MA+A(uUo! zH~A2K_YL*s{A>r7ko~#ju;)}!D72sD81`NX`$;F^Yvs}3AidX<(k99x6cco=-GLo$ zv^tAu1e^!;tO1Bg{LiTl3;^w>Sg})7F`-u~zL=gC)Nm22s`7c-$mo;&)e3+L{Or{; zJ(d8Y?X75d3|9&9va~*X|0#P2{ZBxNUfrD#X^G~;T_OZ*55uUd&?>V@om^vzl^t&O9V%6Fn`W*b|7@`{8Kq4Du7n@!oko#1lQ`4JFp1W0|01W zYd;=#L>|R?jaRJ+**6TZwF%hWa1S52rx#HZzVGMQ7+xzDIB-vl>0N7k8)OF=Hpzq2 zrK$gN)~wKE1$&1~HJ{1b zifwK0gpLx;S&!5deelo^bf#G(`@T_2Q~Td4o)0==n^P|iJ3b&!%{ub#%j(juf0*Lj z^vD?+F15!+F&r%V%W~>vm$uhE8Jbff!&8!X%fcw+^`p%$MOv3)QwY%4Dai6qi?}Lo zx@gx1SRF$;*r&gs;6Rd+mm2pr?uqR&<$tUwlfH}nFyjGg7bxcN7wyYY-pS!QH*6nF ztPUgBK8{nT`BBC^%8c6Hi{O5}DG%LoU;mTW+inYlX7yn4(_gk}7M2fsc1$*FU&n5`pq`s*>#;0WBgN3%ZMbf^vAKA$el z+ZVHTlmA*|tlzTA3qR2?2kQ$@5YAdWsOE#E&K zC_Os`**Ddt$^W8XURrO+F9B_yxWFe>ie@F zADd!e4GV=9MUii_8$Ewlxc!l(?UW&R7;8ggPi0tFx}OLmj}n{cv{(CgUBPKGHw-hr zej8&N+3>eMl?=tUHH7Yjy8itUD^f)a8t)dht@V>WqEhIKFHS8xg1vfV7ZD!Jx_`x( z+U{=;Y@7MPEgL+BOM7*I)D{DzAa|^h5(^7Udf<@t79g>nZmLa%LoZ^7#VmLVRh~tk zyxS-Igx|ZPI{4h`+l*wj16j@U=E%c?m9p)X;q{|ohp>{EyfbU(M`izP_#SW8P&7>)y<{-$as^>| zAGt5hA!g7{zN4fS5*b1lj$UetIezCMl%wW1F;7~1;UuYyOfz;{ULN^2Q$F9F#+RuX zOeXc}&<}U|wW=imSL75;gJM(Jgb{cyQ`r9Ox^2aid!8VM{Q$+))}}W3#D1{hW(J$c zgF8w_F8!YGVo_$UU_p6Q9ale35%071?N|X>^2f7U$1O|k40yyGQN8S?AE#EyK6zR+(Dj%f7WjBF?V+3lE~;G# z=i)q8>7k~~ea^Ur^zYxrvig4ixz416IJx`%pzrR37Y=q-C>>mi^$7J@x?#DJ6&6vj zHGAf48cW>ow@#l+6M{e{@`MvF6X^=tha2m0Kz`H<&bKI9G|;pvvHAI}J(IRoR7MNW zr`kFSJ}v*zLnssp=)2ylv-wL>Z?)o&iA4{PLZ3q6ghl$!u%q52M~!)&Ni`AC%A*U2 zLTk@d+ToTW=K)3R;HX_J`01%aRjEb)f%6lFT2~Zj@kj%)`=9U$Ct`#*=gJ>vKCL%) zZkD_bmI{8PHK1yj^o^zY$IV{;?W*2jN^oaM-CvJIR&-3FTi&*o>pzo3i?2QsTr zulmf}WI7PnA}en5MpuL^gq|>4oPDOoWXk+;7L`!%qsf^e=E{?y**iU#EcT^_6rTl3 z5V|7jzCzxIf6`M5j)usFu_&Imx^5!z;2U(%n7L?WeOcF!&Z@X8OYQNPeNVypC}CYtpUAYp^vZfV zjoPXixcnT=a~1G`YW8zKS@=Md_>1f(w+^eM*4aPQQ{d&vA3)KlO@_EUj=s*H@b1deS3{*ofyn6GSsA&w3jI8}^l&qi#vdAuW z1rpktYQSROdj0d4ydnogfRv40BKzl;EMCIOHpk-ym`floQ5Rc}j8S?VrTa&gtpK9^s-<$xf5F89rRKh&(EnE4!h%(RF$+MZH%or21n?d6 z$3*jz7ihHH`57i?%x$UykR2_y!j)dywg5$Mdn=+DWX&jh;uO#_KaZ|}imodB88S?@ z9(l1jaP>9{N7aU_a)(S1yIkk~+*n>@bzMQ&L{pv^_fcGINxZ>|)k`V242y2PIY|`` z8gVv_6H+S;e0V^4C!}`836FZpm{8}CwmxT^qwGFZ{Imrao7|8)MI$mEj9v0FwZmZH zz1oxt!$}>$>^_d6OJAe>7kV=IOf8v+4vGG7m9!}B4(EI$XX z48`mM%+5{%#n^0Pd;x=u!~^jQZ?j8Hyn(i?RKYf&mdP~d{>JyrPz;PjKA~k`^7DBd z0$exG{CS4D8SWLo*$3PafeTzwJ>%5&_KfV&-b~!`prY-&n;`JrjbFyDoMLGWAJAZ{ z8fwYhX0&uzulHT?>DKyslehXTjM-XE6re|Y-s4Wj=L0yj0%B}%drP%CF%ffz8h)Qm z0m3Vuat_Yl)a^bzP8?3QeQ|5}H_wHt-k4XfUL}@Y_$ih!6ouyuUT3MFBe#Rw!Rxn9 zXx+SdQ;IQR>CP1UbEr`XJ49||9XZw$dO<=$BEd3udM1$cV`KLXUUJ&7I;@s@@}l2s z;Av8i1Yr{qB1$s#4WQHdO6~1^n-`6NM_tH%d-4+$dz%>>y~~QA)Z!=nij5fO3+^c5 zR=Kq7GhYCA{~8kiv+?h2Uq7KrvG*ZxIcKwL@jF+!Q1hWET?uQIAcmkAb=oBXMep07 zO|De&^eGcv$TTlB=anu~Y*<*9M+mhE|8^tjqEoue83BI&4iQ)T@wvNMuW?P@a4!@O z8CEt?=<pSXT8GIXmdOCh z&*`JbsO*cR2!=_R&b;7*dVu8-6#pod@+ChbZD^5==nJ%UCi)$ylqpoYf$WRd>6+1I z6b?lPscRog`3R?*Fmn+~2sK}(?to+TbIIqk-gw~;6RjElqT^g#;;HpXiBGbuC7-wbCoZp7C!XcDY2{Ur*>K5 z`oGf~N*jvNDlWhU5A*kDjLY%F-(*@PT7{)Fi1MZjdlG1zoDM)>t-g$|U zzsxBx4n$|G|0ol}4blMX5|2DU!H(?8WhfiQprt1UX2zxBJMfqBVfbfcn$gw4PX`X; z;I4@VJi!Ls3vOk%v4=|yZav3goZy2K5xTbqfX+#vyFxPgfCsIRXE>Pjp`-|Ck(EM{ zmmB8>bz`>@Uvlk(YbxviUJKw}Q*&(Ze0@YJy5S*QvRl3^+Wj~`f4tcRk1jngk|#+i zx}!-nm=ZX5-*!1{ZI(P0Q#}RZBiCEh2|^DGjcwJaZ(&w2n0|ie8nmeGQ}SbmOURtr*+)>;k2kjx z#?nUBNvhFj46+eCPSE|O{`5#Mo0i_8~E z7}IQ??yE>wmQ-1J5wyIkl}WIEwkmbplv1_ z5ErUC$|}m17~%5vYwW96`mc}2@If`BNPg`hq?#XR6=F>=m&4Ae^VCcbr%WQ0gp>Ti z8!Q`!Pm6UV8RH^njEO^n%OKh)?@!VN5Y=waP;SI~bVmH)1NDI*jpm0TMp5nE#gW?< z00yupN`%)?=hTkBJCSUnk+VZ5H_Yn|3ceKRyjFjkow` z0bt7az>7OiP6a#8lU-2R952hs-f$~R5+V2NU-B@dH>PMRh{s0r<>B z2P4ZS9Lo17E39dJmBvr&SvOdf)GzbBLR-i_cypf1gEd1~n0EQ|v zSDOb47KzQ-QZ0e-15kU~s5yM7n>Y-4oHDvG>(W~3JSmkT`G~n0LA3o+Y7Iod_lv`y z;_^=nZ^ru-g9lqSqR<(TRW@#xv!IVCA!3A0zrQz_woIN%4EqN(&bHvra8Sq9Y1dCX z1{69Rju9v}-vS{lQm@`P3x1PbWX1r(i^E+CwQa;HW?p91Tvh;scq)P^bJIs_gko=Q zSHSM~FW4G)>G7LLq|~Ym8siZls1V00r@RWbkQ^ELd?)t55`kTM`HeVaYK?%2i7Myb zDDiRX==E#~69Ou%{uU*X&MOg2Jm`C5*J`RV3-M0A* zxR3Pr!M8zje^m;>)l6PdD)?DEAZD*Nr91O@Z|)w`0$-WZ$@ z=%w^J*YNW*;B?MICOhVE?s`_OT#`5dYPBV>aKSHp*SUT@1VO3LzHTD5&Gr*e57`_O zw;joBBTJm({q?2*0Hb)rTbIP#YN!|Cs(pk~=0;{#kmO8>Az&cCyL;yWJb4JuKm}bx z20ID_8v~UmMYZVhPaH*%j%rqp@$(nl8CYPzp~Tk>pkj%5vpwKsyuMsG5dQi(f-pve znsJH&myQ>tbBMvK8qgUhf<=J$W~$cJg(c{@yit3eMK*a*6*w2na_yp%owa4<3E&w| zT6A)*M1T6eK5LRIP5B6}92o&-%l=a+w)@qpfxLE)Mn!5zUxGnW|Y?@ByZ z1WXiUnL3J&6(PfhiNoy=J_2odbbh53Fd2fP!z7z(T~f0Gz;OKcj=BwJ_&dUCf-+w> zThRI0t6^yCxYs3j82GL`^nx$gkxAGS9wxPmw&uywz78^Y3@ZmxiU&MU;=DPdw!|a= z;5@@fbQB*-3#Wd-_UP)oZq-r@@N)TOn#A z;rS)#hGlXcGZ1?TU%!Xum*9F?=9yAPgYe&##UDL}joXgDUzg`brGS0LR+w9Dr2cFPvQiQ!A( zHHu0DL^T-^olob=iy;b3J$@8N2?blA6K1n_x?*rhu}Q5S!a=Uq1n)1SiOX1LyeyfP zfNNs4U!QgVNDnLM|DM zfM_t}hiTOW1*rCo651fupnWne6}=;sg7Q3BE*LUFSZ=o}VUVE`v+aHTOb6|`f2{ba zD7L7hC>W>nVDmd+*MY!O!RDW4Wn1GTno^YE9$7Ix9T!_PnIY%%;ztfVq$zQlm#>kK#I0-htu7P&1 zp3ADmVaViDV4u`cj&Bw~YDkz7ggJdeXD~a#ci0b*0}ur+F(1zQw17iTr(XSwfSn6& zUf9`QmJWaC4p0zVCmuu@uE`x9!(=58piy#LN#~a#2}Wu|^j~3k-Pix$1iNA(cMtf^ zpVdiTb)FQa@Z^dn)pCi~b<He`LRRF2z{cf+vdwAzRKLB0kY{QR!;xcg97n6kNN# zZb8bZBT923A`=}5K~Th4o+Cqz14tY}kk_EV~ z&Wn=tN#Z1XC+nIc5?Sa=p#@O6p@K&%8wz~}A=ymGb!7UFtQLa!0G72far9Za*NY>a zL=L`fjRhJnc&VsW?+P?b;Pf21EY(_(6pX(?y5p70C35&uvF!Eya)C(4{d=G=HRdJt6iGFbDbSq7s;7al9%q_{NG zd6`UD)3Z$5(-U1bQP`+#lpe}}+<1A}27tOp{#Vbyj`x=UV;zXv;?Vd418J?-9>y@7 z{Ly#sgl~7y){tnE{51~vtp=6(1jdlOGZcWaYb3$u$omC+&x@uVK;hu}FFVe_wZ9*W zL`xl`bJVv!gePh=3|I@?45CJF3zQ@E3UV97*#_$~S*RX^r_k02Bs)8qJhu3qg zdcj3N6A}Cf?hS8st6y+J@k_Lb4;-n2-69kl{9q)n`=Lo100Gs=;zQJj$4D{f;&vzIPaV>J&Ki^`2S8>~&V&-O3!p7rE@n+DXW%7dF z1I&NuW>Fpfd>Kd0i`6`Nn&ohn{Qog{$tPQ-sbRf=T#(IOc8{m##1pP!FgcK7)xCO` z(S2pyHy2QSE|^d4Vg{ zgE4V8w#A=-t+}1xNY=XAu&IzPAQn3!mbc<3yWdaT@d7j;>CaY#VPN|(~4>OVRLK#KC=FQj6iZy+3%ni(ZrM&aKwHZ~v5TDyB>OUJwx>QwbmZ}=250I=_7TqVZ_{f4 zwE)S5sIcd{iix>?W;jkwai&9q5`4EFM^VMvOqUMf)t%T8OyvTAT)S9^w&y1JQG);G zS1ZLH2n5cb9TZdi-$&W^Axvci?DfA|bcRu1o$qPHRRrgCwgIhR9qqY273Pw2*3wow z0UU)o4*zqwmgrd7!U`eJPz@XhA%`OQe1`&yi)6Zy#t_OHKTU2_e(A>`iv}iD0Jwxk z4|=Oz#tNY5M!ce*&7-RSi;M5N3W4gEOf*U8SrPaU?`iJC%b#9fc?7p06q`>3CcZ#h z@a1*%8o+m*O6el6Jm2{pQT;s%ny$QvD?{yq;8j?(F^G1(@5V!T&{wp`WB7QR^&<`y z$N_p(3c4Z|eECcrTa9+iO4I3@34+OM+=uT<*f!tcyC;F>U$sG&B9Y!FcC2zYd=)p? zpj6on@#}1VAW@TeP39xmC#JYG>!XoEd2lfOH?a&sX~h47TgsAC4JCz_56|>{bV@yp zznpyEo!l6mCE$MwijyISUg57gJR%bOHm7QrNFX-i)SZsK|M|fdwrcFvrJdey1G}_ z;hzE}b2(k$#wZ=gITH<3CkvQ;AQOEOp&}Kv7=nci#*q$|iCmu--| zJr6f%GKexdJyQ*evvI;6dk6<~*!cO^m)@f*m9Yl+yx64hZcia-nkQW3p+ebRGVKyV z0byS^KW6t}ua{5-#fC?VPl(k~FOzBVccJ6G$VDGKkxVmKhSVZxaygMu+%RFY+p{`l z`9eX2nKA=S|c<_z>)6s-g4}bqhP2)aO6Dg{h(m9~_>tME>1s;+tL65-T8h z%0?sQ+w)eZ-Z+utbcsi;2*ld zj;(Zm>y)||i$8;(A=B)HD`mJI*N#sSALp!!aZSvVr=C;TAnjns<93{3V?@VSH4_pq zng;D}E4h%h$u!G;7we}qbM$B>o<4CzPCT+k(mrn-w6+(5M52l~EU~o9%LlK`f9#uv zM`kjc$hO0D4C00%qD-Pel!Ew^R?l{pX;V=*LP7{dhY4 z5{zCG*5iYZ#Q#c+@B-9@Lc=V?6ihUGf7$8&-rmhDICo{W>|**pF9M2CzN^^nn~j3D zj9Wx$qG;9#@)mpQV3pA*J?;mLl)G^_Y@o3|6LrCNSZoL@i8!@!zF8`8>3v7%7RJm) z$H_DG$U1`drbwsTHx_X^tXsN7Cs{|w?S0YhKC#(;`TSaY-zm)K;l855kz3|R6%0LL z2(!6g#x%hn_HQnLX_-lpsj`*YfKo*98nmCjtKIGI0rmm$9oOAs_fVHOZ2x929;e1a zgD4w~I!coL#fH9#ZO9{(`VyQ%wmxip^FXcq(R!@ae1C8BF1`8MxP+)_I$h-Zzr&cy z0GS8-wKko!VjcReLC0U;G$F{>xOt%ZE(}KEy^ipnu=+VJcb(`gQ_E+{ajr)TP5B30 zS7AjAQ#vj#=#X2w{xJ)K>OpsS1Ri7`*J?+_a47h%vfW{=G7YU4N5Bwbebo|8@+fUo zGK$Fcv>trDcg<@CHvD2>m|dN1PoUhT#>a;Q$#U=fHqKP`)81c>9zGgL3x+J`t#+Ze zFr~B`?~C-xzwBH$pa#izG*Q%7dVltsrn+!1LbObk9xDA#_`tJ(e6!vw0i#!b-`H}T zr6Bu#M-TQDcj%7aFxx4nBZJr06Ptb*wT|1PYMF~>hon=srvGx5=7~4Umr!$P&p5<% zMAda%9j&4{8g7Ha+9FKM-Em^-3f;67R2R0EW*A8;>)zeMcov9jLYuRUi4_@0U-*hFS;jx3R2!~K2fP!@@NN%3Fa!q^}?T{lXf!js&7gAS;zU?yW2%de+g%8KO*-r3@5E%iopxfw zJvAci*fv{1eD_ZB#-YxK62{A8*CS^yZH`D>q}HM7x^wiW%31ne;qd^c6?RX(zU{F4 z6FXL4dQAhJoI+^55?|-kgnE$={JS@TdLn482P=aA_RB1O>?1GO_8`SEbnmnX+Kjxi zkXrQoXFdZC8RjK=Ec?m`+i6UIPF$AbPtoZZZzja8PXAD*XMbTa20L1q!xy)d##fs- zLT}_1(ephEbXvDCDmzxuTgaz->*ay`?Gr59MsT2XMqrLs75?#GWfoP)<5K;x&{ly7tcMdV$3o%)lpeVWxp*`9XMb*SnT1U z;uY+qD6RM2t72{X=Pxii=F$GXV)p_)$y1a5Gn}T#28-1ecl~p_@AEPy=k058eXn(X zWiOHIh={ew=xO+gF+QnqdYeIYHCv;2!TzNQ$E0&|K90Y462I?$V$KL0pL=*@yRt9) zgSh2pq1=@an2(bZqu_iCWnj zYA`<70Owa2nIEt~Km9si>;W830cnCA)2z*%YH)NxgJ!vjBNwO;`?e}p%gOccl*8U0 z8$8J4ZzI|Z@>bkvna@N1-$IPMCcUG@KnQ41@-CI}&HzJ)C9Q2aqI0bjp?nITQ_z*q zjp-wk5{p{c_vfw$8_~Mh8fC{SAD$K9790OTcrTs5HqXBD>%MDAlUVINqyT3bU6FaX zV*y9?CBwLDm}=BFFMO<__L6C!CgYw;gS|PMW0R%2Cxg!lef2a*iMxC=p}UhVR!;5bnF>3^eYhMck|p*XB@?a*G2C|#DId22cSxBC~2S~c=m1j~7?SNT#Hxe^{^#rW5NN|Twa<99T2XU;quhE3L` zitlB4oqKX&b=n~L^>;MDH=K7M&!QBGM`9iAX`}0?Vr$(N;<^%+7)4_);>P?X7j>`R z@XMzC?V)>gv_E$KpZac-Y494Q$*!b_&b6;k?v6CH5Kl?1jq`@^s(1J!Mm^&n!Bx{p z)w#FisE%w3K#cV3KsEFKQwV^cEpOesV#Fa63C0t~`0w2JFNuzstwUHWQu@Pvd6;QQ z?;Pzq{+9;vtBkY{l0$2v*a)6XeN2nI>1$;A`)c`kzi-_688re5L~YKIH%&?d&$wXVy@HLA~8NI}O>9ZrKoyn2O>Zy|Ny&?0Xe`ZJjI)5IV zfZb#UK{ZiM=O>D1X~wlTcG``0+Aj_-TkRc-e}J|&j_!!zWtjv!_)>ntgU)Zf!_kj< zL`j&D2d3}e{JX1sm#gNT(=Ec}G|lU7lXASF!6h+?<7tT5kz3?Q?}^G+`T^UvFJApv zI_2a8#SWNEz=u+S;&sg0l#kv16vdVq4RGo2#}c)=$@Vv;R7K@Ob~H8uMw}G@Wn&tB zLSseNOO0u;yBLku<_-Y!awKnfAG6<)NRYD+;*TFeTiZG@U!RKmOr||U+j9^CD8V1! zYjTY&l4l63ex#k7Z(`6pkli54%ELX$SNd{`-`~9Y(L>aMn5bYInZ+OJFJFdNDfay) zDzXQQ@G5g+AkBYm&YqD>fB;HUD(wy{Eu{{cKIsKhU)v%DoP@$E7; zgHW7@wyr7SQj(lI4IxWEnD7nk*QG0CxmuTUE@SJaFJww2%nfXcOZeLG3NzU~gf}r= zbq)m)W}iNBR5z zKFRn0zwQ4!w-wq>`9$xO*i?3| zT-s%^f$$~%3p`*d1BoTpewheRLHJGF0-Cse!D8=04MMznGW4RAoi9swstUxZIhy6| z>C4d<%jy#tdz;&RW-Og3>{6(niqy>3i<=bG0;Q^Wv@QP5u07fvSJNCKj+Q$^Kt`YB zI~I=!#rK@4-JWmmU4ajs>uxNBTQ&)ua z*FmT!Wp+%U| zuPf;pXu34T{_nK_r=XhS#8WAw-gpbVA9OsHl)!b34_|>iMcD6O z#)?fG6>c<~g~WkYP>$WJ=D|(f1Ty3kScTvjg^S~GEP9E4Cw;neVt~+wqe6eyHvvXw zC1;k{#vUWE{Y9CkD1Gjmk-3vnKKgBIzI*Gvh~~lOTo>`bC1x-uJgUMcz8*}BlDjsz z5ottf+t{r#Xs?8Lv-?bORtyUlZuJ9yv+36#_H(^LG#t&^+ zUad;^**~orBoA5{E_=MYI=a0+rL*RXecU^r8Akpby0e_NE8_cuf1p&vt~TGI=%i7y z!lk8g6JN?Z5Sf;NuH^A4Q^pqJCz(sm#v1YTf+#7Y^y=VwXG=jVIz1fie1e7lC(kjf zb5GtH{s3KP`kl{z*(W{!eDrIXC@Id;d(Zxw&YXN_q+E785e#mXkhyShlPB8t&K;?< z*Y0L3Mt^a7AoX3{KN6W<2h|QHXN0ZGZrR*8hOhTPvA(SL@4wd z>{QL=+3ufW0xL)+2SZPtn2Y*!?#+tkFauuZAQQ!3gidK9_$^oa&`mV@Nc`K;V^YY( z{w_Ndr=YvPqPyOAx#o+E9r!Q}9g*^@&ayufzU#|-Mj~Ecs{fbUcBfwFDieYjIQ;Kl zyO@=~JY#{D+gOF1&VGmKh5kt-{m9)_#V50xs;iL(l8O+iIU901J)omBL^wsvp^WXR< z&@>KtW3m#~wEIZ1F>#>wGYf}Fu3pOM99)&}furv3`b_8b5+!Um-p_!Vv!-!&?+3wK z4cl})u|glHXmv#SATv%1fSJGVHOZt{*-X;GN*Nm|Kl?r7#E6+hJuCO83hqS~VTq*x zCuF_aUpgvc^vd-u7(~@jgMaS=LcY(kzu{V#K`_hHI7m=lKSx#71Q#J;o6YG=A5#eP zh-3f1nvd>kq)w;#*qajZzj!-&g&ugfzT^qt{;e0V)c;k&3jnNu^+|1Qk0j?T=Leof zQ0n>kAtK@A^PNomS*Wf2k`k2qSbsgLX?7vi8lCeVk0h*al{@0a;Z^xEwbFqslU0am zsWqNrHLQv=PNlpEeThf%$-!Tk_^oT2&@jh-d6J!-_?}=$H=)zN(t1;?HAraUbHLM) z$rF^d^N>j;>~I-ej3jD*CyG!e`FUu|D*y{Y;8`r?Hu z#`iwj1#oI9*3Wu6<(9Nav+_6$6pLH={N5U_s;+x*D}>KL296$W4J^@QJRm+ld=`#N z16@qphETamxfNBV-(O-__iRaHg4am#~6AE+m9n#{}t4K^yYX{oc{kh znV28WI3;y_^owV8r=FXe+}E$RZDnR=c}jFW`>rK%x3oH$gvR5!24(AhO_o!x-d<9b zd|TB6mFcZ5i90HDZqiHm^2m@BSsAO^66pvlvm%>c0gptV?j{W=6fe{_UeCN<;8Mk$ zu*>=FCD2IAM`@wI2TxtJDt!bDkNksjRMJH&@7N1$V8?oEcqy6ls4B$bp(Z*M>Tv23k(R&TYL)W|u*Zm~p^@$_o z#JH>e^N11WnBS%Lnq!q7?anbGZRuD2-L>HRn{$kP`3-HJKE2xY=~DJF=&PJBN*N)! z5rcK1(kdN~O5+D4?tIMjX(%{fM zwC7=29Obr#*E!5b*6ri2tf9SAjRw;?9?2FIpd(U09bOQ9rDSDaKrJ?q@i(qX9?M+@ z+f09ZYa`{#vA<~<)N&+e(A{75_|xMD2|=btM)rC39xey3Z&t~kjc}@U#>Q9_CwnQl zti7$&f_?V8y)CZ$647}zZ-X?(Cg*Omud}zo!3PZ{+ueRI%=o3r2bJz8T-x4#4ql(U zlcAC1JJa^N35i6tOTW8<<@0;he=5!$XV~9^XNOYl`p@ho&UHzNfD=w&~Tj>*bb;=;0`vj}(akkyFuOS({;>eLK0ahN~k^q%7X(b{gYyZ?Lc zx#!$Ab25`Pv)?_FJz4MUcRjy6Yv;xDyl22a7*&$5UbTYTMBHjCN}ck7C>ReY!VQR! zL^i;_;b$ptG-immfS0rz)ST4kw>PpQj%p{lgY-H$-(?65_Q-)kW|nj|Kl{XBZtmEW z(gc;4rVNp_rkHmvu=fCIiD}z44YebrS|~F?0ql&EI*3DfoL|ShYkUi7b;3T-Mb?Gu zl3KRSKSf6El%k*MxlmCwnuf+&Bek0OIn6#@-v%N5e8|1HhqdB32V>LS*Tx^7ABv8R zOq-p1)hIfP2Tc%;>eS32RbRr$CK^1~ix;OVUW8@&trgW0ru3b#n<)0ytU=V~HbCX; zsaDiJ{VcA+jFK_@U}#&V=;Fnh@OxwKgH`}1+i(WJ8KkVa5llQPU((kG8qGgE0A8{V z`vW1N^WQFa?yYkk91)3WJ8XxN^@D6~wV^NAW1>;n527dmc}p7VQ}hgb6e zXVe;7yot{EcPD8!5}plj6`lKbN)pv8l=k##Dk}F3W)~IQv*o*5#i~SYW@GzyKOFhZ z{#9*b_u#K=D&3Kc;=XfhtSrhAHR??wQ6h5$GnpS4O?^DGx6@BS2dtP6V{*7X(fNgp z%S5z~5OHtIW8eE8EqnZ)1mekSry4x-2>Bk49jmf|yz0M^en(_<+Z|yU$UV(~e~T_n z9pb#Qyi0084ag?lO5In7_zSAbyYDEEgv+m8cH+#)B&yut!N3CWVJrE5N;TlQJwk|0 zqKbuoin--f8?;qbd9bbTMW;`tIap@!op{me0M6Hm6GTCHI zYrHn_lF5%B+giKFCL}q7n^t!aPxb(84UI9^nnGi&n+)VnphkagS3v+8zg;^HWtq;FFZ}|*F%tgIk1vG(uyv# zx|NUwY~mc+Ib1|066lN&+BTa#@Zt@)NWJ@m@iIX7aB6#QIT`Nr>gg-i5D$z>u+4l$Luvcy7)b99H7;m*y)ow$S;eE4_c3c;@hen|JPW`}Bfg%xn z-H^KStsBm;wO0srj^_pZsJq0iZ};%iQIz0VQs%U=^KtSQ2yyQkg)om<4>RH;@ zfiI`ISdj$@$Mz$&Q*fz3jDDgtrR>2uw@+z=)bRC7I=%$1*v+qV)z#HWgWAf?->3g< z6XbfjT4;c~kR&ifOxy>4etukZ~DKjw->r`ECIRH&!GEfBz@APw<_=}9W ztUh9Kmoy&9L%hfhy7_`Ast^0QK9Os*1&tt{;rk^lA-VGI@^rHTXfwp2ny}75R6TrN z)-yhj5^>ma0?XJc=CqvntKj8Y;(PKeV2pIt%7;tdc#Lv|MKn2cl*7wE!gDB-TP1S& zl4oP0PFx#$0w$;pOyJoeHK$zs<;5Aqs`J{jax=}oY^BwaavsNt+NH%r?E(zuO|D9$ z84XUN%A^44aGSVAgr|9z=6yJZzrJdT4C`l+j}9!F+#LVfdBENS3Xw)3T#URqlf^fza50aR&Dh#J~y*0Rk&lvziQVkv&z)ik2X9ejcM=84*8 znq>5d#_$MKDl;UNzE0Q|u^^dV-!q3yTpKWku}3JpSYbz*2tLs6BCFSJRNhj&guBG0 zU}ol(-gnFjG!JsZcIcniGQRtAVHTtRv(M zHt+&**oP0__nb_^8_6wSvw#;jLie9+AP`pugYx-nY7RW)0T#)5+=qZJoWs-6X%d4s zEyQM$RR^|9T(AAt``TOMXKL6VClT|+ymZYtyYItt75Tzk?|n2{R7;^i760)!`FRHp zO1J9h64|`;!nnTt>t7FjRTm1+~y*IYNis z`Pcr}6uJusCj?LUroMtKg|&Dezr9=;M-Wc{I;F+^mNWll`{Wngbm|b-^E8y`@!M*R z;Hb#!Hv&UgO0n0Oi_TkI>+<0Twwg=k;}C6Y*$cwRlFj!<7Atx1lBo2>#c8gy*7I1EC61wifmU6 zE(Ouj?)H3DUD*GwnNU8o-%20l&?oJ;^pffZ9JEtDr_uBhkt$sQczPh>B}hrL>+8>~{X`>$s*A{w;o1dO5?8m-f@xTADQ?Y~4r; zT&Z*|896CkB5I{@V?V&*&eBbKTk3~|SY*}cA{Xo6d5P?zC?`M%qE-Xb4Z~c&<_~pa z@Q415Aw{Z||D9J7MAh{F8H;kz`D^!I=rZtIkS#;v1(EwoZ~n`UxX+Ml$g)b~?~KTgK;GBe)Ho1Hx*-~>%j}i6ZOsGR%KLVkTjmt+ zj=Z36eNDdiCdqK?R&4?d!~4ncMuTYzzqpL!xD|_efNRUx=6tkxZBK^mN|rK@;g0-0 zzm-H;Re3s~=$esMpxALq(w)aOrPiO195&tUL)?qs+8KAa6+f!!iC?i0&Kti>e+Ztx zeWLxvhLP)aAI#4rR7xpJHJj=~j9tdaLAzjnt5_l9GqWgl6R-XJpBbj< zGLBugg<0Phe`%dE_zM&E350#okv5#k?Gm0M1GS-ff75+I); zYp^*dCN6F>R%u;yPsf+H2*xd=IM|{jg}IZUdZwZ6e7&J_uT+-leqAgE@xz1vb!R?T zm3`W!!XPw!Yc*iqK<-EY9Y>|7eY40jjYvVrT}Q4(u6fh$Rd-6!!d{a2Q-el_5j{hq zA-J7+r&4^;q{c`+?NSX*!8#tN4wCcPdG5gjk&3j0{%0QOSWJ+QPEz0ap6-O>#*$*EJ(SEf7 zghhS$4J%XxC>7|wC}~eyZf1HXjx;E`qwKNoG9vAx6AwN9=W(?NVf*B{jtH6;)! zlXZJl<73R~AS0_Y!bUw^a8+$qXZH5&*mxHzel-KDgq;b^a@Fha`?_W8#*SQL8hcjUR=H@Ow&D=?`_UqK4-aoX#R`yxuUe+6dB* ziH(kX<*=tT%`yw8nD$Nl%Jw@fvhyWGp^1Yg(~paHARLN56{W^?Wopwj95SOth1qr- zvQ8x*_(ooz1)K|iy5O>aJ)aRuFeA!j8&(hft0Ma}@K%kogE@&ucitsS$jvrChFQni z!l(-*Kq2zL*XMohPzw~x)8;2`AwY2jG|?&gxpI@!+t<>cPVqO#akM4$iy-MJ|9LNE zYbw!8hK^|}93VY>lLtJ$5n$oMxBcrl$Ghy%kbEO&G)Vf>B`fz0Y7==hT{W>0|1Kx_ zWQwX16O_j%0F}7=Ian%5uV)2>d^~aU(^RZl4)Who%u(sFcD(@6>nZdWYB`~5Oq z(tWObRS2iR(P~?Ud}NB-*`qoGd8a==#;p&>4wrs3l121o_q@L!CLAXof{r3&O&fa? zQER5_ejdHbY9a}sBMENBn5T~^7TxkY5u!Pq@j$OL0;P8(=M z^Lv)S)j#<1(X-jcq6OWYI%+1o3V45~pSd3TJPhzZ_yzyr8=I#7oqoFdkJy(|d`R8K zF?t=#9|5KaqCwY4T|9RL@0Xzi@-mMgK3U-9_3cl^qW=+J8j#X(Qr!UH_9G5t&fo>g zNn?6}EiL(ZFqgr#EnMETApLq3u%vQiQ{DoMxAIvwo_p8x0-Isj)yQ(JG@Zv3wejRn zU4M>z@wE2LbPU|(FYvy~?w85hYwT-sP&Lv3PUtPux9=0`2;q?E; zE?D(@XYn>}Pw2&x_p{McsN4@V$0I(u7`hYFuwdZU8*i?{D*C$EI^s2vcdKN_2Ah17 z`tjl)Ll^5;lQsZL2(L#4wQx2)D5yJf^1$PgFJJXbT zB>!j|xe`4Xprh>MK;1Rkj3ikR8Kj4Ey*B^m>$Cl^nSd*p05_aN0j3p{3Nw0v7+G-* z_>38+zIjC#zYjN}kp{*8r??^wPZcx0B_@U-$jaMhO=cdwJ_<#T zz@_Qr@Wm1Zy+UXw9L~#DdG`b=`3cKe%Sc3r<|Vm2NUoNxNJW)wX z8^VlAne9#C0j!56BMz|o962N!S6GFemv%-6jP z5kvJ#Rl$9kuUfHSc;Bq}l^4QG)p3zJ6Qs!1<W*o^p3*w_ALoTf8+B zGK1n*cR1Z&J^V9rday1su+o>~JXoL!nI(U%Vp&Tv8aWF?!`8Wj!jWEMA`U#vK^e1g z>E_y;?&SU8Pt6SdLI%cv<3?H%n>S!e^iwm{mbz5@8+Vg*&cfNLE;5G9HM&6Sifg{=@wZi^5$HWoYgl)XW0V$gH_Pw}wcL&Oy>ka(o#Sg9gH)t~{J>bF2 zQd2yJYg6Jv!S%yj^b_sa`%(V;6LTj*TAi{YCT-iZYVg=A5!a~h!=}!XVIF0go?5;% zFwM8t2*^$x+H?R*6w}W23?lgj$K737-m4d$lGm*cxDd0=gYhLJOJ}VV7l%+B73A@S`S7| zq4lx_9a|cC7l9s|ZAc+ZC>?!n_E=Ql^w#;daTCSSdRn~UpbH^ieP38Zr7z#!hxFi@b$L94X?M67=H zbqpnpa6J|i7hoi}-z~@SA#0hf66&vlqs1aG$#-~bf#bSt+)DGjzt+`c6*B|H%BWk< z78r)C`8CLtsd9Wu9u7EDCasb!veXIi54!5dHYbW{v%vcn60rw~`;ihkux5r{r4t@6 z>tP&$k1{M9(Pn|i_&J#6x3||7@mP?w?feydX=&+?ci$3tCgm_%Q7U2u)&;z9t2SZ4 zBm?w%9E3wK9AGXx#28=E@Y8}bH>(pyxu3#?GQnI(77snpTX!0~h+SL`A)mGPYooJ~ zjBOD#dCoH}e?D_}cejZNxzwFn<-4~mY)iP(ZR1*MCJWL8{iISVg*TGg+V-d)CJdH3 z)nf0b^@*osQ0e@GiT4)=y2^(=x#Pr(bF-WLtp`9Y`Bob0_IyQhnwJlH8(~_mGF7RV z6vH(qv()z<_YVV6_gB{*$feTS+ET9mg3>>@c;w^U)e&Wy10cyTuk0KWz6jE)_AQVR zB^@qgL}Jx_H1Y!0)ThWAt?foEB6Q`Bn2#Mk^$c#S!#61doTA&dw`^A(?c(#~K23qE z)e|rdkkQ9{33W!=Jpcf+!k=CM;@Fmzm!lPiwnC1+M^nR`Zk=_&QTIOXq~sdw-pt|? z?jRqDKih{BR`LC{U(ruLK9fY?SpAN+dWMSh*kqkJFV2q0d`t#zLAsg7s>LPPpYz+= zSiC_8img&Ntp}hnH$&(l6JR?3%RnsnjwI5FN`e}BhR?_J?PhBE{e_Xmr|~O+r=rOE z?^67}vHBF!cwM;Q*bF3{xSxQYq8}*lXv2A@NHh6J8irydv548Sbm9aLeK|4`5}QhN z59wBXAO6^(vkt-???5df({v9?atb?@mB8VKm*uuU?%eZg4)M&5nOhDWGK#EJ0EqGj zQkz(FAFs>$+-tRji|9EfitpaAPMyC$ewgS{7VdITbAN!TULH|~(Zb$;VZfvK?1vj1 z<0ngG02aw7TN_?*;=?&NL;MbBtc@o$1KjPG(l+C**qQWDjx|dG2ewPvEi{W9F_5gPK?lY}u~Gn-%n!x^K2O zxN_lBO<4C(#UhDG#tSz4exchhAYUe(4=vm+HyW(nQomcDr~}wW(vFve(>9+YDgBObB}cn$z3m+ zVD^S=p@GNX$u>aiN0n#+Nc5|p-Yk!gM5(~sx!;0#BwC*|RYda#OKmW*Ns_AR%g`Lb z+DMS#n**wl`%!_dSab4KM~PTPq5xpkS7-b4B?D2sF}L+T(f5M<3py9^ryxo#s#c-! zT2^F9=J*Vw54c36`Xu96eJ6s*x`8N%T^a2q>*8nGNZ~XNl=b8cJt~{b>>LCgKZ@8D zBsyCW>Q>OFQ9FKhya_s&^9_!eIfD_SL6;<)@uS&Es#%SoD=@JvaUAKT=F;AfqN|dT zuDs-e*gf0lJb)Orq|dVWfZQWhlljVN5-R5YQe#=8y0Yle~m)2J-7HXDP(Z}jnt2g?%@2B)0=d8NHv-nNlk`+%} z^UIi+rEJSW9M+l8Tx+2|0+ea)KP$)Pjkk!c5}EuQC1JHeI9m(ZDNaLMd!GtEomiJ| zs(UH3MSPxu(NDeV%{6<#vB5oVp=>f%Z0FtGYjJL^Z=O4*?h+1O6*5i1SxhJH6=R&! z$4t(<6+Nf(LO&x8FD&fp^#-C4hx%MrYnpuZ#`T58RuWZ@PJr)_Y+4q`lp&WY$1#O#XxxF{nWQ*7qs7;06?Zl-le(;WaO4{#F^E}Nb zTc)cgRjNw-_1Ma_^XV~py%%%7M&MO@#37Q?QWk`#5pb#%T0 zWc+iw@NGkhV9Y1xt6kwF53;5^_XcNgN>E%ua>&3}AJp*`3lOj=Q3-JixwR*en=sGu zt+%!aFYlBK^9ZRUaw%)@`CJ|C@`sIu!jDxEU5CPuDv<%m8M$Sk8h7 z3AY}DsEhjpF>XLmmF(!8Y0ES9nzG`msNhnU5NX8Lb^ei|`H%PJ8f@4l=rQb^F# zY!Jjy;j6q5o(S=u+KCFd4O4e>WOmoA{wRQxCcqL=moZT+%WowK$)GrAy?RG7YPID) zAbHHcIKPeEf!nm=e~n5xOcS324Zb_2R(lsbcs+HIN5q8mcm^w$dZWK(;YW=BjGnSX zlqb9jQ$!PGJ|p`);LCg@{^2^rm?nTd;O(@=epAz%qvHJEVMl;pln}^lpd0lLjc-m{ zat_rFw-jJet5+{H$MEUOpwUYNfr<$VECoW}NU1Bf)=56=MOYeDox84PDTBcDKknsi zp8#%&h%8LH_bt^g#J%i{=lyk<<2h^yvm|JO7#`*9zy9KT7ah$e=W>HkoNNf^OU#YaP3P2}sHrsrR)7~Fs)=Oiu`HBUyob2N-3h9895hk-dYbs^i>A~<4t!NV zh`^vdMC1b5XZ%@gw5{p`oac|m6VI31K1A7vbbv*_H4Y%#dL;E+t=D|c{r0i`Ia}3} zv}I{yXZLf{qcWhh00CwTBiM?W1qvhRG83y3x@EXK9ZT1&1Wxc$#w)-BT_N{uno==h z=ZweA7?OIo!NiR#CP*j`daUQkPj{*7$DDG{20ro5xIxZT9N#2(a5_EqC)v(A^Bp~4 zcZtFr;cM+*nE|z^yPld`l)Lb>f~b>`*fH`!W0&{Gz4)$4r+@ zpAAN#x6ft1a9wN7mRr77e3yHR*rV&$v!Vw22{Hle?>(H2;RmLnp~u};IS>6f0z7cs zFB*lmJ|^6*W2n&P-u1wmGn>*oy68s)oRPAr?Yu~w`QC~#UM#-JIm5QSrR~VVZ%w<> zFPmhT1aszCv!mP~*~nHkRT`+(%j2UJ)Lzk>T*0`f1V(~p+PRGMj5!mHQ7@d~qOl;vai$1HTO789E`g$=Y@Trvo zU+Td&*y~ux=_x}(i{n+T`{rjLoTbwkx$+8tX9%dQ)eC8+YNjQSM_esNv99h>Ez=jU z?F}dBk8cVHFF1%wBBj`L9WIbI_L9ahIQ{nO%Zx-5E5!E5UpQS0%;yD5sSEwd-khl5 zv@y@{;iqBLbPH;5fwDVQvUYNZR+SlA)6!M;Yq!k4z#8aftE?^Gp_S6D&BJ(Y>B~&4 z=k2<;LQGQcMi+fHuu6LB=~k-A1#%%-%5F$vh}wYtjUG-^V?Tcs5a1y;^bbOWSD79M zJY-iw&e!h3Fp|5p_?%MFhv0#c~-Qhi7Cq-0=_)$T6?=_UMf*oB31q=9NnG+Y4t=lz%nf|-V8(k&n zn+csV?OwS7R(guM4n^GYFbq_(YNTglj&n>6?{egg9+R`E!KiRNDLBJznA1EB3N=xA ztIrwrke!84#X9qSFdyJR!+)%V*bioAX1$fx-M79`^A+7PW~o(-3G_2c)L3SRi$1uW z7O<}QsNeBsk)f2*x7<$spc>^(mjE4_gT*NkhS&8^6D37UqcHQ*Csgv=eDdvMI5U(H zqNvfgAtwBq)r{%^W4vIddStb9_`coV&YRO{{B#nMp%MC}5KvBsHp-vri<0RZDron# zMScscFfMR=&89XtX*{d9E34fq&R-*f|13(|+E|!hS9Cva{+m}~zt|(xA+By3W~Ex7 zqb>F9*|YE1P#gC?rIDczKA7L*H6m@1IUR(dy^Sgc-_`t7R(UsYv)_T`ui~dMY>UO=%_f23Rd1E(V&fVRwZy!(P9JjNuRtS{nFS9F4xe(Z8={EM~S zb2lmHX~o9l`H#CljKZVETe_BeGHk-g=*pO1{b?)pS}Q6XCrp_hT;95Uq2)iA0~B9+ z>09aY4)7BGXn0fmcW z%!5VLq{EEIWZVuVaJkm$l`FCVC9yq>TsvH{x=gOdoZ{tRS+R-jp9Uz^YE!lJt<1@qdtmv zUqQhHA`qUizlNuQ%aR!0oi*<+k{LA}xbcSwx>CO!cYmlgKUz%!c!wXtb=t*P*ZiIi z$f^t+6)A52#F{`97?DJc(HMsHTYAnWLh8TFv$Mb8n1Ng>bj;ZB`br~~OT^Q#ra)#K zYcPpcf=2`9uj&>49~p>4Crf`cCaiK%Q|eD^!g@K7ilJ}t@%th$dW_|XYfdnoLGj1y z*@cgaBd_ZwbRMeZJ%a+Anmwfnz>2A^mbRH57|=DUbNW$Q7l$CI`@j2^vK>~#37Oj| z*8>OA1&7vw%+waq)RW{Ue5;kWACSxu#J==!L%^O? zw&sA3`2NL{{_DY#<_XVR5>Ib-G%mCPjEK=v^p|*J7Rx%ilHAJXu7O2XTSO}H+4;js zMZ9E1J@)S1`AvQEYHSb1XCFZDmoSlgLe>=o9rob~eGtch-6IKC)+d^Co!Bt!iCb{S zGsK~58Hm#A&UAF`by;2liQU(2q5I9=6u9>tM;*L{D(T25pu#gkD}VFb#i{NCU0ito zkPkhfW&q?CVj!=^t8HT`VYaqHni(=nF_2z>1vUhTLqiIUTK?q#%>T;)7?AqM0YJD3 zI{@NH2?c7R$MIJNePtTDhd4-MN!=;&b0558HZ?xF71SY^O!|4yzPrMg0Z(?`ec=W7 zw-E-9PAPZox0?b)z)#s82zyH?5gkwBobFVOz^dXP&CITI3i=ZQFCF+H32*W;qxOp>V zqQ{{UE&3zjC>YP(4+En@A8)#(FA~0+MOTtgQc8-H$M1gOvjHZ$kokE_Qd&+Jp=z*6 zS&@Gxb6NB)YH}d+MlaZ{(WFz$1d++GB?>4C!87&+$MR%^HYd%Tc&$i89M5Rm;ByI~V zo7@MV1-EO=sv^AHxz=&-Fbgh_aS?1${h-LPXY<1Wf1imv(&YfbF4g!0l0(X)9R=)@ z6Y|VhEE?PV<(#0pq(0STY1uuuYhV14==k*w1=9qBfJViSL_wRL*8e)Gej(vSwcbbs z+DZKZjoO#-89Dqfm+CWx|Nl}wf1`~uiT?t+^&o%GEz%{p7QW$36d+>yz1n?3NHt3{ z6y)CdQ}okxvYO4%)|@;$;G8(8WRuZi`$4&i$$Vv=s8HXgV}cQtjCEJiJ70wXe?_}c zFwM6fL9|Z?POM0s#FzYkQSDWBqk#$NX7gw%_0R-Ft(fSA{%q#$$cr{ynMidRyOj^C zftr+SDY{vw?UP{Ql*euX+Eh<W~V}wt|nHA_Mf(+$p4G6 qz%Tp{2t2I4rE~K3@AH+9POkV-T1?7emh%9@3;sy!Vc7$V*Z&P6ja1D5 literal 9396 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±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 A@c;k- 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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 literal 9557 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 D0+iUF diff --git a/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/gp_hash_random_int_find_timing_test_local.png index 1b31b7f27ca70c8909918fe056b3a64af5ece172..299737dd6fc6f3be1527d8033f80164be169d54e 100644 GIT binary patch literal 33303 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

J&5cy(Xz(^-xH*QhdVWwkm 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 M)>10IXC3z60K!^=MF0Q* 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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 literal 7570 zc-qBzcTiJpl>SX9(m}d(RC*@@ks=*Fl-@#7h#~=%UJRXp2vQVO5F%B&N-qJap$i6S z7J3x{k*c78c=v{HcV>5H|NHIC@110F&wI{!&U2oV`{vFh-rUrXk&cHB002g#fAlN? z0FDCy*h3l$Xouh`4{cBY=Em0g0C^z*00RJc03ZPXNVX6N0D%DzcmP2H5Fpu!K>!#G zfWZS85`Y28v3LZ4#{hUdfF}WXkeo_F03-}R!UH4{Kms8o07L*F1_1E@NCH5R3`~ZG zu%Kip8YI^tFAM^KM<7TD1V}CmSr`lggGXRU2nJKUlStJsk1VXw(?LsUdCmtl>L69sn zc`6ukELmuftU6gc3^|o72S^?QxkC&YiA)+K&xFhaLk1>8gX9sBqcP+<)F_t%I^QvOlL4%CqQSRBQjCbSs7Vfc$!| zygNJmfOU07L(MZqx8+&-?Max>&3sdUo0oCx>je4-{DSymyC0VQYFq&z&#!Wr$@F&MaJG+!x}>&8|LT2B8Bg&afu!*qqT4w zNJ?(WU)Dw{_EmRM*F<1&4{F|pu?>wK9{=*G`z|mTLA!2Cw00wXXYpCG3jkBb)qm|~ zsrB072O@;RQRdBfo?tTVG?6k#7>f0%4&ba1HCybG^eK8`p<}tpCJxq&`-skz3@B7 z*CD!#W_zGq^Qpkx(H(1tdKpT!$x})RfZR-Q2i)HwJbg^jgC<1>$0e=ybwmA9fALpr zyQw3kQsmX8m*Os=P;3lPgxQyKu$`6s`ZAoiyiFuydg<0fi~W4!FZyBbXZ}219I%YG zn`jeD-uUJVm#*NP5FcA$G~1k6!SNDRszXM02a;bMH?`B7Csy?)b$)SA#*N0q=cI|6 zZNQf)6u|}e;3=P)mH4$+l8cVy{a{@yGhE@%ztKM} zBGF;hVubUGH@{**tD|jEyOGF&PHoY`{fWzR-?uJ#*|36gCd{OiCI+HhF5$$3JwlxgI?73JT~>W#?Gy#orKb^U!j`!B(`{I0^CayCc-^zR zbtVi#=SySuUy*uovpqrqa$4fsGwhdUdw8B7{LCl`X7m0&o4AE>PR71(G?krg}E3K{g?&_SB|nFRHEW1j000K|lyB?s#AZKbw1*g>JyB5=2T9)~mH%LnGhQ0ns z<2L7_#c=s6#?tAxtiuA*F#xR3qLVde0@;?iAzQ(Hb2diao_U=6HR052l`emA2YG4N z%ft7=T7uLs)zCXsWvVTR&Qz^6P1r9p!{Cp~V|1lE;vW)5qJ4caI-<%=pPiyugyzQ) z!h&o3gM?mQooV+DV$c%q>5=OZ`3fOyg%)b^t((V$I56Hob@UDATr3DRtDAQc-7BHU zGJV^5w*>2_2p>-6aL|{U5naFkoTyc&hQaFA3F*39cz34-@b(25n>I`-Mn!!vj&1F= z7aP=~sq+7>vwj)&WcpED?fBn}p@$y+cerI}d~_UKD^xk>)qi|wK%vF3b0RB69D&Pv zd4B_NYD__8nGOm}K~zzOxp&j#>K5~tK0j=KgOu_vKC{WV?HcjR;7C0oRxhbN7=_O- zFXQs?U=L*=0H~b5*Qx9r+8fq*^_q*Ns&6CTxsz1f3bpMmS z%h}T?nav8bET?S+`o#(-FToA|Lc!Y)G0*9$`dfb)&p-0cpm}o*7f~MUgpd>95Jjg% zxm&z(dX29uXfl0URqBYP23Ln3v?&rq5wwpg&C3G2!IwSF^HF+@a9cHf`ITzL8pIVNXUg1HN)l|;SDil7(xS?{ z8upr(58xj>8*X+neZ=IdU&HOPSH$dV4XHcf7O5sf#fLc1Eulx@48kyw;Lk zahO4KgIe7$>+dU{KCamrJmy@#>3(X^l5X;b#+wS$K1q8`p^y&ozd4C}t4~T?WF{pd z4|%zyBiDDb%aI#rZ8jxNO$=*Qj^Fvh3V9C|n&Y@+gn#uaw3RS?M3--K8*j!*gsFbI zO*1^9#8p<)PT+{E?{q<ZT-(gr$8qvdB zqB@@Lx1Xc0ou)jclfP_`>Zg_r{gH07ZI<_qbv)w_w$m1R{wOu0`FIChJT5bl*D&F^WlY+z4+a0s_p+vVE4%+%2sftF%oUtrJ^ zJ1qS+Ws-5>rcIT{UWY9o^1cRBhHCoYD%DVP&0o=0B6&-Ng&+I!sD6gBjwn4!ml8`A#0NTEhS=rUT8JLQJNbzdj%1WpEH9}S^bXdkZ4C^>hE zXh&K)7906SdT9foFprDjpC|w(!6GCCod$(kI2=0}N9u(Xf)P#mXRJCzVGM{R+CRya z9~+i+keA=T5fg)tjfJZ3*mfCTM=;71K)g{M76?WY=*r5y_{FU{GJy8ncmeDSoCR0(41+&mBPxT6gU5K+{^v-Xx zd0)tn?7BVuk+4YQMjHOSeLrYJ^;+UL#lb2b>>CJ*k^tPNO4&H4?h(eV0p3KimzF(lKoa@s$h3CGn-j3NWk>_<*o`Va? zr9Cvf^U8Yize07*Y3&#(HqY8oxo8MA(wDGBcf}K1$GhZnP1kGYs%4nqlzdpB=ZuAU zj5M2_9P_azM)RiMm+ks08bzuHDor5Sp!2O)wX-yOF0t7uhDYr*z2mjOF721srjIiI znb~`x$!BUk_@y!Ye5yv)vbt*9{_B&`M9GwL_XuxwRH|wF@3s zmY7^L<=u{bIsqTKL|;8mXm>QfA{RIs@s|n=O#QuG(HL3~&Yru{_hWTs&eQjqvf9Kw zwI^R!2al&cX=z}h@;O4E1wpJXiE7ZasO+5Qg5}T$=SolFXT!|%pJM4Wv{xi@lWR&1 z*>2zMtxNlq+t%vDP6Lw^ZD8b((~cfGNJRRlJ@UBwb%5Y=uoCOq&gxQf<2xc>Y$A5x zBbruewQ5==9%*uHbL&!`=CUMD!LL|$DUO2N(;CZ@=ADnj;@?bB^t?=dftTPZcu8bE z4z#LCTMW>d4K@haG!&H9K3kvh+2cyu)8fCDMYgt)zNqH(IyZ@7r$>9Ei2QRV$J_po zF3quDr}}%zmAw|I^`PK94`z=_F0E0F z)C8u!UY{Nn=T1HPx*oGEh1wc)w^Nyo(Dad?+|rTcF-;>F^pP8*)1x<1oYY2`?) zfOgSpzylm>2^Zf+G$~eB14Uv=yK5r*msiF zt}0a=T$vq!nP_3mpcFONYnObP?lUU}D$tF+*UIipd&OMfD>n9i++PKJvx0iU>j+tD{9jOzFi zsvwp4L8VgR*6)vsN0_t(8_(v~9zFf8vgUKm3JKDeY*9j5p2A)>fv=^8w>*3BcRs#o z`|PKKi@lGWS$9WEy&rZSDaVQBr&h`I*i_Z9G_1AhQ#ktiW!o%d;|y;E>O2b*(=+zk zK3M$7{jqu4cKXeZ&bIvJxa*S!ynYsSY^T-vL6{)V`3Ii@ajvp1EMaZ@;|X1g>DsG- zC_X|WqfRB9@*V&k%R*XObd)sz%kc{Tzi{?Tb|`2SXnI*7e5sg(wTKd`VuQ%DgQ_r1 z*GQEO7C2>A7Hi$0%1VL1@TT1Af3tl%%3RV#zWKnHeDDCjW4c$-H++0869UWs%rLa| zbp!?P`D3wgE}CIQwo|Z6!UI^^|GG-2HMcq1oq@yl`Iqle+6~iI*NJFShDz1PZz>Nx z{(C5Hc4(_SH=TT#>?&$XC;z2Nb!6u2#ZhO$W&62b|EOPc` zJlkkbzf3;Nz9niZB{N?oI{EtA9`Cr&n)hO}Z{5GCu55D;3pW0R&;0Gh=h+ba=;vp{ ziEiwYd-I@wVf&>4(Kac2raRpP`}MJkLq>+R$^`?Mm;N1*fvbDG+@sEY58+uQX_YBX ztrqy(sAKBbpPzjTfRgzs|9_(?;4Mh`!geO>4z5#>FUs_7Pn7U+Ae#H@E-~dV&jadw z*gPbEDihTM$t2~fj@Rf5i_WQk;Z1Bpu?p@Kp*!-%XSm-MF@Eo%7;&A4jZ!PO02cR0 zsFlMwk_`SNjyh{$;ob7of#`e8UAXF?CSb{pQuE%z*jz5~IheKY<+DPWB}{e@F21Xb z`PsPvrLD5UPuhpCS50v(f$#i;E;685u=TquekmarNc~UzZO0xM9$r~9#r+^D{`{R* zJW619CGM!(Rad?5SD?C^y4N@J%+D5?6!jA|k`35L+eZBK9+2f6;9r8NfXqt1p{xVpnw-#drV zrtDfT+Z`Hz--w98iT9WZdFoMT{YbdA2UV^5ov;1YJt`}`Ba&UZhxDsMZl}se``k?_=0i-%-Fgt(1@Lkw%wKkMD@7^;sa< zELE>Rp@K`h$y(~-rJ{)gUy*cfItgONep)yVy+Qw6pTJ18t3Tg;gzz$(=ouj*o!?T2 zQpF~7na867AJIZg=XqL6B-6hUN^GJMLPVGZen~vg=9@J2|HC~x9;@%2sn1!WwONN= z>U&;O8~wyB6HZe_g&6v@aYah!8~`I|**1$G*J$BnGLrJQSPEt@v@LteCQ(t2!)K`; zhc+Bwzw1qfJ0$yu=V?Kklo3@D=~)v3H{ISv-a+r$XyMB3xGIQ70tJ45T>Ff!-|PkK zN8lDcvMtBh7LJmn^sEaPINv648ZXuXB1G33-WaWDhFeh{U-&EIzS;(daLCc1>R=o! zX!@XJ7gxU{8uMSOcFaMUZS}i<&I%Eg?fg4NYvx3IVJ|cp|Bp|yU3QpgGCR_DmT0+A z^r5dOPLQ3t!C36ZrDY?(k#HRx>ZtLz`9OCo9`)$MghJ&4|68h@nz+8|3$41i9_$Vu z%*puAECzLj^If$}#ACx~_D~0Au{RHYu*^@GUr6Sf_sFeYE_&n~80Mz2Q_JV)`a6^o ziKj&}RoNx`hhD0WMzI->`QpPHNV^~C_tU~H6o&q=Gn^SctKsWh8@}}Yo9a6cSF_%D zx13Iiu{r)N3}-ZN@I2b-oOrm6;jQULW86lheIeZX+qkgM^cX8A`u$kTK~7Rk!k@44 z(gOj(nlF;reyv0Xo{D71G5mAw1fJ;aU)wF_s? z2L0@nmXH{fm=#V{VB_2q#hn?k0TY3KjJ|+s26oY=Fc2!+wA4T4_RE46i}`jb2bJ~* z&5^a=z0E4bcKgdOr_?nJ=iwQ#mfy}Z9dlbNg2`c%$-mnFP-+|#_a0*y{?7OYTD4n7 zXl4eF{LE{+q3L(#3oEklLqcZc^=_Bn4@x{-T|1k2CB|IMSJ6%zcFr?!suWY)R6&Z7 zlBL)yvwgRmmeC7a@orr=j;c0q&wbcfR-6g3j_9S8n^kG>Neym4>*YlGDz|t?N=e;L zX@HO*xK-yht3P(HDeqpLDXAW=vgkw#Vi4R(UCX0@Gw_pm-$;55`f=Uzw8zR=^+l+b z{iBh<*RJ{aXLmb&J?yS#`wzU=w3+x)O!|DQ(u(*G>kn*4){?}6S6TM7?SqS?S~mFA zKSX}mD+tt$iW`}s5@0j;e7QmoCmATnUp>NMyKt1|G|DFR_v#?eMek*76tH(3Af_dC z`-kZ+yzYIDN~AMaI!-c&{xVTZHm<^F2?Hl-WQwp9OiTF^pvGr zC5AB5{V5M#^S?G*go&epy*$~%DO~Lob(YxBmVg=Fi^73+R8aTSkJt)>Oxu0efJ`ds6Y^!&-~c+oXI<}KIMx8)+t;ed?`I$%{g?JLV7;rRXXf!Z*@vM zozth{R?Sceve92_9J`m{L}U9ci2L;)Rr&2_KkJHlUrV;9ODGPn&NejVnnNT0iz?)1 zq<+%4e$BjS-=Z7wGIyG-z2gi#OxTQNzKlmku|BaPpThGgU?ULLw+z2WDIXaDCxFxmh-)gTdO%mTc&UTk^90?uZ06AZ96fl-fr zw>FJaZgLTfltIj?6YBPIp8K6e1lKo5t%J}Yvu zrr(ric3Pbe31LOMr+-9+E+|gbSOXzb_;ncE!^8~!MbN{o7rPg_Ann||;_#-nZD#Sv zn7F5|k1N^lbS1b_QLcvI0LL*ivGX!StI&o0p9ETCW~|aO{>qEr+x9Hp4|A)`8cMEl3a%O0XpwD?qBhGr#Su6(=GOtW`K`I z!A<$p4-y6HTr^cyhoQ1iLq@Qi$@A2cBe}p7j6yWYBV-h={_AlVaIH@c=)}C$N7B0{hfd2t~1KA zjWPOm=Rf;#EOLw69Oqq4ogTjyi_G^;476NyadGs8IXA1DIQ8Yfy599S6Xj;K7bRFQkl6Gw?YyEWFQ^&rsmBE1m&MyG5 zR(y|g3p-ohu6({y;{`qV7vIFVbC*ifr^o(yMP@C(yLC5>&b)Q`;is@Cd)Os=2uNHj zl)D%rUn7>Fw1b(HPbg`8u_z(oW9e0sXEQL87nkeL+6H~Cu28(CP; z!b4p1Glazfb&ld9<^FT_C$VdgELya7Z|Ny%3@HES59MEqG2z}yyRf>eCl<6951}psWPZ1^|Hc002fJE;jlMyvOYj z{SVVqR#_Jp{RqOfhNF-1+>{JF(Vw4sd}7G5XZWE{QhUkkd+E5^dih#-*Z_QeeR=F% z96hZp+-!JUJ>F*=NYDTP3;<=w8(qK5y{y2X*t3V8oI~es))JD5-n0RW4T;ZMAxb0v zRcMRlGm8x|+Nj4qAJM{HN9exH($Nr0@>E_+3Q|`2X2~D;aDQoRW!n>YaS)g>e0p3@ z=VLat*;qOyd2w*#9V&JB@#jm5s4mM2eXi{Go>?H*{|<}|^iM6&r_cv^|NpO2gh=AQ zEKHjBh5o!YLdUffs`u^bM33#||5g{7|2H#J<0$7a{*zxGa@+i? zCn2F8f*FO5gtc`7>hD z=+-QH^nh z?L<1o!nkc8{n~aK5lJL@yproKy5W>t*&^)%hk5TQll{c!L@?RUPx$S&a(lJ2RD!wO zUxB(4Bv1YgC?*`gok(7QK3=OoJxP3TZ*PrR(6Rid9J8I{0^fhlABp;df0D1LnqznQ zX$J0!4Zo~e^G1I$;?b^iif20$dEK$JMr_=x7)LYpQ$OolEWvJ^M-*&VIh}owG=^je z*71bRivP0)T&XX^rExpHJLWm1nyWGT`nKq&A0W$zPo#-%0ZEwQEB%_JY-TE%UMW<^ z7jQe(?5+YEN|FW)JHR-G1Ar}T5Jh30hs<{W(d*>}`C#JnXqY|iZ?d0lh9xiN_TRjD zLmdl+UZ3wbo%Ya&KD7c892JPDurZ*hPhPk0vI`2UT&(?cQ_W^p-H?Mk0p`INmW<3f zkC@()|0MVXI)m9G8-MRR@J^B8O$MRoM%9Oy1S1_NtD3G8rj@xV8daYfDwZ)+WTbmW z4pU2J81j&obords4n#7?tca;9E^aEV||C=Ase}~+*?t^(Qo_}pbwrA ze}oR6{a?#bufMXa^bhX=TrlaT*n_7Fb~{y=K1GD_$mCYt5G@fTrHSkMHYrxHlqEbn zb$?!NEbKW1g|x#Gk=IqbCj!li%>UWX%B>x}t4FQPFWrO=nb(xeo9Nz%)c3qC4W*miVj zxwkIT1hNf8coMNo_D`!<}0q|C*hc#trhDUwS*fM1%Wd$Fjxv~DfsG?y|x$e7=p{_PRV-d zmav!J#Edr3HMnMu|HsughfnVA^AIUOX=b})KA$$(ko*!F@WlLZp`~`&gsziiiXHq+ zel1e>Ja7%m@iAIONM(4VkN?VxQTXlD(i9j8snD+rO@W9&&%?|=VKAS3R7(&h<($_Z z3dh98PO+b@buO!Qo;`o^^eNXWM+?QpvO`u}ECAWa+;yLZB8EzC)A>{Hz`eXm{&n6x z+NO<>UmGrSjxhx?5mKQHglcAvcMpWmMR2SFjwpXiBvFg2h1OqfWVBuGRSmmf*-aoP zPRiQu8w=|G85(y?oK@-|fL0tu1b+D_#Q(xYh9Q`*do}R8U;nI!kV>6>l2o^SDJTH= z99B${jf$Y{3M79hddR&Oq2w_}w137I^gCJ#|Muh2;N) zOAy|Eoz^ve)F3~~H0IA?%NrOYDhGJLaXZOhTH;1|LLVRwjLn^)nNDu4Z`NadeVfal zdQO@6J}c77>rMoFKm(?#)_6t_=#mJLG`wJ6AZ=Ke47eQAuQO)mQ3?|hnNLJzmCd6F zM+z2F5-G&h+HkHX9Q6-(rWS(tTa$WzsHJ(VhJkQQvFZLbi$`(RXBOroLyLBvLR%D} zuaP@OVg`fbk8yt>XIX$Nn{;|)U-qRBvp_Y~WxPgbDut1eF_jh{5AU05D$g(UbG{dU zl#6Gn@`^Yfm*mPA!umQcBdS-{VcU=6qNk^~w6b#ij6S(4W<#Op?!B@4Zb=dG4k{C3yba!kBFeOn=CO9A>r7^bEcSb=U5_tn`?YR3)ZHp z=O}8aeDnbidI1BKCAm;FQ`OR(v!k=KUt*#6w=Acd!^2Ljv6t7^lbH9ZiH%&-9njO` zXGiF1#wI6^e-3*OJ3b)&pB-K>#9N@CC`y_F$7XIeCQ?#TDGaIOTEeJ6cl+rs1Iq@S zzp?y$an)REJXYzc0-{TaCg$V!| ziPxE8MqQh^dpy=x9BNhhjuK8iNtOhcq)5`%6r3N^r#l%bX8{Qv2D$X>U5jI$Qrjj7 z@bI-X5hm-;oiP+tW2vaivd;pN{{gOhR7=v7>|u3ze8Y~o`;B*6ie z2G!_#S64|>iS83xpd&39%*6Db?QTn*Hf1hO?W@P-DB0K(CUMoxFXYt|#oPzo6AL_T zUwXm0l7EO~Ah$4YWWx{s_^t%AM_0DuZM*fj%g^!M`+NMQPT0VMKO|a~19noVupK*) zsa<6|NPVp@6d#gc;B>NZY}5ETE9n-y=K{1GJy}8)dLuFuH3~`vFAbI3m9? z#?T0-3kF~R8;W@@Lg?l*@3!^l8_j&9ckxRwH&mEEV$HCWxRUf#iweO8UKgNY2hZ~t z1Zvi^avqWr6Tf{WArWMp$f`~e5gx7(sl@+?2)tl0*fb_8syO|hC=XAm0|e4pyfALv zHvs{);+}f{JQ%WbOB1k3m%QG}+fSs9%fFN2Z9bAsygu8F8{jWU;S5*HAcC3@N)SRK zm8#*@r11&n0WEMPZ;}Qx$OeE-x26qwpCQ-i$zow)5&W1oJ-WU;V?z7z*mk0(ROJ4j zZyk*e6G-9H+E=Rgxt3jD>ZERuI_fZSaLoQvzIdTl77;jaSYg>^)WSZPfFIvS`os&1 zRLR^+VHKma>7Ws($!pug+o1>D1axV}vFuKogv58J+SuQkV^$uj`P0E{Nlwiq4i9{S zS5Cf#or(2b*SlyodBa0iR<^y#XJ6c7G+%lB!-o$5cB5J@)f6r~0(|^HdB}%mu91Wu zl6WAR$a4O+1YWFg#GP#|FxAUuJvq&f%bz|Q^T7Jv36Ns<^r}A?9^k;jr)WmL{U&Qq z_i(Wo>WZxa@1-H}H-H30Dan!Gc_ljZKZ6xx{KyC!beT-}fk!|# z{ZR+eT^JQnf8`oedq+o)W|{yC*RNIHxX`N^qwLmo%E&}_a!cfSRd7nFwe|N;%N>#^ zgIm8>RhzV89@eKR+(zQ#MLL_6(=nmO; zZlwMROX=iQd44V=l60y-n9Lsyo5U|(WNt)+cO{UZr>1zWHTXv38Rxry>W*s3D$p(c zUsi8&q=PNto3PH`xRLS25=CPPQAZX+47h?`U+I1iaDYdh9`5h%=!5@hMaIRo?Ome6 zK%r<_ogzS;$vig~EyumYNbEMk+QN;-kOB~X>CFLGYD2OqmPMd zEY#8ux2Hyrwi!c{0fo9h7b~km=;d-m;=&)BzMIRdtNGb#`!RuzY`WTA&8w=HAB=9vxpk6qx0!I&sv_o z?)x{DEYIK1rg<$Uu&9P#>`kBUbLbT6DhaG?4rLWfxhM# z27^~>wzjr3ei_yA0CSO@U0qq(0yZj3BYBD#8^Ac^jB9Sn024Tjynq;V^^|_cJ%u{j zMj!h}7Ib1vz+mQUuU&3-)dL@2%GkiDoe|edX|THo*^%%OFJ96V$#r15mAngZ0aFDO z3YgbD8+$RuPKqk1VpiT@u0h>;qIk>$(Q@lzT45>QkW|c#RLOYdJQ;kw{X=BE#3QQ7 z%^!{3rP$ek*rFXF5_?>7-H8boozx!vwvga5aqpdy9I4=I$-Noh+ zVNQmn%M4O*8-6uJM8N+vdhecqJ+d6G1tnAF-uR@LYyey_YO;EoV3aV<$sm9ex(cJ{ zwln?!zXdeoe*$I5ubD#c2F9+r{E2=%-xfWEwbCSut;WBg{eFmlf>AN|@#yJ>(WV-Z znz2G4{bXP&HejLUH+QyzWr3Ki=Ms5q{*2Aswu%&`U6g@sB$k3W6xs46k@^(BoXb9E ztfU&-Ef6gL5g0|-QlCG4GR8^*mR$9M>XY`t;ANBw)C3;srU2Ch;=P)B?XByL^OpWp z@!8WLF0kf|owI5Sx3*pzMN6|J519I%n-eLnySO1# z0}BkBm%;ipC5F;SW4=&P>z=AuvkamF!35-Sc5*m~qLi4-IlKLC@#elEJ3KxfE8#=$ z^q_4RmguaJX!~|M)hxsxvsZVKChEfdET&MxO?mFa>BbbXj@>}Qlh`+oMA05TF<1-F z;`=}7a#H{z69f6m(h@I^Kf%eJNAvr>T%B%e8a8;WXL0J4HhbRRUL|G-*;j(A%9vs% zAu*%!NqOQ&4CO@Mp8N&^uS{3+^UT%VP32bdg;lJUc!7Qgm8;;7e1c;l=HiJF#XE|0 zDcb_b^m3Q^MwSc_*Va8j+tZD~_fzQbU>3<>?=Pq)ciZU<xOk@%D2LMPbf zO86yd~W_#mBV_8|ReOu|wk5{@B7Xo&FU7&Sp za`;tq|Lc0g<$t^++Zc01<7Dv{uox7v@0b4JpF3<|Z6clYR*IuvaEW~6p`SrIOWjfj zWJ&x}8FjlF35SHoS}!(742}%C$%eB@qvvp?<&tw<51@uwB2}6ygJf8|hWSn)DO*OE z7EJ+t(<+C72X&LlTuO z8MvS~@$qr#0^Gne@yh-cQ{p&w?Rr;Q9CIdBS{g#wkMBP-P2|i{8z(iJi3fojVL>h7 z1igIz!f1i2-n{>2R#7*U+q4t+u8u+Bl$@*wJ7hC?`nrz1t$9g-# zrFmnEL7&TZM8m4`dN>dHBkTsUW@JvvNB)x&Y@&Ncbcn3-14WXA0@LttfBVq}ScsJl zOqqr5`)+3W76vSY6Ff(iY%YHNy^Kk6l@?{o+#n|QHRy@y&2}gXUqIeALB?#rv67^H zla$SoSYi8XH9;FZ>EG#Tal+TH<&sq#|D`w)E8;LbUDtbZ^aV~1vIY6RX3EA1FVtfg zusjwj?GC~O=9r&!iUjT$HNw@fT6HF-hgOw(Gx+I?7{Tf=7KB%Y8LTObH6(=-H;s9O zeHhRrs!lcRCRperw~7wzO7~TTFXS8^ePW>xcOu+IwYQfUuC0;X8a?^9GkWm`K}Pl4fe0_pa&W%8}?n2`!RA1IRNF88)DcX5{keak1 z83;<&^|q@Fj{h1ufCGaY6E(+hM9~sS6e2yFi+`_hSXa&|foB1slcRAL+W?4o!~@XO ze!6n~q2+p~*!!jK&n5iw(1-g|G*VArUTx+qmLhv}T1u5j9<@3vv`ke|8|;SrSCxd& zgOX7<53dzbK))OKQ!N_7n9cYBiXQ8KT_pyrg@1F(9!GHr z(g~9qD&0nrUHQ-GLcV~y!X(pYf$`?S`iPT(b+GF8;aCj+LAqe+ZpHRj-~BKS6X&|%a^|lW{CJ! zx~m%i8iRT#(VSTjl}t1tG)RqN;Rt{XO7xny&b32;@+nmDE^QFhAxArPPUvIEf!^U zH3nR1ve2q#3}1`Jsz$F6*2Co}e!8cz1bYscmbKGbab zT!paf!tL0@{f(v$leqXbG4YCXjM(ji;WK?q=1~F`iUR2ynD)YC%ET}92b zYc8HOi3}?MT>yV%PPzTwCoja`Rh8jY!B2+?Tp29EP#q25*sAm~{pvJ}(}0D0)A_Gpno{$e9w%5m9XF#c%(eb%2p ze=6_q?~CYm|5jLSpRD)S9hWo5F+4845iH^4;!lWassrxVvBA(Yk+LUVVY#`vDjna$ z3j&<92beiV>LFN`SK;?hzq4Oh-oKN^yvHHOaB1)K9_%FNx;29Mzig>iP=24N(b^nI{kZhKw>1 z9VAL*OgMa-I3ytpc?B#3nS{}RJyMYer^tFP25>9F0C`R%aU}D(y8G(-+GC|Nav7{m zdZ|BOpSj5m$>%EkbR~zFasY-kYlz$v)zd92)8Xj`py?Rw^DkCF4}UbE1U%J45q1pbVFXmv6ueQF$Y z#r|>oiyt-e+QCP@zWNiv-Nj|?-eNLu*!Z>r1(O1!JIQ-b zd&VaaMA57%7&6jJMjB+_M*NFKKEuh;sIgmzhVGK|h5ApQFw+-CydJJ8cH=&t{+chx zN62ApYy(>UJeiMVD+=QWTlC$l|MFj0MEURtGrvx-1?^1!n!Pygp^w{MXu0{^_>WC9 zJ0Csj*C{+EGeULGi8l}5(;NY?U|N~q7%+;#-{r$IEaI zc=ha%s$6(#YjTzi5$}&QS1&ja z0~t+WBSVh6l-hAjVmLuWTnA%6hUts8#oSjuy|N#*j;srf*mjm-xAoTu3-yD`cYas1 z#!nBtU)Z;;D{)E7z9NptfdP@?s*rXVi9I6i1xFbVSPJn3RA;WzI0gI-=;5dJp|q!I z;mj<$cNESkC<4NJ-ORaIcQ@s7GmzOw2`Na#bj-O7lOh>HWXKhE5k{oz{eDzz{dcmX zaq+ufsWWx1X0^IS+F?1N_g7`RlfMET(V(k|)ESe9VEzQng{Qd}=j_b@aA0v+&YzLl zeIsn?7#dFPZ=*Q~J0%``VO#l|2jg~sqy1?$|FEl{9dd{;f&W9xppI%1d;GS+&pgGr z-{@+2Ob-gR?2K!#ezP5$Mxy$qN0gAOGgVAnsm@jbCzW?r7jz2*0`==$Xlop&G|uL5 z=!1^7<{CV4ENv$VL5j`C*CZs;OUSj*rlG(Cp#euboM--U#Y=KQPrnF-?TGA2`-=Lg z5(JSn0IKd5ErX2zfK0dIryL6Iv6A}RXkLl+$J(70to`KYwo?J0>unZ{QupjCb96%; zlF!2G_+7M+>wF%0-GXzl`?07q-C7jM{Q5;)T9zNZej!p(u>Rd=Al4IO&x5&!U+Hh$ znKwIHguA1wS1kKn`Kq3B^7jkU7w?2|NftRRRrAn4{kLf;bACfLR&ke5Q6T`dcu`Iy z?XV+rNW<#Nw7O37#4X1P;$R|y@<|fAESJG~FSY;IptgvPlvKbA&Hq`dsXSRb^=Kj% z2t40QYSLVyB1uR~Ais$%JhNfrB^R?=`dd8NU(+JvC~5X#>bzAzAWg9+enplZ_+m|k8*5Zzsb z4UdEFBr*+tg;OzkJSWb!?B(GZ`cl%@`?vn*H+I&32jaH_(|34$Do_!VS0NvC+fxt2 zWZCO>-rkMQr=JLrvUw9X=FRoXTlo`OQ2&0RaayGCzEZACsb+iZN9cT$@8QyTtfGR# z{o_I+0qShXhc*qrQxh}Ry@5md>eO9*Rs9`A#be#E3du?|X;N)Ba`omT_7$CE zz(1kFmiFfY&<~Och&uBrpdINIYh+v4Iu+B2vTf=zWbGyNjxG7_Gyi|zwTy4S8pra}?v6E^ zW(MI^%lOGfY{{jKxUqowS2O|p#En+A^$Fm_IPid+p9zkcal2|1t9p8Kjdfo_?38KX zKFf_+&~ew|4~?uD@5R<&%7L7!PQ3(lCBZyB+(&OF_q+16$TKC%c8%1Nl!RpD{ng2O z3<$(Kj0n9w?ip^mJ?XFexkCepOdi421UU++WZ15>QmB@)KHkuL3E)TQM=@{aKrEIx zp;;^MK5y@CKly~*8RIyw`;T038P#b>BzypjyNGWmxQZYA{zb(^hdk3I38MT4$gE$`tC zP-F)_yzxxx|Jw^N{`@}!9(l|4fZXTpatN+6=2rQ%kJ7F?uyLy_2=h{5hD-WbgXg9Z zTIviX7#NmroBdDEo#*P^=g>fH;t;#tTwBT#{Lw>_IB8N?-1lH0!?jRKtih^>(0R6Y z|050&T_)RVfoRAJ6xFs;%qX5JNvq#U?1u^jMME)iECzaiob60xNI1__6QW-<@zIA|9xZnU9yGjP6j==N zd`9{Dzfzp+cY}W0knVor%L;s4g{?w4uh!SuQ_10K3Am)&v47H{it3J0+DT%W%l+fp zDe`OGh3XkR(%w7cjpzYN?tP=4k>L?$Ro-CE*DEvKw;jq%b8t@zzBwO31N?oH&wjw0 z6>Bgn>`FCe)X3AYs%wSBSULVbOp13$K1f0h|1~Du!&?&y-9Ra_A1@c)Sg1@>~_S3NbBETldC9WwSwv5<~w7LC0`v}vg&IftI|cg zC$E0F`O3fTv0;;Qe4UB?*}7ftDU(#8n=w|^i)fp$#CO+ebvdCSfBj+stRD0gTx=&> zvYhxl_6{K$uY?+&osql?1Y!ftl6cMTgU}C$HUTKqdA{*1h081y_$!mBJCyn`cr|qt2HYm(ngqUI|N!&><~>Oyz?GSt7wczU*K6}op36TN#int--?Gbp%PuX zcB18d3i^yypv#|*9!(zedmBT86AL^IX;(;bkPPHE=o$Ypy%nEhp{Drkvo{k+sF5$a zXqqT8A^C;||6>$;ZVK|<+leq_qxSq)1w`uGi5y+;FUZ>F`|I7sM>D5eMWL&GgCqL@ zrD)8Rk43k|5_uioq37d<+TTB(UOwMjj)Pt(c8dJC^S)_N-eXvBX? zFV(D^CGJgkRJb7*K^R!{kPPJ4Xdchp1PpMyqd?1StL+l~A5w2HynD2+PC66x_Lpkjs8#gyM zhk6t5CAm2DPG?=)f-AgtCttUBbnxEXTyExsiU$0%n;ej1$P4p8y&77ofbDUT$R{(F zV7^l+`6sufZ>bnbVnt7D#NkiY(c9bGZb4$PS`gthI!*n4V2%8>&)%gBL@My%?qb(0 z_-ukvG4_Q)k%rZq$i#TW`hOQ*thDgC&X8O|Sb93y z9pBjQu)j_co0!`Y>IWKvZ&_-rerV=wpk=Ijv0bO!_i!N%ZJqfS^r8MO%@`o;J<}>% zbzR#s7I$qN9nhM@?~b%znihRh;<^vE?1$C7f9{PljCfqXN?c9%P3cJ*o#8|#29vT0 z+9Y_zD{BiRtFD)5Ogw1hNZp++cSKN{@zEs~a1~01CD@^DbVZap7y%#X^vZBL+!K%B zs7!KvJHd@2A=%~y|A$QfiR^%_YPcg+-JXtnf={yH%}e8WePcg&D#}`~9j?)^<))0c zcX{a-aB~~koZ;MZ$fPimYvSKgYPqI4u zbkmr9d!rHznVK>;B{Z#&N^J!l9<7EIT`Ts+>NVUkcsnmxz+}4K^;Mxfe@rBG?Oy)U zoh7%zB$M%{KT1J{9E@XZM~+M@2j4&For1pAb9 zbf!CKZ;D$)D{?E^6@8_Huf0mQe056nD^$>)e1Q(Z!(l%oRS!shK!Hj!m+~uD+C|M4_Wy>ZIsLc0e)OO{eljN=<(FyiS=gdPQj$`-fbo ziaqiarI5sXyv%uTlclg}jE`6U7UMz@g+q_rT~g&#HsZR%(6f?q0fwmAJP;s+e;c2& z7I&Nca;wb`&Vl!qp)xdz&QDOHxdq}-UUabyzl}C1>^lv;T@1dMe_}1X!FeM z`70+;Nig`k%JE9qqIk${{nX@=&i6vNVG4dxA0|fxZ(deJoWbg{0i^RV_Voe0zt<0- zM)$g5royG?i__oo4KgfbMwhVQdswielbWWW16>rpC%b`ZtM zV!g8Vm98kkiD(`MhTJB&n(qRr)u(oZlqrn-JDyZEYMk&1j?0^REUb`?{La3YpLoN{ zyx<3J@?~TB6;H@WKHb1Dlc@AcZ7SBVj17Il@L2|4n@i>TS_T+Npy_>%jaQB!{_B0E zDr@O6)msB7PT}80@-fPFpG|i`wYt#=sI#(@FC+L(oaFi6>r}IlD+L%@YqGW{il-7^ z`yOQOI6Ieu6W2_Wuux{1dFfL2A8@&|pZ<8 zxO}p#N_wdsu{)gB;GU-tV~H+pW_~%4YCRLNR5NR5Dmq=6p64dyM{@rZjl_+Ga} z|2PGKKo~u4Bdo8le>v;plo7Knm{_M|E>M{N@G_ilcGiPSEQ)Y~2^I8S@W1aNb1R7W z4TN8%DSHcmS;Ob6wZfB1m7DFN>$BZqDybkpvCz;^@ps$3s%@?R-nDz;P5SAd2u~NC z9!GnIFceygfwiAqnm`Xhzio}O-s?Z@{GtShSGNnj&G?4IAEjEvO%ykn(gB__fwgnr z%^T_*qLFNcBMx0dMbpKd*SGu)?%L?rRj%T+bCF|J#$RGwk`CJbwRXFg!{Ym`!@G=d zWSgcS3;vxsa$JGxX;AbL(Ob|~+zH07H4&Muml67NvT)|coovM+-}`n1hc4NTpe=6fMUtrhyF#UMwlkY&k@2!9uTxls zxKijzDLAT5OV=CWGR1hEsbFt(zwSWVfM-Eoo>0XsL}X`rJh@Rvp(Nh3xR|rWme=7p z{?lR=ojhptQcYf&k2)vT)6~g}-g_mf~r>y-bG6v(byfs_ubNTc-49lE#NeI+^cboqejzN13s`#__yy+6XQ7 zWEegBZ%o(ziZ!Xso!Z^Z{pmvP^r5Wt^J*849%0voW;b+{V1MZ~LI#Yk%5qZ>EsYLD z=y>h&lB8|t&xXVneXhV}2ZQS@#Cz_u7Q8(;!7IGrmaq$cNv)aUo#IJ9Yof?R*2^Q4 zzsu#ds}V87Zb4m7o)svb(Y5ti7({wJ<9i`ZsFc~+C(4n0`b988Eh(K{j<29R(D85% zD%X{8^V7J&19IUqZ-j&ML+Tsl^XEp~VDQQ_qW(&KiSYiSS~o^cOsM3cE-7~yN7VwI zpU98Fh}V@SqxA;Bf{YPi+_qYCw zCQUwfq|)N|v`h8_j;efT2DZ7K;%`Dt-#p$KnZzInv!^MD^H+^xab*BY`Jy$y(Rab0 zZT_5~%69NNcmTnlMfgIrd{k}}?Njk4r&=FWQ(eCE*GNf_+NJ7jbgW1*YrF*F^U)7Q zvagDD2$sImPgK^%_oG>-i^hw@vHhm@=i9Y(9o}$Bw&*raGvLKH;)&{E{=i3%Eh%{x zVL7OHpkTTF<`X459VVrcB!$0t4SxIu>SZQF6^J)o({LU-CnvI?T;svxlIIB;|vw=M1Tb- zsMfh!qM;M+sCo0kT(5oSUINXXZmmAN0qHIkGtNKKkohW@t23vlf}!Ji>H1O^JM|r#C(b0iKvf=ouS#WU ze2NnQxJL+Ft17J-&=yKt@6Naj&~6cwYzm1uRu94}^|?|?mUb#ty%|)X^d3#$OSa*d zj#AB$oqck+yyD)XgbBTO;%aT@wWZ9=?^ISh_LlMJBy zQxJ@3c*lG`^PoW^)%Nl3=``UST;N^Aj!yO;mkNEZD*`>vOcyMTFG@NhyA^8~%o^#- z{XWshqM!e$=lxrlbC3Xd!S0cA-VB@UL~1|{(7v*DV(0G&QceQx*P0M!QPE2>5HR$0$3d8$XOjuZ9wFqRMQCPnIhZ)qX*Qd+W z*5Tw!erWntK-=q60P5AZXhuE8!8+lKUFpn?_!%PGju*VFh(us(cF_U>Z z$&+8l351_W6w{tH*VWkIq=Elq<|E$1A@}qNjU>vWZr2RH{%3IUo3kt_=k{dn(~k>@ zeP7nK0jHSJY||vC#~t|Dd)7_HG5lCPy58wf(XJ?%D77SyO3>9d8?a{+n6)E+6$BDYX5U*}{3d zrobDy5$Q7cxUJX7onxcJg0LKi{ZL{7YpqkHT|nj}n>K7QjWJdeFmiy4)F5qC4>!agFzLN15S24)F~QR$v9#BkRt^s`5s!uH)&i+lR{m=5IF_|$5U=%T)^houJ@@$SNYy3%GdH#hgGv{M=10crfP zJuNv&sG8@0>Dh_a75W~6r9(kUJ=H>OF!-gpcxv`w>Cd&FJEluE=9%!INQ0T_{h>g8 z9v-Ocyk^Rm6O1ACY*+Y;7W?Q!nQu^)m4M< zCd{;>qr5_lqx#yZ2C{nKM(8Z59Y5UBtC@ z`E*#?b!l@m_293|eB+%^=>2Ut^5AehBb6k6c}efZ_26fYyz=f2%ZmID#okg57T11U z|8#L?g}fl`T~3rF_JC^biT5o9k2eXhn3$MEvZR8q6J1-cY}t*KgtIW_tg!jxK1gIQ zTD{iJL#O1Al)R=Ar4}9G_tY_xK6_MX0~?m3+5ATG8#gbbcA)SJ7ohru%&#I;267}c zz$mrLvQIMq;f#ks_v|$Z2Uar}+ymQ2HV(Ip8n?$qsS2f#kC&PRuIx=$6?5yC=i2op zu)M#OTDuUy_2jRhWebxMhfw+(6zUO^a2VISr441h)*RjwW7EjQC670U*3g#_fqVK55%7o>aH{`xHxb62KTZYl!>#{r+nC1~+1+RxmA$&7Fqk7Uo$^DRgLN_I7 zsAerM>A*k)JPFel1j=N9stSCeKyha2gK;`4SP{ud;ZE}1e>Bw84Gvc)>*|S? z)UC#MELof08WN^wmx4()#-?Su4#zyK_5WrD|1@Lk&J&I6#z;9^$^hlex85va@Tk|# z+uO9$?Kia*>)KdE0m%1{I1KhR!K`d<3PP@G)06AhB#Z;xwmHpoY zY)l1(x%Aw;@P}0M3y=Vv9i|rsvVDDhLf%@S90C;)jcdXPE!v65{_vzuPY2Mz8!!p%6Q)~I+SlUpi^4|xnMd_eR zHxplL5FS`9m#a0EI@&>IL`dTX|1WhTSjc+6z2j*;NDayBWM<>ujp#|-|*wZFH z98doN4loxw##b(<)Mo@5F9v0}_>`fG-aw5->=g49Lvdg~zaZc{GBx;lKgXjicnoEV z4T}5hi8`)!$Fv9pW^<94g%ko+gx5$D-I)sS6&!8}_b`3F?{)Uv7Hb7mqa)i{A&yS+ zFbs!|J$oVeu=VC(P&JjuIY|y{h3kqczJl@V5vY*KO>ttYuFAIsp@NwH>LSx%9Wj|< zL;X-UDj-4;#d5f`GoYxfhJO-{3Poitz<&_Om&*JcTRwL;uS13`zi=e-!sDCy4MX_KVO-A4@BpAbRMRP?!@nBg*J%ZWhOA?^HDLE z>nLs=k7GwE{r9;1__(;~@IK%F;r?#(weP|0TzAa#2-~wO!%`=RGOFjfXxgF??#inhs%YFz<$ zi7T3r{1->n$PLJk`Raeh^LdJKkK~U8enlX9f7Q)5T6J-Ac7N0Dh;SHEQ?SXEd71il zi83imsdD=1x*}~#&1F0~%^jmr!M|L)KqW1}Gg~t7)$Zgk$3i4dr3Za~a#ZhDY_6+? zL+2-?0)1cFjT#Nq)(mK#G;Bb6kVIMjZHZHqngoB64g$3h=^>mISR zw1j`tI{lAe-^^~|s5EhWJeAHU#Tb(<_^26qzoxV z)moxv>vXYR*-}zZ0KwkbAycB|LO+ilRh4fBP?(iX7u#SN=?oSwO2$XVABu@5l!~jfO5ucj1jZj6&Fy7)lY^ z)L^8~>J4dMFRJZ}P3>uJi1w(pi^lLbMdNl}EYNwjcK&iXfmMMOx~`5mvYA$5yZ zGA0pqiy=4Tz41)+(=CA)83&DJT`TqwOJEqSjQ`hVWFBjPk&Xw1)tKOYlc;@D3=iG3 zCwc2N{){(lTmCWAAHS5MCQ^P5o&SLh=7(xzME3R^#IL_P2W4So!YV^#o-K*_&M&1q zmKKc`s%OM*Qxm}mX~oHZ8B}eIfl0SY1C6*$&7Z!d`};(Ede&0=yZ9~dgw~jD9uwcR zl~vfsw^xRjZ4O7%L~jr9sm}2`tGz7sxG16`+*MsEUE@avA_Q%D%Bc~ls-xpp5hpBH9U<+ zV50)m-n|1&Y;l{WByp(C9Be856{dPu7hW8seqKtC*gT;vADwM<&wcftXPI$@j7QT%ih^f1|rj%CH%9@nKs+%dtIkq{mP zi2>eyv9p$7RM*{F;A#9&Lk+)9C6Ps8d=CZ@a%b7vsvB?$^-g`hX2^wh*%8f;vDoLb zBZf%Ou%D5RtulALF2oQJ{LRAGP6z)Kt3ZtSzja&d*QrC%e-)xBR9`h%4n}z13!|vb zY26}_bZYKF9DkId!#0{lT?xJ<)H(!1u3h6X_TOk)M*9;4)B_B-DG8KLxDZsKNA|ch z_O-f$y{~u%qREYaiF5TlS2E~Z+r(Q-Ts^ zt%rqe{-5;d0eBVpoECKPx4AJ$jm_N1`)|Tw`G(w@WNs?*KHe#ZxA3hN(NZWP+`AZ- zhxnk7rA@(Asei%*&b#^0ih29wGjhGa^$M&_%>GqN{1=>DPrXHPblu8~3pex?v$LQ_ zHoh(7-G@@G7^&pnlK%q@2u(T-FpvLG*nh*z|3o>Ci z>PE0)HT-apDLF1T#?wD#9Hk!1@)dXsf`b%_cV;!zV@qYUpjiof*&@iD;%QRXiZu_2 zrBr7%i=U$K%(+w_Cgq@#rRTta5);q9ZkChnr)PZMq&g{81Q;g$^h?Q0{Z5ySHwkkI z+yG-_8=61Z)Hs*)a(N1cZs-x+-X>6CMR7kvt_FHPqaS*ucd ziSr_yQE%#XVQHH#$q7;eO@id!_KdwSpH`lkog+Qy765L<&!*s~3*FY&fX>?f7n2-KhQ& z1aJ{%T)gBw$2uZE!ra1xOE_n4 zG;lr@xA!&=H2(!By65zkrZ6?cCJZLEG#Q-`>IXe9FuJZ_CkQ6H^i)y!hpBdD)JaT) zVXodGOwa9lLuD?!B$rEHMBRNSQPQ6fe$F_k-$d@F+xgXV_l0)qr1s|MNwN8fTFWj) zLcBN3zyFm;m=|=AELU3Yf(;ydln#DG=;FeZ9C!Q^LHpk-k7>S%A zZI04tE9wJ@yDg_pE$CG&oN2}{&6eBa#KKldZVKxjQ!UKJQ8Dw#sl{psd4l^R70^@d z1C7eh3%g-jIdpdQv@`o70`q2^Wb(GoDl7R58I=%jU~;^WR(v7du~n2X1h_Zi!03zY zG0kV(o*%HH-B{~zdX*YM9Ez<^Eh=f*>+b#ku=n0UO+N42Xc7>VYD5I75}Hbv-c@R- z0@6DONbkKRA3tD}9(n+=1dxvOPDF}y4ZR~(dM}|QZ}@(H=bbq-@0>aRod3=rJM-k( zd+*)7_ugx-Yv-8>O^>5~8LMeoNx&=mkD;c&X)|_uQ4Itp@8t=NTL?PZO)VXT5<#wT z0SJCfH8T%3#Mzz`?!>Xa%yF9+DD)$&SdHb$r#TVRHO=slBmex-_!7;=?8etm_T=_R zEviVv@ID=CYBKv3gT$^~1dU~_fpTnM`tHQUYB4W?J(7gtC!6X8B~%6KOg`uPc<1&rK!#Zj)LwVJ?<#RxTda_iWEmD(-u=gXJLJX ziLkqO62c*iac12TO^ML~oX3YI4E17mKY_#vZfKpaWbd`r7(BVN`CU;0PJU59NsuTy zN}+`r7tH2sYMJHyDi8NA6sj;)o|#i^$bl&;|C{`oY|WcEbBNu0G&@PU=I0cc)c)7P zH_&(8vY6lg@tsUhJ8YL=YH&4QgT7Z%M>p$nenCz&6WfM14PoZ@Odig+X4VP&n`3{8 z^e3kHh0^C=irW2T*rwW!#26vZYxK=!7){t2X9wNQS?gDSY`B2<-vPsPopazZKir>R@XgzwegXtZ3?NzBn?YUK5j zckYFyLZZW7tR>#lm;zW8^_&6naYqW=G`)_F>5N~F;uwm#=);A((wrGz2)rBYJV$R9G z+nr**HrbA<*j%kp=!Vk!QFrViIM@~=c+{QvGn`6t*sFCr-u>8QO%|ttYJzs_{H06L z4v@v%oHl}a(+|b8qF=F9EW(L}S9eM3$<9u5A4vEt{tjc3!6jBxcyaGZc|B8ZHmr@H z^E&uVg*F&_^GJao+zFvUM_1gtNYa_sPkJD1)OS&ox=`)bUiQ-Lj5uT$si*aVX_t{x}_JfoT* zF_D7A^YK;PlES?fYuNBJ*2jJ`v$}lbb?fMop5+wi#q1TNXoK$l9L36#v-PWgIlz8G!X4>D-_=%{jbT}<3qiz_pwnef0kIG@<)>P zQ`L)}z#pG3#8Vx2vUAi6!sznlD6~Lhv5W`LTkM~>(n7CbbZ}1d4GR=qqAxs|b8*<58o(F8*EMWsHJ|>0|z07Hy)vBqyWw>eLWQ=u=`GNicyMikO?_0w~ z;lFF}{yBp4InA^k3TVxf2mUdUjP*?Cb7^W`+3w5BTf3O|m`7kGosvK;N5{DAFh6n$ zvH$=Z0wK$nGRZZ6byJFVLJ;yeKHe!ujj0jhb+>|dSO$it@pJ5WM>{H1$)(HNDpF{= z8j7(99(BSD{Mz0?(Bbv#0IupxArxM6dytCg^4m|URDV_Us5OKg_qFjI;r^1ds1_Zc zecY0s4Z8|lBgUSDMM>l4;YwxfKORmh*?V=3WaA)b;;B>Cki5|tWk~oLu2d#OQ^~!4 zfpG=zYxPZ!Krm%s5w|fFg+sJ~QPd+{l36%4XSAHvZbpCq#|C7=TXkc#%hHN1Sxg}& z0kVi|Kgff9!hn{|k`Q|<8LV76mzD^7nD)Wvum-nNU(Wd5BY3nU{rX6%%>gY`NlggJ zpbOdomXYm5C7*-p0E*=)u;mVWQm?1V%`dZlP77IkA2}^-VpPCNG=wgi$ zv2L}HbP!C&HA}(53@+C|(K6n0V+U{NK)q{I+nNJ7ECriXi5b7=`d6BNapH87VYVOo zhTgf)g1J(BINCRYy`ILZh1EkYwUQKVdWRO^{Pzz!|7RU6RbDqfQyiHORp^Dvpu`-% ze_hP0MXr*T#Uo}Z`Xb2W=)no2a=&Dd)r`VU=06^2P6-A!eCl^h@99f_et{K_=d zyQWHDdPo7+1-j;Ff*7if3CRSzA*OP$Ug_(=Z;L3*cl=3kbWpYD$$RFT9u;ts{r* zNl(6$kd+;jVan+;g`#~OoG1cyO)k3?$r40v!V7Wili0nCxeCDwos9R6T~V!?kwqxP zA8E_#S{)nzGQAzxAOA*g%OJb(Mfq^sj5EkD_G+h& zcameAG@@0tewoWkSXK1uKM`m>i8{bw0^;{^OocaE2)iTsBh47Ys|GiEGk{w3nGAWj zyObm=I1k#iATt*Nd;?Yhg+Fc;S|>&e57lt)ubKIuq(skwwm_E>c0Y}3CJHi5)%^07 z?Rl{e^zC6H;C=5;GgD}IS|driO2=#ti<;rmyAivYq@&HigUZ`D)%9Ac%ks#gB=(zb z!zt-~W6w2nGz+*N443_r6ixGhn}d0^jW47z`l%bda<^@MK6&eZ4Fo@u36GQ3)2 z<4Wn^+}li3r}Za2YJ3jyoYe1Y#Mh12O)(XSpgg)IDcZAe<(YAf%v_*7r(M2GYyNLp zU304Z>O>o@?K-{hOLPlwh8A+ZRs8h;4=IRFkVUTII$Z>O24 z*uNqs`@7&Kt+I-FQ5a!Rs%+qwCj9Epsb_nxM?AuQ>V02-$%n>}gKwh06d`4aVv=4G zdsG$AlrJli?F%zt)hR(}c$o>x8LF}`k$68+fFT?+((yd1%>aL2WO?bJJ+IH1bCDs+ zLFehl1Mak0BDCc>qNrh=eebVmuk}U{)uIqssa1U_R{@x$Gs&1QN1C7mcPfiNJL?t? zlXi4u#f~N?h{LNm?W!*8nZ3xol)R-*bYh(vNtHK(x%z7!vqbQT@-S-tK9J&j)~I}z zOGGV^HN|PsU&eVIUn&M~sgtO``A2&a@Hr*1gT4ys8>V>_5@!gy7 z+1pj)w3_-#^Cv5_#+xwO9%?m%Dxo%gCVnO-$zlR}CT2~*E%Pk*svqe3L0XV62&^iW0j!C0MSKq#4 zUgmR=ART)(b$bs0JdL1|S9~j-9zCS+Z#YBwICra~dg7du27QA_TnseGw}O~bTe zXgL=TEj(Bk%oZ?V$6C7BJdV)1Qwn;hTKi1*cbagUhVjg@cU(U1U7raD=~0GCOfn1= zG_QYTCzg=+C+ir4$jTYKpEn_2iB^Sd91s(I$dW`VPAsA4>4M(^Ie1^^Q-2|v2UYZT zMDTbY#;P0j+gRzck;pyzr}(tb1AhvA8q&CJuyFjgSN0PsQ@nCg0{3&s`Zl8)Q*`(= zBB;vkiWPIp`MHSc{lQ?KyX6i0F)%V7xGErCP~%4*n`!!G!)O<<@d% zdx>l$;RTYf-S<%=DF$A_^%_*anBWVlh2zysK?gaehj-ipUOd`==nb-S93aX}R6xWA z+822b5J71{5B3C@1BX;PggEU;y?C6-CO*&CNx)1vfcwI$V;snH;P0ta&0x#rN=HZP zz8>;e(!sRqdh{-c7L=~m5r9l!JkZXK;IA;B1xbjC zy82Xw9{_KI1A&35Y?|j36@JQYDeRu4ROEs@aTog@mLPFa(M?cx*vndKXGa47WDyJ% zQtoK*kL~I2FVXbMP3YYruN9C_tbQ!~<6n12N5`>^`<$prHmNJ<8R*INtvuh+^+6>NNGH+Y|U zAqG+3sK5B>)i>0Q*TfOBjuBa9MH+fQgO*D`x9{5y*$fE_w{t!E*cJSd=+ZwH@_A0A z|EYf90^}pZo{){KO*tZ{;YB|4`oT0HARciG83Hs`?x5YcT}w1K{KRn)rrhyr0RW{0 z7L)vdEFMYXX@k+~13#aL@sHBvq%NUE%Y~5f6$-d6bF4an)3k zXsWguMr0s&hv>n&ch}%a)q)j4$}5$t%JcIF-?pJ1uB2_OJWc} z>!q!mKQxqNjYJVC#w+{?Vl^;yk>MxakE)3sC)z!B%||7CW`?`M>tHpoA(#N?VjBP% zqK=Yv~Sf#J`^h`B&CQ0~}HP1BU2nE+0p#Q1hh zkyh^z#xD1Bi7Udb?OW)srp|PepJeN1Hbp-POP1$#W|CVHV{pS27#WYK<7Oqxrj}De z#SRiDz41|VJPc4y(ga!-QKSK;@lvZ3?H&DpY81xJGl?GPQg}sKDhT~&I+bwd8FJ=-cG1OYFgpjQmkh>%FW4rS}8|lg_)~)X5GXMJ7(yQ zTmHfg-apL_isg*^x6z%5U?%s^oJ#Glw@9z!CQlUN?Dhn6&;!UEe_0=A{z)w29d17# zS(`XgOhbg@O#k~;{s&3!G}%TLiLzflkg{Yu{bZ#sAv+>hg`&Q!>Rp?FtK6$Jzu&d_ zFCcn=%HAU+x!lR+7{G1)oAaa*Ad43XHUs_rs2o=X8?JSYj85)whM?Q^auAOcF$QO3 zqb|itC~#@>b^$RI>B7_F#N|$?!5YKzIPJb%265U*d5Kg6DmR;_KPC3r2;gN;btj2^D33s>akbnA zuZ@ZDT<5^|aD~TB>=U&|Pq9Uq?qkYs;=bSX8c@3d-mgTTa?g^6-8>?R&|9k@u5cqM zFS`H&Axg}{v{=OWCTjw*d*eULU+9DV40zeDm*r=;!ZmW_XNO(mp|M%0*j_0PbAXRKdYfG5*=;a`-%-PW@L;zE<~wee9217YVHl37ijw)W2okOb z%V(Q?`{U_L zZoF9AxSeo~YyU)-;1WkD&)6y)Cl7Wo?=XVLh(6-99Id{Lg_Y3Euz~IS(%5gzFoFq> z1z%R0416Z~s-kiIiK1Pg`{=p;?86iuWJ6=qR$18uR3x`b6Jz%>RhF|VzFwx1aHc0X zq9o!vPV@uq(Nys5F?zWy!=YUMB=Mx62@wd-@+yiC@Sih+x`^X?-6s^Sdqrt0LY2c_ z8ogrNd+g<;to3sUr;lZ+i5nq~YwC+_GHr%!Katx-s&%|YO5894M&IkxG((Jt+5g9l zo@};}4_k$DD?xODfxb7JbOutGh1TY_gsiJWNnGjC#A(-*eR5Ukbz=e>99$83@4LmD zuE?<)_sCU&btLRa7u67ulg5-hglAmJ@fx&-z3BQ3m9XKMw5Y*?P!dHBf321jzsw!O zr~^e(1q32=16)q@sy$3R$y6jk;~I_Z6R~3JGihj4{4`{7qw;_fG&Cl04bsKvN3IG0 zuF{(&RC4U#^5t7=9%N$=CCb%N%t10j?AE!juj7VxPEPO%)=Ff6EXG%^C=oS{cW^kQ z%8|=C2@zC2=be%1uQK3QqiKE*fVZ+pya*|I#uQZItd1(5EXO8QSD?c;S-Z8QG_dev zn)d#wf=NY1r}VQX{eyi*;hXwcj&*T;_QXhlb-I`t))HA;=#*%Pdiwt2DYRfzHshq1 zq{Z?EzreaN5>@7@r_2I8N;&G2`($f?tafLku74zrKX<{NWt|@;PjcZMWed&jg6lxZ zTrD@Uk)E0)B!WKhBYWhBT7A++ud@Xltq8n zM5cXz+_6(ml_=775Low+8>__CP~d)A-G6dG^>BvT)v# z3;Z^QPccs%R@%tJYUawhyDLTage$ylC-sTPN5TfHHT^yzTI`Oy_aqX-hQS`km&Z*= zlI%P1R4_T1x#Re%H~W$oxM9kAmNVOyrIJPem*`(vIIl|aXqCqAR~zU9pI%bx_rYL-aT z%pJ@+rWCyYQeeqd({*3+5NGgd=G!vQ)@zthVy%KA^VMbf>S5c9+CPH?n#jmeS)~m$ zzpLRwb)~~RuO)Dp_UvAvw9R4V6UbGg{4K^?M`Z?EyU00~`5UW+FY-gf^< z;ak4^bwIv*Y^S~55i}oZ3x_&59ER@G^y}?T`0{4~0+Xle*4%2BtP$&eHeQpJ(Te!e z&iUsJt!Q>S|AYqASr+cnId4l4qm7yIk8cgOJgn9(`^ubvWJ_hqErT9VBF)0yZtG z@oo2qaw#0{_2rgJlFYxxEGf>eInjL}2t?o+dc_ZL^JTl`jqFD<>=o94>3eKKw^-74 z*-7PS_>Z4^+@b*`oY}i*(C6oLlLV|H_IO^gvB+dh?$pb zk-?WyE85=px{HhA58uZw$c~(Cai7pGXe)<4&th9Q$rrCV`}$hRFXiT~Z=X@_4Y!{k z!hpvLWl=#9=C+eNxH#;u{fo14@tryJGte&QF>B+!2?mq0l9|hfevsB?o4-%X((d!M zq4zk-T^}19#U}H~+1gncetcKFIvhVP`%|?kDP&6l`oXWfB8<&OnR?0Oc74H-J*Ve9D;IAq6@so3eizPs>rM&^_=)Ypejj>SjeRU-ap|g3$3ZZ;E~tAjk)L0 zXH*urW%=h4c#kY%bSmAOlbyg4GekJ=oIk-??>=DOR%M#E?W5?^1=0+hUL>g!vOZ~) zC)=CCU&e_;2sx5MZSfTDt{A<$WyNKuaUC@d|`Z=19#o!ZD`IpSB{&1HE;YK%XWA?M-P)mZ?$DLh-J4V^+lD z_lq&Z{U)Ns-KuEzTBB%5WIJu1D^KUEHa%f0~YD zn4pj(!P#kQMo#C$gFh{ti%QtMFn~JKg!;bmub16zU+*Wh4H3GeBP$EL+lpfke`n66 zirozQ*ROC4h^F!hU3i0#YACrRbx~B)@kWp7o3CbrMT)w-{Zfc0+xz|GuD*uUkz2dE z!B@NLIpvWr-b%rbZh$Vi6Y@i2irQ~k{$Jk$pamcaJrHN=g_f{L2YsjZ==W{^O~^I3TnBG6B^L1Xxh2xIK{*L zav^rYIV$9`sbfa4%IrhmLd!$uD_!h&v}@VhF{uxuaCQ)Zle+4{N8nVkiX}4K@Vzy* z6T=4|?O30eJ{)>>plzeCESHonZg8Ee%S+bQc}u&?Unr0s5N(T7sO_W- zx+M7Ub^H3_fJRFGMg)ZkFQk>9e^;C7wPzpV?4#9wP3M2uF_9O{v+5KdK91sHfGWP4 zLIml^l}ri%<*ZJ=kG>Hb{Ba}h?7Lyte{J()=X=!r2gzts{c6ym>b~E@cp+UQ(t=fk zdkW54K%0#Y+cr+aB`fRlk5k|Ocas6Z?L{ZOOEvBu}vxPlpg^o>@`MiT_h^@4BLx4_ch)m}JFrcDtSj!qyjF{NX)f zZIkI^roT+Wp{=8TvJi7KtLPE7(*BYeDa{l5{5l6hGAGndn!4fyfY7 z_|L%T!GQqgWS;Ev7W8r7SV9cq^dOu5Es%HRcXS|$U~gwDX&L!Rx#hCsm|hu9xT-M* zaSOA8{J^2@*%}^vAKFAxuGWzp{Cgap{*bDIbVejbNxVvDfvA<3dgfs&eGIGX?QL{m zMSgxf6=M<|gQzRSBS568F{%1Jx{8bX=b;`8>5Q3CKCKs-*XzmQw5YQt_pWi>X8YcDsEwMipYy;o(A3k!%MHC#=< zy!}9c%fI+V1TXZEAuU`R3y~i5gcd!%m0I11W~AE+bEC*M z4w|8@uYTT;2Rl5x5{1$CjuBWUTK3M&F?e@Y25dU6D5^UU@Ros%ox;uRPjCT{Z}s9! z-xw>^mR@J8CoqjqPJ!mktThr`5yU*ie#5WtlmI#sEMW$IEoBTl9FUw3bH$qvpW+^l z8fl@#-Vu`{Z8l)K)UM(BX|ufT1Dkw)%QC&Oh4;pl$7~~5@AzYpP}+`iM?oi3%*;&X z{R)0z5h1*|7aZLN`T<#tIoJm1f)oLQ#dZWCh8;z!%hJ8GTQ>F!@ENWu?n2*99*nkt z+pg-u`DLBB0c3HseMymI6B@#1!Vhu$E0>j(R|_&CHxev4C#uhfauEzBcY=!J7>Qe^ zM?CyM2>Ejv(V(BSb}ApJ>moefeAQgJ!9huYCDr+H;M#3m2}-_4D;RVx4O!iKr*}!dJu@ zVr2Kz$e&8`r^++ra%!8_?K#h}|6tU>-nzE35H4eEO-shv{WLMNrqv zLO%2)tPOBT^$?H5IPvfSHNBw^^3um62Emv6-3`k~O@K+{)$#QUSNe8wj5Kl%ke`UU z-%88R?d-l_zp#V|@->PisCK+X&L#Vi4ZHBflSYFm)f!T z^RCWB*BxZ*Xh6?YQnks4%(^-6eh%k!rd{7CY)Pl(JM`|Fh^b?M?1izOqX9H#?c%~n zFG2@;0hKYpVgkCVUQ!M-q@+*F5?Ck3F0}R8p%)tG4j-Bdd1RIjJ4*EYdzS6{GenxN zPNuI*?0wPvw5GXAy4r8T6-K;n1)>5s!&>H^0a~C{6yy4m*uN!~1NkpA5(-EHNt0!>Lx>fZa9ue6O`M(zUelfzk zhB&p3iEsA7i|=?dq`V>F=SQ}sHDilJXnBQ2L*)pUhg+=|JA7jD9CC}m=Pb>w5n z9FYpEp!Ngg_Dqyh9NV`^+{omz6lXM6(s{yf%ijj)zWg@dsb1ADNXAbocNd(yyfP1n zux1Gt8~R?!Rw1@mhY0%S7D@?X2IL}FVTC8hL*#CxVW3NTlgALNlA1N zv0SAT{N$G+y8XtF#~CIP{nq{WajpQ*6~;DFwnE3hA<(|H@oF+>iFq}RZb`xhi!KTn zq_lAQ)Y_&DaaM;Og{MOaTMaiNvkJi|{zV5Ahr=v?{1> zXFFv%y?fncXtN4M)sFh+Flv4Gp>en|=VGDDiMvs0emRcOZ~S9nou%q_yJ4MWXS}S= zg>B_hysXctyYaWaua^0IlwR$(c)e!*$M^q!Nq7==<`r_fGtji#+NUGC-Enm~KXm;M zEP_LHUkvR5UNVmgW%aRO05XkKaL~aB7?GBK%BlTV;=UA@t^)ab%&st&ur`h?avq$d zlFA)95>*s7!>XdKU zd2DA+&q#KO@S~wlulAn%05gaAt84q#shdfb%kr?lApjUwa8X4(&O-WhYPwilgHPxO zYuixXX{Aib`4CaEEjgRU${|HUST+&54f&5ww^_r*)so! zzUTr-C^lDb2o9X80cR;UYe{uVAYE0k70LwThpg86$9U>I`?Pd-8kWRe!ab9(6+6;4 zP3=pRn){&f)XqS@3Nz+!?xa+FayzsZnY*4Z-g7EiG1a%VOPr8PlrKtI7=;L6Slv@S z9b`{a<*k^{v?nXSz{L-)e&cpCF~)s^Z98b|zYNKaW(o{J)j>2b!9$X;Et?h-%HjjyDbR;)!WnTM33QEk|z;X~XQ9i!=|%Q6g2R5vG_o+2RuG*)ES zMyr3;3^~r7MDLw3+2ARL_`(JK$yHNJo6;^@j|S=n>&3&X`Vj7FfV~qwPbDG7ie=dS zUMdqGz*{%3n^gaDr|Dib@WkbI6y!$8)by*dhyQE#VHK~6Er%IR7sJQx&U=Oxkkv1g z!xFO;Yq`SD`g6w>0b7vuI}808M%3~(x40lY>Zqo;tF&f|dV+9;jk5CGAZ5dS0G52m z!(pf;?d94(9D(s|XJv>^IY_6u@jsmbn5SOLFauZc)_N+B6Cn zBFGfmj$G}D@p#NyMS*7qv)^S?e6As-iGO|`H5K#n(AVrwc1Ze>X0?D2z1;;DyRrJ( zd^&QFKP4QPKla{D$HmAb{pIG1)ETM+i<*__Y@HrCM>eD?$;0(4|aZ9~cq{et-04@%zk39ev@Ld$3smeFbgdy-v6M z|M1GrXIhz0qH?W{45F!-$Ltz@&?v+z(aNX%sFTk2nALY3CjRKqQ)BHs+h4jb<@JD4 zp!#-hBtAH=;B?z2hz>eW%?B_Bg{pKIB0ZuDMF;RESYtTf$bmylvP{LUkon{wsf~hu zTP#vV-Mu-N#Cjcr??O(cn?Hf-?>_85H}|3~e6+mG!ifQzrG5mKi8)%CWFv5nzVJ^g8q7rmnd^H(DU)2X zUrE1*1+D>M|xQ~tLzZG6@*3UoC7{i()Q(*BdnJ;|o-HKS7avnA>CzhC$igb0wi)Dg!Sy)59GS_gB3e1s0S zJOHxDjux6Xi`(_4^Lp(uE#SW~LtZaH(BI^6Zh4NAQ1tVO8+zNYWX~;xya;;Lv>YyU zGwd$-blLrAXp=W7;tzeBmU)c5r+$@sllr+tVV8?VXzuj;ad;|sss6;!fkqBOcH`ax z7u0uU`#ABabjH?eA5kv@=}Jz>H7o4mdyg=NLahiAl*Vg<3l}(o85T>}zN2qVs-pZz zgz=ezWTiG#{9n-}vW30MR$*+T{b0p zig||jNgFxGfFADxRNc}@&c5sZ(V0egYaA!LzFLM&q3CutT|e8@0Mi8e#F z8Gl=^f^!})Os1n(^G**MW8j*;PGiAP!#3sr5e@4<0tFY;vFX@nIBB({qPWo2C*0$j z=h-6`hhko@Q{OJgL3fklk0aGtxyU0; z{oGh=WgVA%P8L@ekZ?oiuR4E}`&{zSDFc_hM$xm^kD#spj8OTz*-oZno}hJ>JGW^z zY}6@}x`gg)$`oi0G(-Y+26JN7YLAw6j)W@`(4Ww|{|G_X+HYYbxn`fr7;ORzl$Ff~ zB2U`9 zp*}kztl+>kW>j;iUAkuX41^xs=6!4af@TT&${e@J&5mPsz33p4bUPIu8zB5|$6cKOESPf5?zA$U6-$i_2~*Wt5eU$A*?WDQoqM#Kt0WxQ`Pa3m!|l zmJ_pbBI06ul31n%O&r^1Ty;r>k|e z;DVQYaT?PlXJ(q#*{Q8)&FSJNUC+>inW;_kJcRJYv6}Wjb54r?G7YX$m~~` z=B>Lb$ZYiR<}M%f2|4AZ8hv&e`p|sP%ePfEq;Rx5AL%lnHugxIy^1prIG$gO``h83 z019y5EkDv9P;-6vd2*}76CCo0o)4tL4>rj~e+3 zO^v29xnNtV-E`l|AaXl=4uH)=h!^67T~%4bBQp(MYjqWhuCJ8)OX&RHX}Vv3G7&8G zf4gQJQmi)<5q zA+6AV2pm`CX4^Ib&O%sWoD(P}+0n&4fwlPIA$@+_(ewt6bKMIY#Sn2w*B6r z5|HvI6L0?Gj9Oj%UH7%TCGLm%-PVhst#93ok{&GAmmEUPdmv8L*r(Xu?RU?xAY?1A zb7AF53zs{GbFv&>#W|QADyz<9Vie&Fl{Ge?{?I3scG`kM=V%P|^#%6-K&7V>TG0-@ zX+lEI<}0`QA8$EvYb!dNn0to{5G-F}|3Mn{lm`wz&vZ!1ubCI?o*FAZUOZ{iJl9dE z&3kun4=MKJXaPAkKzLgYWqRnGh)z@eT2fs;$~};iFhtcB!d?2%**GuLET(TQtvY-z zvPoz*P0T4GTsA$ImzBer4Qj4A^}ap!n>1cpgHTnuR+47F+jm6N+&bNkmV)#6JIH_@ z?fadl-Qy{aZ8^5DEb|`i^tF)in|0#v^{*{c;I8!Xc*ew`&fr7Wd63By0(%-?in&DF zd@<^_4i)68q1E-q&@Hz}e9( zW2^P<%D#v!hx99n@@8y8)6Ryxk~EA?M+&}K))Y@{zkYU7*uzGeRtTQc=al3tL7nXcI{& zh}|$y3c!dYcu-v4nRqAmZtiv7JM7Qt=9?z}jw~M`(4H?Fu9DC^?{C18kgZUrC-|V1 z2omX&T)_Nb+b^{w$M1%M#@k#j1&Ju;RqlZqv-4btGwlKw_DoDoT}D#KI$3P=Y7HZS zIW3woc5b2soF+$W?2@_7epoY}m>XB8%P3WGS>zkzXL*V`avQSKFB(Z${3<7hdx7<4 z<9FtAHo3|~)v01>)kX79c*Q5_3&4!XwIgYjC_FdLqRfv!;A1;i0DagSv41Z=pz{l| zGtwzN7wI&#$OmPpf!N=43 zKFLFqE$~xlGDlhj;xa|--I5%p4z5T)r|CGr@t=EbslxW{4j2#@VAuKNf2+tkU*eYO z3f*mCC~rA2BZ^4y@Gj`TDss>Gqtl=L0fCezdBPQqm(65jjrxzs^#8MrEZ=MPBq3k9 zFiz${@s+V>+DqM&`iLU1dOfc2X;qXV%+g7He&Og~^SV`$)Z|Nr$0O|Cp!@b3Gloe2 z(*bM`S?bIWHs>g%s$O{bO$G>(j+NO((gF_Y*{n@vtT4w<>lPJYsl6ZOzx0mRnEjbx zd9Hz)x?+PIzcFcWn_R+Rqq@UkduzS zh=oaPFe=@hWJ@mqzeOEZ{$dqk^QqEZ05D_Zz%rfa=pyhz_6J4xHXr>5U*A9YuDk=B z_dM3y&AyEsr1)4)AwNhbarM1)ZTn#@NkrnVH3h$g$*KQ>F{`v%*kP$v9g%;F*mWE! zausN0wmYQfV2X;_Zek9H6bJDaxzFo7hK&!jP-4!FeAWs?{{5crlY=CZhtIW`(C#X7 zwXDSsHG2qANUUZoG_t#q?+*$COsHVF(L&vI2L}wA%m~CSjjBGQrIq%px9}UBkb?lL zhY~8w8{2Vk!%T@kQz{rQ=qbp!t9sIH2#CJ}mNdGrrfKzf_8o#?K&fp8-goqH$xwut z6+7G~^-K11w4L+~W~Sq!Cffncy+^QDSLUdBWNQNeixD zw?vf?%kTG)*Oq$I)Z9X2t*`lF2mE3v^i4AZvTQ|s-A$1Bah9QB-VvuKJp)&fo;#?m zFe~}f;E18a?9koAwaeDE?D<{#g(~D6NP%Xn$3n>y#JXV1y`Xuf*)rx5JLIb^?uzhZ z9WaUdvoo+&f;Q)#MYZmx!^wwNuP~NrK5|^F>3-;T!pr!$`X4Wxm6wz-q8MA;RulV^ zsybihh-2IijO4J+rdVu(n%Q`j=2ibjWD0`RNRw?7L+v5Ri<88vD@w_H84h>Di93q zE4RY%D672vmejv%q2Z=y71UCtp!u%c%qsU z@U)R_V2j@?7cGDR7nR$&o+*e|opRk@b}A2NXd~=&vCahll%JzDz(w5pXERzQ_b}

v@b95 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/hash_random_int_erase_mem_usage_test_local.png index dbd3ee9d3c0aa66fd5bfa7454a1737742f331420..66bb0eb46e2804f1e6343ac9b149b027546f6c04 100644 GIT binary patch literal 31203 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 SMsXTI_<=pN$NeuYCvk=V literal 7405 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 literal 8436 zc-qBzXH-*B({2(%mm-KD9g!}eMx%DB1IG%ErJw5iu4u`DFHzc zLYJ0^AiYSDP7uyL;rsr)-&*(2y?3p<*W!fPGxN+d&+O!ILY%&?1``7}0|WwL(!8r? z2!X&b5D2uEjtbmik2-^eK&T-4+Q#Y-%0fUOCQEL6fxsdV1Ox)0lm#sm3W35RPy_@Dps)a)SQG+_MPLaCEI=Uz z#u88n0v16aAP4}+5llq@CWf7poPVvumltqptK9J0G$LZiaD1k(n|T6eX4-G(b_Eq8*BoN|6Jg41v-iih@KT4Nzu6;enz6Q=kFLh$zu0N*&4q zz=?rEg8hMIL5lzYz{zO-MxLh?Yx{kd;}FP%gJ22lH&LNECj;muBoPC?4Q2+-aI*1l2!d-QuC2- z{_o)Qms_4UbrAn}QcdSorAKhS? zjK93>aOAvCPJOx&LZz$b(ZV3XQMKT_|HO7B^Un1x z?%NXhnvahQS4hW3XuOVw;j79!XOnrh5Qfm&jm7ocZb^TR%#Sh>O}`KA4AFQK)Qs7< zZhhMpoXf}fo&T=<=28`V<#B2{+1R9P$ZTD=vRR1apXclg=h{UQ{rC6&9vu28p2|sI z&YN8P>Bje~1T9~5HbWTik(>8AKa9uvXqCZrj;a41GN-PEW2!iitCaH#JKMPkr@6nA zPk&?@+8|^xZ(cndDa&I>ZnO%JipLqq(ce$ft!GjwwB<6n97FZA=Q9Dy9|i3PtbUye5e67^*&|Tyfwv zW@vFS6ABBy+CvGr%Cr~yL=aCq6b`x;1~*S!k|B$rOR{H=lKXft{+M!oLCFK+ip+&Wf+LK(pj+(!dosz5DM$1SM~n4c(^$b!S=@m_@RCGeir*Cgg`VJ zu+cc7>NI4j*b*wI_do57a18iu#0_jqP;z&i#8$M-iMTZr7PV(|V$ zx8rW`_~tdcs1ZjY*Y=6tg(1)dW!93tJ!^b8&X#qV@A0|UktKCsmh2Y}py&PAJMEHk z9nNW{B_QsXb3Bo61l7F@GoHVsGirAv)Q&2(ky^8=Uq4!_gBi;eOxC`~o#yPz7rr+3 z>`PL|VxLKC-T3V0_Lacf0pEPmKSz|*DF>*n=>2BubEq#!_H3Q-Nq10V#!b7;s*tym zY_#2<%IL^G`0rvoeTzqH{Yf@8%g>h-ys6DS<^K-v<;8Vp>Th;12g`DW)D#{ zd(MX@ac6lenZ&La?0uOrZ5blB7zgR)2}mob_PxHT8x|^NpKd6XE_H{IxqRfqEuFB6 z@Wt#V@HioS0+$(?T)SN}9=oG3kTkLSM{AesSaL^FL`5T4)ET{kiwS{NP1N@`)dLk( zOB_`a`Z5issH%EoCr3qsmm1xCKTtdU=-g_m3YV8Q*`O8|ix9$_jxF5$p><*H#}7Qm zRBp1l3I@G#+1q`(FkoK#dy31xWF`}r8soHrlwM|i5^;sPtV)myrJ7K8n<=c%>>&NT z9|KIUn$J@sWWOy*_VOjxkPMzccxLUQtnVG4RX>|PSc9$hEMHAo8}AdFQ&Cfi|9E#a zo>~u*jUIe1*vtH?dpDZA^{A{cL_}A#)o@T~_&!ZT{!TtpY?fh8U`D5=3=X@lF~PQB zQgVwL?*HZ;8lN)U#74JqVT4%FI`@NQ7RCS?D710mJFm3SAnR4Ba7dr+$ekp^_;;g0 zwkvv2XohN8FZ(^A#s|)!=BrXIOAj9R7j3B(8l5j8|4Sl&1#J%#L)CE8m-8VtWl?@g zBh?w#mP$X3aQ$f7pub8&Q;(B-D&c9+lT7-{Z#y2jFIit1Rj3>aI=oH(LHk6!kA3Pbx}C3YDC5VF z%YA;eET(U1y%jQiN4BX8#Ai7LbI)OuUp7Ue&8fH4NY}2`^mEW1DJp2Cx*6Hrg5^ra zFEW?hV$l-I^{dwL#@XjY(Hx!oc})<$D7>RuBtuUmZpSQ-PBCmm*Yv-3JNLbAu#PtqqwC0 zbK5Bqn)Em5Hfp&MpRO*-(!*1yN6(rU$W@w;v&x!mss@SuflW}~Q{Tvlz> zzCGv216`Q&Vl9q7eHy`(l!K0B>Fu7wmqf6mxFt16a4#AzVX@j7U)3up?qzintXDG7 zL%=FjjBr)El;fR*3$5-zN{K>o+CoGw+$p<-cVK1W8?%r#xsrqSs6xds!YteQkK5Vew^(BmJUYhe(mNQQeNS6f@cGn?Y+`4K&7`r{6UF)-%_M zwUQ=Xbo=kwvu+K4e>c+paYXqQ=`Z*-ul+FP-R{t_my~(cZO`=UJ9W|g$XNKwAZ1tA znBM&%6V=gQ_L2zeN`6+d3#5#FGw*9$R`Xep7~4FD)uUhK(xp(SYM9Oxi&}ShqI@;9 z0+z=V4DEFvPlO-Ugn!|6NsjazVuaHj$wiFPV;wa14@@p?k1~|9ee=CGLv!TG2*O6+ z=hp?JBS|!~al39=&C&kZ5D-VC;o20FSe5#RM$W}Dk?AkfYcF=KvYPY!-$SySasKAA zTx6H$DfA!!(|vlqTf*FA7v^<;TwZUiOsFZhDZV;pl-_CS`C{dY*GLA(_9%Z#(-bP% z?sZ?ch%a&UMj#_)>pR_X-ZsyNo_YlziOy_IYJMf^+G*34)%4TS=kGhkXtb<$$Y1QY zcJY7z%Ct8Y*UXvOC#D!CrMidhuS*e%z;u4w?mRb8lhYF>?RP{CSU8DTjAyHamki7! zt4FWg7_rv-#Wg|-Ch%_XljS^#7B=Z>iVhB zysp>zF}64UEV4TA8y~Iq&P|#pnXw_t?bKsQB?@>AZF+D0QwgPA#iWO>BKm!}X^22J z+qZ)24Sml)wg%K{4wZpXvH5VP(o3f7V(>ct0?9JUu~n!@%6je~s?=ft?P`j>GTC1O z#ywloE?(xzOT794W_%WT?NI1F@flUa1NCHX$aP`-k#Wcb>(%W?Qp}gUH8CT;`Cu`5 zGx{z6CI(!oat#MrW&?;YQXC8kmx%`4ritkQb16Q=e-5VCgZU;9SmX9>t>TGA#o)+!Wxy1ueXMQkV$k?s>A`TR$K&NYu?HG zl>0?XA`+sR;26MP&!EL^GVrl0+tnt{@Lq1$)zRTMPaIIHFK;U|xWpq45<|O)S+-E3 zNUVC>`0^E>MfvIv*-zJ)`Br)U(%JGw;apc@6YMzJX1hNM(UvCXjpWu!;g6{K|J^9M zMQ-5Xn^19NEOa$0I}k6{ITh-7j99L5QPOynz1lsoDM30$rQ{fnT1j;19>V^~4u`&J z=G@ZA^b<=gDjDmlBXvb<2Un&VeDB7sKYBa=TbKdS&aYJ6Ns=fxS(Ax){xFcf6Et5$vb+i&$Ju zXt3Nrd7{tz%jlG4n9U0u)9&KMHsOx?kp z=j87(k<)7IWvrIOYaLij-5BCmeP!`b`TSkmxt{|T(rw$5cZy)u;B%J8r%PInqjGNp z!q;p_YvO}ZHQZI6_h-fX@-y=e4jqj#B3JEReqSv;Z}(U%r`l?&MPX{5oW&V-{-Ug{ zN~U#@B99pS?z0i2+s+L=Z%k3add>6p3Y)d}c}0Fo>)JRyY4g<1w$uLN9X}MmB##|{ zmoW6t2H;#D+!cxC?-cp0lrfW4N1PwubUPkEc{$F_W?UgQ=nIow?qhnV!nof_ZCXf9 zoI`h|?xue!$`OB=;idRDl~u5Z-brSEY#2wt%r1M##SK1})Y;TSc1>vSeV48&Sjx9Y zOOah3V9Yb5Hdlqs9NQEan~-MnhLQD$66@J$Xma<~2dQU@^9Etoyyv_}o*$c?6};!h z#wbk##pPf>RA0pVEz|42$fKsqVENDIa9+t41k%o}QFie75wj37OTjAneEMbaJ@`Mu zl<_YiINccytqs>EtoeF;b#uXOI#%(7#HsOMMC}NtAD?o9W=sm_*T_(DQKUOhqjlk$ z>6>b-!jn-ao62Zzbin;pn%y_sz+##pvO}8}K6X2?k1fkilo|F%s4IqE|Ni0OFdY=f z=b!<*;G@cmUX>sC)itgrpSExpI1mrpMw5cQ-FjF$w13LrQ@;+yxn1jfeY|CGynN^{ zNW9FxU_5f4_Cs2acP0gj{n<_#5|?CP3{Yqtn;Aw`spQjxdy|SPklYZa%$-o)e!P3gn^E= zd@u`Q@boXu?xrNyi+$RUnMiL~+a(%z8y5cP?C@}lUwHoOtU6S(ujI=|8CgxZ+-=Ir zA_ii^^vU#B#gM1$JZN_}ZMimN0y%BS&!=wshmc9^Q&(eG6-=~<%s;hNsZ$jRfescq z=?U)*ocVHrGd=YBHEs^f_A$_lgQcQ7R;FHMca+Y(On>jxCVXW4j(zG<=P64-%iD=Z z^IUlo%fpM>xBawL_#KXXrEcz5l7&F572bYQFB#irV0W;{9kj3Zc! zE}hWYAgv`YSeBM73)e<=I@Ebp_#J-pRB&r!(Ljrv3G*-A((r~^m=CR##SPZ;F;8fd zq^>{PIvfoi8_#936Fkay)Wf{PUg}2hHDHbYGHJ{>ihaEeigXdVK_iIYL#E9L_C}?r zUDBk2Hqj7yX+1@w7XNV3ZOHY{E5ss%)E;*rG4_r_nQfYe3HT9#7;oM-EbDUAcOh26 z_u;uT@1&yfjwgGYQQuFqPSL-a{~YGw8)j3j$ULo07t%Tlq1%9K%(OhVm=NGXCqyc+ zd!bq{Fv9owPtsl?*hLiu@tmsInXLK`O821u7vGeP*j^=}Ubid0QkF{{uE^Ug&iXT+ z2Z0s0WL5e$IjS!*Au)1eMV5)7G2kz(rUSLl23)x_U!r9i80pGsJ~39VPnc$YXGe2h zE?FQW!@23o8J2B~L=?Z=5bsNFcDC6xKw@fA?|ej72;@{ACw6Gs+JA#RG>9yD#%FTq z-uP4ZTz>l1ZJAdba;zjLs2L{5gD1*{_MBm4?bq{QHFw9;!V0RL~LRj)JH} zZ5c$T?Dj6^vFC8tRwM?pGDVzg=f+Cwd-WtNGZ5!Hd4e#q&oe4bOD>CZ}< z_nmWk&bZO}c1|$4f3?u$yq?2@i?mv;7x2w5`Kn&+ZK}CrE2^wBJAb}ayw2cD-dlcT zxGK2yan;ts(jkPJjL6r}oh;e`&R2ypfBiK*#IFsG z!20WKqy6D_=fLUvS{Pzv9NtsobQb^M;Wve4Ka~ed4mZ>hy@8=1io@7#>P5BHe-l_n zQsGW-iFe9s^MGrpXmG#_gjB5iW&4*%p6$0t_a zZZFg?=D|-zW4$w4$5IGJnVsd1%!yG(m^GwN6K4a!t1ag7bMxt|ObP2Xk9UeU4CPCr z$l|ZLW?Iyy>Xp~1U+y0AC#%;&XWCJ%MyXV~suTG)Q*2-JiqjWCCJO5Y_&>#;Dn$GC z68(9aKi^yzHi`PDedyJNJ=*RJ@v%d*Xt#)`auh4N8EQ;@X3T8QH6bTkI_7C#&)pJ)Yg5XfYX#WpC0y4=*;asSaD^o zTh)4iar7+>Op9}>lcfbGDb_c{Iz7W-7mKUHVdn2Co8vVdrFWjy8k~$4#{%#E=2hqh?i10hTknW~hx4W`5rIob_74RPhi~$-P zQ+kKfFld79R0hQNdh$zaYDaV}qd>vOM&Gxrf0-`YhO)!&j+=K}K#DmZY9>(cgX9FX zkbHXKY?t12SGbSwjT{WSPv!jkrF0X@u(w&xR0sUH|9H23j)aMvq~TSYdZL+6sD{3W zW6fQ@Sk8uX6V1gUO7xfhiPB$6@k~pZdi!MqUN?4Q;HPQzu_? zckO)bMXU0-p17ZXGU9LOD+jI2k99e&6gvMYv18Bjc(6NAzWQ_l_u&X9tNW7b9om6L zE>L9Hrpb4DT>eA5AucTWOjb>h%r3I$Pf6P5i($#2m3=L|f@x&9$l8`nogs;1N!wX$ z57*oRg#`=Vp!4W|k$j`Zcdz|v!V;|dD1%jScSOBONbHkRpz~>wshLIaIKKEF$B_gh z>|R>&yEX8+F$Pz44i5Aczl|BA|Z%`&7j#Q!Cv)xjyF~ z`;@us>$Me!uBKHYQ52;p-KS)c4 z7r0qG9(l}(Zj%moS?xXW(OpMC=a$ql_t9;q!4DD)#AQfV?1C)5=-RY6Ed4eMs|}iX zE?SXo%5Nv_MV%Ut$DtGMeS1U1yXv68hl{Gb+G%q1WF48JS;S?pc|cYe0$ zDmShYHd&*YyS9=~MZe*mlU}EWxhC%Zy7#`(;|nB=c!6elAOo_3VJkP-u!8)L8{}XN zq$*@gK&dVu2k|tB&^A?Hv+MWb?4Sps5%z~jB&i1Gk0gp9T%A~%V-muSuJo3mY6q8! zY*u@~TiwtXYOeIt?|l!|pr#eO^WdFvX%4ncxH_gh6tU{)E8TwMJ28!N3*#R7RoZd^ z*{whLL0beX7w{VK+r|7@P-0Cj5|dQYXc>7A1NfOg?RGBFCp|MCY4^`|sQ#2ZeU>!X zK~>zS4u3FAB*}5zL!yiOaU7iPScMt`r+c0)qo<*}_N&t8kz2+b#UM%*+<0WV%}8%WP^4iTdiXlpqi*mBs%0CM}w>*8*! zTX&%Um4Z#}nA5SW+U;m+YEph?PmtnLpf7o}y2{N&|LVnN*a%Cmsi@Gp5Rz@3eJUh* wT6b2uxG^cu68ei)3khQt^uO?*bJ@K08@V{*dN(J5@-JLXbzQYmRhx+a1rme+od5s; 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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 wT 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 literal 7299 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 U!TNRzPx# 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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 P`+?jtxrx$qeEPot^Ig^? literal 6706 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 Lpi!f4AN~IU1_z=! literal 6732 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_find_timing_test_small_s2p_tree_local.png index b3d10612f79eaf952b68426306839bf0938898e3..123c3a648b80bd5e0376a54cb41aa87be12c2b00 100644 GIT binary patch literal 26702 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 H9AEwi2G&@# literal 6396 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 RM*UZ=o{q70mDcUZe*t^izUcq} diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_hash_local.png index 8af7100c6e7bfb4fbfad2e6b95d80a23ced133c6..73a35cef612f6a565f8cd4624aa2faed6123fa87 100644 GIT binary patch literal 32571 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 l|GRwV|6v#OzulC1PN|U%NtlD)U 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_large_s2p_tree_local.png index 63c0c8db797745c600d793199862a9fb5c3cfc9b..fce364cb318d8814b72e0c6cb42c0fa4e9e58d2f 100644 GIT binary patch literal 29526 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_mem_usage_test_small_s2p_hash_local.png index 589dccdefa9641f25d45258991b87ef802e9ee2a..df0becc112c9964855b1a8ae32e95fb00ac0e970 100644 GIT binary patch literal 31758 zc-q9fbzGC*8$Z0D1PMjD1w@dPloljLOLvHX113l}n<7}$5Kw6u-8CBK#{fZUG$W>h zU&b6@8=*SYF_;-#619z885EdT(Zhv?rk2LM2P001zF zhKf|8nCws^K^A_VL7{E| z9)Qr$P)X=xpFnpve-BB&0I#e~RZaka9{{;`*D@@7V=gq?(dww@?~r1rjXhiw&U9s! zhcXd<^C^v(PK4i6ODMKyp@V~-)-EmI5r|{b3S1q=^8C9yx%x?ueDlGIf{*@7 zMiv8q!-wjBYs0y?W^~Eq?UUA2GzC^KR@uSodg)q-5|y7s~Z_51I|a z$>4fY7tr)ie#PS{c=s|WBSZ~0)EBc!QwckXZR#u$=gCN-xG}}c^>1K?kH=JgHu7(? z102)OX1T(crfjf&J`tuIRn#3=iUWFbUuACwH}(7D=Qoy_5vk}QstCxMT~ZPYa_m0# zl4iGg0EFC{8HWMAdM*&1*?6TEK}cx$4TekgV`VkXsUe?*2$ZT+Kd2aP1~@&lA^aO< zkGFezIHCyhF*t^XoBA~vUc%M>#Tpxd8A8;6cHzqi5d`1V`Nv)dWq_jo8gTaEN$$5s zzJJ}a+IfK>lnAStauNV5Ku3po^-iiNS|hMYm7a7%FYz3y47M?h_)d)USoxpoX?|xh z5#|A_(q-rH*t01$)$s%bFl=8hbJkCe=<-wdzXBZ-A~VHOj>2o3OSuZVTDU6130@GO zzTH$8%b}Wo2`YX42)z%_>>p1ctHWEDGC{rtFfY2Z6d%@8$z*Hy5I7*CNe!VkoIw@) z2ov-<_gkbQ=j^aRyZmcpu4(UkZ~s-_t~v!z=SqF{HTCf=*_l2cCf;*p#(#b~3PubF z&jB}RPlrQ-LmmUmE}!fpL&UuD{z2t!wPYZ`oMPrv_j{JI&5XY8WjB* zYGsC54xd{3Z`kAb#@J8utRDUwxPIsl@615qVCpVL_Njj2Sp9xwSeC4inr@%O zk&Gx!K`};9rCAeeI31bm(|7)yJT8xmZe&+WL3wZuumz8k3t!W8IWgRF(f27{a5lp% z)ivXL>0`qES5`%!@^~&(gup+Wb}LGXss#N2p4<3$P!GShEG+y!6{CZ_izZ zoj}$nn?MLfoHb}{1d6%dIyu7NP*ze_NQNI3FWMMV9FDXy^6L3->9YQ# zZobxNsOTCB@tZoY%;ph$P6!p6qn{ODO~%-xqP;@;tlPP%eW`=e_p%8tXxC7(NrqI( z7{U^OBB^58&fX`Z0U?#S(d-NyXLwvRmU}b9`xg#3?uG*;GK;7L`vhTSViS+ zu#*39{#`GFnax+Xs>3*xBFHtD=Glh+a{oU+`pCy`kk67;!H9WG4~7Pkso*M=QH=IH z*qqa7R=YS}uj%Ht-RjsKRH1y~p`)tHr zzWC2bXy)~08|rTWuEmTQgBeP8>K_y#P0@Pu`)q*b>6ogrV{Ve{8bgIC`H%`!F#yNM zkrDKhmB6U!x0lL-Dfy=5^?(k*3u@Izk&owF-66uihA4=X$GEPKWyk-vbY$=4)4&DFB#?Szbkyjc9NFUT2yYRtuX5ro z@Vw?nJKYA#oplxZ_4MoBvTrPLpHU!p#fe~3oGgONTj|U?q{d39$}O@iDy7o#loqW~ zR*^%t#j&a}Xr=(>6S`t2sfyxsE~K!*)dw2t;>v~7^QuYEo)hG2nyq2n_QIQ)f1U6_ zRKPR@%D`rnz6P{r8PqZECri39Z^)|ebSrq#J&*xIj4i#*2}sC5WX zZxDdn?Hg~coXbUZBz@jdO!5&!#!&2`qYXd(mDjhBZJl(XoNsUZf1Nb_jPj7F7h`}0QKOEEg-19e9D)MXm1vt*uuJ@esv!pkDL zj4I#v4no_940!SF74Ru=if@H>Hl=Fk<-IYoAbB~FyE3dTw%BB!c71afhz%&3lQ~R( zhJNK?q@_e=6>U({nFUS+)B|QqpD89h*E#+xi_gT!*!c&@`WF+D8$4Pg!CY@=Jjp_x zmkTSaLTMwM;1@tCkW?BmbeesNW`*jszRrRl8370k@EGxF`E%VhoH-!Y*eUavFb6PhMaV$?pjb3gDPW(*#h+a)tL=O zqkcx+dZ8(11P@H=Z6gO1x?wkc^tebU&R_<>PTOH?8zipM%~qRDs4zTLA{&4Ec^$zB?S-Yt-@huSTwZyYdH4AN@3i$m` zZ9k4F^GUcZa2hmUaJ4Y71GsY(=K?83WrF0S?Xj4vI0ALHgTJpkzVPZ68<}mND$hkh zJ?t8$PLt96`z|j=2|wBT)D>xRW9hYHPUktTKb+u_G4+Q}UwFb#gpd*`Ejs)XKn`q= z@+a7%f~X@v~=zg=T=uf%W4;}!fV5NWIaI|z>61{+qmfKd|u0$CM(TkZ* zaxPN2`aoQ$QyM|rD)^m^U@1uVTT5YRI_ruHIgsB@q*WJ!-B`VW4HyfC`@qFWUU8W( zyyQ#zXZV2d83+5NY@d@nWC)0tBA1GnI!3C@C2(JYtlfsUMqpZrg(3yM&rHl_O4Z|1S_(dCZ#JA>H&w*cT}+VJi%GusTdw5u0wgKmp!db zufDzFtq1=?(+zX)?K&C%P;#|giixyF0XX41hS7H+i{)0kHkK2B%m5FHz>sYJxAI?8 z*L{Q1zxTOtyKpDOoba45H0<%SJGchKXGAKpi{9}PcV0Kbk<4pf%~*D_n`SKj3gn_! z!|f#QTadoF(-xcPG6fcW5L-p~RY|+vioEw}xk*h28-wY`sL3zY{>#Rq44ep9o}0>R zZYO8D!KFlxTCjfWjT69YI1K(?zAB{5E3yQ{4DZ5lVmQ!j9?MjqNFW!05q#iLC`vYj zoA)83l4vilyWj5R+k|YKeWT)?j_$fi1b6~%QmvMK6w)OTuCuIMp;~}t%l>6!)0sM2Lz0x|Jl;~q^P%24{llt39|7E_10MrS;jCs7& z=EXyJY595a@agY4$PurKXHD!~F^TRbRIu+w+nwWowoFM%m{ftMX4supFtUr%Xkg7t z&R(G@P*`;9!Q(rdc6pwNp@1gM`j|cNCdFX0niZB2kq&clJF#@FNB!YUC-ZFI`AsPM zvB`|clDlg-_U)G|=zennOKcLR2kla|^x-Fl$^5@{S`=z>6Jv)Kc{{b)iFtz7c)KT$ zXUOj(Iw6&j<;A&=A|2-=+rC_#C2K*90fRd00)Jvm)bwonUEzJo%^~M=&|&D$^7N}) z?VSEH!yNBu9Uq<$I(Bmq-2k?!n5sGgIcp>syX&eer-UTVy_ItU!U_HTqfH(&D(qq3 ziF9`6>tIYDMh!!QlclY8No;&MdnNJG8=>IF&RYDGD_#{xof)w}ZoX4YbXky2mG=fE zpA_=dlOKXubIj}S7&s7*P(t3 z)7N(P5}|09IyEj^XRJPiM~J{^^eV?&o2KA43l;yButsMRX5wT=#`5E!L@soRBHF?u zgkPGQlmO+R`TBBdqtj7apwQH{4DJQ3Xp*j`=(Sa<81d2YQ2qB2fdLF_Duwc^qE(}| zl{*v}!lXgT6D4E#-&gQAAw2-62EzJ~FwAY?CUUUqH_{D*6Tbw1TuFFPa{M>hGx@=M z-)7S*l)SHvQZn=E&j_eS8lSH} zUS)W_vzcKyd2(aA=KN#(hlIY#cb!fYQ8|rkUoko8JTdo$S52)_wTXnnhRM%BUk&SD zXUBk8DhA;*wipTjCW1))E)IMGc0we>U&BnjXG=&<&1-sVupM#BSHt|Xd^AD@!3^u3 z&pxYo8HfLcRjXJvX?msPC+#=ccKporH#AkVx zP{mf#1-H|ccT&0TAKDNf1t8JaDV5tZ|Dt;UCDXacraC^+JW7ZLm`F)%RJ)J;fccJr zdiZL@4G&JCQPFS}q5JIcMM~afIV*f>v0N87fR6TQ!dDG8x*Nw0hkm+sBQH25K*jaG z{HdMR@=B2t*K956)hY-Uo)WmNuXlJer$u8w`@)2 zg)?Wmgl~m#0QGNSQ&N)|5fbpxhP*7DjNS-Af7`&yg^WfZ^ozUU@&E*~W<0;yiEQ(_ zzG`&BP_w}V!X*;KaTI|@<80*bcL&7i*y~!^ z0fvMPSn{e&^`(SbUy{ZHro+BpXL4mRW2ZghMWHM3(;Y^w>JRg(cG%w0&@1g7by^@ zV4xfuZQH0Jn(Vu@QHv09U3=8x9cmj^eD=2`=&T-6D$uAy&!8?u(4RrUTyS}ByA59w zr08Zyj_TI!BCMf#EY3o>%E;N(>?1Q=Q2%Aq1yJF8Rqgixm86WITvQHiiI*15-8O$6 z+gip$fNNogh2OKspaqI$6X7cFJF>A>hQ<}HT914<PAJ?CJ@h)*}y8>Y3Z7GwOa))vif2&Ftmbhc@Y|om^Ux zqieeA03iuRZY}$Iq6~D#!*l+q0dWAiX zGZqoZ+psPv!l`9zUvXJIzSOF$=Saw%g^=q6vm3j!N#=@kd6PP{JTQTBSzV7vu0V{c!H}#heJrL%N`@uj&oo z4d_Uiz41L>8@q%mN4S6j^+zSC|5Uv>qFUWmzyEL{gGoz8&}o*-^WxoCk3lxSVIl{# zXx3$;`~q!up!H~UX0g%mle{*(K_5~=H9<{$v*aVts3D(u$4kNAukZKanl{0$`z@2b zc^1dfO*f#1`w3 z&?B|)!xOCUXsZ?cK4u>s>QfyP&-B41x-T1Nwbe{!U~*=!mwGs>a?KUJIy;HLeMfr^ z)?|F>bY^?!aq=u<#h0ew397&C^By1as^06jcb26>#v3HYN$C%ELQnk|_!~apJJg$0 zWl~O$eQC+Pat*fyu}_j?34{~uj2BLrwC>0i{|Kik@Mv63WyHDYE7P>tV}uNl=$sUv`4od$Grhf^@9jofND#*Bq%2BViRz zJDcq{plQV~DSK4FQs9Fr^}+q8L+six`5Ayas>4K%=%uLhS zqb`>%1;yf&#JO*!eOHMZQ!mm47@zCwzI5QUSnQr&cx=qD52m^7gVo zqZ*4M!F)6xHcj(&3o#1o&f?+1zC#NU7=jw29f-&6m~f1p9Ye1RA`>19S~iFnCUz!5 zW#h~=urDO^EyOe^sXPq%3ULkOQH zQub5ui*B#f-OeWF%Kg&G5Dgr3foG9>MKJtI#fK?IeRSEkpBIDLxEkVY(r5As&yj5g zYrc_Ps9X#^isy-G-_tZ4T+Mg6T$opE)u#x}q2*x44#yN-z$^4V-EhEES3Dz=bE~s% zm??TU>&=$W*+MZjPRzbNyK97xHlIt*f?eF%IyJ*9Vt%4E{EQp~8dt| z3VNd&wUoxo3Xz?z;VtgkEA!09K~H)3NeatE8}w+EVJs8%Oc-V!7S%AIfMai2dm}r@ z4vid~s&iKaDQ&j=?h=76&8{D-Cv(XDp>xf=BB(q2;6%m!+new*e3TUazjPbtqhIl} zin$IwyU8(og`GnCRRm=SPw4EEo@ciTy6L04wz|6g#GS?twm<6;uIF?gDc~HRypem5 z*ED%f(1(6$y;ZHWqX7L<)fwrsEd~7&=+u_2c%M@y@tS576`c!pF2w?vSBLhCsR+yY ziA>P(jmw*Ke4$TS=A9!6xq=1#`7-Vb8k5z>-K48a^VM^nUw3kUxBeYUy#IYv^0@+V zQ%Y&#sAAPeCQh_lOm3BPv`+3nsyVsf98M;9# z=ZEq(Q{l^3xGwW`&Hho@Qhl(ZyuLTK6G>VzQDP*QT!G4mtg+32Hk@1o}#k6Pu!0SxW_o z15#{m6B=nh|2GM9(|qTz#FCF+kX~44ERO}}bX}2is8ro|J5*Vpw>g7u@F#cLQcg#D zo{ECs*WM|PSKC|eN@UuP2j~*p=w7b}jdfgBj2k|0EKW@>(pRPrV=I-14iMXs)}l>3 zxEe@=88#7BKbVzD%us3?i;VB{jLb#_!c~L`r1qo1$(61Xnk&*wtm8Tk*}g1JFS!D@44ZDO*Kz12{igu1(1C64HL@E z_?i9+!!<@nx5x`!^z{3;Y6sN>R=xm6W5c%kTaI1esHhtoDpxnvE={mAw!f(nPGJWG zNfz7zyO>1@UH7}DHJ&djnzG^y%Tq4A%-1v`lmoh43AI`2xRS!OeYOK}TPT>lY)kb8aAik+QXe;(h3j;j5&3N7?lJ*qs-hOO2e5A*xhhuO&8Sqb&;C?D~NHmZE*Vt@NOXmng~RtYtT2rh3{(Ll`ar9 zMBWM<<;*E}yBi#61RZNC7Y3y;X+7#tV2OIzgQiXrfSsb1{T2L8h^5yl`MVpU&31|C zr6Rz?qSfIeY4-CgmE$jk5%;#PK8Cs~2TSh%sNon1e-&;2^?W2Fh+Vp!xYRgvb!v{d zIxyKlqN_6FxSh(gd(OWrry5fc(!Mrf5eoG7 zYtu!X@g~rL3OVw;rUqic@EdZ=ZL_!i9E4ZE)yTt!vKEkK z8B5i1)gpJ36C*rX#7Ul&SM+F42xvIH>#a3Wxrv>^T0 z!II>K7Rx7se8@qGfEH$`Y5F}4teE8C&9_U?Q)c!{r&)430ht7^by-dl?ooJu;_wZM=9?=U)bdQ>-B(@S~d=$AmX4gHnUM6xROg<$v!gGn|3T z{dy84x!s#|K(*r%>Q}B#8UWi5s4kU_+RqV32tAXbT(xPp1fGesv1ZCPRs*wC5^F$| zM@_=aIbH3oZFxK&CX_Z!OL#whtj1^{8BpHgd;3S(Lkl%K{F82!VST_Xc~^!$QRN^% zc+x3!=|lCj>ofWc!NfNS*7?_;F}gCF!x#X*Lm+j^Z_~MUi^o=o1;{ZhBi|k=p2GgW zDFB2Y$OdxNpT}QvTgl%cqlJ?MdyIstBv;uX?)rlGOpVj+&+^5zs=GgA^MEyq4%FI( zmfqWcX=Ab^Bb319>pLeLO4M%2O**I#?6{Fzj|ptry= zl-w@fStNe3nHmtB0jKCH3!c34bAnQ{w%B>3bw-dJG+{K_w>vfQjX3pQpU&-c}cQ@{C4)%M4@aZ`WFN^(Cm z^zcTW{%&2)t=RRuSIW)evRtTOmy_&_>Gm~EZ@gW`+7px5;-!eE!Os4Sg*(8cZnpeU z#lQb=^*wpcJFW2w)T(a~lOcX4d?@c~L=0=&4)q%xF3@J=lzTLM03`RY?srdecO689 zr>}aPf)80O0y`!Sb+~_qw6gaAno~b6G558~WTWn4N{%el?R58V;xr^}R7m#6>Y?&# zOOsZii?I?J8o>bl5Pezt8`yL@Xc~vS!IduK~PV7yW>_shv@jaq+mr z{S5K(N;r8lg5CXZIS41XUuu9tfI7uDBq%9XH&^#$%=;-LE)<}z?1FuSlUmN<6)LMC zBlT!_C*awmy&GcIqJcd}4Pq3;-<#NpZ0%{` zMKj(!?!ca^T~03^H)>y8gk^+W8h*aVcN&2{=o{qIn@L{cH1GPBeY>$01Pz^~hf5(` za53F=_@0 zUITo)KNxpAUOsKqiDc2Dsd|BOBQZMGRCe&`0FjG4aI8&5_}``&C!{*)oZ6A* z4N{ImiSCd_dOHvj`7P=pO+jZL?d_PnYrY$r&f}iuMI+Rx{3;eDllx9ZR_gW z<$4K8F_a>t-44t^xBAjY(=?8K%s$nHU{n~)P#l`Hci!iqKdd;TWWt`KgSSqB(VoJup(Vpo_M!FY0m+eair{E=apISh;umvrO=n`RH(x^=kEw}q17Bha zgS|&T>4gkTU`8-Pc+;cl86*`TmfuQS4RokeX~ifYS5g@^X%o4>*7WPgd)W)8$xJ@T zGrOz4zIyhnnY*HfMB^j9O+y@ zMNP*}pW3%K9J_xlOx1#i=%hOQX={7Y!od{i>o6=@wl-$I>hfuV@TlmJO@Js6dQZd^ z5X4Qxn*zE-Pr+!^!}0E*H+Bv--9871+HN8I92h$@(@kfO^0i#tHo#0{@(^e6T}b~Y z1@N~?k;BrWP76rIgJYz^M-@ShQI#z1IY8JKBFY?hNr1vu75l^{Pd&O??Rcf|LM~vj z_f+Cf`2M&J8*j*zn_?oD;$s?Vt|{bRf|8f=Hk0U77>4LIFt-0yh=Oe&aR;3FMpv3& zDy3BP-HOA5v_QzoS4*%3{^z;b9B@AB8f&M6#Z~W8M;5lIYkhqu^Ov|iPXr+qsl^bY z$O)C1_qG5u)HNEn>`~KA=j(G)DNemugE2&1{cl0AD!jWnl}|Koco4!_|CQCD<8W`( z^k99e?)UBGit=)$t&ZIt#!iU+``htyGb-It(XEv#Mp87qZ#zSb1+ReN9xBewIvC3g zimP_gcjZetvpWaRX3IF+OzKSSR9URv{k}gb_Rj3R{b%n?K5$+N@?PCp0cy^7$k2tK zb4d`NJ4=US1Th-eKff0C<_9Gga+CTon7n0mEDL3V;ddS1kYQ)xO>%SfD=NXwvLBg)RvCBeM`##ruj-E}SB*q}cXHfztl$u5QC*~FZpGgv z0hHQO&Nl1Mt1eUf?csliT6_bbunJeLrSe1kXJR7q2C$pbWH2e+CI* z+{nD_4+EXLR%1;6J+K>`>J#U&t+d}}rwFAHO!sLkp$^ILR&F>Xm{~FQwsf^WBN&21W>i0CnnCyurCF7#)!L?BN9X`cG-jRD z6CRJ|4~efRZVf1EOg|){@cvN3Oz?Zf(^b>hrQgZj(IdZ_rS=^Q?Th8S8H6^<-v`gN z6nS_sA5Wmmh3PcQh4vfHbYw%M-sb-bP_K7<-4ENc@sGN;U2*!eXV%=o-1!?l=KDTJ zZe`(_7b1u588;*utoQYsfq=L%HXhU8R8^lc2DWW7_cngGFSAA~ZVg!bfRhi(p;YUR zo8K*{DTt+JAErOvkLz->sQT3}0})P~c3zKRR+Mru40X_9HNwDk&w%w+t5_3+` zvlmY>TF($mYh4!9+C!9O`T+|j&;s4Or+R*O6P(36WgNP~#d$Qv&!;ynqPIH7bGrAd z2&PAW6q{G29}V+soFBU9xWt|f^otmUEoBzPoHN-!d&PAG|N1$n`#M2KI&e!P-1D+z4DkgnOe!=bh$5gUR!4SD&mGR zvCcFw1ga3RKS64sgqo4J;{byIpG2Sj?HTv$+@C07zF~Ao>HnUf*Eeip%1V7@ZUR2& z^K1gH^UUq1fpl!R?Qp}UO7O$)n{@JO5vhuW^)!c1mDB!TEC;jToc8pa1e$^i5$AT# z6hYL}G2Q1Ew*?v{N!j1x!}XukGv^)gyVQUZ;6iWS@3gVjv7$$Int?aA)yp<}2GAGc ztNz#<#?(`}IZlyk&?CZ%`3!A=#Pp-W#N5jA@|gz*bD>)x*DSJ|-GnvIg`8E?bVc|Y zZ>8ym#!a4lrmpz(r3O>ktuM#w9(G2@Y z$IiO&p`cW!uc@d~7f&r4v~kG`wVJW}YW8|uh{tDol4-oSB3M05V(j=@uFCH>^~}#6|G&N+jFK+^U~g09d;Mn%b_?^ zk3Z*=;89&f-cqsA-V!A~3G6>v<+^cVzOVO+f;W8fvH&GN^*7zj0ts*9Pd$Yg2D6F_DeS^!e%~kcY1~T;Vd+@IKO=TW#kGyl+4p3KNh~qQ!{!}QV)=(vZDs5B z7|9hkO|(2|7H{_jzf*v5u2(hlGK)+!!OWL+hTVDhvMJSy?=}w=^mq;b7F;<~7uVpm zj%0iXBClII5W0ks3h1*3Jd>3SKW?60y{6@0_T*AY)6_iiIwUqdD1~s^I#!0d!UPb4 zUCIV?LykWLrJ|zyL+S%Y!otOoA3kJO9Nx?kk)+As#RrfAGVI_VUHGjQ($dAe^_a-Mq-RGYwm}k zUr{gC?6z~=wAcz;DZFeS0F9H|~gQ!oG} zF_J_`5T;KJVqV4B@!{Ff8vVC_h5{x)@qi&uKZm?V+TywxI_}A+m_hin*%YCE^;-%Sry;1V>gYI=IfYVNd!QZ^hGkug5r_L)Amg)&xB^KTddcVsE zj&(p*igg(M&42|_%xerChK?_KFLhAk;*_hrygcK5#GO@CT5;D-->v(>x8rJUE50Ay z)Wtr=u%Y?V8bMHvj1g2>h8jEp(yioil5)Fo@;mYAw|Nmubx1VCgE&;DR&7h(M6i;H zrgpJia8jc-4>W$!76nPvDWSb(`-j%FN@aZB{r#0TUoJ#21gI<7J5?Ir6|F^ko0XdD z$O6==%MFP&YqOD9FmZt((gC2=LZMmY2Gvu(@oH|D)3dUN3r&i z+cMnPYBVy5a=!5_d1IClk%uh**o6(~yj+FY!{tg>xJGVESwGK8jvsJNU_-~vEx_;2 z*?Jok4q|7%in~IF&6109U;F5edEL=Z9V*_$P>Eli8PUNH4wF%gw(CEO zrF+wK)=PV_q@zn725YiTox6+Xk&qm^k(BihVg9y8 z@J*XHHNg009`N|O*-0Q6f)gk7*UYO2j_vJdrqh5;Z*<2Rb;3v@vUXAL6I^>D1~6`z26n$4huMp$|5BP>Pq5A`QWuj7W*6{rCY%Q zap;=yrKquA2N)=FP$;^Z84*dcEvjstW6G#1g065b`uaM!L|?h37;q1JjEc>A<)9#* zxY8i>qSxh5tC4gn-@QHKt-(BK>EuHDw7Be5nQ+P3E{TmOHq||zcROB(e`L!%zx?{o zLPCK)Q&@93+0$36FH~$c`JuqJm|^mx(@El9z+Pb&P=|t7ATC>hIqKo=4i~T)JO|g9 z?sCCOA?DyYkib7|kcbL%g%)oEvb)_Q zPXPk*8%1?NCil*J@8x-)d?_L-4)y1;7W1PKuzac@OECX@BoA+Z$ZHG&%k_c1TfTf_;yIN7WEb@Yoj8N$ z4wwZcyf-b%1Gr|yEJ4;o&7tt6g9N)w@l z8EDGN@7O|)tQ4D`8$(9eq`{-_`8AnsO`0?Ua+wOUJNKU%BfNY~-v(Xxmsw>CT2E{- za6Q>t^|R*$0=sD2XhKvt6nL*EmijS`)-8H-34m3+spa zIK(?VaNt4I)b2g{_Dwuj*}l(`);b&Dw>;iW!o}8wRmoAlAV=TGgpFWo{3K=o6Xt4z z3te=I1^QSnE?~|UM(!&rwH-=ABnosU#pMn-|!VeAT#e9 zz01ET^G?(BZle8sG12WQ*6$XRANgvEA#GNeGn}66#6;t01>y`Qi}lofyZKk$Aw6J4 zk4T~H3>7J8I7E;e(8Jg%g@S+@=n1d}1Lia4jocGyu z)#Ga2J|{UnZe7YC+4k|+-`_nKgrZF6W0-<*u)Fa=@0zo3FZO%Bi+kC1x7VFR^|wsa zB_@|i-8C2!(^ap(^4i$7b z%vehUx3gp&jDxt!N0}z5285(VxnwAqX7Mi`~R z&|Q1xTy{`y`4wsSTDTzo;d2)2sg*GcQ=Z5^(UQwzss}@{=YfNtsQFIuahI6?q=6FU zU(Y^J-&X#g?NkJC$b% zUlTMx??ru!iT`7XE6tExWh;59hrm(dNc1BAR2;aZu7DZ5)C)}Z-?IzOgF(w zd)t|0HPikv#UKV|J6VOH0BP~9x{%HA`HpZkA6ivFhQs65WW*>0@$JI5XY(7$^8u=4 z4ySmP+PD?#)#~y4QFw&--Tey8w&U~@+?D~SeNsr)$UWDE88JIgV6Wl8REcMra14XT zD!UR`KkXk2GXI94Pd1WX*#1Uqu5_9vX1^CW}^P!#DTJhI*m3B# zmHZ%T_#JINvaJR^;~gnZibXi%JoU5Z%?mLn6Xqe&^a63UjU@F22oY$wFL7Ht@WlN$ zE{P1GCJI%>zqfmUJD8rA-`e-Y$YajY3nY+YDeVo$-tON=l=xm0za`FOZ7fJ-&fclS zFE4qAuX|lHN`5%>+ueg?7NpGm4&lLx0E7?JY@qxpq%*!1wjcooZHGcMn$!y7{%B-0 zDsEG3YnunGo5DNm#|5{LA@tF&_ImuZ@%2|{pbea<2{Jj?Erd`|s*a3JiWx%cR2ZP-i^c-tM%k9Wh*9N%zcoo(Rqr+}t^`8Pe=OWZx=DP!mjv;%Dz zqt4vAZZ7T0i$Hj+9bip)m5o?~g*-*S`9+eCS&(-B_GXeRd?;O%*R>Kd7ta0_^k#^2 zlza}ON?V7T4}ero>k_@lZCu4^><-e45bE2+YT5jy%6_dnLe>H8fY^q!?%VrCg3?IK z&K-Vi<1lWiCDdYVuKj@4fdrA9ymEpkGDvs9%d4X$vfg8*rdwSnn_PJ@$E&j5k$!?Z z((3t#H+2hlq{(YXF)Vyhi~2Kkhdz=&EzE7O3{5W7)i)?_(A5Wuq*(XO(r!=$p`*3l zACDm9uJ5?u65jsKHHMuKnqwFJVoz|*?V(#;V}DP!x?_)5OY&lVt=DwNaLG@8ex%Q< zyZP5-(JhWis}w@Amw@{J?(2bYz#*XNOiUyG!wKwye`|jWVd#Uq(Fr8D7!m1n8~2YB z5<9&t*04qWf0}0l`U@jB>hwnLzuJmgRte;bIs7R(mYZ;2d_?vi^KVhtnN8NEQ!KH^ z^^SvjUB2>PH=cgx1J2Raz-~gQQ$Xl|F=i<1=XiQt3=Y;@1&xRk(2frh{`aw5p*367 z!&|oAj$a={qER+N1jgA*L11+KS;cL+?iB0BW;%>lUNmtna;vl1zbM^$&35DTDJ7jV zSmA{#`Q+I^k+xxI{!2$A+R9DvIfJ83Qr1jYQPWxK`RVQuUng1E@yV2e;=e@zu@q z5t)_sePXwU-phIssrjO$H(Qr;RRj;V$cG=khh!sMOo#;7W4zGSdQ`WP36IEpF2SlP+cs|ZyA z`Js34QCQmd|ITQqTH8FV6!47|SmnoiL()izT8yBInhW+PhEK>zd*(Ya4A)>^+Wzn4 zmf4dEr&sAlLqU{n0NI@+*u5F1D)mV8Wg)AZXCLuldU#7b3*L`@)rWkz$9cM|W9$GO zpPI~zshi#vas~K{mgVYcTTc3)I$)lmZf|JtQ}Q2OnKr=iW8=MLxu!gw;ys5F=eMh$ z-@9;U9JOd&el}cl1jqd8PuDUk896*Hl`-eyE|nW)5=?pw@;n{ulE(R zvwC;GxKlx%W*--J_3U(jV;e??{E_*6(nm-33c z<4cO)S1E=0ulM?QX_QB_jP4m7{E!<}lUJk9^TAPc<;m+t?3D<0S8M_?Dq=ft749SjQK6K7)J7Nk`3U>801)4&<^~_Yi6~Cp2 zG{B)09=%Vvd!A%_n>Y4R`*VE4ZX4JiCBvT|tzdpQ8%Vvz`IUgRuMU>Idk@(uElv8Z zlw_g(%A7?0ni6nIrK&?_+Xs&_o;nN1ETp~C+i0iWHvVHsBFNqIJ^iDlI$RQ?&4KQ8 z1{ldS9Hc!*Quum#@+}o?b!l#0Ua|pd3~8T`X^!TLS}*;kd+^ZwX8%ZlpqpOb5O$40 z$TvOO0h@t=$-J{of0>a!^uyQA{>THfad{$T0&{@)IPFrwNKJi zZSawGRjYl)lwE0RtX@N6=(n5@sh0rhhK66(xvZG{ARh{UW&z?iK@uV725W4y_td^T z#vREDRsp6BY~-@jH;MRvcwa@8A_ruLdhU8pmHeZ^{>u6YzH^cwOrVc)^~{4PXV=a? z(W&o3`7vjBdXJT$*x(XBHg@kF@gP}&iU!JT?6l%C4bjcjuPAdU#oh zt>s-JOJYA_^$FyU*?&pzV}XptDrMI3@2e=)hs@5iQ5OJ4;H@7Ui{4QTWcfpf$BHV^ z30cz>f1?9sBW1$Pv5W{y|JnpNFi!X_HKK0hy&RvM;7yo|p?6-10uSk%l22x1KgVxr zVbe5g;&xY|aj;qua4f&?Xs7J`i_3Tm*~rTHvtq64JfmI~3-913fPWvs$BH~Mg)HFh z!fKSdwdE$=ubu{F(q97 z1D&0cK93`XjHMm1ej!{bMsz_~vn8}psU-Z4DK+eaS6U!b28-Me)VQ7V#M^uuYq|Wb zy3fJu*g9NSQmJy~ZY-dI{@V2bYRm|n&_CNc+T|rvxo(%L65t}Zu;6ti7USs(#FM2A zeKN+i61Bm-@i`U(U_iQOK@~i~3|O_B5CZ0m%XtDTXK+~*Z{!8{r<%**rLRa&oFe>+ zpQ>lvWCSUX;QwN?%VjYGyu5DMHYY;q-S0tLugugzR)iOFTMisZQIESvw#UOR=s}7$ z-8VK3rkN`Lrfd`ij~pM}9>)S76=d0;b>$`|v^ z)_7B|_Tt%P!PqKEklWUPi;75bV^R>IMjp98PPil3b~0+8m!O-8w7`NP$k~`H!rHv6 z+Wm6t;4*!}6!j!FqsGng{HjI^HezeK7LibMA_}Nx5LJe>9lJV(;A%zTF8OexWlI1L z?Q)vVd9fA+kDTKh3y6@|hs>P`u)I z!ds|Q++In73Ce}7Xx+v~R!fjz$Y^tX{;e^_aDy2ZsXyiWPEBJUIw{=GdAXiPVsyEcA z@C|<|quzhwZCVDn1{y}U)r3`ntAwkI-HapBi1Tqkb0%Rg#^1r>tQJ8AKDJ@r`n+7V z5d({~&7byiGoI3X+a)l7qlAA=GUo;sq*+h&z0Bwx_hx%?yz)csd#aL=P=rNce@qiG zMeelVCw^NgfsAgE@#1^`!d0z$nmJmd951efj?aomb|XqXzmMLyEq0UCvafP8gx?xtw78ajyWnP_?)BnYA-|A08YNI@n zzb3PEvcrwA9clDZjf>-~2TW?+@fUhT4u8k{yr3w7jvC{)7L{bpHv^get zl|OwGsnlmGgG6#!tLGN%{wnPNG1}xbv9a@xu4f0&=+<*T$#*Yo^#s3p6}yy!sD;>Y zpH4BW2Y2Hah&uv+`>OnbHnu7B8??#mN6K?ax0w$MxHRAGJA zN0-67+kbxy(Vyp-3o%7ItRQ5f+652c~Ufzw6RR!F<@V^mgTFX=?bAJ(y@4)PB zlrl-wnrJ6J6PG68ncsW%mH5HDgtASJmzVNcK5j--hG6=?C#Xw{gbn;{5@rgCgn~^8Z5Qy#(f+YP9!&O~WxN|Z-aq-L zSYk<)64ACeE(^R7yu8wz5L`R6Ex$1RLfDDG4SeM7zSOE9#?i$_(t#Dq%et%m*1Caz zmC9T48<|Va@5|qa_q{%XJ>_3flX?Tu2VPRjh0A!Ks{g;L;_q!;atcuv6({{xeJZ$I86&BZ=DRz>C1Nm zV(jBrz2ySYKfZfK#zlD~T8FdUM301HJs(+@%9?md1eC3HPgNeVVOyi9C-e4ml3uoF zz2Qs5Tx+N}?3%%1&_0A}N$zO)nIZv@x64cC?R85!NOZh$TTRSCCo#gZ?;vETzL~)4 zvAu1;J6k-qwCNb{t#Oqz&CN7SSYxvy)Y1D1*W*hRb76f4uPqnX^vH`pP7N%sM?7Es z=yI)xqbt%H*>}X@GBEDU=cV^8lZmFlVx97!w}5!gW<)%kB6pxa8~O{uWK^GNgm~mZ zdjm4ieIKBC{YLg0K|vH1ZNXr6O&`NMrASw>_@Gtv=}Y}V+xauYnuEzt`zL3%R)@SY z*Z+7rUMXT|1|2aZ4pMq(_B0%O4lgvHQq(aII!}J7j$-}92Np#OBrZBee@8fhkDY{v zA#?ysFL3en8#_(R)$UF3pH*Y7_zSW|)vOhPo0QX}_ZMWvN@{sRfWxM>31wZFMJjT- zui`#N>Gp9&5NuAI@>V4-?;dssuj#=s=^O*8p$F+OY=l*hNv$oV#Ncw2-stvl)A@_{ zSIja)8nsoQkfTU}%Gt4c#37 zroLPu$T5y${O-v^APs%iCF6U;ugkX%F6ARJv=O@}G znG-Q-g6KCEnY+*J3SgQEJo=pE>;KRsp0ZruOK&}JRS-HXREA@T_WT&I%uVv& z2RCb?$`Nn~D}g77kA0r__d5ohn-nJ<;x>W0#B^#=ERp2Z4DMuqHmU*saQU&gWgvbZ z5{yGgL#?YI?0VC5SUtL(kqfuS^M08mB~N*3UDHgTi&tPA0+CBGw4S^Dx?di_B@uri zYc!~QwqhG~)I+o__}D;bh9NjnC6e22jfeiHPk}so7}IuNZ#5!tBleN?X*xJituz>4 zOjtk!L$2(h(|wq*uy0&I>M|zS*UIjb$fub&lcFuq1x+Kn*gTpus!?C<-6;or5|~@= zVzhu)gd0xQM8HbunYx}$S;K@IWq@9zq{oY_M7rm3adN%9EJ*v}_v&x_4p28>zqa{S zUoB4vbZsx)618sa((Mglwmu~Yvi;Zp`nJ6-gvR)WZTjxCpq0xzrQ zWBcL8d*;nT`kNi0jWp&>FTo8G(7J}3u_}~2r%8*>ag%>T&U~{uL&5^Z4QZ}Tke6iV zF2h7luk)FrMT@7-$<92ZxTA&|KCG!Jll|$NZ=E4QnEjpnDpRCWiWGm3V8I2E`M7Zm z7H>J0rsSI%SoXd$Z?e$bNO6pWrcKc2YP{WU!)n!w7b}se7kySGp3Y-PoOS7`F+`}iFm=QccEDKSmkqz6hb^XJ}!lJ-b=y@Z;S73dt1VV={W=M zrH2XKYa&-lgF7yEK5G}sX0`dPH@^C}*?53YN-yR#Ov@E862PxwU!~LL?ow;jQ?tXR*VchqtHz08K3gJuN3 z-uF+vTAeU`(-ra1wH_A6Em^0_#JD13Zg8RUk_jZIIU{MU3!2rK;bG;0BRsWOo2#_k zL^k+91H3uDOSvtX6OvygKUbP_U|o~C7djMMQ!h^Ix~}J`o6BmRH^a)J3Zpn7hXw|M zpfK*R7J=ePpMsfkGwsWtU_>ONEBEN>Nw?*XhUMp2?w|kK)R_NBGKUXOe%|e(VN?p2 z2RM(d9R1L9zP>zba{HMeV%_fjJC>o*XsyAj%N3=$lAe74CHrI|A zpFx|?!43|c^HDD%zaV}h+|cIe$7l;s7;^gx*_r7>^1J_nd{4+ihHx;z~|=5%aPAR=Nq=&{?gOn{l4Ta?ZTN<=c1Qyrs2*xf;X3kS*Q2vb4Y)9M zQtoAX76g#vrdN3AngWwUx|hQIxXF0ulEQKCNx?t%I2Cw-1*0|~I7N=`Gf2XB?CR=FD4&tmCBu@KXAX7{}%j+#FG3Q6nHfb9X1s{9xv`lT)Ggz#G|nO=D}A&*ubzP1D$b??Zf&Yi@c!bKnzvyakYAOsozYTTZ`65SsMu&rY{wp~O?EvzBF zaWcvTF#rxMgKZJhzb>PZPWHtlJ4nBVTjuMZ>$SZX-BdN$C)EA5f=0v@=x*J)&%^$nS`M;A4r$MmxHkgo4IAOQYcSO?_D*X@Ux`?#cbj#qL#T>P46Bt1DEZWI@mc5I&IAeo89eDM%NRx|i~W&WNERUYe)7Ic#_Of@ zF$<}rNln1)pl>PK_E1PHvjop0$A*_wkXX~a%M5=TD>S=&0T+?v67>fRuHw#3$u!k1 z<~+0-CI-O&NT(-C{-L*Ph3zAF!6s`GbhW00+`=9|OSUg0;J?48E`vb~xzqVswj@S3 zH<&qFN4wJpSUcF(RBA1Du??pnWe{;(9nM;v+4xaOfk~Z?qj?22du{bf-k+dh#9S<5 zT1fXos1AXqk=(vQJ5DN3k(;Hek0us!n-gu1{xg9OmWr*X^{Z?gNXsQ;u8MJ}g(=V# zaOP88(uh2)nLRP=Bd@_FlK!42W{ZOQnDei`ZDsp{+V`J}e;)HlLt%ft2N&_!W82K! znujJdB#(Po%GXX39)PeVRuo9()zu+{taU%hwC%4Z*GsFnhxLoS*7l-m-bmp%jfHLQ zDw~-wnLL#-_*=fVE*Dc?G(o>-P~xO`?#)~oSaq09G1yfoWh~`5nC45Lmd>e;sd0=XH=Y7JCx5!fEkT;5^$E(iXS7akPwE@* zxp57i&D$4eKesuYuL&-#P+2idb8bDUXSATQNIE>;DM1JWbUG2Dh|{n2zyq8pF6jw= z!Ik{5H}5oN&!{`soAUuh5&+)v4#}mYV=%0LI0jS;!M@=#<8kXTLldASL85)*A-ul{ z6pc{#qYpZzes$8Gid&X}o2^h82qwrHbpf+zf^@%t12|P}eJVoZ9Prz<(*ghI?!(@L zR-nEVORJ`VXtd#CG`c-R=r~Yl0#_yaAz+|ZN zlH9=i+jTU0GTp!pj77s0ra2Y31=MAE0`7yz2Xgw-Z;yy}ubizHR|f4aWc>=+ZWsWb zqF+zjCmwtj%n`O!%a`(yIv_P~_viPRZLV!ld*}+!1j%k-Rkm_VdlZIba8|waKN4C` z;&n}Qc{ilaCR_&a5DD1j=3^>Hw1=jsH$9U89pY=GJOMQc7=5zFwk$uJnNZQi7H&+2 z!c3r{PD@q-qt9Jy1jL<~KU+BsOGDQxqiKR%>&U-ihB4tk<+G_?4HT7;yK?wAa%`~| z$4a-J$Z=_B!ZUT|v4K-q;R|qL_4l<-#JAR2Zu13(Qy=`CPB*Zrk$2s&MtfWzNz;)WMT{^e`2n@O5XDo zxvg}zgQ1aOpH)t|o%-hZDvdL53<_`Z)`dC_WTon8`#-ZP80W^l^}B;_5Bd)e>#|l! zTYB8O-~&}mtp~sVL)a+0tW@J_lLic$WDA-19BuqKL%*iLGHbBMPnAC)VhcOcH@61O zf@Un(FE)v1(rN?bV(;Y%Lp%l!t|78K!(G*B$?!_$z%i*$hoC!)z15|Dcz}>C6fx~w zJX+hbpy}$$Us?1@z;6xtyW?=o;pYeAdu)mYRfZ!ts;p{6WO%a5o)gj5G^?o_EK zIBEV5_WYEaXI|J3`Vv__^5ViP-z2{@cdc5uYo7g?C`W-wj!CV>qd@n;sOAxo&tl%_ z$MiyGj}z&I|15SZU0s|we=B)XwMmL}XU@d8eSm+I(k5nut(zLKqhn2pt6r#~K}XJR zuqhWaSQJEssx+k?=(!aWo7`j;XHy<6^TP|f7?Sh&o)PvHSIrVR~_cnIX+>vtF^w(YBU?2T@$ zHXDA^!xhqL7GMd)vs-5{c}5bKk$OLb@6^K zCSo#^Fylz6E_5ZXGx9I|*RZZ$f-`@OjCb(6SU!%F(Wgwa*hU9`{}&0Aj&q?UD^^>_#qzMK1vW~vs>AgUGEp9__@KPSI9|SRd0m*ak;k=6 z<0B*xGNJfuQ6Q!75u|yrq1bxq;2Xtq0JrNpM!twDMA>FmhHQ&gc8MQd;euXs{}rtA z378ptI6efK;T^_EAAMBahOa=(+9D6DXAba_@XNg%$b=P2pM){jl6yEPeZs(C^4{cj z5jY;}RJ1-IB`gpW>MU1Y_=44G<9!;-xr?1M`t3?b=7c8ukE5XKJ@an5n;_ZptX<9x zmA;yv`#1kwN;+X>++m`Vw?>BEYZJx(RJQSN@1A1kDn%&nb{vvpG1vsNJM<^LbNx|4 zDL%7yuzUuHcI}cB(=w350x5AjHeKPh+Ms?lTr%JRe6*DLj%gi;WS)1i%?_=~wKKOS zQ2q*g=*{g-{EZH1fND~i4~YzX3_#zM3gPS|I1PYgA58}v8SFfad$tF8gR@TM8JPn* z4?sr2^OgUc8FkJRL!)!B8L%cPi|kVguJghVt0D~}eGu0%OndGiVTTKr$cxBk1UrN^ zdqUPGh_@d1Iq`EV@+(+G|04D}t}U)Qw($X6<3%;&o;q5nC-*9$o)+gh`4Mh2yQ8MA zFF*U+c|5ccXdTr4z=h(ns{KF(8i-%SzQXH9JVyY_OnCBGy`%-k##KkPw{=vz`q&oT z!2G!jDt4n4Nd*a~oAuPqE#8U(5HBA}K6`Le7eDERe@QTP4`_(Wk_r7)5pzRK)xSSz z7S7L3R1&$UA)7CD)1BfQs-s75*`{i0`k%d_xW7i@Pqync+#f0TJyN$+GHc#N>p}-;2g+ zXYqb9(^eZbOPnw)VYkk_LMbLw>rP&89U37bR%~SufZ(3!4RFH2Hrh$=GXK- z@ymH;Hgtre8N||kp*~{2d7#ORk8e(|dGS=~qQ$*Cp=8oW`Xu2|_i(3w zOQDv+u5o4(xniaek1N{KGH6)3!^v*Gxwz{xbx9|*6U#r%|Fb~Qv6Vg8mOF(3J4>WH zcX|r}hCosp)UiFN{njnes&*sHN^#3TbH40Cx=*^8$dPlZgj_%*Am;;Bb4QG?9xOXBg{aCk!LZN z016xiPx1$+zCB2xa~%l)T+;l* zBF?=W3D(nI>hv&f7VY|(pNZ72Q+w7g1F-E4BUI6M znMTGhO22V>+QXELw-K_D-ZZtuhunqG#-d)P&2T)efgkjN_V>RFaISVJ{KK}hBN!Oo z6lVmArsyRkGn0Y^Ch)3Gp?LI(24SM%G(r4%hCO@o#HPk}E*n zESLIhipc*jawHJ&zsM2U;yOGVF?c}R;?0NA#mHiH^^ShTtsKexbFV!bU1RDg_zv31 zx4~)G0s9Va<}+LdH>;tDlxyPki1hv?5=)ovBY=PqreW=aA6#LqqTPU$?>2bFS??q- zYaEElYd?Zs@rN(S5lipAgY;8o?tW_6DM#c?Kahm4LW=Mf(j;=wE5Z65k4zW=Ari6! z*H2N!#ClsSg73o#*|P`w;u|**#*kN31qXq;!(|817tW?0`om^#(~T-f>p!;DZI z(W?i-QjV3^iLffXtr>Gh%K+v|1NjcwdiQDZnI_j;(}QgL-2Cp_u~et-)Bel4Lz4hxrq@9J6r%XEkN5aMAq{(6z(Wh!A>9aJbb#NiorEs3#* zDZ<3HOG+}`5U+Apb3ogmTDwc!MlUc!V9DxP9pC%&4meQ5ZcSKF0bOU2kzF56UM zp_XV^-8hGUW#CIzs#O|{^ZiuJWf8QnJ08Eaz>aFLcOHDaSFx?6lRbPcJBg$>EgKDq zdIxS6uk8@sTP6_+`H4KB-v*%+j5?f-#Q`C;kQb@kz$oxi0D#Hb@a#hZED;1$sC+bv z-1(^U601~HUsa1fCwH2OuAmxJ%x$#uP#%fA&e#oS8K`15RcwS0O)5W-rQ^RPN!=?9 zZEm+7G{nb~CnO%WIifKDOe=aPSt#z7U~!TKR@dHH`LSRAv&+Yg?zW0^D_D#-V-Ffa z&wSsIF{!z__FX5GmzUq#`l};3>zxrGLV*^cn&}xvGp%%8cxl>)>;Hi12NyvP^`%JBi2nr#SVvMJuOGXws$mllef1npV3Cs@XWbk_YDK&s=$0#W1YC z^{aMcp;PYZn|nj=BX0``j)Ro#LA$z`{eY%t4#zmn<4@%j_>11dN2e+KXQCVqzx4;k zAe*OwJl7s7*=G-{gvHV+H~g{L+ue-|U?M)h)n}L*$@a&l6_18XEKn!6M-iVFM^z3?gzo4&UuUi6$_BHNmw5UD zHsj`BuBxz_Ze!*|2inHnHPpC>&&xk?`|XgXLrcv~Ue}LJzI{ID`gLJWe=Z0i1X?qu z?4(|wK!bjbu;cgxDM(;u(~I^3lA-hF__!ft$1EhyV-u36C98?rA1W^Zt_gDojCzmm z%m9BcL`2p4ZNs&eGud#$PgllqU7&mJ{%j9^B;0(FbQ$7!jZJP1OSHQWPr-JS34g@;BI!Ipgo z*?eAZhp_&xYLRAdnEYRi{1`{`8^TKt0hu7Go@Z>luBPZSqh)DI z=Zkr-G>^=tp+=6TI7pgGsdL!2yM zSWZkHKCWdeDus~k8S5b=zN357`$ z)+K|+Dm2e|y}O_ath0=wRfW(n7qFA=O9%l!Oly(AjLNT9o_XAZ<))c)?nvYjJi?eq zr2{(v17h~yaUp9O?O%~RnzE)S@1D^=(g<|!Tr%ITrd>PiH8IJT_d>-?=piFdCQva| z|A|esy*Njfs0zx!4k*@-e8c6aXl?+vqRHsn|3CWo&$Oc%gf(@_sAmaWNVYX{Pq}06 zH5uz>=b&3+3V08f_hJ6fNF_>fj>`T<-ZavS8TRgPclN!eR?#1zuFtdoC+i-r-#^plx9*F;W~#*#bLhW!e*D*x zMSnrNBLe?^x@_76?jLOb=U)vscB6(MU~C$icYPWE!?;h+whj>4^IbaKMJyoVAQsfj zhwWG)Sh>>!5JiXtaVvZIC1uf0B~BP}J5fj+>p#@2e=N)XeD?n~?gfWq+`!{n4>+sz z$xVt|sCRGF>Ivqw?zd#m)cgK?YsaE&Kq{5=rN~G);qQ=9(fgVY%*Z!P!A{7Bd`*VL zpzWQ6)v~Cq(QVhr_j846kxK`0`28pcK- z=h(QBpQ8)`69344lI|82LBc&Uok)97{pKEP{C*#fS_Mq z!msMrknCo+XUAcA(|dmgeBdxr`_zY#oLSyASxuGEevW|Xh#vfyfQ#@CQ&9m}zj-WZ*0f{+ zB7)`2R41HfvPCI!kCMa)s(7!hg0b$uPi7IU9&wEJ(u1o^tC81$o5@cFzo@V7_f~B@ zMqNt3Js1i8`J0&9Bx&M4IBi3?M`~UluRG1?%9?1z?W-G~`iIVm%h0&`iHsQ>8MJ%SnJgKdTvd3;n4J<$@~I zQ(3hOfcxxdUx1~V&OR7NTEjxObvl4>f#6)FJ0S}}>Lc8pXT5^Nkg`@g#QU|S&gr9K z4p-XxXf$4k>H!BJL?5M&2nLmny6ac;kGdzrsA9}$iYbdW8E8CJmZN;Y$5NTll}eDN zjN1a^fQu-)7;i*H=RWBiRtL{U`RU7Dt~o@U=7Xotx+eSEb8u|IFD8)LTCb>spQ5ay zGnQ5N`^}t?+u#2%Ur>M|c;st?YD&&oV$4_>c!w)+O+lNg-Xw*luiNsL4A5#IQsQMN z$7gRjXo$ieB$goCB@@v^uR`o~yPty{KJbq}At9f!rM#3i&>X#I7Y)-Rp7q2KALm43 zO|xzI8TYu-jeKXwNnO)|L#jeQCPgFZEi)Ib+x~;d@O0ZjRJoQb29T2_aX|Uy+9(hq zuur(nb!#r488li}<}BkZ53*Dt)locmVJvj@s|pc)GR=qoYt>J_G`19!C;Hg;o@S}> zyAOX!rUXVOD|mcKT+%&|T%U$l1Zma{Fg)yFoX)>IwJKoPH6)=#SJ0~E7jPfLK*0A5 z!vj2OkdzX8nu8E<;583D+BaJDAx%(aV8{dkL||*n3SeoKEVYaOrhi^!=%5RcD%iSh z4ES6c?PsipQt0K*y=Mgme>C>}+knUWO}oPrT=qi1);Qh&(Q|cUo(kyn)hB+6$4A^V z9nn8>V1YcVZR6AeL6odu@Xb(AcgnI+iXhvxPuwRRZPmM#Erv?}@#o#`OJ6T7g^DoV z;%{H#?Ln(wZwdH7qjTEr&MVfPNBlPxXAx9~)>wQ>P)($7a2%qp&?_DzWDCVYB+v;4 zucWKrz8^lksX3#I`b9Ers`u@Ud+jX0<2Uzoce(77oQX&J$JVj#1qyVHe$7>ddYgBb zRDEr%sCbIT9aFq;_w4*HmS8g-TSRwXhF|+Af}A?un@yn zo~j}HHqF!_F}Q;v680mqn5OZk4b9W+r&9?pIobJ)gV5ueTK{(LeD0`MRKJ_rZvm>o z;VF5Ob>MVt6fR+--4`5-CYL8S*H;^h-Ab@?ZC?=LZ>Lck|1R4K8g3M8b7bi z==;D;73B}!MCk^L>?+3{iD`S2VB(k+wg$r=f5V$;frA>;n0qZu&%s^;1-!!YU9q<&cbdz$VRdRyW@aW^ z3XhHek|mq}GDyJjoUa6*-F9#Xft}@l;i24bdH1SckeQ_@gj#LwsEmu?F(5*l*{4a6D(^h25d_D{D~8emT&{RCay8lcAhV|OJAuDVd# z`+)qXQwn!di44a!a7fpNdIYqI6`JRHR|qP2qxL%4yWMkMcBk`XVVmwS1}Z#MztWft zvjw$-3}!88`fr;e(Rgj5SQNYzZ?UCkzzLG8ptHr6C$=K48FsLhTdx+r6J^q5CTDzD zgf#Y%SPxxal*B_vrQuFzGgll{c&!p_cW+6IRbVX&25bdD z+BF2y{b8`L_G1iO0m)7Y1L{FV^a(wK&ni$Z7J&_QNM3(q zSX5aQc|-AWTWa)OILYfmu`+n|)|76}^rrW7Y{Q3yTjn4mWy`KkE)ZbYfZ zdVQ*8#Mu#tpI~t*;CHx#C;OJc2#V3|v(ql?Ig3PCPLwYA*dkkz9EVlvc0EL}hq_%n z)S5oE7_UeS&ZZ_fSXC8%S38;VUM&NgY3{#8z6+(FWrzxk?EYDj8W%as{g=YZ8GM6J zfHezxkpKSV16PaVZPZj#1=${hK*Y8Yg*kgn8(Mr>B2_EO{wfN_C`E(>h?m;FWbQdw zv~qGh?d#o>PaugfAm}>j+}+>%N|D2&w1>dWFU>b7aWWQ7_-rZ$e~D1Q8~6!D#6m0v zWRtmAs6-z{v%S5IAuYG(8CHtYbuf6mXq3OQpyzf1!<;UyDjk8ZrZqzoOdBjXu%(;n zk5hlog`~h0yu~$7*uk~IT>^5yf#&vlLSdgHBcRi{ml3pgYFv@kM&Zlm&uUi`jF_8y z)xWW$)DI46}@nF*PIoKA==j8;x8F{wQkL-G1arY_~df7A%hMeVG1HY0@ z8b14CCJtsD=|fi_A_=E)o4H%bM@w^S3Mc??t9`twtzWDDkIVc1M-lUXUM6U)f~tdr z=f(w+XH1B&iQiSatV70AJrTurQm z)rF;4)1Y$Kdfa={;QrAp?@v=(>xy8kCiiJb^~bKfe9!hOtNEYRriWv4yL-Rm*u*g?t$20xL*O4>j;(Im zgm`U7GK|K7Jjd}Yi0hvY_iL@pUBTO7urlT44AS9Z5!uiH>CmjI4^Zw@wOij7+<>49 z{%;xvsYm5yX5r7=9pEZ2O+hT&WSLD~JDe-GF@RPbW~XA~5@6K_{@fL|3qR4j2TF9O6r{fEA9<^gPjYRN^gi}Cq{@_Cyy`(W>2%kri;<8aaptYgIuoQ&ht(yY_t z#_^=^;&=d#_MctO5(SI>owG*lOs^c}bYHHDMx0fbnijT%YUfLlMc$^enHL|8UD|^G zewxgca5ZR4`cxiA`bsMo{^1I{LjuXpCA^b$-XMG$bv45g542+n6?)JY*? z1EDH2xN-X+nQoU?O*E1s{!QABFZCr(`wXy*{50+k34nB_qUw#`6H!o>s1s0ns=U1}L?JG#D6RjtKiCbo(ZtVd{HK59HFxllc9ix^5|!!3O=y(hJ}2 z=IUe}v*Uv>)ecTLr|YA7)+yXS6x$Cs2odXub@1`-y^~{QaYCRqiY`W`fuNPVm3B%G z(6Fs6YY#q)TIGvCV-`ARXj9|W`qfQQS&r}mIacR zKW)n2R)(a=ohF9NGL54@L-Cc#p6%hghL z;1|@p-JlLz3P)r4C8;?FLEu#lbRJThya_Q#g81@|wcSn8EBGy;j+O6!sk>#sR?EIM z-ae{-grH2elMwU( literal 6845 zc-qBSc{r5syB{P5laeL7k`}|aGRYbdC9*^`$TDOw7-A?(MV1nxgvL&GgRzZ03@VIW zw$X^b_U!xCd*1Oo*EzrIcb4lqf1T%=dEdF8`+h$6=lL+}&`9-uF!ARrVpgo1}qC=dz&B0&HI1VBRo zJOrRX0DulmhX%30#b7i*&qE(*1OkshP!I@!o))ywXapLMKvNKCfX)JR;?W2^9)YJI z@Bp0@7)wDTD0l>gf}j8(M{p?uKqCM=0-zuOfKHiS14tTV3DN@S70@$*&>$AL7@!wK zx50r&qbX=KK(7x>3tD(Q8c#vv0eZP03(!fyqbU?L1puoDNrACw0FMSJXaJy#K^F^L z4ax!5574!tmjr@=q(PPdT`GEF5F3OBu>iVqbT?>&gM!BcbRog|z_g%6q2MV1s4G}5 z$O3fY0SX=f=rYs0f~LpPg$C%V)3rm>m(t|`=uMzkh^8aaNdxqr(0QQgz;tMU-XeN5 znx2O~0I*}AkYIgaTF{~Z0C0FU0Ehhs4m%1Q_6#`e3UH`9aHuSBs2y;q4scjMa9AO5 zSOaj#5;)`m9A*Lzv4F#9;2-w?)3EdL69!LEH!V{S2!x%B{$}X?@q8bg6vb&GaYn9a z+!K_$9YoW}Krv83SeZ~1%DchGIX&N->&#e-|17Qpq;fFk9L@{tlLfL&5g<097AfO>8 zb%Qa8S<9aYfga}-V<0o0y@B*U@}Ew1X;eph_0R0Vl=?A;;{PG&e?|BY=fKxfA&p96 z+OK5Xy;>QiFW6X2VxIC}ixvB(e5^@6^X8jK&zx2r7INOJ58UO2dIQ9Qu*XBRc#>7< zYnF}DBo5Synk-L$Xrh9n$kc(`Xla>TPN-NktBh-P!fC0a`+pVywwbwyFwRdZiCz&> zB?-}&ep|YZ#1rq~lEc_4In4L$Rz{fpId19iit?eVn9eHc=fU@#5@VlnqZbtjV>;a> zYRKjwjJsz`IvmGhcuwa<)yb4^w=gub^4G*>R#CEK)4OCTivuJFtxid?q9xug(2jO2 zSb}9QfHeaFml)w?t0 zicgVUl%|*eDoG#n%_QF1qz_hlaz?wPL0wDxZG_%zt`}C~e9&Y^09JrMIOka*QXINJ?=UT{gdZbb519uT8FFmu#`+1J@Vuaf{3LU)b8I5t> z`@_@8?w`(^+(3>NPhA!4jy_7B&}~)dco0C8x1DNh$@>wuqa_?dLNpu&WaHB5K`JXM6;UdgoDWq{^A3P^i3p#8I-xNYNYu5T=3nmYTb zoQs3TUVI##RpiAA*FIkm)4&(|P@NfNoEB$kFu~?zGH)(MU|a8F*G?3O)gk=(Bc3e0 z5zU-bZo;@!Xdrb|n8oh_@?)nNTrDGH){YsafEzS}UREuBE0F!+4VoRK8?HHr~SChMhL@MnmFZj9*mYf zj0g!OS@vPQJ(v4gDK63LGnJx*ebF?!DJAMyaHP>9ZEGquwvpOqc#v@K7{x_@ z6+fVDjghC_yQ8VF6&mdlEm2dcG(~c?yea6HQ_iIk%oG02#lktojQp}{0s6V$3_9vf zSoV1GcUe6DMTFw3Dwkyajh9@5F6Xw9rePx%U$%9r&BC>u(M8fLIpa2$ zOa=}zk{N=l7Os48t@F~;p6IOAABQ;kHrV`VM%7{?e5ENaHwmi5C9o^?A@(|FnWGop zE)49ZY-SWBrS)oHkk`zc_3z^@Nloq)c^WIpO|Cd0H$#412ee)N#K5;gL*YFZSyGxJSdRTA|s z+l{4|&(Phf;nODcNI$0dn^C2IPnZx&UElR*q4(Gq^|Ka*t_yu^xNaIrih=^2WNP3%gEOgAvF{ z^Gsj~tzo~l=D)B2}zEYMB)E-zfN$tPS} zSS-^YqpJE~{+!v8%_Uh$<-S%^Jp*T^NV!l$gCxWTO5wF$8?%N_lpeK6qnY%CNm)zv zYiKsk*=eMsLqCB}LXhnv^?7070bc)n)e*W6Y;;f|1wVYWt6qcQ_ z1dB+MT_7~eEy63TvFz&ZhxUcZGA$)Lh45EZ(yS{^LmmlGg5&gpAjWRBqG6P`8G1{< zkQ(l)tHk-%(Y-Paywn4lYvAEE9YdDs2`ZbsPC-@DuOHipw7+jjU*g}oGT`1fO8V1R zy?t@(EDkfABWvCJ>!Rb`Pv{~rC8HiROy0EnG!}OI98Kpe`)-p<@tbGkjHr!c;4bFi zmnK@N_U;Q4c~>ZKP4uy(Qt>2=`91UGDGY1=kj+Kbe8xrA>I`C*egf4iy!1=2=?nF^ zjJ1gblXt?1<{_0cdJ3D2WK2ppy=LpB1|fpH%Dwl0Hv5qC3m z-1wu^x3u%^f(HG!a4*Z;O2l4yt7kIYxk#K!x*q#7KI#Mc*?#`Vl5IW?K4;bRe7OY36E`o%W3tM*D#?-?>wL*Uod-_?aXY&)m7dChe*Sf|=2#UvcK;;Q7?(uU< zAE}=iLi5u1(jT7~a4zWSjV1Mp>a;yO=87+RQ>;^@2jBAB1SfVAY0$k2 z3HyWFA#zVsS_H#nQ)HENVhYf$9J$umJ%1yY@2TxSR3^ukrf1J>DDv`^myF`KH0x0M za`G=P$CBDNZ*WpvMBS>{@29klWt(UB(^7A`-B2frIJr%!@I6^bv2#>5x6kf>#r)3J%9BLgwua}M(7KFrLsa2}*Lj`c38X6~ zKWeQQ$?2yRH~!9Hs-5gl-?o`hC&sVIfUIYn z)zDK(5{lW;<$HFGkM=Yj=KLZbC{+~MekUS5A8MOFW7lzCL)1RemJ-aGRvY zmx0gVa)=tN%NF{I@HQyMIfBfa?`5LHl{?NKxOMW;ZC!O^LsL8KtI87(AM@+iquF=Y ze|2|(Q?U!TGK~2CV6TyfY}Uj(qoqGzoH1v~ z2LD`LJ#PKB!M7_YAmgv)E2t!X#Ey^R_a%l%eb#w0ax_8IKVz|%M0`6KEx)F-S--r& z8=84aYmUEw9WDd&COuoNuPHqfm@d*sA}(HU#fP_Ru-&Jy9#7MS_dK2$9nzkA&RD!~8gQsEa7G=bJSK%72rYkBk*BKO}Xz7xU6SpB++)~m2&R@8=GVTen#*>vVc zV{ui1${Xba79RTO&?I>J z+=2EcRxKPr4M}#P`}SRJufCrv*B1IxY9cyGaS=|SPMdyy!aMeDmjbkg*TN*TFz=5K z`2K^(P2_hv#&MGk(EZ{bO4mlz`g-RJFEBjng_;`5^snEMT@!-*t3?+s5bjm(geiA4 z{%)Eq-M$sF4`*X@dM!dz3Uht*?S;y6J5gFEmd6NQax}Pwv|&FS)BlFhSQxeNG-mQ= z#m2sE_4o!IGZSjqtprLRkVfo|>5m}v6&?>9Q(5iOLsnW837Q7>!BWNLb)#OsrFUV5 zjRCpA1QTFJ;@}$91#^qgs#~(j%rZ2^OWIx++%)M{2h#k&v z+`{WLl+w^Ood!omEb_1jgpRB|V!9(N(&;#d9IISMeG8{Kc?CD2pOw`mh7?>GWEsFu z-MrTvtul6CfOtDs1+0kmSMT8+yt>*oldC=D)c9=c?C;9xGMZ$48Z6Q4d)~U*bPpDH zEqA}=1dqvIQQA$gM|QXxOiU{>z{1W(k}#&aqCcr4T-57q$TKt{yPq$`V_Fuy?Z$h% zR^;h6(c!mw&4B}#M75@xVRkYYE6>`7 zLPUG-uX6-l-Si{nUp9p_Oa5Lz)?Rzih>flrky+iD_+{qq_{5iZi zW2bj6mfSfskl*TM|4uj6;cV06ZIsxCCE=1~Q^}jn^1*jZN3mp?>X8^vL!`}@Cm%Yt z&j7@@rwTjLCQ|*UDjQ90Lt0PhY9kf>?=&bZg%j65^jp1&UQCG-n?Z>UKin}ZD;&F+ z9~UH1+NO(?bn#vO4E#u7nx-6V5jPB07wS%wkf{tMX|;`!JS|qGsIT$dvEHt$`lUgW zoY9{mB2O{#Zw(M>oJ`C=tdEl=^9O^<-_B}Dvb85+hZ0_!ippm%)^GI49Ch7cSWO#k zBPw5NfyGom36Ch=96NX83}>-Z&$M@w#Je_PJTH7XPl>JU*v+TWakX_oUeF|)EO z+lCgI1%vmuU(lrV?%hI$2azkiBLx%Sw*!yKINowsI5*$tJ}B7R;d8SoEbKL$}U zJ28MMV6Z5VV=&sjubtD$-P8MQ^9~Dq|@$h1SR34P6(+%-3MFyqq zetqx*{vwlu$?<7eiqf48Wd`3J;T~H+BxQQ(p(-K%Fh-wVPSmJP4xWv- zaueh9G<{CS9zdyexa52K$W0%@e$^9IKZSm!i)F=eod`)1vgyx)n+m4|G(UzOQwkR% zF-uW(erJ{zZfy2?Cuoy*4^9I8e13CJTPziwTIz6?+3$&e`0a8(iEj4hR>yVD-*+i~ z{!h=oA)Qy&my!l^M{IHn-Bf8FxC>IhGf%?SpVBAKO2v?_KOF-WI|4kW{s{WcYB1G- zL~8DH$145suft&$GuKo$f+qE&Y%V3m`_9(tbrg0p`Oe-S)tUA@1q~B#&K$dPq4K5} zp=McH{&(h0VOHPSey0Dv$>LJTvM0=c>RJrdCQD-yDg>F zko2R4ML#sJyO0QRGSKlqqC&3j<&q9aW3j&FK_1CE?OqC-xeRa0-YEXHN%YgRVGt- z2mZ7J$9k@74khp#8L;Nd__YD=h+bj3gE1Waf%-eD$7Ah^t7j86tGzOu z);SEg!AwCXibIvTV~dB@b=A~lw?EWd4vP%`JT3QSMEY99#S2071ea1;dX6S6?!^+N z_;e#kLszp>Pfiujk#8eY;dB}GQAtSQH_REe;}@m6mH+FP#Xn3ls{S6%kvfd@|Kjgx L>S+|JTfh7_;-2`M 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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 QfcOW!ZE~wZ$LZOB0}vkC*Z=?k literal 6925 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 PH-VuZOt)6&LBjt4W?lBU diff --git a/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_local.png b/libstdc++-v3/doc/html/ext/pb_ds/multimap_text_insert_timing_test_large_s2p_tree_local.png index 2b496b48d780558750b1667e79979d089ea52cb2..307ca2db18763402e240492698308a7dc8bca8a2 100644 GIT binary patch literal 27038 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 AF#rGn 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 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 E4NizY0{{R3 literal 7035 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 L|5K!8_wWA#bcLeS literal 6853 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
eMx=zfMiGct8_ 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 literal 6892 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

T8WX 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

VtV*@bG0r)rlu{cM-#0{t+ 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 ZfsMD0Sv7igyp%T~bhHfbmTEkV`VY+M%QFA~ 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 zc-qu^1zS|z_x2fDI+c(RDQOr&q-CTVr8@>B1nFiJkr3$`x;q4h=fnlq1a>{F27~nZCP@Gu++F!qo=w^77(+`O3k~ z%EHBl*V)xJZBK$00GI$JnCx@!^qmYJW6G189<%-F5F1%yGHfjL*H+T!q-unk)hMVi zx^2`Mjx2m>V{Z>PNPYPdnW#|m$n)mdD3jj){G_c)0^Na0`MlD`YoT2lepgT5+#t#1 z^AP&*Ou};wnuYY)B}BEYxwT4vN0H)TVZ4!Ha=9B`$ zEEu?%x=poIA>^jLT2kNG7_|TPXW|Jr1)@LWiN}oB@9%eXz>7TrW?ZxT_;`8uf=WtC z9O2+$FV)gSGJe@Rp(2Zmi(hl;mMbc$t0x)NJD!UJ8hQ>jjh+mNTzaOZQ`==th95%M zvfjOW*RHLjBPJ}INI_11jj^FP%V#CTlECc(9obz{=dFr>lho)1wk5{ zG~>;{cj_w37O$npQiWa~)pJ!DJbymkxH^zrlp@T^&hF+TzywJA{{6c?UD8i?Z>|ZQ zb7U?9csIP7_YGaWQdLu1ovbk02bOm21DF$+O#cnAd1Nb?MNG`Vw8_;*xfVVs-(sjE z6+n(Ct(@$1ocB&KXz_INef~T_g-FrP&JG0~l5o>avPrT*X8EikYjbjP1bEwm62(1t z8W$ZUP?zW-=|bHK!=~>DpqQGGv3(%*@Ka;f%SyonFs$@96MAN=G$hczzP|f(bQhsq zM0h|nxVzJBh>^(Jnwp;zI9Ld;G!Z9H{gy0nN#+XG=qzOR@>X0SB$gPYl%%8wj{q+{ z2d$GiG?N9~wA!-k1Y9Rq3mHIBKtMo=UffgSE-9(zRH9*oAOn1|(j;x6+yI((+1&NVsnd*9tpKx`#sq=%U5F_VmA)t`B92c6E1O@2Fzt(nile1BY4) zd2JtWI990E6Lh|sj2#(Dqen{$`~?SnWq;mku1lzx%xgm2@)ZFbsH>`ewwFNV7Z$o& zTITXI{ZV4peO2BeOR8laN=!c)bkK=Q_U%25ojkR?`_Tw9y zvcWimG@`GJ6<^y-RTz2s&3t}|_S%~}Z-#z`$W$2CS)+2WO|M(mDjxVKrAMh9xjZQ)mgX`);ik6&Bvl)fl?dUbW> z^yC`6c&+s1!8iJ7iKAW(RJt5YY)wNc&ehuBhsB!XNBMXwL8Pk?ty^NP+d$K*{g$d-1gauyx&6sQTanrM< ziFr9z=yQ2IrV;G>XYXqA>~I;=ao!mOn;CkP7hCQyQ`$0FyL+ zbZpGyNyZPWo+$bUnVFg3Jd{p8fQ9fQL%avfJ@MJxXCLZlKguh>eBqPOT2uOJ&F7;t zrLX_&%~L;d=V5Re;%^N&B&TY<}K^q+?95uf~{(1R({5j{W%_PNBhP()>B1LSCCX z<|5eDR;pYUMg@TZco?L31)Q#IWUK%Hy;*zWfe(9L;I{sQPPfXGzGP~V{(O}a({ei) z3uybhRhBSaYdiGVWeG7x7$&@I(QPM`>%7>;K0zB}Rqz;BErtJqOwm|KZ_WL$s0VQ@ zA^dK5&`?q>JOn9l-Qv0Xwej`xFo-{C(LsB2VuW-eggi#|FpKxuq&1Kg8VZ1B5=B5} z!;j7wE7G{Q`1_X_DIFBJ`uoQ>6t$S^%0xm!g4oH{L;?Ew*VsJh?Ck7fkPsKA!^9RNdIEP6HK9zr5 ze0=babg^1@FiL6>PzE>{6Hf;a?zlh>OL{4k3YLSbtE(V5)O`@G*au>tyjZS=gX7IW z(~&^om^D7=wO1fXVB6P&g|G(6F730%hs4;jgmJt>4i@Hejx!Ee_Cj2I7TW?C_}VXB zSI^GQEEy9(m|wTe^jXtKuMM`lxVepC9$;ufWU!f!;%u5Q$X;lokLpVXM5M!Xw6!}> z`k&0-4B~_$55E%dA;L&W&E1|wRq&59R-xC29!f~e+0He-7U@FA*w8$bk5n8)p)OlN zcCa0U%f{t%8zj}TDD?{>RSjrAvT=b`Juo=P!v%#x2S7pM(4X+AI}YDzuJQ05W8j&^ zeq-a~q1=8@CT;D2*oB)R<_33A8q(@LbO%+^=%WgOCmADl<1gzBGy1GYug=%AoXE+^ zyERgU9t|g1(M$S{A0G|yWjQRgo}1NhuOnq9U|U*^FS)fM6F<_4T7pREy^#~@xWEoB zbcIoaJecE-=d-8~%lCrl0t_Em0ydM5lYPI0=Z?Oei_1Ya7~U5(&!#p;@@~%egKoq( z_Sx;$B(^e5FKMVJBUxcu*s&iaqyfyUdfRzczB1Y(0terTvd&T0gdX}Kr* zPpM|k+grMru&-+a{H+a6ZQy3iN7zdQ9id_V$Z5evh50ptlM08aN)u{vPi}Gw3YB9M z5R0O~D0~~M?Wi?;e^mG?kZTBV2}MH959?nA>I`K$zY63>s?tnPPa};QUS%|RAO8OS z6(s1oJ8P*$MeCvyWqMu>{8SGBM_*EiBDTw&4p!#o@2F(JIF4mAuFtwTf5eVg4JpXl zW&HTblfTO(QfKB%Anh31&0k30Tz(61n;EAWbOO(}?yFW_b9DF0W zpoGiZcam`Y^(&Nd4}`OhXm+*K=PP_yu@4mpK{!5t1qLqQ!?r?P)~|1&E$8RwK6XO1 zBua4-VH=r-d>`fWaF;9ukrIG+I;e9V!`pVz9Y{D=V zhcV$mt$>se7)6Q&fF+s;|B=2q^~pjm%{18-l@jX#VqUw$cyVmF-{Rz#?B{7owD9gs zNxy>yzx^DGZ|_BRt%PU=ybsLJ&d+nS3;ZtMLpp3$pj2xbALZTdbgVwoDYQ<0ZmX(_ zdV9OHE{=|lZ}tPgVeE|+MbCGCV+iYQH)-)qn=CgN%YTd+2d*7>_C1~176R(i8YV%( znjr)Pa{+WK=@Wl_^*}KQI*M~gP*?|mNW3qQ0Ll_6u!d&d6lr8FtU0O?(F$$+1Y;R( z7IfuNCS9lybzeXNje;(Mhty_0%qn}P)#SPw3QCuY<)hVsZ7N$CHjPaG!@KWp)ai}C$9_`cZgFh@ve=uI0~NxJpaB+&IA8Q;J;l%MeQz8lTAR&PiV%Lp3{ z=P*fHb!S$_by11ScQ;5HV^vZXrTw^RSRq2+!85>U$Q);BX{pO&+IrUao`~+Q!MB4+ zBWIIKP!SRY#N5ikx0W)T)F0*fm`k%q>{`Ks{DCsnOuHY(;XE&R18R-Hpqnc%eQoWy zN|vb|u%!A8zxaA+gA<=pjB|g)&b~e>zTXt?E{rZE)US z*&+U3Pfe-^PJxV!EC84I{$ufW$m_a8{;_A*{NTYF4=Q6?~yvt+g{~5#_Liide4STDrtG9oB{mBDd&VpK2 zl!vFH!$Vm`Wf@GmUF@ZO&VXC45OtU=AAqZ|#fO77!&gv9=yPnDkU?Q@Z*NFDsNyp~ zxsU~lM^6>KZ43Cj&`_^*0jqB5H3!dwrOtFP{#2S~geI|^dX>gSdR3+hZf&1#CZ}NW-JVj6GO$qd9V+_|&AfbR=%0 z+b22T0C^@6#obnswI>FJ3Jg9gdHMPIs(Rq&8n{e<@F9N@4iW9K-=BFezC_Vw3w6+i zXKIybvnI<24`$H{+mHX+ZCJc6lAtE}uuVDH;9sPsk`KSHL8Ct(FfOkO^E8 z1{9R3QjlRSe`;GU)BmXNDN*m&5CR=$W@b~@M5%$5)m7o_+e=>{ZDso7!ND5V*`K@w znfqXTsQO=hEVB$5gGpeKv|HyO?srQ;%WG2s;K*A#c}PEJpxa>q9`c&Ru$@4IRR zvugLnFB4ZlLvCL#Y27%Ad*XngVs{7EWR}E5>NK78Is9fRY#Hlbx4{L1tCgkU+dCl+E)WISwWB zJXkxI?T(_SJDPJF$}k2IH$IuqtX^Dsy&b~GS5>MZarpf`sO+-4KHSq-1YNR(o&z}^ z7KZG!Mb&v2=5PXXeQiJkV>k_IgS%Plxwi>S@}p%5(1)eI3&&4SH%XQRfN#^5#jgww zL9+dGaCqo*b$N~s0LeHow|wXilMGB2jMwXzFJCHEPBN3?VZE*CGDVNv0~*bTt5yMd zs9UMkih*PUJ7N`B16(kN@ns%E|8QDnH3N4s&IH;mIOQ^4Iri*i+_vpVB{qIKNNvd= z)lLOINH_yGR%sLCEdIH*lC!csB4??edrWFh&)RpS4(-rnXu+MVMi zM?3}^kUr7ho=*o}V=YylYfdR(JSH~hg%(lPSN+$cn=(g_FPuNfjR52!joqj$QY}J& z1b+R^VoSNuRsf*`yf@tTE}eXz&N*<+@oyq{5el4LZ7RSeQFdW-AV$ZqHdjqn4(ie~ za9I{69Jb*G&;t@0un!aATi{~Q$iNstQGhn7kYgfEFxwGigpFf$IB(hAqXEVl1M;5G zc5Ui^_$3Q_1xR7K(05qCGl^|RTW%g3WXc>=<$yZLZNYcDLY74O@_U@ISM|x-J6m72%REYzV`}{OB9L%@FpKA1Bfy0 z_6-d%I)lSOFvC zrD5E5RFjg6smeyfNlg8(ZQ8yo9pTp?%9c$yk*203QRmA~sVgz?idO3G0E00*of zR4ZYBZ~6-$(5rysO$QmN*0Z|(7fpz;Vy!%R0(R9DQValOvkFEks*~z64`ld<4@N?M zr#q>jyRu9>I5_xGIccTz^y$}Jser$#EVieuMT z7hb!I?Lkv9F)@XelMgw>JUt%Utfj$@2@%&oZukZ+(31UqoI~T1cuA7kHw)dkQ_m9{KiS_mMP3sh@zShrQ@jcl(@du%u@#OdzmdtB%*>-h0D;jQx z30;4@b^lbmJ@9G|l-jCxQx0vj4l=y3_hvzI^F)=IneWMjp3!)fS+MV`eAwGf$PHep<1IPkL zQsEpi$Y9`Xp)G(8ob1=j^FOCh8@R;P@tF7Vh{6LU)=E3!rvjWl@4NbaMaWi}vZ|}O zlaa_rjFP^`O$92+y26Z)#l(;|=&YN|22d_ALV7`0f@mr11(-s^K-26>$QJ*I{o%uh zwxHi2u9{$Fj&2LMxON6@JsEH?rXgJr4eIdkeevw=p2tnf%4s4_^-e!OJoqV5cz-}n8SOwR zI+)>7%Pxm+B}$){Xxm<%9U6g&@Zy$7&|dosk~0&jKmpAI0fECIv%vF$uHhWHXg;I* z@@E!kTrq>>i{)tP>-O6%0>EeI#lV}tC);UIx7e$S+jhX-{=QjA*xTn&GCU^5xO^Fd zq~I_PJ`#l4o#VNM&oARYTlbOkNw>dkp_lO13`7r#Mzgc9+{ewv%(jA)pascRdCK}) zO;bm_eRh6UW7fh4pMsuP@*Fhk4_?hRzCi$K7g_z9e?PD4`zP5=f90S7RvhOVtI_OP z{zr=s|4_l59S*D3L=Q0Lq^@GTI8K^R*w5 z=p>#70k?%CP^#GzGD@|=LBFyf+3328Z|eOkB;nn=cePt?ixNKUDM%otU2dT!)tOh% zyk*svtfzmLorg!w4ZSuP^Jg*WCe!fZR`Z>MY-S|jR#PFWvt+pQ5j}#V+@l6;5SZVC z2C2ic$VNt8C-*Udm_-?Wv@Oj2zH)oa5TvymHH+T83)tkNFfqx5FHO=+x3c z5xFpg+S__P&kA0xW{;jyIV4&F(MXTsABQwoLBLw@539y{sXpj0TD8V|FBq0Y(9)tp;3#bVLt$ zFIG0w$|B78?0z0W0`&tE^y(DWr&OfX_(=qyit-jhS@9~Xr0HwHIYe55(`g)D) zUC=y47)ZJLI6rz%axpl$`A%URUn;`ceSwi8PIz3>}qVZk;&Bw+p4*c=ULWQ2#x~veP~}jh>K*{XY&ShZJ;}xkc%l?H$CJ#{ z02u~(#CfQ~ptdko*y*;()(v7_P`O$AH7i(!N^z=yHC%*jL^4a$-WuPr0hP?sXFc#b zW%~FViL~nNu~rpGCAd83Fr(Pn*oa--+~REv;J~n*kYkghAd(vRY{-L&=(GO)wI2h) zJ@9A8%IOC5Em2n8kv?T0jx9{?4SFpGBuiO*eYdWj{_7Hefed zKFxl6XXOCA)&Pi2_Fm^lt5!BHw11a^NjU9=Qk6lCBhGd5MvMcl&({f5+w={;e)}f;M&_*_s6{GI8Rk;MCfC(E*m!QMkTVtz zj{GgasVFMqeH4tXar(b!0T?8oSdSH|WdVvDaM4t8uga>H7C$gC@MBmW0Wz#Aayg#k z6<7t~oB*OdEiDbFvElDj&EJVu|FZ)NZv9W$9ZHNoD`e${b)0`DD~yr@{QXgC-sNn7 zIkV--eMcw1HXDAo1*yq;3bM3lkK+xkc81%2@9Ak<4<#Adg7-2}<`a*t>Bh#!V8C@S z9O(vGQI2yT^0k;nCkyaF-70mv^lq5onmFE>oI+bQ!o0a!uKVgQOtGa zmsL-c7;7^J*|{Fb#_~g%lI@>8vW}0B*~9Fbx&pYkoMidF9FGqFj>H92GoA=LF17_^ zK{ia2QcZk{VWA$w%7M+gi5`g#^UqOLGqcVjW-cXJ z@&Kv;j{P+&b~4E>)MD}CJ{MpML~1qQLVj9kU6UdzIo>Am81W)SolRE`etlaE7Hp|h z(Gph=6!hHrSqd;IkuUh82a`a-Zxox7(%56n^`-@fc}NjN#0s!*Kl2$uDev+p(B@JK z7hotp$fbn;xR|T4QK>Nf;``+nD0CfmnZ}AVyc`zWuG*w;E^E^;`JPpi#V#R7(ST#DxOV^HaRKDb0)m`5|@ZpC>zAj5P5gU+4>4wkO~#ZMwH=gT9c{c zZV6@HH1K2JD+lllk|*COH15|GT!NJ#7gj7FZc*$7O8?)Yi~hCn*Q>O`_A8kwDUZX# z+RWEfY%0n;cW0mrKI<9pr>Cd8k}`x|YM+4YA3&B)`e|ffpllP2LJKV+&J(Xa)z&1CFR~vV**a zz&?f@U}Lv{0bhW@4gofqbFxW{4J;u}B*t*Cu+I8xc6v~OAV5bWud>JI&XnR-Kx%%b6nAtq`0}>-s}M>3 zi-Dd#U`W6$;N->G#l<&p3dK5$UripyenpkQF&`*tM{o~3ieo7N6oqL&J_7A{Nf(h4 z3-g~$Nx$pFgoNkTF4*MGaehf{>6i@B{8S@OjMhebu19`80R5|@GNm@|k6#>yMy zmcScOP>`n=ls)@!cM+6a^?t7(LbbKEhf8#d_Q8Z1`KC0A#fk`{ohmm#FQ*DS%m{IQ zGv{yIpRQfEhQrqeY|1~lKbhAT6>VT<#7Uz5C@&^1ez9C5(hM8_IyhJ%t905oI4IeV z5|7|}j2v!vDM zU@a!xGV)X=`tCDTRTQqnWI4?XP*_=ttGjPc?skA~d-!c4HL;Cy2tE}vn`+9ZK+xgH zb|sp$2L`NxDoWwz>d&H$)Mw+Wsh&UEQ_fB|*H=z|>Ga$D&oijFblv;=`^jVdu`y(u z^2cSn#|tAOf2UgZzZDc>42H~EuQ5(|+)@5K#+(M^=H(@Wghmo9CntwK5^-KYfqqH^ z27^(~o*EMhBHTIDXkWq-x=}BawrjZ8c__3}S(ILu=~krHf+oJ6ic|k){_kGP{wN#B zvIjq_t<=MplwcNvslu~!4bEn1f4`4dc;OY51D~;bse)467e`N zs)c`awzs#B^kwYVHZtLm-B*4p2u*J8R%0T?>&Nh0_Fw5-W!liDak+!ASuczLBGM(R z4eRU$K&$?nBB>h_n5lPCQBqQBMxj)v$HvgQ7KO5d?cx4w4@5;pKZcE(`X6@9HqI)I zve{3Ro{WQvG8Z4p01SWe^J;f)JMTv36jp&Mh$|2jQ>@cHzv}qTwZ!w;{7#EkncnmDDAUc5s_}UGXwyynb{qD_Vl^J8j2<1-EMuev~ z^U=;oUXR(LKUxj;+J?`xwO2#(WV}b*bBB79(CNRY$aJ<+qj9O=dn&LIfEKdx;(1nZ zSXfve=(Zz2!6g7DCMG~Glvu6!McJg4?T_?nP5HR}&Vd1k_wDWN>&Kg8P7#!;@$qBf zVQWzI;eV~Fw?U%0Yk9}CrELda31-)avdr=tYv`Z2KR!bbNsGG4?~pK;5_UAxai-5Q zKaRd_CH1FjBS}0SmwrdJlWWlf@^Gnbevhs!X^2b3IatBh?TdjI6*^j1oT&82ufL9i zMQRWPW*!#1BE`SXn6af-Edf~oP64Jh8^SEd9p9g(|I>I7Hf&{obJK@ONN9XbX}G4Q z=2bkcdM$U|o!ckqG)=1q{EIuk$05&&vd-;;LU zq@TPz%k_atHda5pf|OT={~BhU!O>qpHbR)f5^ROSifIszBNkf!w#aJzoY?t_vJKzR z0SEvgmfSAj5+bpz`1-%L8H2=qGSe^k30k~1l1-XS2zAtD$TL%nrI``l|8`J*KfflI zv7gV1-~fD}2to9m_8sO_dsZWYrI$dT=HGAG`agqIw_V?P7I z{o&k+(m`i@0JyRF6Oaw$BNV`U2sK7_@1tq#f2U872EAY`-V!@Jb6HU!g#UgA5qtq3 zKwUz~GB9FR-?~1@iz8Ap@8;HVi40pm52s zfeq(^<*jGH3rITW;NgFRYrN}s;r|_S7K#jgtW5~;yWx{bD#O}SioDpFy#O*zLd6`? zSZRb1Jc+(S7YN7gG^)I3C$>PuGDp2bRNZN|V>iXH>2~B7jkzwC5;#b%;CQ@>TF}$$y>JBc+mWW#R)`PQbW`Q&%9 z#SkJ%NZ2@j$2PzV>1D~~LS3rUY?A+b=u;CzdGyyY&fY0mABM}1U-l79?T1XcGXM@G zC8g?7Atqu|6BXg}8RgDg+J~~4R?_`1L_|LwrBKoc2B!&(#O`fH2!N@w+YQIGT($;!hR+?_lwn0y2cJ?$LG`z1#rpLqsf4iG+sr zVs< zJ`{&$Rdbh}zBshLRWkprr0iiruRlMUhS`^@!wPT(9BY3%TCUATQR+SY4RC)#G3DX| z3vbE2RsY*tEc^Q)Z)s;E){-E!$bdzUmPF=`{F;;LgIs=&&S5wd?Za%Z4ofsHRR6a> z1Q7pLmOO!~E3lSAP{BUq$N&i)R#p&Wrre<%YPN@D6Icg~aFHhU(tpc&W4f2dWHrhE z=iGd4aooe1L+$A!pdMowIO9Xi1E+#$T8}JW8|rA-e}f^r4U+L!R0Hzd2!3ty@#>HR zk%jcZ05s~_`z?T76V88&|29aVK#&oZ|1j6wV>&eKI4X9PzZG%@08l>6PxKv}KzoaJ z!hhF??}#wMjwKNE09%>C38eKmo)+*ZSZfDxD0*{QZtx8t;LEWBHoAjtCaNR@T1L85~RvbJx;>TGzcMP z!{SL#EXWx{2OUZx16c({%K}s59rphr*!_23)|T%hyax!G@gWEN(4u7B=LQ`p+m!R% zuD`Z`uFU4WBQeBOicdh>JO*Iwm8tw6GWzcbGNM}PIy{5}<>{Ge@yrDfzrgjM?|rF2DqEhG%Ke%?S_OX+}gz1-N5(%jDqn`szx!9$L zVQ&O00z}BJ)L@;c^c|)On=VygpL|3Um^d?#@mD>6Qxf{{QhM;)|Tqe0C&Gc(68?3lSo;*@+ms z{zNtBgZWw;jFKpu3}Fh=!JJfeb+z=ZoQe(&329<{;*JN}vaTWNo4I1p1rT}d{1j+w zyc)p&_cZ6}La|n!ulvr=>aEp*WN7=%^@W?q_9VRrsDCReM?KnQU~!2hSYRHd&eS=0 zl^ZqeZGgHCJ3l{vPQvGCMI)4$K6TyRhS}ln7iH_L?ZNUG zogPw9TwI(CUO2W3m7boCdh_OuBfRr1wjL;g(^`~`KHTMz5_8{(iA5i7l~tJ%5)wMD zY&qaE<%1G7kNM$4TVFrF2G=?Uw}`MX?>4jcz@Vu6Vn^ek(D#y8P-rKSxqTLWItw_1 z3^y5uhA@;U#k0kWd+oIrs3h~YEdTzkyK(Z@zH)LR_t^)f5BK=gEePsg&HEPF3?y-x zRH)_SKAfIim&09(Z1#T}W-o{~U=}2g%|zDjNbCiu*xA`xf@W5-+=))Y+a-}i>TJn@ zdFGByifd(RWQhMvs;$a-2NG&4Ma95S2|);0b!UTDwFAXB9F;;=V>^`T1I#@B>-)3+ zVYI|if4)+@y!^9gFJ{|=q-jN8NpK1X97YeOiT<&?_k)6xf}+-ZZ>|XwG&Lp<1O&)H zb5NO)nmS{>F`PpbR*VU4DesF2lgP`CCxgc@3HI(?Rp53%Jv9Pevy1lO`o|BU^=rCUVnpH&Pv;p+^ZbGw~c?Pmwf2;p`c?>d%gmv(FG=H9_WXLb7g~ZhUg`I-SfEI&o3?%T95j<9=<1}(Y^yP z1RQJmgDTZ-qBL;|Jg!CP)tvX)_0@&6M~H|@m>oI5UyB#uB5fIM^+quA)XhVTx62W^>@NsFgb>iND|l1(PmR^1hJ zm(+S&_M`bqS$`J%_zaR(Tib7L4+HDO6Z615v2tT$;~YE(RB-X)&kzbUZHt)o_LxgJ z*%%0ApcJF{PBsHV5g5!7if+Ihz9T~d1V9KO2lo*pTQ`5KIdqg!!~_K5-rJKE5qU;E+n{F7VPmNb` z#hb7No#gm%J3K_aCUfRBSCj9_R!Dg{_r?h}Zr6P=*LTi~ZC?mG_%sa$VNU|7z1&T5A(qLbq@ytn9>)jX(AO~JyG-lmBvjN026a0 z4U}!8`y-tdr(R|2-Yu$TRD1~Yziq_YT%H}uCY|4&sK#39dBdyuyH5osLUyY{j%rp5 z1J^V>*QIY$;6;_GiPdiFxA#O2$AhAam(O5c+2cZK@d|Ao^Z@6k$0K|%FE4LDzk4t8 z$q@VKRROYjtQZVd5pCr*Yo2|!x-o+6nzW znKE1S`}H;C7s}D4o|hT__8%3zz^U)%T+X_>y1HzR7Vv0({pBa?h)#`Q zWnsx5cB(LHn8d}xLMbaLRquXyLJInFZ*P4kSxmrAD3yuwFxZ9izr6~N*7$Y92ExtC@-l_R@?sD#Wvv5` z&AsYD`zA0~da@+_>fHuYg<~1>M#4US{#>j1mKR4qKLWU%u;!`>v3T^OI3GjtCFt|- zfoL75U-so6{hK27Lc+f7cogHzgz?VH7a$Kp0&8 zJ#pX|;C9k)>EhpCZn_|*UsxQX>c-TxFSN9@Y*STKq#kSbaNu)m8?pONz}M>HJ5^~C zj68pv_oL{CyJP&DJ`~EIK{?S00%q7(8XB4)j5A!s9pxJ;9kPKgrv{(%9~t5%#0(N= z#xNM{4Pzz>r3!+I0~cZ_r#0kmvb#tU8gX=E*QT!fa<1{UMH(p?nHEIZqj_v((>>%B z`s5^}sK{3Gaq;^K7Lb^j)heT-qj3{x$_T#Ah4!1XCUV|@Tswrpai9$VAdR7vG&F)} zI;1GA?&>>zaG``9ZCAX10&?e594A%We$lHk ztn5mj8N<(Z5S3*M`Lc=MhdqoW4|Ds=aY88*oOgs7(;%&~us10GiP*P$>|u7?dqmLa zhYC?U#$YlKiHzhq6B_Rjp9xh(G{y^1T~O21gg>C$_UZ?m%yxwRH`SK^zKME_-*KdBDWEe|$~={^iU|Up)|n z*1hyOkPOFrdwVU4)HCpnK&ajgA-Kmd+v2r942Cq6h6FG#sC|7GVaW)9nx?MOq(vlK zIq_}9Q#1d=uDa^>bt&1tZWm#MDqBtZ?gf|7P;6DOZ( zYglAtnva@08ruDVFiHOtEe3qT z6fp}5zw6d&7X)7Y4XMYSs5F_ymEmyoKE*SRHj(WPD`r5D0pyUmv4?3$GuOz^80-ER z9W-z$i`eAsOmsud<07KeW|_^UL`FuQ%|b82R2CK0y==d%-WQUzzaIp|*Tk{fB1da< z+-?N;-9+Smz+H%IkIu&uMYrDh)G1eP&#y(eqG3xZIkfqDN zj=xco3Pnf?rbi&^%0RPgUNF-r9@i)t+GA9--&d)8!xL!b*EUi;B4yO`JML z3v`M2lX&nPYez=s-nyU{HoULlOUDYE%5>rtgX@P1la_jgzq@oPb+4!k-OuluFMU7M zK`K_c=rdQ`foVT$h%pXw3X8oH=gP(OM&FW634?_rh?~5FoEq!xcLd8D7915#__8hq zSqC`92RQzl^pe$E_&H=IRV9uy8yV&+g`AlHrX{Xgz7`5l_VX$&{hv-+ffNkJ{xAsA+D zLnDaim7F*uE*8Wb!yRn%)-XvQN0F_A1@nmLo7nEhxeu>^0YZL(0mAoh1UW049#_iu zEKTwG=^O~(nK5Q&)@^Su>h5{2w#XuP9uzlm^NcxZeA{imuB8Rlf5XFKz~l8NxZ{y0xBm0`w`r^zg9H z>t$7p`NqW_=d*qZ?~S+Kcpy8(<{gJ6Ik0l)j&JX9@Y0?4nM$WDZ%qx@G%Pn{hbg|r zC&uh&YDx_b?6L1(M%|eD^_149y(buU@c)(b=;uOtd@Fx$cY}?G0RW6?h&-z=F}J~y zdyf(nvi>4isn;t3J9FoTn#?+LcUFF$&}}do6btX)t79@4xw}R7rl_<{?`|BmOr`9P zUdfCmIXL`bhx~g-K_!E>1*$I+#0!^v5E)n(vHt~JzFvN^h(b|i*bdS-aq9bSj#a}e z!ICy4_iXKmt1%_ulS~^*-dHqUHv5OY9)S>gJ4FAc#(`e>ht&J4hQLqFy9X6!q$^q^ zkUe31N4JM0EV>L<`!Ab11PxZIYg&a*pn^5OGJg|x*QM)>7VOB4k2i!iVZt-3aS%8Q z(K!*7#gjRshf{-m)uMxcZ?3^T@J1(s-_PMYmTi$mz3PPat4{GOzbOB5R5;-c zgd+O&>sO=4_T3whwb-G8f~Q85Gy|yQ0oC;E=LwvxPsqA3V^Yrbm`gD`dQrCYg+Km^ zu>+64qZ~|3&|1{zgP~BQd`v5I<(359S+}J(bdn-qqn*EY-^yteOvA zSa{^%(tz_uw&qBlS&3ZnN0|vgHlY0RZN3EQpfCYSx#Au78>>{sY$P?T@UWVem7(}$)>Y;FkZXx_t(N7>XV(s1_a_Zq_Rf>w!v)RYz* zB+CaY=s=AtF;ZVFxl4?N!u#vt%!jOs>Z8Q1ziUWM2V53K5E5{I(r?vhKa{a&a9?vu z&~uZq--XO=zG`aqFRml#Zyuc%kQAj^WNEiNF)gC~0RcD-&L3bSiry{;R~hkVUyjmb zPog*m@+-Lp2t{I^NkMRQ9h}DlToVlGMS2l$xa-M!ndC%BdtD}6zW({VmV7Fmb=~Ok zrk+T?O_0SvzLL9z4EoYtkj7d}#VRf*)~0`QU^vy<723x@ixl>X zJR-`dYCTh)z557hD}8u+JiQf5#vh=#Tg8X0dhto&E~ZS47bT`l@Zw%`a9*iSO5CEr zV^U^c@(y!&;HY2_k*pikJ~|Ok|n-9jb+`A<;NG+>SW#D#vifr5co&7Ppkd)ieo|R@xR?f2@}Dek z9()OG{jt?Kkt|`>@HJ2L=l89fh@-2-8ycR0@8trVH*x^e$ovhvO`0wbNm7^r+b2SJ zpa1=bweM5ZuqI=YY)%Xv!ltd?HGiCDDpC<|g=_4OqQfT@hW1Vl4_HBCyuN0e6>u5^ z^1}Vn6!*?6#Qa)tm{jl)Zd@OVk4%dQ;De$+M8(^lw4P+c^a8X}qT}RX(lRAHHP`kV z%=mt1Nw{Gf_=s+le;0B+W0KZzPTlj5@MiC3Hry_~1*WOI;9=^*Gn*c=Bi zw9{Pl<6ODZT$bn^Q;xXO|H|AAx?xqgyh@J5r{aV)x3mo50>Pd9N1&j^HLg(76x^Y= zr^9DLA{Uu*k%-Z`r?56yel@G9?46-0vJM}PZ$6<TC5AZ)AN<7YuwNOS+E}px zyiZ)hybtiNU(7YRtpj9EH~<{H(w_&X_1Ha6!y}Mcq1ng%L!XRdJ!l~*c;{EK5;O_!9cfYxWQciU!imso2@H35wp%EzO}&sM&+ut;+HL zde}Z)3sQ^|K)U5x4(vI0KSweh@%RZdqAF~|2w;b(BD60oJ{|(y{AhJ%e64|`mqmI; z=4%+8ZT)x5FdqN5C)0iWp+&BEfX-PK882^6*N|ged(=w}MEUEAMGyhk?sZ{LQwTdY zJFgwh6U(sic6t^bGg3h!L&$9(-sxzLQzy0lCN`Ii`btf-N%WR zf1<#rOeXs*kNH{Z7lgj0+%OA^eI!wJ@=x-s9BQlFZk7o7Jf(877JVxih3vCC5pRVO znK9lT`_8@IMPFFKJq$dnUN@|IOEX6M?Cha-_Ab`eJf%g^8T+C?o?yO_ZoEJg`)ELl zw#OrdJmHg=9rLz@PdjR1fP-Hf+iRbSK=hi_gAK$rZ@N%@JXXEpO0QVs5TnNcnT z_05OMKcRW}_(*VaUOF7zy8Om;FHk{lg`A8mcBaH3cub_j14}POVrS25%AxdeE`GHC z&%&N=$G2KC%aZ#<(3Vecmczrs6p1EIKC8IB<&79}`Ew)l|JZx;c(%T;e>B8cMN!n4 zmZE4)G0#4zs+Ov$)L2B#^E_*d(o(dD`BPf+P%+04TBQUX%!HtZ8e$e2Nq#5a=RVKt zx&PeP{qz2DU#}$MoSc33UVH7e-tV>7-p7yj6`c5q^uC|lUjLvQZbv0gn+EEj%37)Q zg{gQwu1N;2NEvS~POlfnkJNDYzLTb<*^$m%(!{!8*%OK^O3N5@p?}p+aK1Vxaoi0%B+N5=8AG!3F{m0*#t`I9^+M~ zG6*lM7>x$pnC>=pk0ER+ZP`uBaaMY7++gyH+?$?(99jPmF3T9V_F}OAUN^% zS3g+kTZraK;oif!eVS)WwcxLL*44kuFSD_+Rp{?8;TGEn%_wVB4C*l~M6=hmPJA6F zf{RgX$cGb0sl6G}!p^Cbxx!f6*iS7sGgFe2x2HX#D{GPUp?I};4hAVF%pAJT7gcoM zvmX-+?&P&62HXjY<(J_Ki*tNF?<4-|hLBLBZgn7j6KB7POQ$xVhBDs%m#7;}J12-E zIfb=expHYVpXwaqr?xkCSs!Ti%#ybiesiufcLo$nu2`^d_>1Rbz~VUAZ;pW%Xm58A zj{NMU9u$>0yirf6hNaPK(%SpsIhon*_4Himo9)2E{dZwYrW{MkP~A8u*hvDMIS4O@ zy$MAsM%Y0;4Ze$((fbMau6DGFsUd*waJH&9(9Epu5QfNZ@xI~Ug5=IHltBDczSD)V zoYo?Hc#aF^;*;j1b-I$c*$kawuoo|05IcgmLXH4tre)I=aZFg+;}UP3vX3nM3GmW? zLDiPE5$?G8cIk4}ta0PQNaYdvCHL&cih)=tVvO-?<(b-EwQ}_HCa|Tb^oQi_r+u-n zPP`{;tO=ByQ^TZ~4!e7WtSNE{sV!6;{#>z2)teN_P5 zy7%8C!N1$Nvd(F$C)3XP)UO~~q=6)Xkm*>l`*}wkq0)vHij{=|Yl8-y^|Ca|V;GZ{ z@E*0jS4hYuO&@0SHbSB*J=cs*u5~uj>Z7W`7vK)zcknoj@6Pvsbq5X(4wl0Y*P>4r zB6sbUartHiTNUQ7|6KV+fYLQ4-B0pXuJ{Xq0gX0#HEiStQNH}CMbTQf&pvY!P z?{`5Lo>2m_xtq2i*kqaOa5g=dlJu$@DsBAio(l2rF|yhqT`i)G5Nn@qNoo8l zPV)zv1svj!FHRbcg~7@@2&t7XCBJ=d^<6Bc1U*{Q1T{K5?d=6Yv4purI!MIEzp=&g z?mu5wqA6~%F%z1-r8;Yz(T&T8Jurr7znC(q-&fc z2dTFafc``*>d*^}M<4wDCT#Y$di4dj{pnV9T}M^)(fP^F+~Mg;I$mS-tr_XAjJ$5+ zfeTwy223CjEgQNRFnp`fdFrf}HRet9tb2JO3|3EF&2anTm`R_vl(w-ki$>(htNfmZ zhBtkEeJhN04EH*ov1%$WHR`gcl!0~VbIr22?rh%cr@tqQfV2}1oebPfKumGfeX9Zt zbU#vasR|Ot^8wW>{LvjvFgrXvWU{KWRiUi(P(l*Eny-rAyt%FZeG>(@#fTz?;05)?%ut7z;xlla-F%QWee3Q|6WC<9AkQ*7GWE~k;n?Mzal+VV~w!n zhzc>Hd$7-DYaE#bFQk79a-Ju8L)CtwWA1<7kRL#Q1?!`3U|TCw=fZN~fDv#Sn-5P~L_58C>%?>6!i5cBy!Nf$vT3?O!*b_#_5)WJ z2}#Le5#UdQ8!xA4 zCL~Y;#xoD}WAVy6ZFgnwmmNJ_>8&;`5yzV+WD>r|pfD2G?oWPf4_K{xSoLn{3li^f zQ!Z8ee?Kw%(X;TMMi?4?W86=Zq3n^6s^m58_Xa7}<+KiXoJF;x@4Cfvp7mX$yz);U z{2DwzJ6yN24W6*z&;sPMD5hri<;zQsF;(KxFESDPjP-<)FiZ95(-T@@gR}xo|K%@; zs_>4o41w;`JB|!{0M=r3gyE^d7~(+X>xr;j>l3(JQM<(wTl1?_sg8=>t@<8PJp3KP z`^N(ZvVvLz<21x6-0McIZ|miOhT<0b7%`t$CF7WOZ<@SQ5FN@YcokrK0Q5+YD~IpdVk71S6iNZ+tCW8AxAL zk2yb0GBXX+yO$^bXSqltGUf-uZLD~waac;N-lo}Oa(j`ijlK-cIdu?&Rn%pN}n zD!WQqA(F*B5pFa6B3i5@kkf2H^nTv;n?gYUzMBBB0ZG#8>kjNga>bKtz1|kXLaq7B zb}Sw+f!pbV#04ULvBzz@ky81IJOxiFe|)QFgZL)q%{5)k_P?9egfEX3o%)`S&3E}W zLaB0Rjy&ty*D!?Lp4j@0Ggntv+sK_}Gwz#@{H!`lAAQ@yA$N;pgEqdGOLgw`38$;9 z<-#N_Yp_d65PM~yvm-Uh=Z9~Djhg{aE>dgLtQzqxQzZRpcQF=kT&T(!wbx58N%=_+ zWpInTBROt$-u+V)g!EFqDHqi5^f3_ssxU5|#^5^da`OQ76!>#oPCVF*c<3`Q_7etJ z$K7+nB3VjYO6mkKj(=~p&L50W(ewKS3fNc2VH;QCX{;E}FSN0SF`njP`GdWjKZTji z7>X4(^>ds~^^h#`ii=~J{VwTTYm@9v{xb7z8Wv4B5g-jakOD|+Bl#Fi*ZcQ<1Fv`x zM}R7Ki@)m`ma^-(*nK?tIOnTR{bS#*VD}s;JGyeYxjG~+;w0y;f&5>S%IpPuw*!l7;pHnz5%4c87P#!GabeWlDc49I)W z234O)10C=;->2ixPiq8>$bmxVnI8X08P%TS?Q|7yxcuni&6m(yblLcwxzKT4R*fLt zo)}__N2sZ_^)~=+X;GGQvhJ7MH@pUS=16Slwnmj8YF zWV7d#Zsf`KSyBw~Z!ldhpwpQ=P?#;@c*S)EPJuVd+xJp$aWYiftG1up)>q& zpy(S!PUxr1Lp!3^m>yX0tYSFmyAJ*9Zu~-IPIgWX5*cY~n&AML5vIS#TlkgBUir2q z!66|hj3ye#<{4ssXxV`pS{U_K1?lMva6d}jk$TT0q56f?wYKv%$oHa#_4&MeNsyRR zv-GvXmLB008lyClM{)=x~%*GQkRb~gm?y%En(_JTCgJm_56XMjMyjA%Uh!a$-} zQ9&Qkr@NVZ$uE%gRcDr!aKMK}h5;DR#1lZ%St3T+QKWBT#q-PJo52tD^mvPS3nsGw z@4NFp>;*k)L}{^ey}G_z^#_`Zqvz3d3uI--ipp!Y!AbWFklL)MgeG8}4>)BmKU&6l z@?JG)22fP0Tb$d&{RM!wMoDOH8Ui?UnM)7^_=`Rglx0kx3xCji0=4cVUd&uMII9HAiM z0SI6S6pG$=a|0x5;KOohQ55NHovewC1Cs!Ck0SMRJIu2s?DO1y&8t8Lux$W;n!R+?!0jpEL z%1y}8RfMxkY;1;N?p9H`GaJf?z<5kwCH1MVa;y^eN05Xjh0S^ZC(Q@YI524g=kQ@A zgB75xl{S`D;PGDmlE+oL6f%u*G2drP(~zUd&D{iK2?&$N3@9-@PATp!^T;jW$ei>o z>1G9lv9@mscdy^3HHsRWgtNcwM!bm)z}DM;{^6#tr*~c9XI*b4{Fs`={EEJaTGJ2z znsHL#%7O;f^gj<8Uisly4U;KkKln{Zxm}(`UKXOeHUn(uOvVC{6j)q;|lzgv*bI z#@oX}O5n{bb0K<1A-s zri&L#!z^aFG}{$ik0h}2?Gfjiyys5Na2RBL#h<{B_wy%R07Rgxk)_m`oIDtEXBaoJ zh1Dxzz7(DJf%$uhGpdb{C#Vq-b^cwKl^6g(({FV?M7QGTkk1o*is$Rg>? zTVT1uhINFh(V);FbT}#;3q%Qu*c$PwfGgCFDHSPrPQJFX3!Xr4vbcE7w`BkjZ2dD} zSbH86?@9yWbLZ`M=MF7)gw@6);<~kI{gB95ch~^9G>(sozK%L(3AeQ=Y0&C}NfXqJ zIz0p!t2_K@p{(=QsKaqH6J|fW>+x|nAUSx&r-G1P%oIES&S@IFnM#U^1mZXP&PkX; z)%R7}ql>l3JDSmd-}1+tF5PO~NuU8BF#KRCNs`i#Wcl~Y!tuIsR+#7l_=xaE&^A@c z_%QB_Yhf(u41-aca4YKU>|`6sS6ZwFFtWb2 zwe>rJ8qUj?qwE0x0$3NpU_AU7t_$e8rL(kVN<0HfKq=Vo!3;ABd5BQseVYsq_MK^5wQdd{1^l>{^sQUbP4Plhi^q_xy(Vi;MSTZX z5h0-o&+Yz!NR&5hat>3DBwT>1F+O#MS>x<^x*FlDY_=+a>U-jQ3CO8ax!J1DH}9Iy zWl!JJKH?j6r>FHUv3~q?hHF;-Ss|0t`bWPz*S=p)o{#ZrxyG~>X>Q8CFuF@`lzgTF zvaGc^K5eg#!eOF*0??zaLx8|r zwJ&!QaKmrK%_b>1hOZJ?R&fh}Ag9JO3EME7vA%wP%lgUrqw$1ka|{ESAFGOq}Vb#JjVNzkU4oXm#|NuNX9lLuYy@_ z$8MgMPNX1naIK3mN)!&| zTn>ynkJG&+|EakqcaAaj!;AHu2SZ4}YZ?yaJhil(qy>Otgy%?}f&enuC<^8S5bg7$ zaxKi!a;mg_DZQk<*0J4EfKJh1s?gQ-`Daq*8%9f+Yqud>pUNA0d`Z9QBn%+nN=^ZsqwN@zFJvU zdD|`u^xQz|c2d$rU|+az?u;DP9jZn@D0(FhCmI?HjoQ2mee48_Y$GJ>jF>)pq|9=v z_FcVqyr#;v-?5(tJojag+UCVC!B0#*fUlPb94XS6(<+j$jQn@z`ZH#hElH}XC&5~4Nh zujqQd)aj>kg#g4pjaSA|`w;lYqTQ!hGrDcBj|pH?fP4S>y**BUfIko&PRRvb;8QfW zYvsCpc@I#2-_G-c;jL9jNmW~{79>CDX_+^pJt@HkBP#=l9HT7Nf6pYf^YcopAv0K5j- z{hhu>5f_)BCqO71+6iU3<;`FZ%z{wS{QSJ@en))$%LYG>y9G}^s5H%ShImrh9sX;k z7zCQN{HHqLhAlN?j~*4EfnH48W;wQOXE09M2lgP>vj=(fAI=_RvWkR1cnInbZ%~1x zqizQalPUcefG18+>*7 zZ3AfeFG}E6WjOnmS_n{9x%;nE459Prr%{a^GGwJdB`{_Mr$DOjshjU=v#Pf*B^}qt zYMh@Rjwz`f3<|H*S=rj&Gd5ldAp|7v`@=c1=RThLOrs1GfxE!3{SNYY= z`(xf}QASpvWN$^cfAF`_g#))oPH(I(hUY&MFQ*Aexf%&=P>EU@(Kc1q$8m!{ys^75 z!&hRdwIV%ffteWU3*KVc0vGe@&~o|?r5xr?pTRN+f^hnPnp>&l=TljJ!CAx^asEm!rs-+L(YPW%oHsh(FIz>TNA9e6eO!(m7Kr?#3pL_1Q$Dw@W zi5F!jjqo)z+(bljiZVjx{{{Fz$-TTVWc!_!Jx^$1@YW=S#Vb$(acAF#X!rI9AjQS` z`D)1$ybiHINsoc611phM*Ci>L)zUrdMUiP|nBABu1=D?Izt7A{H}e1{xcY5KB)Ch166W`dX9bPYMC3z+)bA8a?QQk|Y>hwLbF@E4|T4f8-P zwGfWIL+K+d$wkE+>sDI|xmH=h3$!tco|Cp%lwNywEWvw*1aLF5JmQpWtn^0HkKCHX zFUK%=ziG4;;U;~`aPoKDtN8BVXu|gW-bG`3w%@)9=W>IRj3ocT`ndT_KYNwm?{s{^ zWmbVt{nIv~+<>8;o{>t1^4>QHm!-bva8P%Vnv!Sn>M&Vxuttb)2+=2`(&^x{=1o^y5E04U-394 zB_#m>h&Mw4Z&`CwO%3TaTA*^DU2_IQPiIA)V}2}1+wO<6g-{b2aF z_xfY6q4(CWa2Dq!MQRqqDa>C~?ElM{fQ7{bYUs z>Jvaav(0M1e**sQ3=_IYTYAx7*+evRp?(eGwWo3 zh(+uyN<4(s{HyqpNS(`>A-S`t=ktKjA!ba0r(=MZsqsxO?YCd)`h zx?C=b#YxAKXF=5^{6USY1s%Tj71roe$I5R1xYNqBf_Xgn+9$;*Nvzv9Y^C$IVYqCXxGR%bq$=|4cgEWEn3TrHmCgXFE^Q`ifapLp+uCQNCu}ts(Qo#|hHH zao>=;-H}>YUw_^yQ4HY0@;XU>xAG}&`$8iEQQO$qC@(2l{l21N5YSXJxxF_?x7zCW z8h7>e^}EQJ=g~EKbyrh{(H;jHXI7!b4;!#-Ij zADYptZ5_vQSSVHtm4(w3o>AEv?t8&B7J`?EbiSYYy1wgVb_V$11yN$H4J9Rxg8=O2 zi&ps3XHN6D&2Oo?P%YFR^yb~WiSEGlQSLgM=FMY(w8dV0U}KY)61)7%I83kV@(lsX z0waQXNXW@Y7h4ivwKdQscy%vJ#>@J=*oZDCP2Dv)j)B2$#o;mrkUK4N$CM1xPGOJcnU@{9Z;k-6zVDe%`w{Fw?FQ~K z3+)n8aE873w$W7Gg087Va(_@YQ2*00^79>BA--g##oR4p)@w5cNv)C`yd$Vdd#1;Aq*y{cA!(LWUof0TQp5 zdAC0aICA-tS#hjT8xJ7|tz!#-w7pY-i#I}9AF$L^)kOwFw^+^@+t8SG z#UNuqriM4OjFDIzU%Yc1k9MG=Mevv`LLK{N&uKT&h|(H`4AXx4IAl%-fmYiS`-J`c zB5d*tS_=G?DnE_`Lp=K}Lg|4pxy>e{n@}Xx#s)4&f5g-H!CU?d=K^69(6gk=Y;5i> za!(xFC89311Ee}`INlyb#Kjm4J)|Tz{R6j;(nGR^^#2q?;%kzX(vfjEM1Espi*`>a()5=vRB|!FVOK7tdZ3yb$aH z9-~rfC*&`gS>?@KfX;o!aF<>01mqz+zLA=q+>rCDv0~s?U!ODcp4^^fXz}I4rV!N7 z?++Adp7S2N=WMnS?qc;ygj)7w5SV!TCC89lYfq?WMnW#o`qx7&fxk;HXi@tlL&=I* z8xR!9GtKeH4K{;|@n=5-YeO?umfOcpJ&1otn zifcgKBlg zzzWE%V{R!mohI=TKb7_Wn%flt#@^ZZnsB#o9HvyTl`gOBMk-K&()Yp;|2D#7SV$V& zjx~z0fO)=P)|?`RXDR74^TZ(N7V8mBA~Mpj3QB1?orGo;76$=C%2ksn=~M3&A(T;V z{-2or|Fg-G*pX^hKv*_E>f-r6j_y!27X*5FCL0-RH?{r|Q_%toaV?ku#}VUhp==!0 zA20@iBRDRSvR?|lnCy7_u|jRtc4-Ek2pYi< z4Wa+Z7<-u0hk$B%YtpP5|Y(%E!&*sxy@R1xshlaMFp@h}% zJ+eOCX7>?R9!nEi>bO^YPx{hwBbn=_n{kcz+Zn>J( zUEx5Lc40T28h5p7kHPN3J$f0$8tjAvy5$SY?xZOH!*};2G)MjLt)B^zR3`e;@`wbO8s+YX7t}L&&Wf!&5U$gtZfOs4qy5JC|Notp7*j)dvucu}9$Z|psK!^8_{qpV>1{sw|a7+3^&RFJO701k=b zu`vOmSZ4`M67@M6tqJ$xKLoz}x0bY1e_x5_gddRugNcEOsTpj3x4VW0}DatiSD5eg?;ye*-tVf z1^oE;gdSus-%(&^f$q`xRU+%}1Q*Q$%5nGYBAP`WaZ+hyDfaAJ&Dhu@_{kY$>uJI+ z)*J9x;I?#czHBbA8#rq|`gYrS2)3AOx{5&-@e5rODc5H?fbPhf2}IQl-sy%}I>N^C zt#>aE7!6{$skuQ){c5)Pj9@Yxu=afS{TT7`p<3TC4%7#~q6tYPy7?6x)S26*??g-| z21-bUzg9#*%5GTQ7a1x(iS7AUk1%!@D+}FvmvFC{{rF5pE#mso#ToL-+E@uu%ak-o z>d|s}ss;Iku3_qh3^(MS5!jB1{$)rLruEg1Nb5%!El}rgTz#&!LxR1jfv8$+Znd~h zk4V?&N3B@MERGa2-qq+>xW+?2Ro8q zVH1Yz*+6WaA^YQB701P(Mr039s72WdB6yfPK^I?H55zt0TO9+Pi4QKMmiVtFp?2dr z;xd1;HaAdvT0L98vd7Tto)&{T)FxD{ddH{6_fTv3 z46-sgLa@w^yEMadmzw5%@;1E-uR5qX((H*jPWjohV$H6q!7v|DvA~_PwH!Kp$q-QO zlQmcLNqUY}Z^SLe+fAA`Jr?Q|<}*N%!Vsmus8>R%nqRNhfT;{?m!zdw6EuPjbjj zB*eZeCYx@3*djS>?bg5bJ-Y1M-~bjIIA^cFunS>8i(C*Lr^~oFKIjz5k(5M1aLaY}l*YyX1j15{O zDa??~xa0*y`+mv$ud!Zl>vV6;JsT6bW+tUW@19OA@Fbg=`gRf?!D!6crR~S!$BlLW zxuGSA-BCU~x%QMbGiUV7vyDhDs-yh*B^R5!6P7@(8%T7BNWa8yol06B7JZ7E;MVnY?_{bsi}HeZ2nIXU0rJU=sv2wav{+)-2OEQCA8rk zBB5in5q1`vD|NO7R7o^ec$zfzJT?hw^=TA?GI=k!4&p9Tjbz3bm;a0+?B4UcKydqV zCas8Rjm;GcA!~_ykWKJA4!?-8VdE=JGZYCy1I*{>LYVfHSUaZDLbw{PAE3~x)Wcoz z5#&I;JM1J6u0d5prAieWgdZE(wgEs-4|L64jcS-r$V7lh8#ar!zxMR|J8N}fl~3HKgoqA>nz<@zLL!q_OhiRih9_;7rZjv%{@pZKB)J!w&1BXOKK zlAY4*($ydnP%HaoK`Sb);}S6w^tK6Xask6v^CSfS&Xm=J4i|tQk*zK?`R;FSV~%6P zkreiV$7@~zt1L~!)3Ixos1%orMpnlDv0t3Iuf8Q~eRZtUwl=~(qM z_E5+s&I&w5Wp!P{^>U~K4i~#l7;W$7h-tG-#OG%vo;kbBpQJaIdXas9ipRE*$*=Q# z$xTC$6~a#Ormox{MK<$SW9$Vc1bQ8l%3BPo<9{x>5nCDRLrorb3&&}3$j6NcZ4?Fz zeHWUT^HDprnyGf^xc6E)Rx-ipBrWBzfUak#n(M4y^mNQe8Y`1vMEJ|W-;92KKH*L7 z^)JdYKC7N1{V8&o(`r6r6?=Lk|HCgS+4*QT9nNzBC?A#jE^hHFT1)WJ4vsG?ch?R& zm+ELBDW+^5)?`p9ao26A*yiN{SU6r9L+tsnl|Q4SJ^Sj~5-wIA(G|Z$Q+lx&hwF!h zh{H2_I(Ep#8^^z7VuRFnuZe)A}M zwcL@1=IiV^{7T6^+XeLm;Z0Vwpc*$~J;Y-@T%W`=pH;wvX#{!z5~{(dTE+9BPgl-P zS>njRU$bqLijlqyq6w4-576G7ZQU z$#*1b=^}FB{ff(q2n^%xFJ3y|1GHwXa3uXU`&d-)G5pTjcXw_!LmpPT&ItN2SuYvx z9Whiljc`y)N?r`p?>uV*Xe5pDC1oN0KIHv_pQ(53{xqc~mleQ+>3yz0CHS`^r4jaTh{k$I*3E3orTiWe~+6jd|k7%jXP251CYVgoMP`afo;*dV7FIfAGbp ztz2tJNj=hmeN>h1DYqtlLT_`B>#I9-4*)9p=XW@k{KPG>@En7l)KKI?66!NK@9Ax( z&qgKR8OpWhhN>-~Zx#e!mAM8J0F(ZaX>;};f6t2E{@I}Bj;_&HPAN|=QxQ13lwm&0 zz)xlC4)cr?N)YD%QAhKaS}Dq*R7UWWLuc_S6zwI~yFMfQjp3HioB^{jB}1$-XjcD! z#ogYeP}0#1B{=_Iv)}*!!v7CnSXE$7U(xr%iNJigIfhuiZYIxH^mao;L7C(MfBg zy|kdIb0J^Rs&H!pUF4znqAx4d(|SZT+G9_3Cky^qPcP)=>#EaaDRrUD2XVG6mqi~b zf;J`|`0@|PYUg-Nwzt#O2h#X$oD5LHC6=Y)n#-JmY~Pfr+0&6d+c;m5eWG9xKB)cf z9iYv1w@stWEyDD^a9zb2hli_x_>_F+Jur=pa@kULHq{ql+1{{P=QV)uT83#Ub$VO( zyXPswCe=r`U@uy|owNJ99a`Yl<10~6Pt$6M%hnWP8viQ1{-ghzTmLtnvza-#wT|5( zAk~#Oqr|B3!DKdJW&C_#^-XmlN}DAlC3$3@&?qg02?Ix22{@#*S-J7*R(;P}`+AWx zI#-smq=Az97Ii#fMVSv$cPGlAyQH_^}L&OFAEKymOL z7WIoYw0Zf~vVL{Qdg@VDhe(I318Dv>_EYc!cbIn^8?KwZO)!k7EROKECJ$N>f0z zex9nXa1~`^bElE(I1M8c@iVSDcFL#NXP)N;&sa5cl@_D2(zQsrlt&yuN0py3Nwvi> z^C>n&odtBCt?_-lpMQIt>UrMjG-eSb1AvBFRB~=`2smaJ_p9%?NFLDxUPWmEjGEBt zH=~X9MK$cT@5~cx{APAgD=2qL1S^f+7);_ljG1bSG(9cgM&CqcJDgzp@Oupzn}1Nn z46_Npk%Ym$=2)6}8e8Uhf#af3_)O8#Sd*qiESJtw5dU7i&2K=1Zwr;0Ao)Y4o!Zn^ zzP_&B5B&O?FA4dpCziY`8pn0ZhVobw|Ap}NiIzQ3?&bCs+#>ZY^i3^TVZG1`gQvVY z&&DzF78!lQQLh=b-Jq%RF3}2`;l3aaOmyIBn2?`~*VRyIIYi-z7lY1{+1%o>GP#?+ z!yR?4;rq{&|IP(iA{J8#ptnyNF7bl4*^Y~Dp|_u6=~0U1QS)8wZG6he>~KB3vW&rv zWiU4Tv5(V4l?5g7XrhjAFf5Jmn2_*kU*!T_U~28Y&i-W4^^``hrw&3}eICm}&r?S%TiKM|o2uI}9t z8mnJ#sf#W5GbKMy0YVaZ@Rb{KsfqBYJ4!{m>*!%$uzkcIk!)#)(PXwyZo1u}fB%#p zZX?Egthk_CtX?7bTMAJ_{Mf5dLfv=D1W607yCY4O4&;d;rsGI#IN{3hUUUJKD&0MJ zusYnn@jkW1roOD~xo`JbBIW6~#E-bB)1{=Fk6T_v<1snJlR4?(>X|#RN#+gao3tN0 zBCVBsG#)JBs?jw_)%8?>6Qn*Jms?9CENg;L+!R|CILL`cyX zs4FJsES=Dcg4C!!IHd{VG!c2lZsm?^fWy^EI7?Y zv_19cwHwbZ!DObn7|L8l#Scyh2)`JswKGTG^-S8Ky8viJ+vqj)b`ho3y_ zH~WI711X6<>imh}D9*2%BXs@7>24h==<8h%R2W(YCs5N&*YydTZy7nbcv3veb(_*# znwuFZ={qj}wJviMa4dgx`VEf%<8a1HZ~Ir)0$*HM{_pOH*Lza802L;bK#Ep#qdQ@ZGJ@ zex;j$t6n#^2*eL({!IjaC;oFIB^{6tC22PaDEvpAo!ZHa8)PAtOq3`_L>zlOkyeqC zlmvJ4T~m~6eux0!A0%LtL+Ir+3`fYS zpl=KxbT}=dfRp5<;$*c?nNhp7LZ6*4Z(zVwAk3IE)QVzS1aNY;*>#CbZwJDmy;g5 z@yB`OKdgOZS}F9wuXa*Gw?D4ST>C>wNrLdByPmc0<5IvW|CBZfRp`CZxpU;|P{(eBgGjTEqw?3buw@qAk=sOHMRJ_*ZOKQu+(Az&`+~Htb zE+2FVRw=paU0VP6sBnMvl8_H3oS`4 zBQxV;+b>F?<=nt1V$SE{q4Luw0m+Va;vuWih{@DEu)yj{6)Xr zE_@~&ZvAkwBiQrc;2>AQlS^D&9CT4oJ$HWIR!&atNxt$ZS_=H;2#mdp)iET-t;GLA z*C@|F@-8Z~fVCtzD$O{+XSkhy9$fQ7z%iFZ`NzQNUyqKf;6#P(YVO`dFV30QCwf?X z#>mQb4T(Qvu$Cl8jlrwXIiArkowwX&d+VB>^_>dG%WAvC=2XHIg=;*S?}#{0FGz`+mHqm)p49E{9x&QWK`JS++*_yL(cKJN-PuiY2YLQbsA088 zAwx}?yr3vu5*s@0h+3k9uoe3xq}EPfCjS$oGFO}MChohHHo#dl?j@>%G~yEXc@+`O znUh8yzOa`N&VW&s^}88Io|>wmxO?lPg>bD{&Cf}!CRdcAPW{%#iXGS?l;_t^w+Fga z65-Ztiy}1cG>^X+%rWp6VGq1z*Tc29ZPFKLS{>!$^gpnCj5>(FT*4_cg}$vPpml*G z{RHI@Zx%mwgE(NV_yx*1V`FY>Xt-_6 z*=o@4LYEMR%ot|-lOGE~fw11t$jXNfqI*<+8D+llIPJu;RD7uh2v3DtviKf#;|OT z;272K*^aLV#6EoKFM_ao$sz1AjTI5GFILISHBiLZ^+FFAZm6sCY zeDC~5LYb&oM7Hijw~{(|^wmEuSZ6GCLOE;!oCaQyL(~uLdxij&WWW3OcPVeh_M1)N zKU4`~UdwPtSiOal12_1-kO`79@+_|X@kR1`ptrO01fKs(E_Vsjy6n@T;Zl zWa%q##rpiU+R0nWm}XCI04a+|OHaS(HZ8qv8%sR)clgKB+*}WkPNkXHVDDf2?%4JW z!ud1JRrgFdb0s>rZ)<=mRt_;HIhP2OWW_gLW#FykHH~WXU%8?grF_e#3FJupd;E%5 zA;p3GcS_!OA*%jV>wJlovWApD5H0K4(xvq>iBgMhvuYpYD~MLnk5Yr2>w+NQTF0Y} zAHb3BvYNKG+=K*bMXzaX9UZC{FJ448BZ9XqPk_o;!OJ3+#yT=LpBwy2Ni%(@VfdPT z{DaY~*tNHBB`S3i_T|$TZc@adHZ4L#4`6$rQQf$C^EW`3D9>*z&TVRv=aqkoD$#jX z;n1TQ9v)s0^wY5Oa8&JHp8QL|GWZYQYJFg9i*9iGOwrfFwGrE(ANnq?uKIc5ylph6 zD!nmcWLhsqj+YL(*7hoik>cMurg^+B4L8Fq`CI%Y{Vu@jkvs(s1 z_}rqIaU`*K%df6%A9fPUNhAUl44fE6vrLxSGE633aYVR{8DCL~JlXDgGJ>XH(76UD zT|+d0gFGP7N2cG-6sByQqgth4KBtG=D6;-n#sd2DnwnkkD{$iNLI?T+&KSW9=Q343 zH)Z}$UFRLtRM)NX6nYU9L5egXC{-cStEfPzigZL!G)PCJNlow-UX>aP1P~Ad(m{d* z1tjzqq?dp~kS5hA2-5F4_|4pV=g!SvnK_x9J$tS7tlzWeoV~?%GeoR)R2$~4T%f%< zf(H@cnJ>D#^f#7<{XOBPnOXuYe2EG`PcJI{DC6@5AgnE*tsB*a{ytVU^v=~#BjEcL z|A{;^A*gIG33CrMcX-FWo0rEEdQ&5=* zLtSg!XnpQ_60F2{pnFL8k2BIrYgTUoDG^q(g>mU~H#TNd{TguX(U{L@xwxLOyCQlc zp3qtRsw2^(hD&7)GO;O@`IPn@_0 z#7MTRRzE06MZ#ctjUgr+r_7zJbh|k zdG}~bOG`%Jus!(3avoS~zk#MRJ?fh1eHT5B2vi}yz&SuBQ>j%(8KCZ5b8yCu!9Jij zyhCn?str?Y3}0=E{h2TUTBn>ZTL9w?#x!^hW!V#TA1h84AV*QW?(pt8fRzqkOfuK$ zM9s3{w&8m`R%exo@2piNlg^J&!sCHr`#_lPFr;?A2)9zT&;fprC~|mDTjyT0GvgwI z9g`z#>&*BC^)*m65VBcYeqaFK7ryUkixWVmD!Lk&aW#PntLQNlrjrBi1eq601MjQm zu|jFXo+>br4m3juM`58`R0E|519HrfzrVOvP z?SG3_QLJ5ek1km%gI1YzGAKz#aB8t zfr0iGT~+*i{}nK&GRcEy1sv-_mE8j3>YKl%Yd1{(to+D1J*<1sKTUb1nZn8=1xZRt zX=6Nbo!oV{-V`VH3k%%4ePcH+-A0KNU$D%^;^MP?`bKOZZ&ua`Zq5x;yRiA(1d6~fkZdnMo_((K{NWal0AN~9oj0Obl2YL?r)Il`v@o=hbpfQ@S#@# zlhmi98S9BG1HSCJ=D`R~ zu>#TZZc6FnK~$)LWmxoYp`TxT(NA5+y5iL*S#}YhQ*Bx!kDSN@_;eGy$+NxyMv42q z%9h$11?d^e^0*eRCFU+fM>Kd{F2#SfBsPH7`wVca@o{l+f+DX$kn$MvPFY?C zU--F(3(=z&t}D8>CcS!9XIp$IsbWS~I!!EvQGrcw9!THo=FKn4uUqZv+fT+>9vf7a zE2*cup`vh$EzQf%yo^1pCf=$4B~Uk=ii!#dz)l3fIuQuVJHeWOVK9gnRP>|iEsm6N zk)49SwtVkMNooKrT%b`93HPQ0oqScwER7z;bPLf-( z!Ew>xQQ%p~IOYd@6HmQ`l9kjxzA>V+e73@G-QFdJkis&YG|0N+h*;1@bz$7eC_Py* z_R&wy^#WiqbHpx}RxvU%7CYBxs(6n*e?B`i1D;Sh+FR%2WVCpZeyKx0Tb^z%`Saf= zD8^8D5#|%alDcuk7^1e6wU@_^y%>HZ(bz*UCQyjt^?(xSeltq+D5bXc4%(#Y;~ao# zmf4Est(2hHz&5B;V~F$86zI@E1vw=ewW}y$5KgMS1#Xy!#Kk3Axssu}DP(1++dJw-8mgttG~6G#DP z)-mMQ)q7do#WiQja>*~1-V}abBB$Ij0Lxmr*|+9-$(J&NU{Ii_9z%bfqvoIgc8rJK ztkAmutXjl+pP_xVpLmHQNx^m(P-yj?W#R{bzPG+TJ$o1Ed0(o*l{^Kfk5*GgvWETc z=#2|zi6AHz$)M_KmHGMqzP=c%=9YnjZsssuZ|r1?UxzYEXNU zIAFY3Jwh4^2&cQf^vn_({^oVmcqbMhiydWRE42->bIC+|z<8hhAeMuH$#_;Q`(G`!Ar<7Aq% zRrC6wm6XnY$d~HZy8DW{vS+eysx7^K=lWr9W88hLQo6+9{kH)NT?7*Otl=Ru+^++X zaxQrFy5t_iU9)oLPN{5ZzlV75mjQ}&iRcKs&k&|m>Jd~uGatkj-Uj*ckK$w+6`8Dv z3WfdofRA|geFv4s?!~YHk;le%dqvuf2vwijbrL>es!UXs{LNSj(_vP^W~Ea3P$cL) z>_B{UN`;gEF50tmtp;3SDAWhS_f^BqykkDDHGZqD_Cdz|pDkf6yRH*jN_=uIJyqUb zoLy-N!X`IvhyYFZ6avAB0fzl7J>A5>z`#qj4NtuT!9_x@vud&I4p8PE&CbI{AkUgS zD=^|{o8vxgBzUU)f;v+6Wq?$9ab>eafJU!&#m{sCo*a$}#H3?Qx+#s+#LGBy=81E} zl*T`%v=e%_?{$4eS4kExv3`Ma$hdNVDfj|#iEp}}S-cGY#K*tY%##tg`hk$g6jsf9 z{5XA=$KqV*ubH~iF8D{l{o_I)9Q@}n>i6gTmP$yiL2KcI^QssjEOWP)TZrat08LIz zSH>p|&kIep*TE2|tb4OfQ!uJ*UWHP#4TjU&wICF3K63!V*jQ2ZNv++bOF>WO4hvatuJ*OL^Ne=Mr6+fK|}v@}HS zoLSs$F0ap_@7iU{(yQ<#iBFb}c%3I&Aix#57>k-(=5Y4&Qg*2yOSGmz2rD!$G1Do$ z@}h3a%94x5j8;)8T$YYjKKYYFl^A7v^MC~Py_^{Yj@CoJq;|!hyXGkWNhcSy?Qrj5 zL2OCF5P z#;Z=a0J0ZWcSde3#W@mXW5cH%woyEnY^{qbK-*jyI2`l00_6_Fn>WSb%tr{eWjF3E zfu}XIv9lKiUs2Yxbd9caigX+}oZ)Zkw|#3;1!{tSFuAPFb|KFUa{e!1@`02GE zJIaGM3?q4$TEz==dXL{dBW-Q@D!*C-r*y0B*n*>_HmV>ue&DZ{(_QPUkBWkTQtBJ! zxE;0e>DFRLQo_|Y2FZB5y-kW6d>XTf{U5LgO@#Qu z!Y~PBzvz+`9=zlN3B6%$MRmoMGDR|6hb*%?Td6cqbU1dl;k`n3G7D#D*0f8sFft2G zTFkKDg(gMgq?w|oDP9JnJp;H_h%Tc!E+7_PcXjyeVS6}_)U-?V7Y`A@L#zCz8vnV+ zenR1kY!G1Ehu?eJj(>`%!Q)rHd>8--_FK@=2uK7*{OY_s_R-Y*8x|byP0pgP*k})8 zDwxq6zM7zMa5nlM1ZRjwq1Hneq#6c^37f8b0gX%4&=m?fsV1jY#s!#ufy}d#Mwwzp z1_PVZlN4}0t%*ywQwtY4H{EeMi$U!4>9>?o&DH9M=C3qfWMlzBKY6eDD1`9#Ez#St zMKwg3cos2hw8$0!*}sKO&$-yy*UF4DFg8XKeKDTctK`cVfbH1IB&3D;A*M2I++_@a z$6hTj(?@Z^Y@sF?m`kV~Nodq5K?Uqh#wLfWYqLYP&hp5r;2#qRcFU1cry7e0V`Jkx zu|EZR6?S)TBE~~F+Hva~7`%6KfE*ozmrvk)Ie2W;At8v1S*7KhgB)BeUs{p4N%dqvoq6f6(s zDR#WeqnBdZ?~H|_H+IUGg;Db+q3nN<4P!}fSbRQEnD-SH!Wh`iESMuX!x<}|1#p(L zr!s2Exr@+Y7aA*CDRWlcWsP7mq+SfN9gmKN4VO7vq=&YSa6=$aLGW1s6>sBCKt(qk zc#b`ZIRBo@PpLt_yNaxt+$CV`Y)aZhOvbk_?*?ug~p%KNd=KjOU; zWOO;cLr;Pxwy<35A?IZ<3k2+NJsnOQLxAh{oAEPABXS$Y>VSp z%$W)QpEPHa*^>EB;)lpf^g)xH&AV~uh>5bQw*ZMy_yAy9RR~g)*IcI)dARf@%;wRZ zmguq0dL`M-KLzG^vM hfAaI<^nZSEz*Y65F5uLi))5HsL0vY#RI2Y1{a-qaHQoRK literal 8986 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 literal 7989 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 KQn8|C;C}$`GhR&q diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_down_timing_test_pairing_thin_local.png index 977d167186c5f1aa68908e31f4aee1b2c53af47a..23ac5e73ec1c05753d5f6628efdaa8271f52f296 100644 GIT binary patch literal 22019 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 Kh??_W|M@T6#?jpX literal 5878 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�>b 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 z z(H3w-^%!0e3b|niNosJBT7bDtrT?B?$9u+yrlt%I4i30Ooc$S+HGchoF(QLE4>u;P zt6jv_slMNc@oh@`k~$$AWg=f^vJX<{T{fPu#XNeBsItflQDQXo%^+L9Z{0^$bu z=StRQTNELlD}D1rA62fiD#%qwI86l;hoxO`x+zw`%#Rj(Tl=vrB2{>;LVX)Y*h>*% zvQ#vd~hGO+b1 zjE0c3qop>GuyuO9Zv)-hM0nLJB?CCK$yKM_Z%;cNEx-yS<+Lp~_%yRr9^lN?o10Hbs0ra;&1^>PO$@b34h}zy%{m zfI?%KLtFl@RaIbApGr!i{r6TlOC()qb!YEXoJ4`$cob%D$fc0jg< zcD*npVaHavNaTLNv_fT=^+4p$pUS6)T2puU3O zsY~uw1~D^|bF#Y-1-GMQD;0+cLF@XoQ3C%~H?cE2l79rP(~6Q+bYWR`hm=1SW6B|_ zgnT91VpYXqve$?m2e?+>`*-yX{{r}4FfCu5@&FDeT*WKSNKQ(s1T^LJV0|p$*~>At zz1>~h8V}IM3!h^ZK7nBX1Q2~OUXdR_LqikIBA>q9d05iG>dG%x^%&bMi#aY<;`)&q z87%N8O8!!GJFVfWyU)erX!b4Il>{|)p)ba`h+Vex`F{cu1?~DZP#+yfJaO(Z9QfSb zYs2F!2@;mw(Y+I9HX2BA_g!Xo6Yx9WZwTHl*+DQq z>1Ot0f;Um(dCuM6N#eb}38Xi^6(S-c(wc7nD5SS>_qmrk1`!dFM3h)aOLhYTE_Dzh zBGP^6QAq2$)T0m)5s|K}N4#z-A|fJPgAxl75fMomB^DwgB9b&pETZh%wJTwnndNq* zZ8N(eT%=4yM5M>+af3Hco;=C(&p%IneLVpE`}gOOM;_tw%P((M_w3oTq@<+Kr%#Yy z<>%+~>Z`BDRxwg6N#N7{EXd5CTB3)gNdfoKEfdedAvV^CedW!V) zU>52VCrlTY&aJ-l9i63R$*n8H*P$ zZb~Wu($mvfym&FomMv>K7l}lutE=Pi;ltF`)zQ$9OYrnAv3s;<+k%VKEUAkxQxD_gLiT=L68t&_Hf(E~%-h z&FZA4rjnMH#*7&=NKH-U)TvY4a?34z_~C~vU%s4-j11<^ol7JVp{S^c+S*!<9zDwR z>C>4xb7o^R{{?&tcz|I2j9Y+XVUqBWyVtZK+`k1T0H=e6LV3{LBVikl0apS8&Fld1 zq`SMB{R}t`3^22U?!F{!YoD3D4b%fu%xtl{FK_SnCn6$}RPNqYw>BXdi{XH;UAs16 zy|ruCo>$l1eeT@3e)#a=raEKBjPXxC`K0N%u&~hiVjRkb@be+y`NlYbslcq({vO~* zz@t&e-vRCl_a6nm9#!@XP!R49j5@y|!Ttc?zk#be@!vxw z24a?%ms3zs5Vu}=c{!_BuWoS_)R7}ca^sCRHXUDg-E{z?fsbRVu8-P(2Pg$rwIST- z>$U(h!_RwwtIX`{VOctG6MzRRpAH3X1FntNsJqvNOQO#No^C@NA|fIeMYm5Z8XtuK z6c-m$RaHesM#gz{s;a8E?6S)!EG%qS+k*xT0_fjT9d|!tW*0J6r8cVVI(L5}wn8}G zVh!*A=bd*_TwENt{`m3ZdG^_7898z!)22=9%ur+fGw`~Z?F4oLcLQ$#Zvy{l zW>bJWfE+XXA@D4aYi7?7tU!7naM<0OO~N4}BGQ?9+yq(e5s5_DvSkaANQArYx{Ez~ z_AqMHsHXC&swzf|7%|A*KR2_{?p|SLR|99<{bXZ3GaKdZyIZ=KnPmcp+`T?LP6bA| zdu7z|Z3KV!R(Fqt=LZ8{1KtL%0{-Og$IWa5@O|J`V6VGZB5lI>)79t`dk~B&zL_|a+ oX_Q!qh=@qiD6tR`5s{?%fBm20X$ge}0{{R307*qoM6N<$f<1XQApigX literal 7748 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 WjU0!jYc>C diff --git a/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_local.png b/libstdc++-v3/doc/html/ext/pb_ds/priority_queue_text_modify_up_timing_test_pairing_thin_local.png index b878dde665c9bc8e5fddac3358bc10231ce03db7..9a73934c7731c4fecfd06601b4db1451f7f230ee 100644 GIT binary patch literal 22214 zc-pMH1yEGs`!Bw*got#5bSNDw4FU?nk`mI=EFIF)C`yAYxuoKPbS)r~D=DymE)ok; zBHhw`cm4kEojdpbX72oF{>%V#&Uy2BKF{Zg_nf$=y6R-NnQsFC05Y(KssR9iPY(d# zCEX&z-q9hK8NvP|@O=a}x`q7-z2y*#y(aP2F!RN>pTzy*J-VM8guTh+r)KJB=mqf$ zwDoZW1O^6*xOlqx+S__Nig@`r(Ccuha2Kc;(kvTww*82 z(*LgmxYQ|Y3YoU9bc8W@?<{)z-lBS-15F#1KyPjG4Y8cw!;n(AQC~NC>uo+Q^16X>VOeul$Dq`JH~g}_;@h!&0}dzIU*UKm0GoXbfz)8 zJUXAi+W553&pKc$e0FpvmVYNApXpo<G<^%K(gcp+uq1N$-j^HUO8bGTo?$r2+0-SpEOPN{asb zC~5~4AoS(W+lPV&f^x2Uwlq)(4Xv*8c*nF0yB#Vkhk4jKacbp)F(R8xCStt{Mm8~}G9(JR z@8xgLR0sb#G8BG)k(h*{8+5LhFGBr;uB8i|QyRDl8Y_o?1j{Ah# z9UdFn1dmt1UiyFVO{LE?6(Z!z!JyyHxs8kn2J_qCtHwn$ew_@v3lJc)BC`oMIJRVY z#SmU!d%{2#Ch}9U?(`i0fz#UGtJD&^yCe-s$(7KpfpJU`NTIic-4H2Lh>u}}SK2*gz5d!%33!&T$@;7Pt$L7yc5`##Av-Bp zFBcR3Z`x8xK6-@ech9MQZhS=89ll5%K(LYgwwAUiBZ?uoy7v9)xTTwMb8t`n3!c|y zx834Mi++nnUA$Hfv^+K5&EcE(sn&ONH;RStQXW^8US~-gp6n7-f^{Ag^%Md3Uctin z%NT5h2S}2rUi*G2mE@sEycP8v)7|d3nO5&3fbTQ1Ry?;NKuPagYUfxt)t+=^N(}y9 zQDJv)?a-N7;?V`!`we~|fUNj0T4i*oO(skcW+0X7JvE6z zD%kKWCi;`|HsW~#uALzV2+De29ZiGQoWa1I+8Z5~s?d|Prp_yUDx>!fZ$8`>GJ`cZ zsD;lpZQA!pQI~er-iDSxfYPZ5m5PxHB&w>RUfo8hs-f-Z27(;b3VH>gnI@?ko|VqI z&W2QiQ%}ucsG9p)p;qGdKfd2id~z03EKrv%>we^PHgFVT_CAb&M(h|+9&t?(d4>!n zRFK}TdgvlKw337A&fKOq6dPY?PXAL*yZ;I4*Z(FVxHEkm@H`>Q*p5ol@QxHhx;%s3 z9g^ZG(Cm7$;|3Wr%r!BP^D1zFC{-@z=ps{Y~quG3{(Q%KK|yd%p)d%6i}v9ZjQU1c>A^H8{Y>;l%|9wYYG*m8r6F48tHsG<&h4K ze&K}mJx5x6R|_#=;hmKhGkEeW^QX$-54~q!rAGN2M|n{z*7eQS`Vb`}Pncv$DMx49 zZ)a^olGR_O^^{x5&95#b#+k;y7_IZsUjRO$w)$L`BZ!h+Q2I>Ja1s;$zM1WROKh|G3)6jCL zLRGn3;s$x*G!d#@wS*8U{@K+g2j3?`ERQ5)$Ye;?sOh{Y6`XIc=vp^ifs&pLr3>=- zbLQzLIJcme!7Lf@NglxD*|~;^fnhm(d0d>gB*q! ze;RPh8+z8sdf?gyZ=1QZV3){PyYQBRBDA6TGT%xE({Gn~OOE1_<63PddB5rFc~F7C z@4CND`(!GP3MFkplsrorJ--bk*o=r?kV0RQ@Gf!164y6VtF*aV*9TGeW;C282F6_Z z{5>|g464+*p3yTtw3;_6{8XGR8TukOU}90@yU|y?P{p=mVA?FxyS9+&uIpSK-dbLL z&=Cf5Y}^O*d;}%O9|0j=*RyI>Yf0BJsy3IeMe#e%07PM!@6$D?JK*P0?D%O>dbe^P zX&NSfCiW!UxrZA0bSla;i5|wBrRAq*HP0vhh>eCl*PpA}6?J;}am;x!U;6pg^VWlU zyn(g_qeOn?n$l+K(-`f*%8=HR&JFaJXXs5NKjb*rzHeqqq3&B=gS?lf9O)_j9{%Fr zW$wt$;jJ>%o6qBne2<0=gSCPwgV;=oe--8g$xNbAOfA3N@vD2k5oZz%EcB4h&s|4+ zmwWQ2`EZz~jv_`_iAPLF@`Z-c7-22Cw)L;ji%G%+VxfxdU_BvAf3oL-JREm3_Mb^j z7aN?L(&CAOEb@HZmEL#4uBywHe5%VVL7^@bh^gnuuYg$j$+4X_CeqfDiG`PTiyIC& z_NNki6KN<;q}mH!AOQ#ZxqseR-0%&<`pY8kZ9F}>P$uUw3^=0u>itkdaVS>J$bhfhK=8%@e+M<{c<#UqcuP2rkV;p(R` zo|Dcu&lmW**1dDnVPU-M1`BxL8+DmyHMbC3*T~UZX^EO(U}PC2(|JQCe<<3lTWR~9 z-dR$t;m4wWcn`%V;qu0@SuPt7nm4QF_}wD#-85v{DTuDM+3LJod&iJ|58q5p=)DBJ zY3q^7FP@4-!UnQeZE%M;vMAoy$logO#9VB?KAfqU+H<|GTr3Q5#v3@hj-KyL_#9wo zukra{#S_^93HS)dKmuMEh2Qf|hDi=yo=f(KQ%U8bL+&iD2Adh&J-xSgdoKbaCE5bH z2WoBSxAPN8t7iSXZ#BU2QnZ%aP7y4U*U>y$g-Na`(`b2BD{AsFNx?TaL2ip;rg&*l z{$!Lr#HPP(XX)v8`h~^cuz|Wa{j`BDV>MmMuOhuwG?$54JwB1sNCQ-YzTwkEB?2h# z14z4;Zc*9LM=#$OppfR2dY;wM87h&KG%(y*G+|u5f=FVofBdz8abPg|S-Oe2+RHA1 zK^kMLj*vx?(PV+k9YMz4D8h=`!Qb`d9>$Ur!4hPg>r6HfohypmM=g@{z(}tu*hvB{e+w9d7lyP$xiAyc(O@Cp(46E$9i1F(LIqbA9dX2JB0dP3F*Z$T8*KQ=R^4g6+AT@qjhQ`SpiO z+tDamQ)qmUfrR{;Ck91rsh6WPGz5+R=3W_ zr8h_|BqQiTKwy)YcAVC!q2t?!==?=1Aln1PcoKD+ufLenR6HnZGZMc?{cXPAkFJhU zCwY<8@`hu5PLthJTlL_Lb&>qar+l=Cg^a=B5s-KG-aBqu5JGEKq&kkBnIE+*JFvByVf7jlG0U*b)_j7?ySJu zs9>Hrf0M3Y0@Fa+LouOp!VepbEEX>M8c+@dd z=0s~jYhhcs;J)ANLeaLsfj|psaQ3SmN|&&N+rZo>ClKipVKwtnu?<*zr~@iSQfj|$_PVC+lT%<^UYlLxkz=(tY&TUN#O}#M=QU-yH%7hw-e&) zX8i*Fg)g0B=p*wORrPB9l55w>^=E*{#OfzUP)P%1F44HoO;5(}Kn^s+cvWsaKjk5v zv=D;il}xwB!vb3zVTP1P&gwr}wtS7tUS+#8N44!nfxxd;DFaXRu=3{96R=EfzGa%T z&A~i~DiA|(*R!f?JzZrc1+xyj>x_rH_V+t0smT0k*tk^S=-gn402w<&a?5jy9&&@C zoR@)f1Dtu zU2E{^U|AGq^Y*m{T7i+ws?YO$HzCxPF*pSOMB`l8HfGpM+mU(LV;|V{ zLE=*`=A79x1N;%>oq|D*Lv?|JQMs-gaDJDN1^h1CQt2Fw7E@4@n`1Sz(J#pwo!-I_v+eMgqx2K&!FKrryOa%u~zZ5WY%`70fdOJ^QsC;*JGd5 zT0WiGFQr+1&@~#A4{OI5)qTla&Y>EjNN6P4X%O4LHs~`Oqd&PaY+CXeX_UFaceO~b z{UI6jsy!5n1dJ zOonY*%HNq9Ts)IUJkF^N+nOw@xwj-O98Bw;Qa!0tr7HOyO|2$wrhlV$rKC8m@u1I1 zbNm%`!a?LUB*3c4-bE7^d-1|dWG5Ho0kKNFKzTuPzi+au=1C1Sq~JhG1)$i~6aAdi@*_P+*>*Dg_2p3pimB;R@F`W%{rC^JDow%hv1Kx5 zWkqccm20m~g2Q({;^!!Vmm&!p$%+fGiRJtEZGX*aoZc|(Ri*}_)e?fwHMmwSD>8OU z-|hcwD+smjqSGBhCzr;lh6zpJTjUk~{%miRlx1|drYnKz7Seu*zeY0AU0HtoSn+Fc zWD{P~SH{aD)@TxqSNPmiMiNeI@weaBm6xygqT+$Qe<62*5AI34dRtVQ*plet%sm(0`~`FqeBcQ9TPX5 zGOOmTel!V$NHXZP`7;g|p{JgZ;fH0VDbDEwgU&NW|I;NV6-4zGIdE$~QvH4~m*JEg z?6&>!jq=?!R*zg%kk?d(Ae4GIpg;Cp2|=DohjlX9-UIu#NW1qS?*PNO0gy4od*wY+LyAWi`;ljl!`jyF6c!GzszIKXXfoOI8K8JuPw>mB{sV~5R?43Xh7=@)wChUI`SwxLipv`nzh*5CY6|TLS8Ih0KDHc#i~@&ZPIULm_CErr4vMH3Y9@s zt<>V4x$0b-)Ikd?*YYO>TA}fs<5$05q{$VAk^OGfU$_4KJF!q`YxYlE1J*yiYM@TI zUlt@VZABn;RpgEmeF;_q97`e)AFtw)u23atOX`HT)9%e>-^b-cn?0;7=*)%Y#8Yb@ z5z-2{yy3fD{Qf&ij+u7we!7vfDd*E$eyX%~J)~nv8p(eeb zTGk_^|LDDB9b7Z~d<1!>G_#&TcBWz*SX)E6s%<@WQb5%AJI`0xyd__{lTg7OGU+6d zEu7jQ@2y~T<>M#&wKieOmh9cJoj>Aj#5AW;Q=M3;20b6XAdd@cvFV3_+ZphuMc*CX zn0}`+`;hqPb=Q6V^;->in?!yU%xrf9QYpPE!_p}R3u^Yia4oR+W+BACbOeDh5rqO; zp&gTIb~S5zT%cCj+0j4PMLcVX>lLsu;sau+!C{dVQ3Dv$f?3DO#5d2iNYp#wji^(y zFyob)c|QGYhL2*UC_!xkW5#c{hu2ICPF=GU8fQ4!8U|9zbixaM6B-C9rAVDc+0BZF zxGzqt-=y-GwY!e4mV1wUVSWHl>0OWR=CjrjmPRmuC`~qe6jP`dVTKKrMJ!9ANK81F~k=?HvFfKf@_Smt3GFYXvh@~L^;8(2G@15Z?GOiYv+ zG7ULOa$#+By%(dTfFHENeskInQ@#+l@9V+4-cO0hdpTtrGdn?0^Qp?Z^E&YC?9A}e ze{6I2;NT#|x-dR&D>0%6p+|}V&r?l5x+uOO_6l^Q?8tl`8PS4;gPYGD4%&k}4 zmy)4Xm6f3nL`8RJGBPr5jwf|$=F3Y6qiS81&smtv4 znlCVeLOSd0Uts(EnnZ7}$>2|YdHa`B|K3nv0LfxJZ2sQmomRE0hdaD^l@<3EEm?2} zfNqbDHrn`Ih!-BcXMguDeLBjQg~JwN4H4^LRtw|x%sTXJ=+s9mFZhDwxpV3cvY_Nr zh<;{yHk|g}Y|PSfxv+G_l}Q20h92>uwkq!Q8E2XDb(M_db`r2jASR3Kx1(M{0yGT! zur@c+2svW&bcI-h&l#ttQ1njc+1~UclSNl5NUo`dcbJsOz^HquN+CfiIqdMlmeUov zQpDq~LcfvEm8op;U&t(?@`1Nj+nZ^{y5bsjJt5#!oCR<-WSa>LS9YOv2|PLPLV{^) zb81U|Gk2}zo*`el+m?Id)>s~<6L)NQ0uxT1w4*ihuso* zy#nm!-Nv_pRFK>o3vMn+<84fRV21YM&F3w%py}Jd&c57+Wnt&^-fE+0V!rX^hdK8_)M7NNqBTe5?7uT#)?y3$7nFN&7;i;J zKaan=jW&}bq+-~eZ%?ty0T0wld_UFC!bs}}@Kn$n2D?I|9!eslqsD*0ZEy;%c#REe zid6*@j8hvF#imdbSgY)_`4FFeB_DY~;&dmU)Y2VtQypN&uwV!l2hY26hUL z&aWz+X}@ts)95MA(r!i@gbV7&rkyV@`Q|*q_YC=YBwufock57 z&W; zzXFzT^^nP5MjODnac-MD02|GfA!7Y)snD^OxS(ilb+u>9~{Lx%YDl!#0^aYnrWBozcIv>3U$*M0P$OH`l2@(r@#K`31 ztnhYmuBigqUAp$0d)_thUA*qlayM*;>LblSs`?~k-dY%y*c)&11YZzC4sQECI@lo;zF5TRL^ zG%?MH^?o}1o&iNR<|SEjIYcSzFcY@Cm00l4PO~OZxzK4mMOQfpM2m&?-2-3Jn0_h| zqGO&#JEyCtR*>RB32q(evG@G#y#Gg<=o-F4h1^HFAf3NmrqBJ;tzJu*&^tfkMTX13 zqN3YfE*&fxFvU9xa{L;Jd(nEuRYLEcAr{uXg%GjjKQKW6SK;8;n7?po3 zrse!_5w|oD)N^%sA2}nLe!^>+SShp}>&oFm?Jc#(=UoB|qsrLL8(783y4n`IcY1)d z#<|ee{k8T}xp0jp;H@p|S&(Dju4{_?C?#-?h)ZkYldMMu_rT*z`4n3wlGJKw#)bBD zw`oaZ1)O+iET<1l0ofQLES<>^t&y~GmDxYxn)%g@ydEFaB)PCv;8_n?2worufL|<( zLOm1a0xaW4?8gQ9eyYfc}WI>-XPjE?; zO^k9wP1F8!TNJz;>JO)R#>5xeb4?qV2!!GgTT@elJP^9fs#C|op*XZ z&bxV|ScmQt4&%&Nj2{C34sYcy1jNS6Jv7QR8q6AM;jobiX2P+bw5OsqP@G52X><>B_iH|?VFSm{$$1o30ZV3cwWHfx~zZ`0q@GNtJ zCsH>0v5quAJ;#izyKbB}Iqt{I=cv(&oJU3W;tTp9`O>l_AFRyGD}u*OHJF9gr4|Af zm_YKBr!p*HHOUzK)n|g6iJ}H8xcI6}?jF5uzK_Ptt20Nr6s$ z&%|SSjTQ}bDsXxIR zDBs8?OlSscpu=Hg!rXm$DcKn7DB@f9Pyz%2C|4sKkVwbB z^S5VZV^VHqiOidzl|VGceU-$0_}LhXXi0iR)I~j0I!-YL#pARFo5S!>kVRn~i|5r# z8ruXNPLIgdTe%PCVh4Xm54Cw6fBkqsK}gPLDS4ye^(6p=zOls}&!JZ)Gn^21S~ z#gp7eK1r});yz&92KWse52*pV5SZTOahVZ{#))h>(b&+wj&L3*Qug8UwheP6oC&G? zUey4F8u9Ep#Q`nvN4c92*BeMvsjK=2Go%10#27t?Jca}m!SaEqti#z#wM{I2e=LeP zA@*q9ZVJ&7_!gk>WrT**lwYb56|oO>M{$8HGBOy=Lz2{l zPZSAH(Wq;-ZQ^Kzx9-Rv-#j<%knP6FUxs>$N3H#AA?}}=JZAnLj_G+dU;Z5`4BPp# znkle|2_E`Y8jlGr<*A93I z55JV_&(ezHU%sQ zeDkV|0mtJ3Ba8LP;)l4vGuthj)eLm>^yEUq!dDKMdPnJMtM>EP?)}f$TX$ME9Xl^( zcXg*cKF>;BeUx=U!<+2;lNI-ByUBA&LzNO1#}nY>OZ_RG2ZMq&d9^2VA%PJmvw@v? z4_we8HSNdK6uIZ@+6>d!{vvIEpjst5Fo|M|XBgb>F4Fl8`!wWgIS1ar1AcPLa#)(y zZ-lkWS$R&?eweUlk@j?0>Pwmd&V1Tun$SN{bwHSa1gmyIC)oYY>|&Rl7ITNm;HZ6W zvF%`F)Bk+^lMl zb4tbi#LuiPXn!>XtFu>GR>A9cKo(i+tCD>? zAjghP_7y3q-0Ex+{u@78s+)hue|_E>P~6avjzKuFiwA5?Ral3gEnC#HTI&?`G;sLK zU!N}NY3m4-)6&yRU~vZI(IGO%XNgQ|Y@cW-(KVcLDh#{+`~5LRSP0hKfHqyxBr{kU zIo710W!4(7 z&4v}u@s#Im3u{O4(Z&hlu3f&y^iCyWq-Al!!i&}N*~Ev(#3G%Se;=~S2eiSx<~v9; zMXj%W6nC=vr91ZyDz+z$jpu!r#tRj_7m(&lato0_xz8Rm#~*~R%(c$$(7AK&J8w-E zD2D8WU{R}AsVPv7-E8>PrZt6GN9frRGQBGN9i+&*Gn{w}3pkT`|HY1y%RhEi|7_ z(}+m^_#!fjop$^5`oyg|+I_N`^))dC+q;of4U-XGdaT4|wtHywLif%$YuG7MVr~kI zjf@WEZ!QlC*CwiF^eaqi!i5b-B@iZ&CKCRgM%?Pj3QJ8ho-^{iWq|iiqXoYLW<2au zWLL6X{(R$drn#rvc0mzw+U>bL^LgH=X}f902P>alzwaub5#7@b*H zfr_fOzIv6{MEQPa%UKj9L=09zwlzvu>v|_z!SOBk2y??0rJ)41B90a}Kh)W`m4!Pm z=Ylt@2FX~Y+6ayCJ))#6f|ArNE^>Cpr*7ZAJr!|t<)&b4YN~++Kyu0x?~MJU)taG; zs)DTboM@}|;3V0lM9@xwxc!se@_O!M8N0oTnvUT8vQGu(0L%1|u#XRI#?zvh(_YE7 z&AWQ2P!bsF9U6EbhNZaf+GctBe0NANtG4*Ovy{v#&t_m`x*vW2L>N`T)~DmgEFSJJ!^0ou%THbcRj6mM zOv+*NRMFFnq;fUa8nWriuhptx-h0B*m%@INh1){uMqxkdbcy}uRIb+PxoeNX^_;sf zo=fEwIYHNTjN z{6&I~05(KF=wtEPGBG^njoZgMm5f92#Vq|J(E|wYt)|N>#)RH!z-%sG&RZsh=05f_ zz!nz49(Hw89dW9C=KhI$?45(I7O#f}2L}VpK6}o-fAuQoA_BW-Vf=6%*3L@=Cg2(y zJ)Fec%kzG8gY}nTMuiW<2%chv@nyB(;+n;)O}w#s*!_o7DaYk2cc1oL3X zFZx+0>(1-w1dUByT-GhSa@z5`M5lh{d^~P!n@89EJbBS&9i6Kv&x&;!RYzG%C!IG} z1=91O2d_6LipLuTNYV`+Q`f#Zk<1(~=2tOrUqQh}Zw?A?ej&;yng^emJb!kGi%t~s zDN;T3V+Mi)bKJ?L+^1@TMioy&9k4FpUNWP&-PlR6qa&|V!ON8x?0w5Lk;kcqafIKi zu;$C^DnIo}uaL1ZFtf~6aL#l)?8rl_pV?FZXd{T`Y^KI%9Si9EBU43!wdL1%Oz8q30D zEh{;01)5dm)qi7@E*FRNl&%h)Ael4=%Gnrm@KTE0MyV{2nEY3xPOj8GFV{?1dH2sN&z?-X)ktAOpCzpM zng7LUxE!mgwx33I%{A?ZXe~oMY#=%MB!x}!%wqoBI0d`1(4(J*dSR#7j`at_ zHv~+iIHa&XJ+O-YQ$g@XjB-Sm^?802d2}P)V8E7SXl5IbTxKD{ZL<2R&*{Ffa3eU4 zubrr2C?L^)_DK@6{}DE1XstWHN%{TTZpJ=Eac4Ln^a#_J#1gpEIB9hOmVo^_lw}KA zh!Q=SUHRl0eN1-_DM^N8NWQpM)+wpYZ({@|cy z#Xy70*h7GvlYC$Bbwr&1_Vm$0oqhkc>!>h|fz5j%TJGK=)i55bzYziC)B@x3@2H(^L&SGrbG9(C_G z9v!9nw*hQq8q#U{*)!i`s`e{e_~{}Vd*_0RLuqDzJdj1kd!aOr=H7_>@sxex!#yPM zMlSSpue+W#&1;e9kmxrinLEGAcXgy2m$ny|fh%B`r4*&>@mMNuk)eRlj3r?uXX0#Wuep9~2s?k%X7lwGsnFy@N{+ISi{tG;VL`!=p`4aM zf!8g8yAM0C-oC%ju1;zwOEh8+8!ds|N;7?hpG{UjSI4UQd?oA{^T`@}HKTZSIHp$9 zd40~Bz#w}4tjXS2#4zW%9o2A)ahfNR6FK`Md>0!6Tr-vm2?(5Lz^a_%vAI(92OfW3 z_rZZUS*yH?l$C5#OUuVE*cM;e6jCN5!qaQ-9g-t~nTw5&{?(rfAX%nH3_7uX(qfaS z6)ibNnI!L~cKvr}YTy3z+>+5Vm}u_}HhB|6^z(!%%XmfNYB4#fPjY+3Ua#OgLUpSJ z#1JRK{q#Gy3X1t_NTF%ASuyPDj*O;3du9(ViMAa3_eqV&4`!zEDtIP_m6t5-u&OT! zg-bat#z{qd9HNOQaY6X%2=-7h1B0@Y>@xD-9}Ui zNCs3(V{^=WX{ru3Ixd&M1yj%k*syOCmnl9)XbY8VFcaJ%WUFJQFDx%GRdv+Mfk`Le zYEEX~D`Rq>Akgg;9Az}MC2tArW1O2t`lB941?EU;;%XGnTmr&`nigzrZkPvW0H1-< z0Gg;me2wWR=o8+gI6e%nG-1i@Hlf2=#&aZzScVd1W7PFAJ!^YEkY6B~v4f*2gPwT5 zk>QX41NyE2oJ2Apv$W7bRHnLDN_qntwNiYS4et-I7+MWD$0yFl$N|7Jn$tt5>&XUv zT+UvlHNr#x47EiB_T}9ss3htjQ*eS5Lv;!N4sZ3iW@XSw!Ty!csFt-2HTb|0QSUV5DQt?_VvZ@TM_9tlJ<$p?{ zeOZV&HL@pw$r5@EW|d~S4HdJvZ@6BLJ}%Ac6QRm7+tL7NGSLoD_jaIvDx90Qanv~S zUj=d!N}XU4Y0s<3v98}GD@slfz?Y}shW8X-ful?;#P;8zgULw1T(tS8!<|PmkDcDY zN07Tw@=>!$w06fD0B79z`9V8%trf>B>MUv`KD~zAZDj-Xu50@Lrs&}-Thyzwp5OQ1mNagycHRei0!32ze*J@b zyzzX07fK+C)L^Jc@`(sxGVw!VEZ_*PfxmXaxNq)E5XOb3KY!oq%1O|}T?!DuD7om0ew4dZ-+wh|9Hm(|-;pS8yNa9V#w}FPMWWz6JbO0oZq| zEe>vl6hUg(FxuiDa(cgmWjKPQ{$Z{fgB{}u{tZ4G@ipL=E5zFIpG-!^)eu@js4X3E zEATU(^-s>SZ)pwpzH>Xa4x{2(WR3pu)tGxsuBHHB2f!wUP#X6c(LsKWYK>%wlKjzx z)myHB@xO|2j)xr{2N<~=4f5VFlZ(;A+qso{>y8VzLAOtUe6(`P>@yVCUM!cl$v>-aVwV2TjP4W0=8h!<2D z#{$MePSgpmY{VnniJg=(1>S!v1==Go%UMAolPD1n^sRqw?mL~E!sF$)4@#$TTbuO^FrfXrZ%s+mrQsbegZ(7YGO3d)1 z5M#-9f!w6}iP<`h5-OAIMZ&wbaK*=wMoZzMls7O%!=e5EMRa&!Q6SXT?~*t)ZgGm{ zs!6@{i9j}SL?=E4rEc~!jln#If9TE2EHM3VOTUeWJ$4VpEYTtWNE5TnogncX(j^ui zGN@lWyc664MziVMt--;5?Em06^F()A?@l=RvsKM$)>HXKiEVX!27pqsvFSgL%=*Vs zKC+K~+yIqG9sR%2+&Rz$KMl3Dw3c@pJQSH98CXxd+0IVZ~ZY6DET|TcW^1QTjRKm zl2pmn#fGvpb2W09J2~*#vL`5jBY;ov^CLSoTqpnN|0AgP;}71rM^TM@BZ-8IMEhF( za)D^^vhLr^v>pTr4h8Qn6^eeN2P>-@(E7^BEWFEkOHEzocgXWLorrm5OuuXi5bz!S z6V>lcuTde8=(U*f9E3r)p4=>P&qus z$Tw<7n~{!=v12Gyf(Q*p~H?^mbQmGs{#SMxg}qXcFGC68$oeiHq&$ z8IF$~8e~kvcJ4i3On9q!>yAjC#x$$x(++R!>dIeR2r*MqiGqVI(8EXtbaJUvrmPSM zgot15DWal!kqReAPEhTq`1IRDAjV{QrVltR{Kvp=U@(l_Uq(_82sD&L^Z)#()2kz$ z(cr zT(uB?SaGKnKSDT=a$@7M<+F|j9((Nyv6f&b5e=!DsvB|r2+t8z^&&rk?DxV!KH3dcuhu7HLpQ(!Qd6UMT3rwuPL zA$HP2@F`X<7p7`_^i<*&Xd-C1rY3!dO3s9jN~LVlas{R_A|bX@YZ_mMhH-pDB^Rqb zM?QK0mAFK%?lhB(9M_z1hse5&4LiCrwbN-7Cg@Tzkvxu_85*x6WHWrk&$CU|#zu8e zKQ5~WG!dl81_0;H#bI;1yrk#%``A;h<7R1Zw|#7^l-g%u$+J$3e5}msGO){H4#MsQ(NtcP zb?BK0zu>Z~g(sW+AV(e{Pa;1cS0huY_HB(LX!rb770i-@gd?C*akq9^zW1H_d*$-@ z;~T5>#Q)Ps34MZ{sHR+ML+iTtf;4g;ek3XtA4~NH&V@+)8Eh-r6=6Be*SX_is2aKk zFA6qtOHdLf_)k zB&5Zo#F2jY=&-sIt`VR~c(O%qX>7^i5@^HYtzpJhZ+y?i-liMvuZQjJZ?uUu7gUL} zygyhSKP~FVx{*@)168!sAl>`Mc;Toao-0cOVcrpl@guYoPd?}RZ7^}VJeyXzPommm zp7GQ^^Pj-yQInA~8dZ#fk?cSfbJI=v9p*9*Xb1TgBUM(WJiQw$MyPHW{JMoftw+m| ze8Bvv)Wi-2+&>9|w~E&pAG##t(8@$>lMYk{*+t=^Yu_ET9bfV6dlLyR`;d97#q^gawYN*l5 zyUGlWbBR4(o0+2D50RvfB;O{UYS|0LKL=_9tO$+?zvc9g5cT1uWmKlxXq>-=KdfS{ zTwc*aYC)@cuD&u^G;^%q1#=J4!y2RAz|Zq9@JyU^mfYU`D5*M!>4#ei8oo_@F*B$m^>%;B^;vK2 z4wyo{hdp6Xij!)<;8#&55uGVu^#p-VH41`_IF<}Q; zp1IF@(1JdCq_mSbHYL|(BQhZh7&gx-Q6ND~P~ zYO>u*5NV-iCCadE*!({yk)|u`Y^nuOdA*r@1auO4BHwwZ7-;QkF>n3kK z5#tbH>xF(Gkva^A$D#ThE00LV-KPK=$v@<6ERgFa2APNHL-bJiv@?ST+8?En6F94H z5?kV-LE-R1SSSA~m!xk9WB<@2wpAe|4}%gSbFJ?NpeLNHV-*&YUUA#A`*Ss!kNMr` zCkaSX6n%+hVz47I%@Yd<#A(MhW9pU!#bs^hVQHy2WpJAMyfT1Lgqf7$LAS3uYFPIq z0)3UamqY1hjMyt3aX#wj4xoEdN<5md9c7m0Z9Dil#GW^8patKX0jxr{5WzNK3f88b zY4jh!@Ig@7S$|4KTum-J1JnKrU)ak`$w8Fh&X z0ZsT02P=K(;b+I*S^rDvI8NeOYUKGcCzHwP>>DYH?@w9zL1~5dDEY&0X{rJ_u*a7j zUxZ-M(c(zg1d;|p*aWWK1$Rp%*(DZ^Cl54uWG?eD8zqBOr=%rMnP?}g@)f(Gb+bbA zoi9gDmNm#D`(RLp*cr@e47^rM;$Z5?0{u%F$!FBA`ZVfU>zCIl3onJ*DDxS-i*xA=gMs@+um&hm6t-r3sU!dmiKPI4QOK?VcKMMdxvnYWGgbXtPoJ-Xa!K zb!p|fve!L)5lh=NQeejc{p%UQ=|pa`<$U23TF4QhK|rO-;>Pb40KSW_RAid=}p9gAE{WLMWWG1?2U3 z;t|W+i-uwN(wj&*&enPlst4P4*3sDgTQOiIiiG(2TV$9U>W~L4i~TzlEj zN^N*zmuo6^YvYS}X1R`UC;ir_be;?#(`g}lYq)zFFt9EF{0RF6*9WT4(jQI#<$r$& zj{tq&ZKd+ECYZ1wu8E1g_7EG0K;dUh^Q!?jdc@Wc5u&J zenLM>Za}x6!f>Q_GNW~n-s&69C4oUEV~WVa?oOjg=!7U@rdu?J_G*z%_0NwF11i*` zAjT2?&ONt6T+UM)bY?FwP$`WB;fMQ7p;vJ*syX_xi*@V;N&*cZS!8<-;|7U6&c-_B zo9GqpF{p`gF)67I{IiL}8G*3WI6#%Kk8*Up1-AE`h%$i%{&xeEE9~7yeP&dU(`C;q z1A&7-S{%m0{k*-0u(Xbgd{5Aezjh{x`jB}|iW1nPB?=&3mATcCPNCsttE&}^76`6UMo4+OlSd141AcyZod>3vjfNu&iT9Oa$G6DOop zbtjU4;qym!%s74MyE_x)pXUSA=N%lqdFd|ay|LcwOa{Wpm)-p#QV9KpQGpy_iBKh&H-d4 z;EIUN#45cH`Vl7uIGka+(u*>T{n5}eM0Kv(hkF{}!IermrMkh2Yl>XoRA29y^ zS%KtH>n5N#8nSdC;F()sRSQ3nM9H9EUxECdKMniB?wjSQCScN~GIdUXcc{N0HyY?= zYK6>Y=&=1hF7|dpIX(oM^Xh6SK!D@Ier${63MkhsX=%P6t5f-PKNacOP7C{mqXye* zzlTlmiPae-&H4mCOSok%PV@Jq_M)%G9?e#QEkhzBew5Yv_=NQ`UYMp0)Yq9=$1nLs zVU{bq3aZMNC1{G2Z9$B%+L^0iDamB*H+~aj^|S$ZgA0_mlnMua^Zn-=VWSm9pl^69 z3LMMSieEdSuy36Inf(+Oz#4mWa}IWUvPqE3Ri9a%q_sqCTNo}E6N}kIe12&@v)-e4 zbK&E&f#G45JF_MY;j7#%70eNdv^HuJ#PI+kPS}>%Vy_`rL+VcN=qf?$Fbpx`B_fw( z^GSq0dup{lrRRn;*i+mChuBjx=YBH-ZRP; z?1z6wUt#1T)^u5+OgvM|ofD%2nF58bv33ATC66DG8L8^`b7}NbSsRw?tmt@Xa`Lja zM&!XKW3i-9MaJbV!_N&9pT`{?Rz&ZvlSn(vdpyUpAuBTNwh<>pI40o!`ji92UW2|=9=wJE{q99rZtQ~d3AV`=vUcg z4C&%?8Ry<{VQ-q#i{4>7~Pp7)_;#j@BR6BkvmXoI#5NRIkM|LD~F^&TT@6pdVNWi3ORlR zL2{r(Kwgaw>j^!b{*_zSUv=&o;eEi7@%FDx%u&`pkB0Q zm3QCtm|wZq{&FpcdsUzMOv8^io}G^bA>dStOv<%Czqqut*b2vHP24%=y9B52N)8tu z)4n0kDF!_{CW7?!WVVV=&-eZ96xpgn+=d{h12HM^7~;J6^r}O_C^<}=YrRP&$~lKu zStc>ukI5oMH0G`bfd#x&y}%x_xiXpmr8%nH7Tkq%YcHHb;&@q+&vcRAUT*VQdeXx0 z9RzxJqyM3?L&z;q)bAw*Kk`aywYYB+`l><-sq5Oxw$VSkI`kN>cGZ&2VDFrA97kk9`;3orrd-;6m<({f!B+RNi@61r6=WuMy5Lw zcRxQlY`?-GI^b-pX6F&(m1rN6FkrAI!5a4I;79t2Qse^rKvMQx%{NC4U0q4IpPTDY zwvM;?pO(@Rk^Or6{zb!;qG)k3G!$emqyn1IF(f@%1|Zd+Jmh=p6C&zFCfvN2o(g%%z?zc~4NUD5si7ymHvm z;3xMv`PV_#lvznpuKuJo10Yrx_c||7?g6xXO9st?Jap}+L}vOfLrvMi;L)L>yaM#>OB3r8z<~sLV24b zw{QcmtbRk+yH_9!mObR*7^}r63ZPaf2V}JD~ zSd>aguLe8|Qaf>MCpD&`LyEQnTXyHvz8j$*38~4>eJE&b_;5CA38C1;diQ+;A#TJb zmU6XTdOs3*+v~gq^Ca^~b$bKC4=+mmUP@3X#(I5+N?CjrZAfZCtA4)LCuX z_`b1RGtTXgn^{8843ZjT~|C6XM-kuXznoYk{JKo7ANZ8K%c_(>N= zROsrI!)uaBt^5V6mV5QZU|wNcWT+af3siQN2O5=%=eey+RbmE zI3CkR@JMowl|?FaD@vr|EzuEXAR=tfNb~hM6}La9X@PxK)wSz3_cX?HgnL8@;O~&B zwO1`iI-x+p$fo^kP#T%KlLPYXAT4Y=<@rF9B`p2FoBSj8r)oK=W=k$e2)JPkEzoZa H-2eJ7N>Y1& literal 6105 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 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 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 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 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 Mw==6f55N1r0E^u{U;qFB literal 9006 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 b8(dJmkX?fNd^9Kg=?_v@(N-=~w0!knck213 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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 C>Q?6f 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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 P@MCIdVesXOTipKuj+$H- literal 7377 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 diff --git a/libstdc++-v3/doc/html/ext/pb_ds/sample_trie_e_access_traits.html b/libstdc++-v3/doc/html/ext/pb_ds/sample_trie_access_traits.html similarity index 100% rename from libstdc++-v3/doc/html/ext/pb_ds/sample_trie_e_access_traits.html rename to libstdc++-v3/doc/html/ext/pb_ds/sample_trie_access_traits.html diff --git a/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_local.png b/libstdc++-v3/doc/html/ext/pb_ds/text_find_timing_test_hash_local.png index d85980f30fb4947574f7cf64dceb6d816e44d6e7..5364778241dff27501093cfa740c6dea79f2db92 100644 GIT binary patch literal 39495 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 JYc6{v{0BPGP$mEX literal 9361 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®V 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 JAa)Q$^_hWx=H`r_f0F%Z*WQkB_`ny!0H^$U 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 ajZ?Ixx&3?owIvAnFwiwYmRxgq@;?APu4Y33 literal 6739 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 F{{U`70)+qo diff --git a/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_local.png b/libstdc++-v3/doc/html/ext/pb_ds/tree_split_join_timing_test_local.png index 131d24a1a12f764adfc60fd040286f37b0af29e3..fe5ba81c49e29aeffab63609d77ff33547e36dcd 100644 GIT binary patch literal 30904 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𝔞Ee?K@wLcC@!>Ne$!ZhrazE3%;W;UEsR zLAOq*jAeU>x3`7>0(%?$l-ezroOfnvwMjxcQMGqWdO%C2-CnOEd0eO84E&{Y!NQ4f#{I14Uhqjfp6l?VU_qh z#8L1)uo^K4(Qc9W0Lj&!QE-_09l9E%-2@ctq1$uJ+iABYL+M};kjxFS^J((-pBlr~ zPpbJ0%5=_jXSF>L)H9|;GX?=S{syK2W|hNvHrWd%cQ@Nv;1<~U<0FeTXEnJ3J<*L; z6^+^$>=PkGlx8O5fT#s-F&)#V2}3XBPp&?~=flSxF)g_F&{Z2u7PuEA1%G$dlY7OL z{+2F%_f1M86#A$%SG`%_x3&A`W2i;v?8|8QNeM_)LwRISt3@--Cgh%9XuDj~yt`d7wcIQ7J s@y+Kby~x)0>^=Ga5+wikW{w5fxbyq<-o#fd2>8JmTtS!q?Q;Kr099{LCjbBd literal 6690 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 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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 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 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 Ba3lZ# literal 6270 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 XVyq?CZ*tpHAEp}Vo9Y$oxJ3RNqV}oL 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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

cNH%>+l+NHG1 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

`RuawL3jE0AEy`DX #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 aac1397ddfb7..000000000000 --- 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 a73414a0fcc5..a875e300d4d3 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_CLASS_C_DEC \ - PB_DS_CLASS_NAME< \ - Key, \ - Mapped, \ - Cmp_Fn, \ - Node_And_It_Traits, \ - Allocator> - -#define PB_DS_TYPES_TRAITS_C_DEC \ - types_traits< \ - Key, \ - Mapped, \ - Allocator, \ - false> +#define PB_DS_BIN_TREE_NAME bin_search_tree_set +#endif -#ifdef _GLIBCXX_DEBUG -#define PB_DS_DEBUG_MAP_BASE_C_DEC \ - debug_map_base, \ - typename Allocator::template rebind::other::const_reference> -#endif +#define PB_DS_CLASS_T_DEC \ + template -#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 +#define PB_DS_CLASS_C_DEC \ + PB_DS_BIN_TREE_NAME -#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 +#define PB_DS_BIN_TREE_TRAITS_BASE \ + types_traits + +#ifdef _GLIBCXX_DEBUG +#define PB_DS_DEBUG_MAP_BASE_C_DEC \ + debug_map_base, \ + 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 - - /** - * class description = "8i|\|4ree $34rc|-| 7r33 74813."> - **/ - template - class PB_DS_CLASS_NAME : +#define PB_DS_TREE_TRACE_BASE_C_DEC \ + tree_trace_base +#endif + + + /* + * @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::pointer node_pointer; + typedef typename node_allocator::value_type node; + 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 PB_DS_TYPES_TRAITS_C_DEC::mapped_pointer - mapped_pointer; + 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::const_mapped_pointer - const_mapped_pointer; - - typedef - typename PB_DS_TYPES_TRAITS_C_DEC::mapped_reference - mapped_reference; - - typedef - typename PB_DS_TYPES_TRAITS_C_DEC::const_mapped_reference - const_mapped_reference; -#endif - - typedef typename PB_DS_TYPES_TRAITS_C_DEC::value_type value_type; - - typedef typename PB_DS_TYPES_TRAITS_C_DEC::pointer pointer; - - typedef typename PB_DS_TYPES_TRAITS_C_DEC::const_pointer const_pointer; - - typedef typename PB_DS_TYPES_TRAITS_C_DEC::reference reference; - - 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 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 point_iterator iterator; + typedef point_const_iterator const_iterator; + typedef typename traits_type::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 traits_type::const_reverse_iterator const_reverse_iterator; - typedef typename Node_And_It_Traits::node_iterator node_iterator; + 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 Cmp_Fn cmp_fn; - - typedef Allocator allocator_type; - - typedef typename Node_And_It_Traits::node_update node_update; - - public: + typedef Cmp_Fn cmp_fn; + typedef _Alloc allocator_type; - PB_DS_CLASS_NAME(); + PB_DS_BIN_TREE_NAME(); - PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn); + PB_DS_BIN_TREE_NAME(const Cmp_Fn&); - PB_DS_CLASS_NAME(const Cmp_Fn& r_cmp_fn, const node_update& r_update); + PB_DS_BIN_TREE_NAME(const Cmp_Fn&, const node_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 370574c90871..000000000000 --- 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 612ecebbe940..000000000000 --- 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 d7b5985cc6d9..2815b4274a9f 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 86d5c2e87f7a..1f77e31cf397 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 60a54903458f..1d1b17040d08 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 6b50dc8c594d..03b7fe894161 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 b3e46112fb6a..54cd52e04ba8 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 eb0f76d0ea26..5a9a03e867e8 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 e5f6a4d7361c..8076084aefd5 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 b4ea45376a8d..d64bdf75d9c2 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 959df68a168b..d99924878c30 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 63f307d39d9a..5b71c407f7f1 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 bcf3ce6321f4..cfcccadb1823 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 c2090a178420..63c757cc1364 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 00fbdf426126..be2fd344ccf7 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 58c30c3fe521..3066c381f42b 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 4d65d2b6826c..ee408e8ea029 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 - typename Allocator::template rebind< - Value_Type>::other - value_allocator; - - typedef - typename __conditional_type< - simple_value, - Value_Type, - typename value_allocator::pointer>::__type - entry; + typedef integral_constant no_throw_copies_t; - 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 Allocator::difference_type difference_type; + typedef typename __conditional_type::__type + entry; - typedef Value_Type value_type; + typedef typename _Alloc::template rebind::other + entry_allocator; - typedef - typename Allocator::template rebind< - value_type>::other::pointer - pointer; + typedef typename entry_allocator::pointer entry_pointer; - typedef - typename Allocator::template rebind< - value_type>::other::const_pointer - const_pointer; + typedef binary_heap_point_const_iterator_ + point_const_iterator; - typedef - typename Allocator::template rebind< - value_type>::other::reference - reference; + typedef point_const_iterator point_iterator; - typedef - typename Allocator::template rebind< - value_type>::other::const_reference - const_reference; + typedef binary_heap_const_iterator_ + const_iterator; - typedef - binary_heap_const_point_iterator_< - value_type, - entry, - simple_value, - Allocator> - const_point_iterator; + typedef const_iterator iterator; - typedef const_point_iterator point_iterator; - typedef - binary_heap_const_iterator_< - value_type, - entry, - simple_value, - Allocator> - const_iterator; + binary_heap(); - typedef const_iterator iterator; + binary_heap(const cmp_fn&); - 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); - - inline void - insert_value(const_reference r_val, false_type); + value_swap(binary_heap&); inline void - insert_value(value_type val, true_type); + insert_value(const_reference, false_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); -#ifdef _GLIBCXX_DEBUG void - assert_valid(const char* file, int line) const; -#endif + 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()); + } -#ifdef PB_DS_BINARY_HEAP_TRACE_ void - trace_entry(const entry& r_e, false_type) const; + 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 - trace_entry(const entry& r_e, true_type) const; -#endif + 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; + } - private: - static entry_allocator s_entry_allocator; - - static value_allocator s_value_allocator; +#ifdef _GLIBCXX_DEBUG + void + assert_valid(const char*, int) const; +#endif - static no_throw_copies_t s_no_throw_copies_ind; +#ifdef PB_DS_BINARY_HEAP_TRACE_ + void + trace_entry(const entry&, false_type) const; - size_type m_size; + void + trace_entry(const entry&, true_type) const; +#endif - size_type m_actual_size; + static entry_allocator s_entry_allocator; + static value_allocator s_value_allocator; + static no_throw_copies_t s_no_throw_copies_ind; - 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 aa86f5ea4f58..a6ac261b9ba2 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 bdaa7ff78064..9602385fbb16 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 a2c6f307f178..b1b0f5ba1b99 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 b0a9b5b0d926..42e799fc8bd9 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() - { } + /// 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; - inline - type(const Cmp_Fn& other) : Cmp_Fn(other) - { } + public: + typedef typename __rebind_v::other::const_pointer entry; - inline bool - operator()(entry p_lhs, entry p_rhs) const + /// Compare plus entry. + struct type : public Cmp_Fn { - return Cmp_Fn::operator()(*p_lhs, * p_rhs); - } - }; - }; + 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 185529e15e33..001876ef1f05 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() - { } + typedef Pred type; + }; + + /// Specialization, false. + template + struct entry_pred<_VTp, Pred, _Alloc, false> + { + private: + typedef typename _Alloc::template rebind<_VTp> __rebind_v; - inline - type(const Pred& other) : Pred(other) - { } + public: + typedef typename __rebind_v::other::const_pointer entry; - inline bool - operator()(entry p_v) const + struct type : public Pred { - return Pred::operator()(*p_v); - } - }; - }; + 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 2b6c9b79849e..f204d81f6039 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 116e9bcddaac..c445dc0c31f4 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 d29279318fcc..ae36d3181a11 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 c6c41e572645..1e1ed969e723 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 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 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 swap_with_l_child = !swap_with_r_child && smaller_than_left_child; - - 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 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_lchild = lchild_i < m_size && + entry_cmp::operator()(m_a_entries[i], m_a_entries[lchild_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_rchild = smaller_than_rchild && (!smaller_than_lchild || entry_cmp::operator()(m_a_entries[lchild_i], m_a_entries[rchild_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 db0a64ea8999..daaf2e4a7f89 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 3d75e86d45a7..873626073878 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 11a7b89158ab..f3782221b495 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 c5893872e5c5..e3d74bffd698 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 675b4ec40dbd..0d09b535730e 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 36bd66f75537..2704ec65c1b9 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 a6d6098fd37c..d8704f65c41b 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_ - -#define PB_DS_BASE_C_DEC \ - binomial_heap_base_ + binomial_heap - /** - * 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 ebe1f2e9ea81..ee8d89c9dfb3 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 80c0b048632e..12949aedb2b3 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 b2add18e7a04..9d260d0e17e3 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 - - /** - * class description = "8y|\|0|\/|i41 h34p 74813"> - **/ - template - class binomial_heap_base_ : public PB_DS_BASE_C_DEC - { +#define PB_DS_B_HEAP_BASE \ + left_child_next_sibling_heap +#else +#define PB_DS_B_HEAP_BASE \ + left_child_next_sibling_heap +#endif + /// 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 typename Allocator::size_type size_type; - - 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 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 __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 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 fa86c230cd2d..ef9d0e3b3004 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 6f2aa2a79837..137ec4b0c6ec 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 e7a2dc4f6fdc..2cdc456dd7dc 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 f832cb60c7d9..8059917f9df8 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 11bd5e1444f9..30f49db06357 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 6564c54a21ae..44bc4ed7c4dc 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 000000000000..efe39f2fe4a4 --- /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 5f04e14b4700..caa8dd738d37 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 36272eda8229..92f9f444453a 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 { - - 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; - }; + /// Tree traits class, primary template. + template + class Node_Update, + typename Tag, + typename _Alloc> + struct tree_traits; + + /// 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 149a206a4e73..f1c2540e7d52 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 c61eff99b904..4f7116f573f8 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 fa3f31df003a..5b2db9b0f642 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; - inline - PB_DS_CKDED_CLASS_NAME(entry_allocator* p_a, entry* p_e); + 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(); + ~cond_dealtor(); - inline void - set_key_destruct(); + void + set_key_destruct() + { m_key_destruct = true; } - 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 - 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 + template 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 8278fd7e662b..9d37d9f86c32 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 4f1cce64806e..1f68349d9293 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 a2b6fa111495..f6a73af6d65d 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 d10ff7862cca..c5af1d3ea4aa 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 4a02bbfcc5df..1c19cac95901 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 07f2998bceca..76ad8c6bff5c 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 079991193355..74404035f997 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 c6febe421a1e..c9c4b1c745d6 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 ffe32103cbea..1e2661efa55a 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 09d34f2c0b1a..a4cddeafb676 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 32ca47d6e3f7..e3f363f41ed3 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 1db51c990a63..d532c4f45bec 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 2b429960c008..99eea41c5981 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 0679dbe6e74c..dc7d44cc504c 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 acbd8a78d078..ba898739589b 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 1224880ecc94..f4553976cfb4 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 a7592b7f1f70..5be4a9caab0f 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 9a661b361972..5bf12c8f166b 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 4e3f48dd12d9..66145b81da10 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 6577630f0f03..f43850818b6d 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 c1adb61b190b..1901b803938f 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 0d5ec85f2e50..ff11890e6936 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 b9c1ee20e5eb..3c07f95a496d 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 497977d97ccb..ede1d6a8fc98 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 1ee48a2ac666..eb87bea9e248 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 { - -#define PB_DS_COND_DEALTOR_CLASS_T_DEC \ - template - -#define PB_DS_COND_DEALTOR_CLASS_C_DEC \ - cond_dealtor< \ - Entry, \ - Allocator> - - template - class cond_dealtor - { - public: - typedef - typename Allocator::template rebind::other - entry_allocator; - - typedef typename entry_allocator::pointer entry_pointer; - - 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 - + /// Conditional deallocate constructor argument. + template + class cond_dealtor + { + typedef typename _Alloc::template rebind __rebind_e; + + public: + typedef typename __rebind_e::other entry_allocator; + typedef typename entry_allocator::pointer entry_pointer; + + cond_dealtor(entry_pointer p_e) + : m_p_e(p_e), m_no_action_destructor(false) { } + + ~cond_dealtor() + { + if (m_no_action_destructor) + return; + s_alloc.deallocate(m_p_e, 1); + } + + void + set_no_action() + { m_no_action_destructor = true; } + + 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 20c998868796..a960b7d23170 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 2964b2d30c6d..37217d950b71 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,26 @@ namespace __gnu_pbds { namespace detail { - // Primary template. - template - struct container_base_dispatch; - - template - struct container_base_dispatch + /// Specialization for list-update map. + 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; + /// Dispatched type. + typedef lu_map type; }; - template - struct container_base_dispatch + /// Specialization for list-update set. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -154,34 +130,39 @@ namespace detail typedef typename at1::type at1t; public: - typedef lu_map_no_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_data_ type; + typedef pat_trie_map type; }; - template - struct container_base_dispatch + /// Specialization for PATRICIA trie set. + 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; + /// Dispatched type. + typedef pat_trie_set type; }; - template - struct container_base_dispatch + /// Specialization for R-B tree map. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -190,12 +171,14 @@ namespace detail typedef typename at1::type at1t; public: - typedef rb_tree_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; @@ -204,12 +187,13 @@ namespace detail typedef typename at1::type at1t; public: - typedef rb_tree_no_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; @@ -218,12 +202,14 @@ namespace detail typedef typename at1::type at1t; public: - typedef splay_tree_data_ type; + /// Dispatched type. + typedef splay_tree_map type; }; - template - struct container_base_dispatch + /// Specialization splay tree set. + template + struct container_base_dispatch { private: typedef __gnu_cxx::typelist::at_index at0; @@ -232,11 +218,13 @@ namespace detail typedef typename at1::type at1t; public: - typedef splay_tree_no_data_ type; + /// 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 a9a0b42d263d..c1709ba452d4 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 ec95bca64025..389bdcdb637b 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 b21c252e2c04..6255d55eb0e7 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 typename Allocator::template rebind::other key_allocator; - - typedef typename key_allocator::const_reference const_key_reference; + typedef Eq_Fn eq_fn_base; + typedef typename _Alloc::template rebind::other key_allocator; + typedef typename key_allocator::const_reference key_const_reference; - hash_eq_fn(); + hash_eq_fn() { } - hash_eq_fn(const Eq_Fn& r_eq_fn); + hash_eq_fn(const Eq_Fn& r_eq_fn) : Eq_Fn(r_eq_fn) { } - inline bool - operator()(const_key_reference r_lhs_key, const_key_reference r_rhs_key) const; + 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); } - 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 - { - typedef typename Allocator::size_type size_type; - - typedef Eq_Fn eq_fn_base; - typedef typename Allocator::template rebind::other key_allocator; + /// Specialization 2 - The client requests that hash values be stored. + template + struct hash_eq_fn : public Eq_Fn + { + 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 typename key_allocator::const_reference const_key_reference; + hash_eq_fn() { } - hash_eq_fn(); + hash_eq_fn(const Eq_Fn& r_eq_fn) : Eq_Fn(r_eq_fn) { } - hash_eq_fn(const Eq_Fn& r_eq_fn); + 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); - inline bool - operator()(const_key_reference r_lhs_key, size_type lhs_hash, - const_key_reference r_rhs_key, size_type rhs_hash) const; + return (lhs_hash == rhs_hash && + eq_fn_base::operator()(r_lhs_key, r_rhs_key)); + } - 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 90f17094a0f1..8a51541b528b 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 ec8069839b0d..d077cbf3cea7 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 5f3048759082..ff83c20b8f53 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 eca853a2092c..cad9a733be93 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 ba8f54e5dea1..ff9bdae14a09 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 2c2833eacbf5..488b6b9236cb 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 e57d5cc7f2d8..0e6227bc7cf9 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 67e64e91ab6c..d95b9a72b463 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 02dc63ea5bb8..9ccad4f94b7a 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 d8b32fe17191..e6e9c5f0da9b 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 298604c80e28..2af9781b5e3d 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 a44b8326e28a..80c7788c70fd 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 a9179d5363d4..4ce94aefecda 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 423a9288e5ef..8fa762b77180 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 101ce8c6be78..03731778bec7 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 95c9054f3b7d..03b2c9b8ee39 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 a27d9d202c9f..856306a7ab13 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 ff1f80f28fda..695b03eedc0c 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 b1a3f7a7e674..22afeb7690f6 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 70381f10602b..76b6174efef7 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 1d2839e0ac7b..8819238b6da0 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 765e9624b8f5..c291747ed149 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 dac063927f69..74aeba4d63d4 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 c3fe13c0082b..0e6a7da087e3 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 970cfc1e5537..19855ac1e8ba 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 24899272f8fd..8567851f7983 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 ddfba9de1f25..b13de65555ac 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 7dcd82588c1b..3ca9001e0258 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 { - -public: - - // Size type. - typedef std::size_t size_type; - -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; - -}; - + /// A sample probe policy. + class sample_probe_fn + { + public: + typedef std::size_t size_type; + + // Default constructor. + sample_probe_fn(); + + // Copy constructor. + sample_probe_fn(const sample_probe_fn&); + + // 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 988f111ea20d..3092376832cc 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 { - -public: - - // Size type. - typedef std::size_t size_type; - -public: - - // 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; - -}; - + /// A sample range-hashing functor. + class sample_range_hashing + { + public: + // Size type. + typedef std::size_t size_type; + + // 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); + + // 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 8fa04d140e5b..cc9aaab91343 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 2bcfdf51a542..b362f3d354fb 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 2448f3c79885..e51abe17e06c 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 5bec709fb50b..5cec97b32738 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 77c23c1eb36d..500fac11207d 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 056cc38fc942..c7d5602318b3 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 75e6561c393e..3535a0351aaf 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 9ffc912719c1..e5031c8d9d0d 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 ec09cf641bd9..40b0a17c78b7 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 d31154638103..b6f3b51710b6 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 - -#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 - - /** - * class description = "Base class for some types of h3ap$"> - **/ #ifdef _GLIBCXX_DEBUG +#define PB_DS_CLASS_T_DEC \ + template + +#define PB_DS_CLASS_C_DEC \ + left_child_next_sibling_heap +#else +#define PB_DS_CLASS_T_DEC \ + template + +#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 Allocator::difference_type difference_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 Value_Type value_type; + typedef left_child_next_sibling_heap_node_point_const_iterator_ + point_const_iterator; - typedef - typename Allocator::template rebind< - value_type>::other::pointer - pointer; - - 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 - 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 1cdfe288391c..d74b86c42d94 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; - - public: - typedef typename Allocator::size_type size_type; - - typedef - typename Allocator::template rebind< - this_type>::other::pointer - node_pointer; - - typedef Value_Type value_type; - - typedef Metadata_Type metadata_type; + typedef left_child_next_sibling_heap_node_<_Value, _Metadata, _Alloc> this_type; public: - value_type m_value; + typedef _Value value_type; + typedef typename _Alloc::size_type size_type; + typedef _Metadata metadata_type; - metadata_type m_metadata; + typedef typename _Alloc::template rebind::other::pointer node_pointer; - 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 - typename Allocator::template rebind< - this_type>::other::pointer - node_pointer; - - typedef Value_Type value_type; - - public: - value_type m_value; - - node_pointer m_p_l_child; + typedef _Value value_type; + typedef typename _Alloc::size_type size_type; - node_pointer m_p_next_sibling; + typedef typename _Alloc::template rebind::other::pointer node_pointer; - 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 712a76fb7c0e..5b29254f6aa9 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 350b4d08af33..b2d0d8527d71 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 d42100212e4b..28ee13e91224 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 17ddaaf3e691..8ec39a6acefd 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 98391802945a..510c9050015f 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 021ef50d8706..f1e440a72a05 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 dd60ea6cdce0..bbd7b8355eaa 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 9164b92255e1..0d5f98aaf7e7 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 31f743cf18b9..294d73a0187b 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 2677683f8dfd..9c250df49a1f 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 ac3163858f1d..2a1aa6c9dd03 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 329f2fa780ae..9e48f17f7cde 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 - -#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 - /* 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 009610998a5e..1ee219ae5538 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 f74a9fb54855..000000000000 --- 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 8e476cb91b90..74ab81388bb7 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; + class lu_counter_metadata + { + public: + typedef Size_Type size_type; - private: - counter_lu_metadata(size_type init_count) : m_count(init_count) - { } + private: + lu_counter_metadata(size_type init_count) : m_count(init_count) + { } - friend class counter_lu_policy_base; + friend class lu_counter_policy_base; - mutable size_type m_count; + mutable size_type m_count; }; + /// Base class for list-update counter policy. template - class counter_lu_policy_base - { - protected: - typedef Size_Type size_type; + class lu_counter_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); } + 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; - } - }; + 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 34426c538218..000000000000 --- 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 c5da1e9d004d..13ee6e1c7b05 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 e2c4b9ae9c4c..000000000000 --- 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 1c3b9dd6e47a..494ded24bd67 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 1ba96d8edbba..8c27a46500f4 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 a9bfab64e12e..31eb7c74920b 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 7eeb85b7c197..6beee7118c76 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 51d1b4d34bb9..e96628bdd88e 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 40f110084c1e..af866866ce0c 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 3517896a6f50..79c950438536 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 06436591ef5d..20a435047dd6 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 + +#ifdef PB_DS_TREE_TRACE + typedef PB_DS_TREE_TRACE_BASE_C_DEC trace_base; +#endif - typedef typename traits_base::pointer mapped_pointer_; - typedef typename traits_base::const_pointer const_mapped_pointer_; + typedef typename traits_base::pointer mapped_pointer_; + typedef typename traits_base::const_pointer mapped_const_pointer_; - typedef typename Node_And_It_Traits::metadata_type metadata_type; + typedef typename traits_type::metadata_type metadata_type; - 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 _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 Node_And_It_Traits::null_node_update_pointer + typedef typename traits_type::null_node_update_pointer null_node_update_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 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 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 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 const_point_iterator const_iterator; - - typedef point_iterator iterator; - -#include + typedef pointer point_iterator; +#else + typedef point_const_iterator point_iterator; +#endif - typedef - typename Node_And_It_Traits::const_node_iterator - const_node_iterator; + typedef point_iterator iterator; + typedef point_const_iterator const_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) + { } + + ~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::node_iterator 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; - public: - PB_DS_OV_TREE_CLASS_NAME(); + PB_DS_OV_TREE_NAME(); - PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn&); + PB_DS_OV_TREE_NAME(const Cmp_Fn&); - PB_DS_OV_TREE_CLASS_NAME(const Cmp_Fn&, const node_update&); + PB_DS_OV_TREE_NAME(const Cmp_Fn&, const node_update&); - PB_DS_OV_TREE_CLASS_NAME(const PB_DS_CLASS_C_DEC&); + PB_DS_OV_TREE_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 c06d6f851f33..eafe0b039b2b 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 567a52e02185..a12c2320cc2c 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 63cb0f7fb4c3..359e599627bc 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 6a70ea47601b..0b836c549cdc 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 7212db2c539c..802c95e9b50b 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 be3a41c78274..d6303c3294ed 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 c02373b2f3a9..49b2ca6342dd 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 07e6b00cb83f..ced5eeb08192 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 3bdb82fb649d..85e098ad4c8d 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 - - /** - * class description = "P4ri|\|g h3ap$"> - **/ - template - class pairing_heap_ : public PB_DS_BASE_C_DEC - { +#define PB_DS_P_HEAP_BASE \ + left_child_next_sibling_heap +#else +#define PB_DS_P_HEAP_BASE \ + left_child_next_sibling_heap +#endif + /// 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 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 __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 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; - pairing_heap_(); + pairing_heap(); - pairing_heap_(const Cmp_Fn& r_cmp_fn); + pairing_heap(const 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 e5469b9b99ba..a74ed63b8453 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 b7cdf236311c..000000000000 --- 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 184b986522fa..000000000000 --- 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 730148e14290..000000000000 --- 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 6201b1d8525a..8370a2ec8850 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 1beceb568efa..0aa4b28c10ef 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 cbf1b417098d..c0ccd108e429 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 e2e20f186d77..bbef9d7a0436 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 bca847db7847..000000000000 --- 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 81d7096a94d7..8246b5182520 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 9afce8b0945d..1b11280fd321 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 cb8b6740d79d..000000000000 --- 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 85199f81cb06..d53f1b274b36 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 de8057a02197..000000000000 --- 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 6e131e4074cc..000000000000 --- 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 c57462868bdd..000000000000 --- 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 5313c0b97120..46bb016e25eb 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 - -#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 + debug_map_base >, \ + typename _Alloc::template rebind::other::const_reference> +#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 traits_type::synth_access_traits synth_access_traits; + typedef typename synth_access_traits::const_iterator a_const_iterator; + + 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 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 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 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; + + + /// 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) + { } - 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; + void + set_no_action_dtor() + { m_no_action_dtor = true; } - typedef typename Node_And_It_Traits::node node; - typedef typename Allocator::template rebind::other::const_pointer const_node_pointer; + void + set_call_destructor() + { m_call_destructor = true; } - typedef typename Allocator::template rebind::other::pointer node_pointer; + ~cond_dealtor() + { + if (m_no_action_dtor) + return; - typedef typename Node_And_It_Traits::head head; - typedef typename Allocator::template rebind::other head_allocator; - typedef typename head_allocator::pointer head_pointer; + if (m_call_destructor) + m_p_nd->~leaf(); - 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; + s_leaf_allocator.deallocate(m_p_nd, 1); + } + }; - 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 + /// 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 + + 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; + } + } + + 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(); } + }; -#include +#ifdef _GLIBCXX_DEBUG + typedef PB_DS_DEBUG_MAP_BASE_C_DEC debug_base; +#endif - typedef typename Node_And_It_Traits::null_node_update_pointer null_node_update_pointer; + 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 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 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 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; - - PB_DS_CLASS_NAME(); - - PB_DS_CLASS_NAME(const e_access_traits&); - - PB_DS_CLASS_NAME(const PB_DS_CLASS_C_DEC&); + 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::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 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 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_PAT_TRIE_NAME(); + + PB_DS_PAT_TRIE_NAME(const access_traits&); + + 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 000000000000..b3718b51ed23 --- /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 a3e15062b3e7..000000000000 --- 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 79bfe4283bef..0afc2d40a60c 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 7b2ebd5596cd..6a5582da2559 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 c7fcdb72dfd5..683b3a9087c9 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 06add93c1a9d..c2aa9cde821e 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 9cecae51770e..000000000000 --- 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 abf5f1185237..7cce3c530ff9 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; - - 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_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 39cf28a1b27e..c8b54547fc89 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 c8e7f587b55e..2e64c52480f3 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 E_Access_Traits e_access_traits; - - typedef - __gnu_pbds::detail::synth_e_access_traits< - type_traits, - false, - e_access_traits> - synth_e_access_traits; - - typedef - pat_trie_node_base< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - node; + typedef typename trie_node_metadata_dispatch::type metadata_type; + typedef base_type::_Metadata metadata; + typedef _ATraits access_traits; - typedef - pat_trie_leaf< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - leaf; + typedef __gnu_pbds::detail::synth_access_traits synth_access_traits; - typedef - pat_trie_head< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - head; + typedef base_type::_Node_base node; + typedef base_type::_Head head; + typedef base_type::_Leaf leaf; + typedef base_type::_Inode inode; - typedef - pat_trie_internal_node< - type_traits, - synth_e_access_traits, - metadata_type, - Allocator> - internal_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_const_it_< - type_traits, - node, - leaf, - head, - internal_node, - true, - Allocator> - const_iterator; - typedef - pat_trie_it_< - type_traits, - node, - leaf, - head, - internal_node, - true, - Allocator> - iterator; + typedef base_type::_Node_citer node_const_iterator; - typedef - pat_trie_const_it_< - type_traits, - node, - leaf, - head, - internal_node, - false, - Allocator> - const_reverse_iterator; + typedef base_type::_Node_iter node_iterator; - typedef - pat_trie_it_< - type_traits, - node, - leaf, - head, - internal_node, - false, - Allocator> - reverse_iterator; + typedef Node_Update node_update; - 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 E_Access_Traits e_access_traits; + 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 - __gnu_pbds::detail::synth_e_access_traits< - type_traits, - true, - 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::_CIter const_iterator; + typedef const_iterator iterator; + typedef base_type::_CIter const_reverse_iterator; + typedef const_reverse_iterator 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 node_const_iterator node_iterator; - typedef - pat_trie_const_it_< - type_traits, - node, - leaf, - head, - internal_node, - true, - Allocator> - const_iterator; + typedef Node_Update node_update; - 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 8c0304f695ea..12ef07bd6078 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 c48ba7c6e1a1..739d2b18bf62 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 19adc8edaadb..669c00c29b84 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 fe90b0a6a3f0..40961edf81f2 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 0ef925f079e9..14e75328970f 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 9378e156502f..9203dd4d7a65 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 0bf69736e818..0903e211427b 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 55bd4ed1f0dc..97dc8489ab1a 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 3f24c762c071..b6f80b2b1307 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 7d46c95d7e0a..a0e374b350ca 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 - -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_CLASS_NAME rb_tree_data_ -#endif + typename Node_And_It_Traits, typename _Alloc> #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_CLASS_NAME rb_tree_no_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_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 - -#define PB_DS_BASE_C_DEC \ - PB_DS_BASE_CLASS_NAME + PB_DS_RB_TREE_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 +#define PB_DS_RB_TREE_BASE \ + PB_DS_RB_TREE_BASE_NAME -#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 198caca88680..54c7b2396d7f 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 531d8e46e1c7..e6f2d8974ffe 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< - Key, - null_mapped_type, - Cmp_Fn, - Node_Update, - rb_tree_tag, - Allocator> : public bin_search_tree_traits< + typename Cmp_Fn, + template + class Node_Update, + typename _Alloc> + struct tree_traits + : 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 35acb8f6bcdc..5c9c05f2f10a 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 638810bfb446..b7a1b58fe8da 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 bf000625009f..a8c619e5a1cd 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 c252b49ad8af..aae0a72c97c1 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 845e6726db6d..ea27c47ba6ba 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 typename allocator_type::size_type size_type; - - typedef Node node; + typedef _Alloc allocator_type; + typedef typename allocator_type::size_type size_type; + typedef _Node node; - typedef - typename allocator_type::template rebind< - node>::other::pointer - node_pointer; + typedef typename _Alloc::template rebind __rebind_n; + typedef typename __rebind_n::other::pointer node_pointer; - typedef - typename allocator_type::template rebind< - node_pointer>::other::pointer - entry_pointer; + typedef typename _Alloc::template rebind __rebind_np; - 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 767bf108861c..e4d670491087 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; - - typedef typename Allocator::difference_type difference_type; - - typedef Value_Type value_type; - - typedef typename base_type::pointer pointer; - - typedef typename base_type::const_pointer const_pointer; - - typedef typename base_type::reference reference; + rc_binomial_heap(); - typedef typename base_type::const_reference const_reference; + rc_binomial_heap(const Cmp_Fn&); - typedef typename base_type::const_point_iterator const_point_iterator; + rc_binomial_heap(const PB_DS_CLASS_C_DEC&); - 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 09d637c7d584..13bf78e51fdd 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 1fb3b8bd489e..27b5bc4b97df 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 33aecdf5fcc4..97533a34e457 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: - - // Size type. - typedef std::size_t size_type; - - // Default constructor. - sample_resize_policy(); - - // Copy constructor. - sample_range_hashing(const sample_resize_policy& other); - - // Swaps content. - inline void - swap(sample_resize_policy& other); - -protected: - - // Notifies a search started. - inline void - notify_insert_search_start(); - - // Notifies a search encountered a collision. - inline void - notify_insert_search_collision(); - - // Notifies a search ended. - inline void - notify_insert_search_end(); - - // Notifies a search started. - inline void - notify_find_search_start(); - - // Notifies a search encountered a collision. - inline void - notify_find_search_collision(); - - // Notifies a search ended. - inline void - notify_find_search_end(); - - // Notifies a search started. - inline void - notify_erase_search_start(); - - // Notifies a search encountered a collision. - inline void - notify_erase_search_collision(); - - // Notifies a search ended. - inline void - notify_erase_search_end(); - - // Notifies an element was inserted. - inline void - notify_inserted(size_type num_e); - - // Notifies an element was erased. - inline void - notify_erased(size_type num_e); - - // Notifies the table was cleared. - void - notify_cleared(); - - // 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 + /// A sample resize policy. + class sample_resize_policy + { + public: + // Size type. + typedef std::size_t size_type; + + // Default constructor. + sample_resize_policy(); + + // Copy constructor. + sample_range_hashing(const sample_resize_policy& other); + + // Swaps content. + inline void + swap(sample_resize_policy& other); + + protected: + // Notifies a search started. + inline void + notify_insert_search_start(); + + // Notifies a search encountered a collision. + inline void + notify_insert_search_collision(); + + // Notifies a search ended. + inline void + notify_insert_search_end(); + + // Notifies a search started. + inline void + notify_find_search_start(); + + // Notifies a search encountered a collision. + inline void + notify_find_search_collision(); + + // Notifies a search ended. + inline void + notify_find_search_end(); + + // Notifies a search started. + inline void + notify_erase_search_start(); + + // Notifies a search encountered a collision. + inline void + notify_erase_search_collision(); + + // Notifies a search ended. + inline void + notify_erase_search_end(); + + // Notifies an element was inserted. + inline void + notify_inserted(size_type num_e); + + // Notifies an element was erased. + inline void + notify_erased(size_type num_e); + + // Notifies the table was cleared. + void + notify_cleared(); + + // 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 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 963c5530a462..ebc28b7cbc7e 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: - - // Size type. - typedef std::size_t size_type; - - // Default constructor. - sample_resize_trigger(); - - // Copy constructor. - sample_range_hashing(const sample_resize_trigger& other); - - // Swaps content. - inline void - swap(sample_resize_trigger& other); - -protected: - - // Notifies a search started. - inline void - notify_insert_search_start(); - - // Notifies a search encountered a collision. - inline void - notify_insert_search_collision(); - - // Notifies a search ended. - inline void - notify_insert_search_end(); - - // Notifies a search started. - inline void - notify_find_search_start(); - - // Notifies a search encountered a collision. - inline void - notify_find_search_collision(); - - // Notifies a search ended. - inline void - notify_find_search_end(); - - // Notifies a search started. - inline void - notify_erase_search_start(); - - // Notifies a search encountered a collision. - inline void - notify_erase_search_collision(); - - // Notifies a search ended. - inline void - notify_erase_search_end(); - - // 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 an element was erased. - inline void - notify_erased(size_type num_entries); - - // Notifies the table was cleared. - void - notify_cleared(); - - // 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 resized externally. - void - notify_externally_resized(size_type new_size); - - // 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 + /// A sample resize trigger policy. + class sample_resize_trigger + { + public: + // Size type. + typedef std::size_t size_type; + + // Default constructor. + sample_resize_trigger(); + + // Copy constructor. + sample_range_hashing(const sample_resize_trigger&); + + // Swaps content. + inline void + swap(sample_resize_trigger&); + + protected: + // Notifies a search started. + inline void + notify_insert_search_start(); + + // Notifies a search encountered a collision. + inline void + notify_insert_search_collision(); + + // Notifies a search ended. + inline void + notify_insert_search_end(); + + // Notifies a search started. + inline void + notify_find_search_start(); + + // Notifies a search encountered a collision. + inline void + notify_find_search_collision(); + + // Notifies a search ended. + inline void + notify_find_search_end(); + + // Notifies a search started. + inline void + notify_erase_search_start(); + + // Notifies a search encountered a collision. + inline void + notify_erase_search_collision(); + + // Notifies a search ended. + inline void + notify_erase_search_end(); + + // 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 an element was erased. + inline void + notify_erased(size_type num_entries); + + // Notifies the table was cleared. + void + notify_cleared(); + + // 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 resized externally. + void + notify_externally_resized(size_type new_size); + + // 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); + }; +} +#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 9b3ba031c4b0..b6c49aea69df 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: - - // Size type. - typedef std::size_t size_type; - - // Default constructor. - sample_size_policy(); - - // Copy constructor. - sample_range_hashing(const 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; - - // Given a __size size, returns a __size that is smaller. - inline size_type - get_nearest_smaller_size(size_type size) const; -}; - -#endif + /// A sample size policy. + class sample_size_policy + { + public: + // Size type. + typedef std::size_t size_type; + + // Default constructor. + sample_size_policy(); + + // Copy constructor. + sample_range_hashing(const sample_size_policy&); + + // 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; + + // 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 dea307c2bdc5..2383e9625528 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 453567a0632e..e6a4694b291b 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 22f8e68c4402..9546321e6f0e 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 9dfa926f4020..6e1a4ef06e29 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 636b9ab255e1..8996903b016d 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 4e1179ead2ff..2f895b5bffa1 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 fbf398d04c93..111976d55001 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 b1523662c43a..035684509415 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 b6afa758eb81..4d67dba4d859 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 { -#define PB_DS_CLASS_T_DEC \ - template - #ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_CLASS_NAME splay_tree_data_ -#endif +# 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_CLASS_NAME splay_tree_no_data_ -#endif - -#ifdef PB_DS_DATA_TRUE_INDICATOR -#define PB_DS_BASE_CLASS_NAME bin_search_tree_data_ -#endif +# define PB_DS_S_TREE_NAME splay_tree_set +# define PB_DS_S_TREE_BASE_NAME bin_search_tree_set +#endif -#ifdef PB_DS_DATA_FALSE_INDICATOR -#define PB_DS_BASE_CLASS_NAME bin_search_tree_no_data_ -#endif +#define PB_DS_CLASS_T_DEC \ + template #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 fe4cfa57bf75..1fcfe7980507 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 cfedc35c8db2..e5020ec92f0f 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 cfbfbb072855..cdb09d451d48 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 e67805165173..fe0b983265f4 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 0673675a63ed..3eb854142910 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 fec0ce4762fe..11b7d773f9b9 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 bbae8de91b63..d0ba860ed4fc 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 f1195bdff4d9..67b7f3a3a1a7 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 96bb818894bb..279cf6611eb8 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 9741ef9cf1cd..fb30eb1b7747 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 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 __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 PB_DS_BASE_C_DEC::const_point_iterator - const_point_iterator; + 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 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 - - private: - node_pointer m_p_max; + assert_aux_null(const char*, int) const; +#endif - 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 fc309d5c1ce0..63a356414d15 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 c182886ee1d0..1279b4dca495 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 { + /// Tree metadata helper. + template + struct tree_metadata_helper; - template - struct tree_metadata_helper - { - typedef typename Node_Update::metadata_type type; - }; + template + struct tree_metadata_helper + { + typedef typename Node_Update::metadata_type type; + }; template - struct tree_metadata_helper< - Node_Update, - true> - { - typedef null_node_metadata type; - }; + 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 006a3eb04763..000000000000 --- 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 d3b27925f7eb..84397f3dffce 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 b8c19a587f8b..cb455da42d64 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 { - -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; - -}; - + /// A sample node updator. + template + class sample_tree_node_update + { + typedef std::size_t metadata_type; + + // 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 e4bd65649043..78cee8680433 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> - -#define PB_DS_BASE_C_DEC \ - basic_tree_policy_base< \ - Const_Node_Iterator, \ - Node_Iterator, \ - Allocator> - - template - class tree_trace_base : private PB_DS_BASE_C_DEC + tree_trace_base + +#define PB_DS_TRACE_BASE \ + branch_policy + + /// 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 Const_Node_Iterator const_node_iterator; + typedef PB_DS_TRACE_BASE base_type; + typedef Node_CItr node_const_iterator; + typedef typename _Alloc::size_type size_type; - 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 b4de31fd0cac..b20181b8aef9 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 { + /// Trie metadata helper. + template + struct trie_metadata_helper; - template - struct trie_metadata_helper - { - typedef typename Node_Update::metadata_type type; - }; + template + struct trie_metadata_helper + { + typedef typename Node_Update::metadata_type type; + }; template - struct trie_metadata_helper< - Node_Update, - true> - { - typedef null_node_metadata type; - }; + 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 65245e9dc991..000000000000 --- 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 cb8e24741217..ff9595e94a04 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)); -} +{ 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 E_Access_Traits& r_traits = - const_cast(this)->get_e_access_traits(); + const _ATraits& r_traits = + const_cast(this)->get_access_traits(); - return (order_of_prefix( - r_traits.begin(r_key), - r_traits.end(r_key))); + 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); - - const E_Access_Traits& r_traits = - const_cast(this)->get_e_access_traits(); - - const_node_iterator nd_it = node_begin(); + return 0; - 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 ff2799e3e954..04771dd725e9 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 2ecad89c9a73..59edfbb57602 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 { - -public: - - // Size type. - typedef std::size_t size_type; - - // Key type. - typedef std::string key_type; - - // Const key reference type. - typedef - typename Allocator::template rebind< - key_type>::other::const_reference - const_key_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); - -}; - + /// A sample trie element access traits. + struct sample_trie_access_traits + { + typedef std::size_t size_type; + typedef std::string key_type; + + typedef typename _Alloc::template rebind __rebind_k; + typedef typename __rebind_k::other::const_reference key_const_reference; + typedef std::string::const_iterator const_iterator; + + // Element type. + typedef char e_type; + + enum + { + max_size = 4 + }; + + // Returns a const_iterator to the first element of r_key. + inline static const_iterator + begin(key_const_reference); + + // 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 8b2c6b591f74..6c97aee052a6 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 { - -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; - -}; - + /// A sample node updator. + template + class sample_trie_node_update + { + public: + 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_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 db912a008fad..2668a87d9226 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 228a4a5dc32f..c6d9c4901368 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 143110c0ad9c..79899857b0de 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 6d5a0783808a..50db9b2bc90b 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; - }; + /// 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; - 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; + 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 1641792b5feb..d1221413c669 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 1aaa6824a83e..52b90a511e0d 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 1cda69bb834b..257067a89520 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 e17a5bf17281..f74f03d7a483 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 cefa3a10c223..1fa930351091 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 54a67c6e563b..e879b8088c90 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 - { }; - -#define PB_DS_CLASS_T_DEC template -#define PB_DS_CLASS_C_DEC move_to_front_lu_policy - - // 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 - -#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 counter_lu_policy - - // 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; - - enum - { - max_count = Max_Count - }; - - typedef typename allocator_type::size_type size_type; - - // Metadata on which this functor operates. - typedef detail::counter_lu_metadata metadata_type; - - // Reference to metadata on which this functor operates. - typedef typename Allocator::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. - bool - operator()(metadata_reference r_metadata) const; - - private: - typedef detail::counter_lu_policy_base base_type; - }; - -#include - -#undef PB_DS_CLASS_T_DEC -#undef PB_DS_CLASS_C_DEC - + /** + * 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; + + // Metadata on which this functor operates. + typedef null_type metadata_type; + + private: + typedef typename _Alloc::template rebind __rebind_m; + + public: + // Reference to metadata on which this functor operates. + typedef typename __rebind_m::other::reference metadata_reference; + + // Creates a metadata object. + metadata_type + operator()() const + { return s_metadata; } + + // Decides whether a metadata object should be moved to the front + // of the list. + inline bool + operator()(metadata_reference r_metadata) const + { return true; } + + private: + static null_type s_metadata; + }; + + /** + * 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; + + enum + { + max_count = Max_Count + }; + + // Metadata on which this functor operates. + typedef detail::lu_counter_metadata metadata_type; + + private: + typedef detail::lu_counter_policy_base base_type; + typedef typename _Alloc::template rebind __rebind_m; + + public: + // Reference to metadata on which this functor operates. + typedef typename __rebind_m::other::reference metadata_reference; + + // 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 b6088e7d73a2..8cd7a26db6a1 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 ef445336137d..d5df54f58770 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 string container, inclusive of strings, ropes, etc. + struct string_tag : public sequence_tag { }; + /// Basic associative-container. - struct associative_container_tag : public container_tag { }; + struct associative_tag : public container_tag { }; - /// Basic hash. - struct basic_hash_tag : public associative_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, + 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; + 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, 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 4af1adbde707..4df9df1df2ae 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 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 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 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 fc452104f75a..8fd4900b1336 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 \ - string_trie_e_access_traits +#define PB_DS_CLASS_C_DEC \ + trie_string_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(const_key_reference, detail::false_type); + begin_imp(key_const_reference, detail::false_type); inline static const_iterator - begin_imp(const_key_reference, detail::true_type); + begin_imp(key_const_reference, detail::true_type); inline static const_iterator - end_imp(const_key_reference, detail::false_type); + end_imp(key_const_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 - -#define PB_DS_BASE_C_DEC \ - 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 + trie_prefix_search_node_update + +#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_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 - - // Functor updating ranks of entrees. - template - class trie_order_statistics_node_update : private PB_DS_BASE_C_DEC + trie_order_statistics_node_update + + /// 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 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 _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 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 61e18be47681..88b8d38fdf82 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 e227ce17b95e..48b172497377 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 cffc3a039370..0c2da1b30990 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 bdc423a26b3f..ba593f235411 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 24ebe2e28983..b516bb7853c5 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 3d2cf14db3c8..07c74e64300f 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 e9f33b11305c..e752242faf44 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 406ab8e0c15b..a29756fd05a0 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 584574030b12..68ef8b7438ff 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 28c895680e33..06ae5399cc9d 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 98b99a76abcb..09e025aff798 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 000000000000..8729f4142f81 --- /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 8bd77816c022..e91a753ebbf7 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 000000000000..bfb2ed4484e8 --- /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 000000000000..c39eb0df3117 --- /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 000000000000..dda991517164 --- /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 000000000000..934d96d0bc7b --- /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 000000000000..146fc1f1ce8c --- /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 000000000000..5d7ada8c9de6 --- /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 000000000000..b075e5b5d8fe --- /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 e1c7d9ec8df0..f80c77b8a2ea 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 8c0181e98680..50423db3d796 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 95806685ba1d..eab8950a9f41 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 c10fe01cd656..a9423e2576a0 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 562f418fa229..c95812207c20 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 9ee5c4dd7d52..b7650451f13f 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 ed3747fa1c5a..9f3e6bdf9bab 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 15cbbfda51fb..cb874d28b58d 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 d2b61facb2ed..65655d713874 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 80c1abe54aae..a6322798988a 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 fc9cacc630ab..925be58d47f2 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 20c52101015e..b73335e0aab9 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 be4fe264fa51..0d98fea7feb5 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 a2655fe759d7..bcee0a8eb035 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 d7825ac63fac..35e7ddd152ad 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 86db029e22b2..14d20dc08bbe 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 cc79b3eeca1e..b486c8c9c906 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 6fa3667f3099..acfa584c6c1f 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 8273edf36d64..8008a0e89bf3 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 d3f459624934..dac0c11eab93 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 29170cae8e9b..0fae6b15c1c2 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 4bda5562d1ff..c29bfb68e572 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 dad913fa0ab1..b2c794103409 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 c9f448bf16e5..c4909c726f37 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 e31abe106e60..b4b07ea27557 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 a553afeaba3a..298443d31459 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 7e3f95bfc0c2..18d2c6badcec 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 37705bc2d7d4..bcfc3bcd9fe4 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 ca4433212169..48823bf04d01 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 0f1586648538..7cc724a95f58 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 5f2304952364..936fbf5fcace 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 e929f3533fe7..19cc3906eb16 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 37f8d51af74a..227f60b19dbb 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 38761a1778e3..f8f5bae0d25e 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 a4a768e5e1c5..6074f38cd720 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 c7ce5f7a314c..4c3f7cabe776 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 24133cdc5878..001c9c865989 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; }; -- 2.39.5

+>FlLmH5*lma|6RsnYK$noC*ve|UtFv0_4 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